@seniorsistemas/hcm-clocking-event-rule-nodejs 0.35.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/copilot-instructions.md +11 -0
- package/.github/workflows/release.yaml +10 -0
- package/.gitlab-ci.yml +68 -0
- package/CHANGELOG.md +274 -0
- package/README.doc.md +658 -0
- package/README.md +117 -0
- package/assets/favicon.ico +0 -0
- package/catalog-info.yaml +19 -0
- package/jest.config.js +17 -0
- package/package.json +48 -0
- package/prompt.md +15 -0
- package/run_build_win.bat +1 -0
- package/run_link.bat +3 -0
- package/run_test.bat +1 -0
- package/sonar-project.properties +21 -0
- package/src/data/changes/changes.ts +92 -0
- package/src/data/context/context.ts +251 -0
- package/src/data/context/contextReference.ts +376 -0
- package/src/data/contract/contract.ts +272 -0
- package/src/data/dataset/database.ts +130 -0
- package/src/data/dataset/dataset.ts +275 -0
- package/src/data/definition/timeEvaluationSituationDefinitionHistory.ts +1425 -0
- package/src/data/employee/employee.ts +434 -0
- package/src/data/foundation/companyBranch.ts +66 -0
- package/src/data/foundation/costCenter.ts +47 -0
- package/src/data/foundation/employer.ts +35 -0
- package/src/data/foundation/employmentRelationship.ts +63 -0
- package/src/data/foundation/holiday.ts +84 -0
- package/src/data/foundation/holidayGroup.ts +47 -0
- package/src/data/foundation/jobPosition.ts +73 -0
- package/src/data/foundation/person.ts +35 -0
- package/src/data/foundation/situation.ts +301 -0
- package/src/data/foundation/syndicate.ts +244 -0
- package/src/data/foundation/workschedule.ts +688 -0
- package/src/data/foundation/workshift.ts +647 -0
- package/src/data/foundation/workshiftBase.ts +113 -0
- package/src/data/histories/companyBranchHistory.ts +128 -0
- package/src/data/histories/costCenterHistory.ts +114 -0
- package/src/data/histories/employmentRelationshipHistory.ts +116 -0
- package/src/data/histories/histories.ts +419 -0
- package/src/data/histories/jobPositionHistory.ts +117 -0
- package/src/data/histories/leaveHistory.ts +227 -0
- package/src/data/histories/timeEvaluationHistory.ts +191 -0
- package/src/data/histories/workshiftHistory.ts +66 -0
- package/src/data/hourBank/hourBank.ts +43 -0
- package/src/data/hourBank/hourBankAccount.ts +77 -0
- package/src/data/log/log.ts +38 -0
- package/src/data/schedules/bridge.ts +84 -0
- package/src/data/schedules/compensation.ts +332 -0
- package/src/data/schedules/overtimeAuthorization.ts +174 -0
- package/src/data/schedules/readiness.ts +150 -0
- package/src/data/schedules/schedules.ts +398 -0
- package/src/data/schedules/workscheduleChange.ts +91 -0
- package/src/data/schedules/workshiftChange.ts +76 -0
- package/src/data/timeEvaluation/adjustmentReason.ts +46 -0
- package/src/data/timeEvaluation/clockingEvent.ts +198 -0
- package/src/data/timeEvaluation/estimatedHours.ts +245 -0
- package/src/data/timeEvaluation/interval.ts +568 -0
- package/src/data/timeEvaluation/separatedHours.ts +134 -0
- package/src/data/timeEvaluation/timeEvaluation.ts +1540 -0
- package/src/data/timeEvaluation/timeEvaluationSituation.ts +154 -0
- package/src/data/user/user.ts +44 -0
- package/src/index.ts +60 -0
- package/src/test/builder/bridgeBuilder.builder.ts +28 -0
- package/src/test/builder/clockingEvent.builder.ts +49 -0
- package/src/test/builder/companyBranchHistoryBuilder.ts +29 -0
- package/src/test/builder/compensation.builder.ts +84 -0
- package/src/test/builder/contextReference.builder.ts +69 -0
- package/src/test/builder/costCenterHistoryBuilder.ts +29 -0
- package/src/test/builder/database.builder.ts +21 -0
- package/src/test/builder/datasetBuilder.ts +111 -0
- package/src/test/builder/dateIntervalBuilder.ts +25 -0
- package/src/test/builder/employee.builder.ts +91 -0
- package/src/test/builder/employmentRelationshipBuilder.ts +35 -0
- package/src/test/builder/employmentRelationshipHistoryBuilder.ts +29 -0
- package/src/test/builder/historiesBuilder.ts +56 -0
- package/src/test/builder/holiday.builder.ts +44 -0
- package/src/test/builder/hourBankAccountBuilder.ts +77 -0
- package/src/test/builder/hourBankBuilder.ts +32 -0
- package/src/test/builder/interval.builder.ts +113 -0
- package/src/test/builder/jobPositionHistoryBuilder.ts +29 -0
- package/src/test/builder/overtimeAuthorization.builder.ts +42 -0
- package/src/test/builder/readinessBuilder.builder.ts +57 -0
- package/src/test/builder/schedules.builder.ts +126 -0
- package/src/test/builder/situation.builder.ts +59 -0
- package/src/test/builder/syndicate.builder.ts +96 -0
- package/src/test/builder/syndicateHistoryBuilder.ts +33 -0
- package/src/test/builder/timeEvaluation.builder.ts +138 -0
- package/src/test/builder/timeEvaluationHistory.builder.ts +49 -0
- package/src/test/builder/timeEvaluationSituation.builder.ts +34 -0
- package/src/test/builder/workschedule.builder.ts +96 -0
- package/src/test/builder/workshift.builder.ts +179 -0
- package/src/test/builder/workshiftBuilder.ts +55 -0
- package/src/test/data/clockingEvent.spec.ts +56 -0
- package/src/test/data/context.spec.ts +176 -0
- package/src/test/data/currentUser.spec.ts +11 -0
- package/src/test/data/dataset.spec.ts +144 -0
- package/src/test/data/employee/employee.spec.ts +20 -0
- package/src/test/data/employmentRelationship/employmentRelationship.spec.ts +48 -0
- package/src/test/data/estimatedHours/estimatedHours.spec.ts +96 -0
- package/src/test/data/histories/costCenterHistory.spec.ts +32 -0
- package/src/test/data/histories/histories.spec.ts +306 -0
- package/src/test/data/holyday.spec.ts +89 -0
- package/src/test/data/hourBank/hourBank.spec.ts +48 -0
- package/src/test/data/hourBank/hourBankAccount.spec.ts +32 -0
- package/src/test/data/schedules/bridge.spec.ts +13 -0
- package/src/test/data/schedules/compesation.spect.ts +89 -0
- package/src/test/data/schedules/overtimeAuthorization.spec.ts +52 -0
- package/src/test/data/schedules/readiness.spec.ts +64 -0
- package/src/test/data/schedules/schedules.spec.ts +134 -0
- package/src/test/data/schedules/workscheduleChange.spec.ts +21 -0
- package/src/test/data/syndicate/syndicate.spec.ts +51 -0
- package/src/test/data/timeEvaluation.spec.ts +1057 -0
- package/src/test/data/timeEvaluationDefinition.spec.ts +144 -0
- package/src/test/data/workschedule/workschedule.spec.ts +194 -0
- package/src/test/data/workshift/workshift.spec.ts +79 -0
- package/src/test/utils/date.utils.spec.ts +198 -0
- package/src/test/utils/dateIntervalUtils.spec.ts +210 -0
- package/src/test/utils/object.utils.spec.ts +83 -0
- package/src/utils/dateIntervalUtils.ts +284 -0
- package/src/utils/dateUtils.ts +456 -0
- package/src/utils/decompressGzipLambda.ts +15 -0
- package/src/utils/object.utils.ts +156 -0
- package/trivy/vulnerabilities_scan.json +1160 -0
- package/tsconfig.json +32 -0
- package/tsconfig.spec.json +21 -0
- package/tslint.json +92 -0
- package/typedoc.json +22 -0
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import { Context } from "../../data/context/context";
|
|
2
|
+
|
|
3
|
+
describe('TimeEvaluationDefinition', () => {
|
|
4
|
+
|
|
5
|
+
it('TimeEvaluationDefinition', () => {
|
|
6
|
+
|
|
7
|
+
const inputRule = '{"version":"1.0.0","input":{"batchId":"ccd4597b-7e91-407c-8636-dda438fad9db","processType":"EVALUATE","startDate":"2025-04-09","endDate":"2025-04-10","contracts":[{"id":"943a66fb-3636-456f-b7ba-e3e1526e8892","holidays":[],"timeEvaluation":[{"date":"2025-04-09","workschedule":{"code":9998,"previousHours":{"dailyHours":0,"nightlyHours":0}},"workshift":{"code":1,"name":"08:00 1200-1330 1800/Hor.Rígid","dsrMinutes":440,"weekMinutes":2640,"monthMinutes":13200},"timeEvaluationSituations":[],"clockingEvents":[],"intervals":[],"situationDefinitionKey":"1_1901-01-01_null"},{"date":"2025-04-10","workschedule":{"code":1,"previousHours":{"dailyHours":510,"nightlyHours":0}},"workshift":{"code":1,"name":"08:00 1200-1330 1800/Hor.Rígid","dsrMinutes":440,"weekMinutes":2640,"monthMinutes":13200},"timeEvaluationSituations":[{"situation":15,"numberOfHours":510}],"clockingEvents":[],"intervals":[{"clockingEventStart":"2025-04-10T08:00:00","clockingEventEnd":"2025-04-10T12:00:00","type":"ABSENCE","subType":"CHECKOUT","typeIntervalTolerance":"ABSENCE","subTypeIntervalTolerance":"CHECKOUT","situationCode":0,"positionWorkingPart":{"workingHours":1,"part":1},"isNightly":false,"isOvertimeAuthorized":false,"withinClockingEventTolerance":false,"isTolerancePeriod":false,"inClockingEventTolerance":true},{"clockingEventStart":"2025-04-10T13:30:00","clockingEventEnd":"2025-04-10T18:00:00","type":"ABSENCE","subType":"CHECKOUT","typeIntervalTolerance":"ABSENCE","subTypeIntervalTolerance":"CHECKOUT","situationCode":0,"positionWorkingPart":{"workingHours":1,"part":2},"isNightly":false,"isOvertimeAuthorized":false,"withinClockingEventTolerance":false,"isTolerancePeriod":false,"inClockingEventTolerance":true}],"situationDefinitionKey":"3_2025-01-01_null"}],"employee":{"id":"943a66fb-3636-456f-b7ba-e3e1526e8892","code":1,"person":{},"hireDate":"2022-01-01","employer":{"code":1}},"histories":{"syndicateHistories":[{"syndicate":{"code":1,"name":"Sind. Indústria Blumenau","startNightHour":1320,"endNightHour":300},"startDate":"2020-01-01"}]},"schedules":{"bridges":[{"originDate":"2025-04-05","destinationDate":"2025-04-09"}]}}],"database":{"situations":[{"id":"ceeacf87-0df3-4263-a8fa-d66d4bd3f4b0","code":1,"type":"WORKING","exception":false,"complementarySituationId":"ceeacf87-0df3-4263-a8fa-d66d4bd3f4b0","daytime":true},{"id":"d609b9e3-25f3-419e-be4a-63d7cffdb5c1","code":2,"type":"VACATION","exception":false,"complementarySituationId":"4313de66-ec62-4bbf-b469-fe87546fc5c3","daytime":true},{"id":"814b36c4-aabf-4639-b0d7-884ba7cf17bb","code":15,"type":"ABSENCES","exception":true,"complementarySituationId":"61963c0b-213c-4fbc-9329-6afadc971b34","daytime":true},{"id":"77c72619-b2a8-4777-bdfb-ff63a0283400","code":16,"type":"OVERTIME","exception":true,"complementarySituationId":"ae0b0bc6-2178-4876-91a7-c468360070ec","daytime":true},{"id":"61963c0b-213c-4fbc-9329-6afadc971b34","code":65,"type":"ABSENCES","exception":true,"complementarySituationId":"814b36c4-aabf-4639-b0d7-884ba7cf17bb","daytime":false},{"id":"ae0b0bc6-2178-4876-91a7-c468360070ec","code":66,"type":"OVERTIME","exception":true,"complementarySituationId":"77c72619-b2a8-4777-bdfb-ff63a0283400","daytime":false},{"id":"eab898c7-87f8-4b6a-b67e-f62bba5c1c14","code":101,"type":"ABSENCES","exception":true,"complementarySituationId":"71d9ba6f-8a49-4e46-8251-67b8626fbeeb","daytime":true},{"id":"71d9ba6f-8a49-4e46-8251-67b8626fbeeb","code":102,"type":"ABSENCES","exception":true,"complementarySituationId":"eab898c7-87f8-4b6a-b67e-f62bba5c1c14","daytime":false},{"id":"ccb72e89-c9d6-4ea6-960d-ed99e573d77f","code":103,"type":"ABSENCES","exception":true,"complementarySituationId":"f8e7a234-6d85-499b-836e-9f5b78884be7","daytime":true},{"id":"f8e7a234-6d85-499b-836e-9f5b78884be7","code":104,"type":"ABSENCES","exception":true,"complementarySituationId":"ccb72e89-c9d6-4ea6-960d-ed99e573d77f","daytime":false},{"id":"e6077a7c-645b-4bc6-8698-402c68467ce9","code":105,"type":"ABSENCES","exception":true,"complementarySituationId":"37d56ac4-8cd6-4a3d-b660-1c53890dca1f","daytime":true},{"id":"37d56ac4-8cd6-4a3d-b660-1c53890dca1f","code":106,"type":"ABSENCES","exception":true,"complementarySituationId":"e6077a7c-645b-4bc6-8698-402c68467ce9","daytime":false},{"id":"3ab469eb-c0e5-4597-bb0e-e59c4ef2e196","code":300,"type":"OVERTIME","exception":false,"complementarySituationId":"d8366ade-a959-4162-a3a1-a867ebed57c1","daytime":false},{"id":"d8366ade-a959-4162-a3a1-a867ebed57c1","code":301,"type":"TIMEEVALUATIONSITUATION","exception":true,"complementarySituationId":"3ab469eb-c0e5-4597-bb0e-e59c4ef2e196","daytime":false},{"id":"d9831d0e-1829-4bac-a519-80e6a3353b51","code":303,"type":"OVERTIME","exception":true,"complementarySituationId":"df14bc3f-80b0-49af-94b5-a178bd2038a5","daytime":true},{"id":"df14bc3f-80b0-49af-94b5-a178bd2038a5","code":304,"type":"OVERTIME","exception":true,"complementarySituationId":"d9831d0e-1829-4bac-a519-80e6a3353b51","daytime":false},{"id":"1ff19942-ace7-45ea-b886-861e75471795","code":501,"type":"WORKING","exception":false,"complementarySituationId":"1ff19942-ace7-45ea-b886-861e75471795","daytime":false},{"id":"ef6bd93e-53da-4b41-b532-d85006b9e607","code":502,"type":"OTHERS","exception":true,"complementarySituationId":"ef6bd93e-53da-4b41-b532-d85006b9e607","daytime":false},{"id":"ebaf5a44-bed7-4646-96fa-7582b496ab0a","code":503,"type":"WORKING","exception":true,"complementarySituationId":"ebaf5a44-bed7-4646-96fa-7582b496ab0a","daytime":true},{"id":"65d5b620-5889-4819-b7d3-c17ebffd1ac0","code":504,"type":"ABSENCES","exception":true,"complementarySituationId":"65d5b620-5889-4819-b7d3-c17ebffd1ac0","daytime":true},{"id":"b809cc96-bcdb-4ca8-b2be-f71a2d014c30","code":505,"type":"OVERTIME","exception":false,"complementarySituationId":"b809cc96-bcdb-4ca8-b2be-f71a2d014c30","daytime":true},{"id":"804a6ecc-df01-42b9-ad37-ed68de3a8a0d","code":506,"type":"OVERTIME","exception":false,"complementarySituationId":"804a6ecc-df01-42b9-ad37-ed68de3a8a0d","daytime":true},{"id":"3d6f1c23-bd6d-4d97-a6f6-0bce25703a1b","code":507,"type":"OVERTIME","exception":false,"complementarySituationId":"3d6f1c23-bd6d-4d97-a6f6-0bce25703a1b","daytime":true},{"id":"803645a7-5f43-49b1-bafa-70fa910733d6","code":508,"type":"OVERTIME","exception":false,"complementarySituationId":"803645a7-5f43-49b1-bafa-70fa910733d6","daytime":true},{"id":"60030488-fe09-423a-9b1f-248d366430b4","code":509,"type":"OVERTIME","exception":false,"complementarySituationId":"60030488-fe09-423a-9b1f-248d366430b4","daytime":true},{"id":"3f61cff5-18d7-4042-b44f-791a4c308f2c","code":510,"type":"OVERTIME","exception":false,"complementarySituationId":"3f61cff5-18d7-4042-b44f-791a4c308f2c","daytime":true},{"id":"b3d37da3-21bd-4902-9358-0bbc4721b327","code":511,"type":"OVERTIME","exception":false,"complementarySituationId":"b3d37da3-21bd-4902-9358-0bbc4721b327","daytime":true},{"id":"1d62f6c8-b128-4c8d-a63b-e9e056a7b07e","code":512,"type":"OVERTIME","exception":false,"complementarySituationId":"1d62f6c8-b128-4c8d-a63b-e9e056a7b07e","daytime":true},{"id":"48f5bc52-4fdf-4479-9a4c-7c2d70d89a2b","code":513,"type":"OVERTIME","exception":false,"complementarySituationId":"48f5bc52-4fdf-4479-9a4c-7c2d70d89a2b","daytime":true},{"id":"c705ea33-88b4-44dc-b755-fe2ae6fff151","code":514,"type":"OVERTIME","exception":false,"complementarySituationId":"c705ea33-88b4-44dc-b755-fe2ae6fff151","daytime":true},{"id":"c3df3a50-6ac4-4fea-b166-66ffd90a89c5","code":515,"type":"OVERTIME","exception":false,"complementarySituationId":"c3df3a50-6ac4-4fea-b166-66ffd90a89c5","daytime":true},{"id":"e5b79a9d-5093-4b68-aa0d-34cac5536053","code":516,"type":"OVERTIME","exception":false,"complementarySituationId":"e5b79a9d-5093-4b68-aa0d-34cac5536053","daytime":true},{"id":"5f728686-409a-44c8-8b7e-e848e598de60","code":517,"type":"OVERTIME","exception":false,"complementarySituationId":"5f728686-409a-44c8-8b7e-e848e598de60","daytime":true},{"id":"a5da8e1f-612c-4903-865a-de1b861ad98c","code":518,"type":"OVERTIME","exception":false,"complementarySituationId":"a5da8e1f-612c-4903-865a-de1b861ad98c","daytime":true},{"id":"90b4e18c-80fe-4ccb-86eb-e59f9168115c","code":519,"type":"OVERTIME","exception":false,"complementarySituationId":"90b4e18c-80fe-4ccb-86eb-e59f9168115c","daytime":true},{"id":"97fa2f0e-bac1-4cbe-b1a3-83c43a74072b","code":520,"type":"OVERTIME","exception":false,"complementarySituationId":"97fa2f0e-bac1-4cbe-b1a3-83c43a74072b","daytime":true},{"id":"94dec6d5-e769-4668-9b52-8896452b5e39","code":521,"type":"OVERTIME","exception":false,"complementarySituationId":"94dec6d5-e769-4668-9b52-8896452b5e39","daytime":true},{"id":"18d6ae61-9b3e-43ce-8fb3-82cf9d05a45c","code":522,"type":"OVERTIME","exception":false,"complementarySituationId":"18d6ae61-9b3e-43ce-8fb3-82cf9d05a45c","daytime":true},{"id":"74238467-01d1-4660-8fbf-352be4b6ff36","code":604,"type":"OVERTIME","exception":false,"complementarySituationId":"74238467-01d1-4660-8fbf-352be4b6ff36","daytime":true},{"id":"ae7950c4-2b50-4c95-93ea-e6e8e924e776","code":523,"type":"OVERTIME","exception":true,"complementarySituationId":"ae7950c4-2b50-4c95-93ea-e6e8e924e776","daytime":false},{"id":"3a01f30a-c58f-4a7d-af4e-5f6c08951e9d","code":524,"type":"OVERTIME","exception":false,"complementarySituationId":"3a01f30a-c58f-4a7d-af4e-5f6c08951e9d","daytime":false},{"id":"4313de66-ec62-4bbf-b469-fe87546fc5c3","code":750,"type":"VACATION","exception":false,"complementarySituationId":"21ddf37a-7388-488c-afe3-53ce9868dbb9","daytime":false},{"id":"c5e72905-07fb-4baf-929f-847d96fe0a05","code":999,"type":"TIMEEVALUATIONSITUATION","exception":true,"complementarySituationId":"c5e72905-07fb-4baf-929f-847d96fe0a05","daytime":true}],"holidays":[],"timeEvaluationSituationDefinitions":[{"code":1,"startDate":"1901-01-01","workSituationId":"ceeacf87-0df3-4263-a8fa-d66d4bd3f4b0","invalidEventsSituationId":"c5e72905-07fb-4baf-929f-847d96fe0a05","absenceSituationId":"814b36c4-aabf-4639-b0d7-884ba7cf17bb","tardinessSituationId":"ccb72e89-c9d6-4ea6-960d-ed99e573d77f","intermediateLeaveSituationId":"e6077a7c-645b-4bc6-8698-402c68467ce9","earlyLeaveSituationId":"e6077a7c-645b-4bc6-8698-402c68467ce9","absenceSituationOnRelayScheduleHolidaysId":"814b36c4-aabf-4639-b0d7-884ba7cf17bb","percentageNextDay":false,"normalOvertimeSeparationLimit":0,"separateOvertimeAfterConvertingNightShiftHours":false,"overtimeBeforeId":"3ab469eb-c0e5-4597-bb0e-e59c4ef2e196","overtimeEntryId":"3ab469eb-c0e5-4597-bb0e-e59c4ef2e196","overtimeDuringMealId":"3ab469eb-c0e5-4597-bb0e-e59c4ef2e196","leaveOvertimeId":"3ab469eb-c0e5-4597-bb0e-e59c4ef2e196","overtimeAfterId":"3ab469eb-c0e5-4597-bb0e-e59c4ef2e196","overtimeSeparationLimitDuringRest":0,"overtimeDuringRestId":"d9831d0e-1829-4bac-a519-80e6a3353b51","overtimeSeparationLimitDuringCompensatedDays":0,"overtimeOnCompensatedDaysId":"3ab469eb-c0e5-4597-bb0e-e59c4ef2e196","overtimeSeparationLimitDuringHoliday":0,"overtimeDuringHolidayId":"d9831d0e-1829-4bac-a519-80e6a3353b51","overtimeSeparationLimitDuringDayOff":0,"overtimeDuringDayOffId":"d9831d0e-1829-4bac-a519-80e6a3353b51"},{"code":3,"startDate":"2025-01-01","workSituationId":"ceeacf87-0df3-4263-a8fa-d66d4bd3f4b0","nightShiftWorkPremiumId":"1ff19942-ace7-45ea-b886-861e75471795","invalidEventsSituationId":"c5e72905-07fb-4baf-929f-847d96fe0a05","vacationPaidLeaveSituationId":"d609b9e3-25f3-419e-be4a-63d7cffdb5c1","dailyRestViolationSituationId":"ef6bd93e-53da-4b41-b532-d85006b9e607","workBreakViolationSituationId":"ebaf5a44-bed7-4646-96fa-7582b496ab0a","absenceSituationId":"814b36c4-aabf-4639-b0d7-884ba7cf17bb","tardinessSituationId":"ccb72e89-c9d6-4ea6-960d-ed99e573d77f","intermediateLeaveSituationId":"e6077a7c-645b-4bc6-8698-402c68467ce9","earlyLeaveSituationId":"eab898c7-87f8-4b6a-b67e-f62bba5c1c14","absenceSituationOnRelayScheduleHolidaysId":"65d5b620-5889-4819-b7d3-c17ebffd1ac0","percentageNextDay":false,"normalOvertimeSeparationLimit":90,"separateOvertimeAfterConvertingNightShiftHours":false,"unauthorizedOvertimeId":"77c72619-b2a8-4777-bdfb-ff63a0283400","overtimeBeforeId":"b809cc96-bcdb-4ca8-b2be-f71a2d014c30","overtimeEntryId":"3d6f1c23-bd6d-4d97-a6f6-0bce25703a1b","overtimeDuringMealId":"60030488-fe09-423a-9b1f-248d366430b4","leaveOvertimeId":"b3d37da3-21bd-4902-9358-0bbc4721b327","overtimeAfterId":"48f5bc52-4fdf-4479-9a4c-7c2d70d89a2b","overtimeSeparationLimitDuringRest":240,"overtimeDuringRestId":"c3df3a50-6ac4-4fea-b166-66ffd90a89c5","overtimeSeparationLimitDuringCompensatedDays":240,"overtimeOnCompensatedDaysId":"5f728686-409a-44c8-8b7e-e848e598de60","overtimeSeparationLimitDuringHoliday":240,"overtimeDuringHolidayId":"90b4e18c-80fe-4ccb-86eb-e59f9168115c","overtimeSeparationLimitDuringDayOff":240,"overtimeDuringDayOffId":"94dec6d5-e769-4668-9b52-8896452b5e39","overtimeSituationOnRelayScheduleHolidaysId":"3a01f30a-c58f-4a7d-af4e-5f6c08951e9d","nightShiftOvertimePremiumSituationId":"ae7950c4-2b50-4c95-93ea-e6e8e924e776","overtimeSeparationBeforeId":"804a6ecc-df01-42b9-ad37-ed68de3a8a0d","overtimeSeparationEntryId":"803645a7-5f43-49b1-bafa-70fa910733d6","overtimeSeparationDuringMealId":"3f61cff5-18d7-4042-b44f-791a4c308f2c","overtimeSeparationLeaveId":"1d62f6c8-b128-4c8d-a63b-e9e056a7b07e","overtimeSeparationAfterId":"c705ea33-88b4-44dc-b755-fe2ae6fff151","overtimeSeparationDuringRestId":"e5b79a9d-5093-4b68-aa0d-34cac5536053","overtimeSeparationDuringCompensatedDaysId":"a5da8e1f-612c-4903-865a-de1b861ad98c","overtimeSeparationDuringHolidayId":"97fa2f0e-bac1-4cbe-b1a3-83c43a74072b","overtimeSeparationDuringDayOffId":"18d6ae61-9b3e-43ce-8fb3-82cf9d05a45c", "situationWaitingId" : "74238467-01d1-4660-8fbf-352be4b6ff36"}]},"currentUser":{"name":"admin@allanalves.com.br"}}}';
|
|
8
|
+
const context = new Context({ body: inputRule });
|
|
9
|
+
|
|
10
|
+
expect(context.contracts[0].timeEvaluation[0].situationDefinition.code).toEqual(1);
|
|
11
|
+
expect(context.contracts[0].timeEvaluation[0].situationDefinition.startDate).toEqual(new Date("1901-01-01"));
|
|
12
|
+
expect(context.contracts[0].timeEvaluation[0].situationDefinition.endDate).toBeNull();
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
expect(context.contracts[0].timeEvaluation[1].situationDefinition.code).toEqual(3);
|
|
16
|
+
expect(context.contracts[0].timeEvaluation[1].situationDefinition.startDate).toEqual(new Date("2025-01-01"));
|
|
17
|
+
expect(context.contracts[0].timeEvaluation[1].situationDefinition.endDate).toBeNull();
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
const timeDef01 = context.contracts[0].timeEvaluation[0].situationDefinition;
|
|
21
|
+
expect(timeDef01).toBeDefined();
|
|
22
|
+
expect(timeDef01.code).toEqual(1);
|
|
23
|
+
expect(timeDef01.startDate).toEqual(new Date("1901-01-01"));
|
|
24
|
+
expect(timeDef01.workSituation?.code).toEqual(1);
|
|
25
|
+
expect(timeDef01.overtimeBefore?.code).toEqual(300);
|
|
26
|
+
expect(timeDef01.overtimeDuringMeal?.code).toEqual(300);
|
|
27
|
+
expect(timeDef01.invalidEventsSituation?.code).toEqual(999);
|
|
28
|
+
expect(timeDef01.absenceSituation?.code).toEqual(15);
|
|
29
|
+
expect(timeDef01.tardinessSituation?.code).toEqual(103);
|
|
30
|
+
expect(timeDef01.intermediateLeaveSituation?.code).toEqual(105);
|
|
31
|
+
expect(timeDef01.earlyLeaveSituation?.code).toEqual(105);
|
|
32
|
+
expect(timeDef01.absenceSituationOnRelayScheduleHolidays?.code).toEqual(15);
|
|
33
|
+
expect(timeDef01.percentageNextDay).toEqual(false);
|
|
34
|
+
expect(timeDef01.normalOvertimeSeparationLimit).toEqual(0);
|
|
35
|
+
expect(timeDef01.separateOvertimeAfterConvertingNightShiftHours).toEqual(false);
|
|
36
|
+
expect(timeDef01.overtimeEntry?.code).toEqual(300);
|
|
37
|
+
expect(timeDef01.leaveOvertime?.code).toEqual(300);
|
|
38
|
+
expect(timeDef01.overtimeAfter?.code).toEqual(300);
|
|
39
|
+
expect(timeDef01.overtimeSeparationLimitDuringRest).toEqual(0);
|
|
40
|
+
expect(timeDef01.overtimeDuringRest?.code).toEqual(303);
|
|
41
|
+
expect(timeDef01.overtimeSeparationLimitDuringCompensatedDays).toEqual(0);
|
|
42
|
+
expect(timeDef01.overtimeOnCompensatedDays?.code).toEqual(300);
|
|
43
|
+
expect(timeDef01.overtimeSeparationLimitDuringHoliday).toEqual(0);
|
|
44
|
+
expect(timeDef01.overtimeDuringHoliday?.code).toEqual(303);
|
|
45
|
+
expect(timeDef01.overtimeSeparationLimitDuringDayOff).toEqual(0);
|
|
46
|
+
expect(timeDef01.overtimeDuringDayOff?.code).toEqual(303);
|
|
47
|
+
|
|
48
|
+
expect(timeDef01.overtimeSeparationBefore).toBeUndefined();
|
|
49
|
+
expect(timeDef01.overtimeSeparationEntry).toBeUndefined();
|
|
50
|
+
expect(timeDef01.overtimeSeparationDuringMeal).toBeUndefined();
|
|
51
|
+
expect(timeDef01.overtimeSeparationLeave).toBeUndefined();
|
|
52
|
+
expect(timeDef01.overtimeSeparationAfter).toBeUndefined();
|
|
53
|
+
expect(timeDef01.overtimeSeparationDuringRest).toBeUndefined();
|
|
54
|
+
expect(timeDef01.overtimeSeparationDuringCompensatedDays).toBeUndefined();
|
|
55
|
+
expect(timeDef01.overtimeSeparationDuringHoliday).toBeUndefined();
|
|
56
|
+
expect(timeDef01.overtimeSeparationDuringDayOff).toBeUndefined();
|
|
57
|
+
expect(timeDef01.situationWaiting).toBeUndefined();
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
const timeDef02 = context.contracts[0].timeEvaluation[1].situationDefinition;
|
|
61
|
+
expect(timeDef02).toBeDefined();
|
|
62
|
+
expect(timeDef02.code).toEqual(3);
|
|
63
|
+
expect(timeDef02.startDate).toEqual(new Date("2025-01-01"));
|
|
64
|
+
expect(timeDef02.percentageNextDay).toEqual(false);
|
|
65
|
+
expect(timeDef02.overtimeSeparationLimitDuringRest).toEqual(240);
|
|
66
|
+
expect(timeDef02.overtimeSeparationLimitDuringCompensatedDays).toEqual(240);
|
|
67
|
+
expect(timeDef02.overtimeSeparationLimitDuringHoliday).toEqual(240);
|
|
68
|
+
expect(timeDef02.overtimeSeparationLimitDuringDayOff).toEqual(240);
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
expect(timeDef02.workSituation?.code).toEqual(1);
|
|
72
|
+
|
|
73
|
+
expect(timeDef02.overtimeBefore?.code).toEqual(505);
|
|
74
|
+
|
|
75
|
+
expect(timeDef02.overtimeDuringMeal?.code).toEqual(509);
|
|
76
|
+
|
|
77
|
+
expect(timeDef02.invalidEventsSituation?.code).toEqual(999);
|
|
78
|
+
|
|
79
|
+
expect(timeDef02.absenceSituation?.code).toEqual(15);
|
|
80
|
+
|
|
81
|
+
expect(timeDef02.tardinessSituation?.code).toEqual(103);
|
|
82
|
+
|
|
83
|
+
expect(timeDef02.intermediateLeaveSituation?.code).toEqual(105);
|
|
84
|
+
|
|
85
|
+
expect(timeDef02.earlyLeaveSituation?.code).toEqual(101);
|
|
86
|
+
|
|
87
|
+
expect(timeDef02.absenceSituationOnRelayScheduleHolidays?.code).toEqual(504);
|
|
88
|
+
|
|
89
|
+
expect(timeDef02.normalOvertimeSeparationLimit).toEqual(90);
|
|
90
|
+
expect(timeDef02.separateOvertimeAfterConvertingNightShiftHours).toEqual(false);
|
|
91
|
+
|
|
92
|
+
expect(timeDef02.unauthorizedOvertime?.code).toEqual(16);
|
|
93
|
+
|
|
94
|
+
expect(timeDef02.overtimeEntry?.code).toEqual(507);
|
|
95
|
+
|
|
96
|
+
expect(timeDef02.leaveOvertime?.code).toEqual(511);
|
|
97
|
+
|
|
98
|
+
expect(timeDef02.overtimeAfter?.code).toEqual(513);
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
expect(timeDef02.overtimeDuringRest?.code).toEqual(515);
|
|
102
|
+
|
|
103
|
+
expect(timeDef02.overtimeOnCompensatedDays?.code).toEqual(517);
|
|
104
|
+
|
|
105
|
+
expect(timeDef02.overtimeDuringHoliday?.code).toEqual(519);
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
expect(timeDef02.overtimeDuringDayOff?.code).toEqual(521);
|
|
109
|
+
|
|
110
|
+
expect(timeDef02.nightShiftOvertimePremiumSituation?.code).toEqual(523);
|
|
111
|
+
|
|
112
|
+
expect(timeDef02.overtimeSeparationBefore?.code).toEqual(506);
|
|
113
|
+
|
|
114
|
+
expect(timeDef02.overtimeSeparationEntry?.code).toEqual(508);
|
|
115
|
+
|
|
116
|
+
expect(timeDef02.overtimeSeparationDuringMeal?.code).toEqual(510);
|
|
117
|
+
|
|
118
|
+
expect(timeDef02.overtimeSeparationLeave?.code).toEqual(512);
|
|
119
|
+
|
|
120
|
+
expect(timeDef02.overtimeSeparationAfter?.code).toEqual(514);
|
|
121
|
+
|
|
122
|
+
expect(timeDef02.overtimeSituationOnRelayScheduleHolidays?.code).toEqual(524);
|
|
123
|
+
|
|
124
|
+
expect(timeDef02.overtimeSeparationDuringRest?.code).toEqual(516);
|
|
125
|
+
|
|
126
|
+
expect(timeDef02.overtimeSeparationDuringCompensatedDays?.code).toEqual(518);
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
expect(timeDef02.overtimeSeparationDuringHoliday?.code).toEqual(520);
|
|
130
|
+
|
|
131
|
+
expect(timeDef02.overtimeSeparationDuringDayOff?.code).toEqual(522);
|
|
132
|
+
|
|
133
|
+
expect(timeDef02.nightShiftWorkPremium?.code).toEqual(501);
|
|
134
|
+
|
|
135
|
+
expect(timeDef02.vacationPaidLeaveSituation?.code).toEqual(2);
|
|
136
|
+
|
|
137
|
+
expect(timeDef02.dailyRestViolationSituation?.code).toEqual(502);
|
|
138
|
+
|
|
139
|
+
expect(timeDef02.workBreakViolationSituation?.code).toEqual(503);
|
|
140
|
+
|
|
141
|
+
expect(timeDef02.situationWaiting?.code).toEqual(604);
|
|
142
|
+
|
|
143
|
+
});
|
|
144
|
+
});
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
import { WorkscheduleBuilder } from "../../builder/workschedule.builder";
|
|
2
|
+
import {
|
|
3
|
+
WorkscheduleType,
|
|
4
|
+
WorkscheduleDefinitionType,
|
|
5
|
+
UsingType,
|
|
6
|
+
IntervalType,
|
|
7
|
+
ClockingEventScheduleType,
|
|
8
|
+
WorkscheduleClockingRegister,
|
|
9
|
+
WorkscheduleClockingEvent
|
|
10
|
+
} from "../../../data/foundation/workschedule";
|
|
11
|
+
import { Context } from "../../../data/context/context";
|
|
12
|
+
|
|
13
|
+
describe("Workschedule", () => {
|
|
14
|
+
it("Deve criar uma instância de Workschedule corretamente com valores padrão", () => {
|
|
15
|
+
const workschedule = new WorkscheduleBuilder().build();
|
|
16
|
+
|
|
17
|
+
expect(workschedule.code).toBe(1);
|
|
18
|
+
expect(workschedule.type).toBe(WorkscheduleType.FLEXIBLE);
|
|
19
|
+
expect(workschedule.definitionType).toBe(WorkscheduleDefinitionType.NORMAL);
|
|
20
|
+
expect(workschedule.workload).toBe(1);
|
|
21
|
+
expect(workschedule.clockingRegisters.length).toBe(2);
|
|
22
|
+
|
|
23
|
+
const firstRegister = workschedule.clockingRegisters[0];
|
|
24
|
+
expect(firstRegister.sequence).toBe(1);
|
|
25
|
+
expect(firstRegister.clockingEvent).toBe(1);
|
|
26
|
+
expect(firstRegister.toleranceBefore).toBe(1);
|
|
27
|
+
expect(firstRegister.toleranceAfter).toBe(1);
|
|
28
|
+
expect(firstRegister.mobilityBefore).toBe(1);
|
|
29
|
+
expect(firstRegister.mobilityAfter).toBe(1);
|
|
30
|
+
expect(firstRegister.intervalType).toBe(IntervalType.FLEXIBLE);
|
|
31
|
+
expect(firstRegister.usingType).toBe(UsingType.MANDATORY_ENTRY_OR_EXIT);
|
|
32
|
+
|
|
33
|
+
const secondRegister = workschedule.clockingRegisters[1];
|
|
34
|
+
expect(secondRegister.sequence).toBe(2);
|
|
35
|
+
expect(secondRegister.clockingEvent).toBe(2);
|
|
36
|
+
expect(secondRegister.toleranceBefore).toBe(2);
|
|
37
|
+
expect(secondRegister.toleranceAfter).toBe(2);
|
|
38
|
+
expect(secondRegister.mobilityBefore).toBe(1);
|
|
39
|
+
expect(secondRegister.mobilityAfter).toBe(1);
|
|
40
|
+
expect(secondRegister.intervalType).toBe(IntervalType.RIGID);
|
|
41
|
+
expect(secondRegister.usingType).toBe(UsingType.NON_MANDATORY_ENTRY_OR_EXIT);
|
|
42
|
+
|
|
43
|
+
expect(workschedule.clockingRegistersCount).toBe(2);
|
|
44
|
+
expect(workschedule.clockingEvent.workStartEndOvertimeTolerance).toBe(1);
|
|
45
|
+
expect(workschedule.clockingEvent.mealOvertimeTolerance).toBe(1);
|
|
46
|
+
expect(workschedule.clockingEvent.overtimeDailyTotalTolerance).toBe(1);
|
|
47
|
+
expect(workschedule.clockingEvent.absenceDailyTotalTolerance).toBe(1);
|
|
48
|
+
expect(workschedule.clockingEvent.workStartEndAbsenceTolerance).toBe(1);
|
|
49
|
+
expect(workschedule.clockingEvent.mealAbsenceTolerance).toBe(1);
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
it("Deve criar uma instância de Workschedule com valores personalizados", () => {
|
|
53
|
+
const customClockingRegisters = [
|
|
54
|
+
new WorkscheduleClockingRegister({
|
|
55
|
+
sequence: 3,
|
|
56
|
+
clockingEvent: 3,
|
|
57
|
+
toleranceBefore: 5,
|
|
58
|
+
toleranceAfter: 5,
|
|
59
|
+
mobilityBefore: 2,
|
|
60
|
+
mobilityAfter: 2,
|
|
61
|
+
intervalType: IntervalType.FLEXIBLE,
|
|
62
|
+
clockingEventScheduleType: ClockingEventScheduleType.GENERATED,
|
|
63
|
+
usingType: UsingType.MANDATORY_ENTRY_OR_EXIT,
|
|
64
|
+
}),
|
|
65
|
+
];
|
|
66
|
+
|
|
67
|
+
const clockingEvent = new WorkscheduleClockingEvent({
|
|
68
|
+
workStartEndOvertimeTolerance: 1,
|
|
69
|
+
mealOvertimeTolerance: 1,
|
|
70
|
+
overtimeDailyTotalTolerance: 1,
|
|
71
|
+
absenceDailyTotalTolerance: 1,
|
|
72
|
+
workStartEndAbsenceTolerance: 1,
|
|
73
|
+
mealAbsenceTolerance: 1,
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
const workschedule = new WorkscheduleBuilder()
|
|
77
|
+
.withCode(999)
|
|
78
|
+
.withType(WorkscheduleType.RIGID)
|
|
79
|
+
.withDefinitionType(WorkscheduleDefinitionType.HOLIDAY)
|
|
80
|
+
.withWorkload(8)
|
|
81
|
+
.withClockingRegister(customClockingRegisters)
|
|
82
|
+
.withClockingEvent(clockingEvent)
|
|
83
|
+
.build();
|
|
84
|
+
|
|
85
|
+
expect(workschedule.code).toBe(999);
|
|
86
|
+
expect(workschedule.type).toBe(WorkscheduleType.RIGID);
|
|
87
|
+
expect(workschedule.definitionType).toBe(WorkscheduleDefinitionType.HOLIDAY);
|
|
88
|
+
expect(workschedule.workload).toBe(8);
|
|
89
|
+
expect(workschedule.clockingRegisters.length).toBe(1);
|
|
90
|
+
|
|
91
|
+
const customRegister = workschedule.clockingRegisters[0];
|
|
92
|
+
expect(customRegister.sequence).toBe(3);
|
|
93
|
+
expect(customRegister.clockingEvent).toBe(3);
|
|
94
|
+
expect(customRegister.toleranceBefore).toBe(5);
|
|
95
|
+
expect(customRegister.toleranceAfter).toBe(5);
|
|
96
|
+
expect(customRegister.mobilityBefore).toBe(2);
|
|
97
|
+
expect(customRegister.mobilityAfter).toBe(2);
|
|
98
|
+
expect(customRegister.intervalType).toBe(IntervalType.FLEXIBLE);
|
|
99
|
+
expect(customRegister.usingType).toBe(UsingType.MANDATORY_ENTRY_OR_EXIT);
|
|
100
|
+
expect(customRegister.clockingEventScheduleType).toBe(ClockingEventScheduleType.GENERATED);
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
it('workscheduleWorkshift', () => {
|
|
104
|
+
|
|
105
|
+
let inputRule = '{"version":"1.0.0","input":{"batchId":"88f47ec2-1169-44c7-baa4-967287b09830","processType":"EVALUATE","startDate":"2025-04-03","endDate":"2025-04-03","contracts":[{"id":"92f38c8c-cdd3-461b-ad04-43711c48956b","holidays":[],"timeEvaluation":[{"date":"2025-04-03","workscheduleId":"489ee321-fa40-40a2-9dd5-5073567e3e51","workscheduleWorkshiftId":"9a171c94-4d6c-41b8-9b54-2b79275b183c","workshiftId":"b09c0085-6446-4480-b842-998a76060869","timeEvaluationSituations":[],"clockingEvents":[],"intervals":[]}],"employee":{"id":"92f38c8c-cdd3-461b-ad04-43711c48956b","code":2,"person":{},"hireDate":"2022-01-01","employer":{"code":1}},"histories":{"syndicateHistories":[{"syndicate":{"code":1,"name":"Tecnologia","startNightHour":1320,"endNightHour":300},"startDate":"2023-01-01"}]},"schedules":{"bridges":[{"originDate":"2025-04-03","destinationDate":"2025-04-07"}]},"hourBankAccounts":[{"hourBank":{"code":5},"creationDate":"2024-01-01","extinctionDate":"2024-04-30"},{"hourBank":{"code":8},"creationDate":"2024-07-01"},{"hourBank":{"code":1},"creationDate":"2024-10-24"}]}],"database":{"workschedules":[{"id":"489ee321-fa40-40a2-9dd5-5073567e3e51","code":10,"workload":0,"type":"RIGID","definitionType":"DSR","clockingRegisters":[]},{"id":"9a171c94-4d6c-41b8-9b54-2b79275b183c","code":15,"workload":240,"type":"RIGID","definitionType":"NORMAL","clockingRegisters":[{"sequence":1,"clockingEvent":480,"toleranceBefore":480,"toleranceAfter":480,"mobilityBefore":0,"mobilityAfter":0,"clockingEventScheduleType":"MANDATORY","usingType":"MANDATORY_ENTRY_OR_EXIT"},{"sequence":2,"clockingEvent":720,"toleranceBefore":720,"toleranceAfter":720,"mobilityBefore":0,"mobilityAfter":0,"clockingEventScheduleType":"MANDATORY","usingType":"MANDATORY_ENTRY_OR_EXIT"}]}],"workshifts":[{"id":"b09c0085-6446-4480-b842-998a76060869","code":1,"name":"Geral","dsrMinutes":440,"weekMinutes":2640,"monthMinutes":13200}],"situations":[],"holidays":[]},"currentUser":{"name":"admin@allanalves.com.br"}}}';
|
|
106
|
+
|
|
107
|
+
let context = new Context({ body: inputRule });
|
|
108
|
+
|
|
109
|
+
const workscheduleWorkshift = context.contracts[0].timeEvaluation[0].workscheduleWorkshift;
|
|
110
|
+
|
|
111
|
+
// horário
|
|
112
|
+
expect(workscheduleWorkshift.code).toBe(15);
|
|
113
|
+
expect(workscheduleWorkshift.workload).toBe(240);
|
|
114
|
+
expect(workscheduleWorkshift.type).toBe(WorkscheduleType.RIGID);
|
|
115
|
+
expect(workscheduleWorkshift.definitionType).toBe(WorkscheduleDefinitionType.NORMAL);
|
|
116
|
+
// marcações do horário
|
|
117
|
+
expect(workscheduleWorkshift.clockingRegisters[0].sequence).toBe(1);
|
|
118
|
+
expect(workscheduleWorkshift.clockingRegisters[0].clockingEvent).toBe(480);
|
|
119
|
+
expect(workscheduleWorkshift.clockingRegisters[0].toleranceBefore).toBe(480);
|
|
120
|
+
expect(workscheduleWorkshift.clockingRegisters[0].toleranceAfter).toBe(480);
|
|
121
|
+
expect(workscheduleWorkshift.clockingRegisters[0].mobilityBefore).toBe(0);
|
|
122
|
+
expect(workscheduleWorkshift.clockingRegisters[0].mobilityAfter).toBe(0);
|
|
123
|
+
expect(workscheduleWorkshift.clockingRegisters[0].clockingEventScheduleType).toBe(ClockingEventScheduleType.MANDATORY);
|
|
124
|
+
expect(workscheduleWorkshift.clockingRegisters[0].usingType).toBe(UsingType.MANDATORY_ENTRY_OR_EXIT);
|
|
125
|
+
|
|
126
|
+
expect(workscheduleWorkshift.clockingRegisters[1].sequence).toBe(2);
|
|
127
|
+
expect(workscheduleWorkshift.clockingRegisters[1].clockingEvent).toBe(720);
|
|
128
|
+
expect(workscheduleWorkshift.clockingRegisters[1].toleranceBefore).toBe(720);
|
|
129
|
+
expect(workscheduleWorkshift.clockingRegisters[1].toleranceAfter).toBe(720);
|
|
130
|
+
expect(workscheduleWorkshift.clockingRegisters[1].mobilityBefore).toBe(0);
|
|
131
|
+
expect(workscheduleWorkshift.clockingRegisters[1].mobilityAfter).toBe(0);
|
|
132
|
+
expect(workscheduleWorkshift.clockingRegisters[1].clockingEventScheduleType).toBe(ClockingEventScheduleType.MANDATORY);
|
|
133
|
+
expect(workscheduleWorkshift.clockingRegisters[1].usingType).toBe(UsingType.MANDATORY_ENTRY_OR_EXIT);
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
it('workschedule', () => {
|
|
137
|
+
|
|
138
|
+
let inputRule = '{"version":"1.0.0","input":{"batchId":"fd4c37de-782a-4f12-b96d-4b0811121f65","processType":"EVALUATE","startDate":"2025-04-03","endDate":"2025-04-03","contracts":[{"id":"92f38c8c-cdd3-461b-ad04-43711c48956b","holidays":[],"timeEvaluation":[{"date":"2025-04-03","workscheduleId":"015a398f-d931-4ff7-8657-440e85303423015a398f-d931-4ff7-8657-440e85303423","workscheduleWorkshiftId":"","workshiftId":"fc6479b3-e903-43a2-a51a-e56e429719af","timeEvaluationSituations":[],"clockingEvents":[],"intervals":[]}],"employee":{"id":"92f38c8c-cdd3-461b-ad04-43711c48956b","code":2,"person":{},"hireDate":"2022-01-01","employer":{"code":1}},"histories":{"syndicateHistories":[{"syndicate":{"code":1,"name":"Tecnologia","startNightHour":1320,"endNightHour":300},"startDate":"2023-01-01"}]},"schedules":{"bridges":[]}}],"database":{"workshifts":[{"id":"fc6479b3-e903-43a2-a51a-e56e429719af","code":1,"name":"Geral","dsrMinutes":440,"weekMinutes":2640,"monthMinutes":13200}],"workschedules":[{"id":"015a398f-d931-4ff7-8657-440e85303423015a398f-d931-4ff7-8657-440e85303423","code":1,"workload":510,"type":"MOBILE_MEAL","definitionType":"NORMAL","clockingRegisters":[{"sequence":1,"clockingEvent":480,"toleranceBefore":480,"toleranceAfter":480,"mobilityBefore":0,"mobilityAfter":0,"clockingEventScheduleType":"MANDATORY","usingType":"MANDATORY_ENTRY_OR_EXIT"},{"sequence":2,"clockingEvent":720,"toleranceBefore":0,"toleranceAfter":0,"mobilityBefore":10,"mobilityAfter":30,"intervalType":"MOBILE","clockingEventScheduleType":"MANDATORY","usingType":"MANDATORY_MEAL"},{"sequence":3,"clockingEvent":810,"toleranceBefore":0,"toleranceAfter":0,"mobilityBefore":10,"mobilityAfter":30,"intervalType":"MOBILE","clockingEventScheduleType":"MANDATORY","usingType":"MANDATORY_MEAL"},{"sequence":4,"clockingEvent":1080,"toleranceBefore":1080,"toleranceAfter":1080,"mobilityBefore":0,"mobilityAfter":0,"clockingEventScheduleType":"MANDATORY","usingType":"MANDATORY_ENTRY_OR_EXIT"}],"clockingEvent":{"workStartEndOvertimeTolerance":10,"mealOvertimeTolerance":11,"overtimeDailyTotalTolerance":12,"absenceDailyTotalTolerance":15,"workStartEndAbsenceTolerance":0,"mealAbsenceTolerance":13}}],"database":{"situations":[],"holidays":[]}},"currentUser":{"name":"admin@allanalves.com.br"}}}';
|
|
139
|
+
let context = new Context({ body: inputRule });
|
|
140
|
+
const workschedule = context.contracts[0].timeEvaluation[0].workschedule;
|
|
141
|
+
|
|
142
|
+
// horário
|
|
143
|
+
expect(workschedule.code).toBe(1);
|
|
144
|
+
expect(workschedule.workload).toBe(510);
|
|
145
|
+
expect(workschedule.type).toBe(WorkscheduleType.MOBILE_MEAL);
|
|
146
|
+
expect(workschedule.definitionType).toBe(WorkscheduleDefinitionType.NORMAL);
|
|
147
|
+
// marcações do horário
|
|
148
|
+
expect(workschedule.clockingRegisters[0].sequence).toBe(1);
|
|
149
|
+
expect(workschedule.clockingRegisters[0].clockingEvent).toBe(480);
|
|
150
|
+
expect(workschedule.clockingRegisters[0].toleranceBefore).toBe(480);
|
|
151
|
+
expect(workschedule.clockingRegisters[0].toleranceAfter).toBe(480);
|
|
152
|
+
expect(workschedule.clockingRegisters[0].mobilityBefore).toBe(0);
|
|
153
|
+
expect(workschedule.clockingRegisters[0].mobilityAfter).toBe(0);
|
|
154
|
+
expect(workschedule.clockingRegisters[0].clockingEventScheduleType).toBe(ClockingEventScheduleType.MANDATORY);
|
|
155
|
+
expect(workschedule.clockingRegisters[0].usingType).toBe(UsingType.MANDATORY_ENTRY_OR_EXIT);
|
|
156
|
+
|
|
157
|
+
expect(workschedule.clockingRegisters[1].sequence).toBe(2);
|
|
158
|
+
expect(workschedule.clockingRegisters[1].clockingEvent).toBe(720);
|
|
159
|
+
expect(workschedule.clockingRegisters[1].toleranceBefore).toBe(0);
|
|
160
|
+
expect(workschedule.clockingRegisters[1].toleranceAfter).toBe(0);
|
|
161
|
+
expect(workschedule.clockingRegisters[1].mobilityBefore).toBe(10);
|
|
162
|
+
expect(workschedule.clockingRegisters[1].mobilityAfter).toBe(30);
|
|
163
|
+
expect(workschedule.clockingRegisters[1].intervalType).toBe(IntervalType.MOBILE);
|
|
164
|
+
expect(workschedule.clockingRegisters[1].clockingEventScheduleType).toBe(ClockingEventScheduleType.MANDATORY);
|
|
165
|
+
expect(workschedule.clockingRegisters[1].usingType).toBe(UsingType.MANDATORY_MEAL);
|
|
166
|
+
|
|
167
|
+
expect(workschedule.clockingRegisters[2].sequence).toBe(3);
|
|
168
|
+
expect(workschedule.clockingRegisters[2].clockingEvent).toBe(810);
|
|
169
|
+
expect(workschedule.clockingRegisters[2].toleranceBefore).toBe(0);
|
|
170
|
+
expect(workschedule.clockingRegisters[2].toleranceAfter).toBe(0);
|
|
171
|
+
expect(workschedule.clockingRegisters[2].mobilityBefore).toBe(10);
|
|
172
|
+
expect(workschedule.clockingRegisters[2].mobilityAfter).toBe(30);
|
|
173
|
+
expect(workschedule.clockingRegisters[2].intervalType).toBe(IntervalType.MOBILE);
|
|
174
|
+
expect(workschedule.clockingRegisters[2].clockingEventScheduleType).toBe(ClockingEventScheduleType.MANDATORY);
|
|
175
|
+
expect(workschedule.clockingRegisters[2].usingType).toBe(UsingType.MANDATORY_MEAL);
|
|
176
|
+
|
|
177
|
+
expect(workschedule.clockingRegisters[3].sequence).toBe(4);
|
|
178
|
+
expect(workschedule.clockingRegisters[3].clockingEvent).toBe(1080);
|
|
179
|
+
expect(workschedule.clockingRegisters[3].toleranceBefore).toBe(1080);
|
|
180
|
+
expect(workschedule.clockingRegisters[3].toleranceAfter).toBe(1080);
|
|
181
|
+
expect(workschedule.clockingRegisters[3].mobilityBefore).toBe(0);
|
|
182
|
+
expect(workschedule.clockingRegisters[3].mobilityAfter).toBe(0);
|
|
183
|
+
expect(workschedule.clockingRegisters[3].clockingEventScheduleType).toBe(ClockingEventScheduleType.MANDATORY);
|
|
184
|
+
expect(workschedule.clockingRegisters[3].usingType).toBe(UsingType.MANDATORY_ENTRY_OR_EXIT);
|
|
185
|
+
// ponto
|
|
186
|
+
expect(workschedule.clockingEvent.workStartEndOvertimeTolerance).toBe(10);
|
|
187
|
+
expect(workschedule.clockingEvent.mealOvertimeTolerance).toBe(11);
|
|
188
|
+
expect(workschedule.clockingEvent.overtimeDailyTotalTolerance).toBe(12);
|
|
189
|
+
expect(workschedule.clockingEvent.absenceDailyTotalTolerance).toBe(15);
|
|
190
|
+
expect(workschedule.clockingEvent.workStartEndAbsenceTolerance).toBe(0);
|
|
191
|
+
expect(workschedule.clockingEvent.mealAbsenceTolerance).toBe(13);
|
|
192
|
+
});
|
|
193
|
+
|
|
194
|
+
});
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { HolidayType, WorkshiftType, TimeShiftType, AutoSearchType, WorkshiftGroup, WorkshiftDetail } from "../../../data/foundation/workshift";
|
|
2
|
+
import { ClockingEventScheduleType, UsingType, WorkscheduleDefinitionType, WorkscheduleType } from "../../../data/foundation/workschedule";
|
|
3
|
+
import { Context } from "../../../data/context/context";
|
|
4
|
+
import { ContextReference } from "../../../data/context/contextReference";
|
|
5
|
+
import { ContextReferenceBuilder } from "../../builder/contextReference.builder";
|
|
6
|
+
|
|
7
|
+
describe("Workshift", () => {
|
|
8
|
+
let contextRef: ContextReference;
|
|
9
|
+
|
|
10
|
+
beforeEach(() => {
|
|
11
|
+
contextRef = new ContextReferenceBuilder().build();
|
|
12
|
+
ContextReference.setGlobalInstance(contextRef);
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
afterEach(() => {
|
|
16
|
+
ContextReference.setGlobalInstance(null);
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
it('workshift', () => {
|
|
20
|
+
let inputRule = '{"version":"1.0.0","input":{"batchId":"5d6dc109-12bf-489d-87fd-5d1fbed5217e","processType":"EVALUATE","startDate":"2025-04-22","endDate":"2025-04-22","contracts":[{"id":"92f38c8c-cdd3-461b-ad04-43711c48956b","holidaysKeys":[],"timeEvaluation":[{"date":"2025-04-22","workscheduleId":"7ff158c8-133f-44f4-920f-fb351bcdb942","workscheduleWorkshiftId":"7ff158c8-133f-44f4-920f-fb351bcdb942","workshiftId":"41c8a477-c778-4541-9f40-8460da6ed7a4","timeEvaluationSituations":[{"situationId":"6f3d297a-8977-4b27-a2ca-e5cb5f1489b7","situationCode":5,"numberOfHours":480},{"situationId":"acaf9c07-9521-422b-9325-1af1f36fd589","situationCode":8,"numberOfHours":51},{"situationId":"a6e0401f-42f2-4dc8-ad48-c48682029689","situationCode":6,"numberOfHours":714}],"clockingEvents":[{"clockingEventDate":"2025-04-22","clockingEventTime":429,"functionCode":0,"originType":"TYPED","useType":"CLOCKING"},{"clockingEventDate":"2025-04-22","clockingEventTime":717,"functionCode":0,"originType":"TYPED","useType":"CLOCKING"},{"clockingEventDate":"2025-04-22","clockingEventTime":812,"functionCode":0,"originType":"TYPED","useType":"CLOCKING"},{"clockingEventDate":"2025-04-22","clockingEventTime":1200,"functionCode":0,"originType":"TYPED","useType":"CLOCKING"}],"intervals":[{"clockingEventStart":"2025-04-21T22:00:00","clockingEventEnd":"2025-04-22T02:00:00","type":"ABSENCE","subType":"FULL_PART","situationReasonCode":0,"justifiedDays":0,"positionWorkingPart":{"workingHours":1,"part":1},"isNightly":true,"isOvertimeAuthorized":false,"isTolerancePeriod":false,"inClockingEventTolerance":true},{"clockingEventStart":"2025-04-22T03:00:00","clockingEventEnd":"2025-04-22T05:00:00","type":"ABSENCE","subType":"FULL_PART","situationReasonCode":0,"justifiedDays":0,"positionWorkingPart":{"workingHours":1,"part":2},"isNightly":true,"isOvertimeAuthorized":false,"isTolerancePeriod":false,"inClockingEventTolerance":true},{"clockingEventStart":"2025-04-22T05:00:00","clockingEventEnd":"2025-04-22T07:00:00","type":"ABSENCE","subType":"FULL_PART","situationReasonCode":0,"justifiedDays":0,"positionWorkingPart":{"workingHours":1,"part":2},"isNightly":false,"isOvertimeAuthorized":false,"isTolerancePeriod":false,"inClockingEventTolerance":true},{"clockingEventStart":"2025-04-22T07:09:00","clockingEventEnd":"2025-04-22T08:00:00","type":"OVERTIME","subType":"AFTER_WORKING","situationReasonCode":0,"justifiedDays":0,"positionWorkingPart":{"workingHours":1,"part":2},"isNightly":false,"isOvertimeAuthorized":false,"isTolerancePeriod":false,"inClockingEventTolerance":true},{"clockingEventStart":"2025-04-22T08:00:00","clockingEventEnd":"2025-04-22T11:57:00","type":"OVERTIME","subType":"AFTER_WORKING","situationReasonCode":0,"justifiedDays":0,"positionWorkingPart":{"workingHours":1,"part":2},"isNightly":false,"isOvertimeAuthorized":true,"isTolerancePeriod":false,"inClockingEventTolerance":true},{"clockingEventStart":"2025-04-22T13:32:00","clockingEventEnd":"2025-04-22T20:00:00","type":"OVERTIME","subType":"AFTER_WORKING","situationReasonCode":0,"justifiedDays":0,"positionWorkingPart":{"workingHours":1,"part":2},"isNightly":false,"isOvertimeAuthorized":true,"isTolerancePeriod":false,"inClockingEventTolerance":true}],"situationDefinitionKey":"1_2022-08-01_null","estimatedHours":{"meal":[{"dailyHours":0,"nightlyHours":60}],"snack":[],"work":[{"dailyHours":0,"nightlyHours":240},{"dailyHours":120,"nightlyHours":120}]},"syndicateKey":"1","missingClockingEvent":true}],"employee":{"id":"92f38c8c-cdd3-461b-ad04-43711c48956b","code":2,"person":{"name":"Franky"},"employer":{"code":1},"hireDate":"2022-01-01","employmentRelationshipId":"775ee7d1-5d7f-4a1b-b50b-b659a66014b2","workshiftId":"47971e5f-3d1a-4494-8cf6-328c7dfa5394","workshiftGroupId":"24d054c6-6eba-4526-8ed5-59ccd7180b6a","jobPositionKey":"1_1","companyBranchKey":"1_1"},"histories":{"jobPositionHistories":[{"startDate":"2025-01-01","jobPositionKey":"1_1"}],"companyBranchHistories":[{"startDate":"2022-08-08","companyBranchKey":"1_1"}],"employmentRelationshipHistories":[{"startDate":"2022-08-08","employmentRelationshipId":"775ee7d1-5d7f-4a1b-b50b-b659a66014b2"}],"timeEvaluationHistories":[{"startDate":"2025-03-15","type":"NORMAL"}],"workshiftHistories":[{"startDate":"2024-05-30","workshiftId":"47971e5f-3d1a-4494-8cf6-328c7dfa5394","workshiftGroupId":"24d054c6-6eba-4526-8ed5-59ccd7180b6a"}],"leaveHistories":[],"costCenterHistories":[]},"schedules":{"bridges":[{"originDate":"2025-04-25","destinationDate":"2025-04-26"}],"workscheduleChanges":[{"date":"2024-02-17","workscheduleId":"aa3cd88e-f8b9-443e-9b80-41333ea0ac8f"},{"date":"2024-02-13","workscheduleId":"45147dc7-6c80-4fbf-ba8b-c1f0da19fb07"},{"date":"2023-11-22","workscheduleId":"9850ad40-0d5f-495f-85ea-843f11b3b427"}],"workshiftChanges":[{"startDate":"2025-04-22","endDate":"2025-04-24","workshiftId":"41c8a477-c778-4541-9f40-8460da6ed7a4","workshiftGroupId":"e9567375-171f-4f87-aef8-b99dce88b472"}]},"hourBankAccounts":[{"hourBank":{"code":5},"creationDate":"2024-01-01","extinctionDate":"2024-04-30"},{"hourBank":{"code":8},"creationDate":"2024-07-01"},{"hourBank":{"code":1},"creationDate":"2024-10-24"}]}],"database":{"situations":[{"id":"209c328d-3fe8-446a-b690-846d75ef5ed5","code":1,"type":"WORKING","exception":false,"complementarySituationId":"209c328d-3fe8-446a-b690-846d75ef5ed5","daytime":true},{"id":"6774bc30-d9db-4d52-ade2-9d3e5059e0ab","code":3,"type":"OVERTIME","exception":true,"complementarySituationId":"acaf9c07-9521-422b-9325-1af1f36fd589","daytime":false},{"id":"6f3d297a-8977-4b27-a2ca-e5cb5f1489b7","code":5,"type":"ABSENCES","exception":true,"complementarySituationId":"6f3d297a-8977-4b27-a2ca-e5cb5f1489b7","daytime":true},{"id":"a6e0401f-42f2-4dc8-ad48-c48682029689","code":6,"type":"WORKING","exception":true,"complementarySituationId":"a6e0401f-42f2-4dc8-ad48-c48682029689","daytime":false},{"id":"acaf9c07-9521-422b-9325-1af1f36fd589","code":8,"type":"OVERTIME","exception":true,"complementarySituationId":"6774bc30-d9db-4d52-ade2-9d3e5059e0ab","daytime":true},{"id":"489eab83-47ed-42ee-ab76-a1702bd13e79","code":9,"type":"VACATION","exception":false,"complementarySituationId":"489eab83-47ed-42ee-ab76-a1702bd13e79","daytime":true},{"id":"4be78b2c-cae5-46f8-93ae-850a1c85013a","code":11,"type":"WORKING","exception":true,"complementarySituationId":"4be78b2c-cae5-46f8-93ae-850a1c85013a","daytime":true},{"id":"848ec42d-b2df-4c4d-94f4-151f381e4a54","code":12,"type":"WORKING","exception":false,"complementarySituationId":"848ec42d-b2df-4c4d-94f4-151f381e4a54","daytime":true},{"id":"8cb7c936-a263-4845-979e-9c69d663b4a2","code":15,"type":"WORKING","exception":false,"complementarySituationId":"e63bd904-4cc8-4bc0-9e2d-b087f6fc0f81","daytime":true},{"id":"e63bd904-4cc8-4bc0-9e2d-b087f6fc0f81","code":16,"type":"WORKING","exception":false,"complementarySituationId":"8cb7c936-a263-4845-979e-9c69d663b4a2","daytime":false},{"id":"e75ba021-148e-4f36-bb3e-13e024cc1908","code":20,"type":"WORKING","exception":true,"complementarySituationId":"2a2fae76-cf7e-498b-9107-0166f6e906ef","daytime":true},{"id":"2a2fae76-cf7e-498b-9107-0166f6e906ef","code":21,"type":"WORKING","exception":true,"complementarySituationId":"e75ba021-148e-4f36-bb3e-13e024cc1908","daytime":false},{"id":"950ba6cd-528d-42cc-aa07-9f15561735f9","code":999,"type":"TIMEEVALUATIONSITUATION","exception":true,"complementarySituationId":"950ba6cd-528d-42cc-aa07-9f15561735f9","daytime":true}],"holidays":[],"timeEvaluationSituationDefinitions":[{"code":1,"startDate":"2022-08-01","workSituationId":"209c328d-3fe8-446a-b690-846d75ef5ed5","nightShiftWorkPremiumId":"e75ba021-148e-4f36-bb3e-13e024cc1908","invalidEventsSituationId":"950ba6cd-528d-42cc-aa07-9f15561735f9","vacationPaidLeaveSituationId":"489eab83-47ed-42ee-ab76-a1702bd13e79","dailyRestViolationSituationId":"848ec42d-b2df-4c4d-94f4-151f381e4a54","workBreakViolationSituationId":"4be78b2c-cae5-46f8-93ae-850a1c85013a","absenceSituationId":"6f3d297a-8977-4b27-a2ca-e5cb5f1489b7","tardinessSituationId":"6f3d297a-8977-4b27-a2ca-e5cb5f1489b7","intermediateLeaveSituationId":"6f3d297a-8977-4b27-a2ca-e5cb5f1489b7","earlyLeaveSituationId":"6f3d297a-8977-4b27-a2ca-e5cb5f1489b7","absenceSituationOnRelayScheduleHolidaysId":"6f3d297a-8977-4b27-a2ca-e5cb5f1489b7","percentageNextDay":false,"normalOvertimeSeparationLimit":10,"separateOvertimeAfterConvertingNightShiftHours":false,"unauthorizedOvertimeId":"acaf9c07-9521-422b-9325-1af1f36fd589","overtimeBeforeId":"acaf9c07-9521-422b-9325-1af1f36fd589","overtimeEntryId":"acaf9c07-9521-422b-9325-1af1f36fd589","overtimeDuringMealId":"acaf9c07-9521-422b-9325-1af1f36fd589","leaveOvertimeId":"acaf9c07-9521-422b-9325-1af1f36fd589","overtimeAfterId":"a6e0401f-42f2-4dc8-ad48-c48682029689","overtimeSeparationLimitDuringRest":10,"overtimeDuringRestId":"a6e0401f-42f2-4dc8-ad48-c48682029689","overtimeSeparationLimitDuringCompensatedDays":10,"overtimeOnCompensatedDaysId":"a6e0401f-42f2-4dc8-ad48-c48682029689","overtimeSeparationLimitDuringHoliday":10,"overtimeDuringHolidayId":"a6e0401f-42f2-4dc8-ad48-c48682029689","overtimeSeparationLimitDuringDayOff":10,"overtimeDuringDayOffId":"a6e0401f-42f2-4dc8-ad48-c48682029689","overtimeSituationOnRelayScheduleHolidaysId":"acaf9c07-9521-422b-9325-1af1f36fd589","nightShiftOvertimePremiumSituationId":"a6e0401f-42f2-4dc8-ad48-c48682029689","overtimeSeparationBeforeId":"8cb7c936-a263-4845-979e-9c69d663b4a2","overtimeSeparationEntryId":"8cb7c936-a263-4845-979e-9c69d663b4a2","overtimeSeparationDuringMealId":"8cb7c936-a263-4845-979e-9c69d663b4a2","overtimeSeparationLeaveId":"8cb7c936-a263-4845-979e-9c69d663b4a2","overtimeSeparationAfterId":"8cb7c936-a263-4845-979e-9c69d663b4a2","overtimeSeparationDuringRestId":"8cb7c936-a263-4845-979e-9c69d663b4a2","overtimeSeparationDuringCompensatedDaysId":"8cb7c936-a263-4845-979e-9c69d663b4a2","overtimeSeparationDuringHolidayId":"8cb7c936-a263-4845-979e-9c69d663b4a2","overtimeSeparationDuringDayOffId":"8cb7c936-a263-4845-979e-9c69d663b4a2"}],"jobPositions":[{"key":"1_1","code":1,"structureCode":1}],"workschedules":[{"id":"9850ad40-0d5f-495f-85ea-843f11b3b427","code":7,"workload":480,"type":"RIGID","definitionType":"NORMAL","clockingRegisters":[{"sequence":1,"clockingEvent":480,"toleranceBefore":480,"toleranceAfter":480,"mobilityBefore":0,"mobilityAfter":0,"clockingEventScheduleType":"MANDATORY","usingType":"MANDATORY_ENTRY_OR_EXIT"},{"sequence":2,"clockingEvent":720,"toleranceBefore":720,"toleranceAfter":720,"mobilityBefore":0,"mobilityAfter":0,"intervalType":"RIGID","clockingEventScheduleType":"GENERATED","usingType":"GENERATED_PRE_ASSIGNED_MEAL"},{"sequence":3,"clockingEvent":780,"toleranceBefore":780,"toleranceAfter":780,"mobilityBefore":0,"mobilityAfter":0,"intervalType":"RIGID","clockingEventScheduleType":"GENERATED","usingType":"GENERATED_PRE_ASSIGNED_MEAL"},{"sequence":4,"clockingEvent":1020,"toleranceBefore":1020,"toleranceAfter":1020,"mobilityBefore":0,"mobilityAfter":0,"clockingEventScheduleType":"MANDATORY","usingType":"MANDATORY_ENTRY_OR_EXIT"}],"clockingEvent":{"workStartEndOvertimeTolerance":0,"mealOvertimeTolerance":0,"overtimeDailyTotalTolerance":0,"absenceDailyTotalTolerance":0,"workStartEndAbsenceTolerance":0,"mealAbsenceTolerance":0}},{"id":"7ff158c8-133f-44f4-920f-fb351bcdb942","code":2,"workload":480,"type":"RIGID","definitionType":"NORMAL","clockingRegisters":[{"sequence":1,"clockingEvent":1320,"toleranceBefore":1320,"toleranceAfter":1320,"mobilityBefore":0,"mobilityAfter":0,"clockingEventScheduleType":"MANDATORY","usingType":"MANDATORY_ENTRY_OR_EXIT"},{"sequence":2,"clockingEvent":120,"toleranceBefore":120,"toleranceAfter":120,"mobilityBefore":0,"mobilityAfter":0,"intervalType":"RIGID","clockingEventScheduleType":"MANDATORY","usingType":"MANDATORY_MEAL"},{"sequence":3,"clockingEvent":180,"toleranceBefore":180,"toleranceAfter":180,"mobilityBefore":0,"mobilityAfter":0,"intervalType":"RIGID","clockingEventScheduleType":"MANDATORY","usingType":"MANDATORY_MEAL"},{"sequence":4,"clockingEvent":420,"toleranceBefore":420,"toleranceAfter":420,"mobilityBefore":0,"mobilityAfter":0,"clockingEventScheduleType":"MANDATORY","usingType":"MANDATORY_ENTRY_OR_EXIT"}],"clockingEvent":{"workStartEndOvertimeTolerance":0,"mealOvertimeTolerance":0,"overtimeDailyTotalTolerance":0,"absenceDailyTotalTolerance":0,"workStartEndAbsenceTolerance":0,"mealAbsenceTolerance":0}},{"id":"aa3cd88e-f8b9-443e-9b80-41333ea0ac8f","code":1973,"workload":510,"type":"RIGID","definitionType":"NORMAL","clockingRegisters":[{"sequence":1,"clockingEvent":480,"toleranceBefore":470,"toleranceAfter":480,"mobilityBefore":0,"mobilityAfter":0,"clockingEventScheduleType":"MANDATORY","usingType":"MANDATORY_ENTRY_OR_EXIT"},{"sequence":2,"clockingEvent":720,"toleranceBefore":720,"toleranceAfter":720,"mobilityBefore":0,"mobilityAfter":0,"intervalType":"RIGID","clockingEventScheduleType":"GENERATED","usingType":"GENERATED_PRE_ASSIGNED_MEAL"},{"sequence":3,"clockingEvent":810,"toleranceBefore":810,"toleranceAfter":810,"mobilityBefore":0,"mobilityAfter":0,"intervalType":"RIGID","clockingEventScheduleType":"GENERATED","usingType":"GENERATED_PRE_ASSIGNED_MEAL"},{"sequence":4,"clockingEvent":1080,"toleranceBefore":1080,"toleranceAfter":1080,"mobilityBefore":0,"mobilityAfter":0,"clockingEventScheduleType":"MANDATORY","usingType":"MANDATORY_ENTRY_OR_EXIT"}],"clockingEvent":{"workStartEndOvertimeTolerance":0,"mealOvertimeTolerance":0,"overtimeDailyTotalTolerance":0,"absenceDailyTotalTolerance":0,"workStartEndAbsenceTolerance":0,"mealAbsenceTolerance":0}},{"id":"45147dc7-6c80-4fbf-ba8b-c1f0da19fb07","code":1972,"workload":510,"type":"RIGID","definitionType":"NORMAL","clockingRegisters":[{"sequence":1,"clockingEvent":480,"toleranceBefore":470,"toleranceAfter":480,"mobilityBefore":0,"mobilityAfter":0,"clockingEventScheduleType":"MANDATORY","usingType":"MANDATORY_ENTRY_OR_EXIT"},{"sequence":2,"clockingEvent":720,"toleranceBefore":720,"toleranceAfter":720,"mobilityBefore":0,"mobilityAfter":0,"intervalType":"RIGID","clockingEventScheduleType":"GENERATED","usingType":"GENERATED_PRE_ASSIGNED_MEAL"},{"sequence":3,"clockingEvent":810,"toleranceBefore":810,"toleranceAfter":810,"mobilityBefore":0,"mobilityAfter":0,"intervalType":"RIGID","clockingEventScheduleType":"GENERATED","usingType":"GENERATED_PRE_ASSIGNED_MEAL"},{"sequence":4,"clockingEvent":1080,"toleranceBefore":1080,"toleranceAfter":1080,"mobilityBefore":0,"mobilityAfter":0,"clockingEventScheduleType":"MANDATORY","usingType":"MANDATORY_ENTRY_OR_EXIT"}],"clockingEvent":{"workStartEndOvertimeTolerance":0,"mealOvertimeTolerance":0,"overtimeDailyTotalTolerance":0,"absenceDailyTotalTolerance":0,"workStartEndAbsenceTolerance":0,"mealAbsenceTolerance":0}}],"workshifts":[{"id":"47971e5f-3d1a-4494-8cf6-328c7dfa5394","code":1,"type":"PERMANENT","rotationWorkShift":true,"extensionNightHours":true,"dsrMinutes":440,"weekMinutes":2640,"monthMinutes":13200,"timeShiftType":"GENERAL","workshiftGroupsKeys":["756ae344-4708-472c-80aa-1e304340fffa","5a8f1fd7-98b3-4742-a94b-8b510420effa","7c2e49fd-a504-45a9-b4e9-3e3ef203ffa2","24d054c6-6eba-4526-8ed5-59ccd7180b6a","756e0ceb-0fdc-4df2-ab88-464cdb28218b","3b6923e1-092f-452b-a790-f3f6d167df1e","137fa797-595f-45e7-8365-f256e3148016","88d10282-188c-4b16-a205-8e6eeabc965f"],"workshiftDetailsKeys":["2022-08-12_OWN_2"]},{"id":"41c8a477-c778-4541-9f40-8460da6ed7a4","code":7,"type":"PERMANENT","rotationWorkShift":false,"extensionNightHours":false,"dsrMinutes":480,"weekMinutes":2880,"monthMinutes":14400,"timeShiftType":"THIRDSHIFT","workshiftGroupsKeys":["e9567375-171f-4f87-aef8-b99dce88b472"],"workshiftDetailsKeys":["2024-01-01_BRANCH_0"]}],"companyBranches":[{"key":"1_1","code":1}],"syndicates":[{"key":"1","code":1,"nightStartHour":1320,"nightEndHour":300,"minimumInterval4to6Hours":30,"minimumInterval6Hours":90,"minimumWorkDuration6Hours":361}],"employmentRelationships":[{"id":"775ee7d1-5d7f-4a1b-b50b-b659a66014b2","code":"1","contractType":"EMPLOYEE"}],"workshiftGroups":[{"id":"756ae344-4708-472c-80aa-1e304340fffa","code":1,"baseDate":"2022-08-01"},{"id":"756e0ceb-0fdc-4df2-ab88-464cdb28218b","code":4,"baseDate":"2022-08-22"},{"id":"3b6923e1-092f-452b-a790-f3f6d167df1e","code":5,"baseDate":"2022-08-29"},{"id":"5a8f1fd7-98b3-4742-a94b-8b510420effa","code":2,"baseDate":"2022-08-08"},{"id":"e9567375-171f-4f87-aef8-b99dce88b472","code":7,"baseDate":"2024-01-01"},{"id":"88d10282-188c-4b16-a205-8e6eeabc965f","code":6,"baseDate":"2022-09-05"},{"id":"24d054c6-6eba-4526-8ed5-59ccd7180b6a","code":4,"baseDate":"1901-01-08"},{"id":"7c2e49fd-a504-45a9-b4e9-3e3ef203ffa2","code":3,"baseDate":"2022-08-15"},{"id":"137fa797-595f-45e7-8365-f256e3148016","code":5,"baseDate":"2023-03-22"}],"workshiftDetails":[{"holidayGroup":{"code":2},"holidayType":"OWN","startDate":"2022-08-12","workshiftDetailsKey":"2022-08-12_OWN_2"},{"holidayGroup":{"code":0},"holidayType":"BRANCH","startDate":"2024-01-01","workshiftDetailsKey":"2024-01-01_BRANCH_0"}],"costCenters":[{}]},"currentUser":{"userName":"admin@allanalves.com.br"}}}';
|
|
21
|
+
let context = new Context({ body: inputRule });
|
|
22
|
+
const workshift = context.contracts[0].timeEvaluation[0].workshift;
|
|
23
|
+
|
|
24
|
+
// Validação dos atributos do Workshift
|
|
25
|
+
expect(workshift.code).toBe(7);
|
|
26
|
+
expect(workshift.type).toBe(WorkshiftType.PERMANENT);
|
|
27
|
+
expect(workshift.rotationWorkShift).toBe(false);
|
|
28
|
+
expect(workshift.extensionNightHours).toBe(false);
|
|
29
|
+
expect(workshift.dsrMinutes).toBe(480);
|
|
30
|
+
expect(workshift.weekMinutes).toBe(2880);
|
|
31
|
+
expect(workshift.monthMinutes).toBe(14400);
|
|
32
|
+
expect(workshift.timeShiftType).toBe(TimeShiftType.THIRDSHIFT);
|
|
33
|
+
|
|
34
|
+
expect(workshift.workshiftGroups.length).toBe(1);
|
|
35
|
+
expect(workshift.workshiftGroups[0].code).toBe(7);
|
|
36
|
+
expect(workshift.workshiftGroups[0].baseDate).toEqual(new Date("2024-01-01"));
|
|
37
|
+
expect(workshift.workshiftDetails.length).toBe(1);
|
|
38
|
+
expect(workshift.workshiftDetails[0].holidayGroup).toStrictEqual({ code: 0 });
|
|
39
|
+
expect(workshift.workshiftDetails[0].holidayType).toBe(HolidayType.BRANCH);
|
|
40
|
+
expect(workshift.workshiftDetails[0].startDate).toEqual(new Date("2024-01-01"));
|
|
41
|
+
|
|
42
|
+
expect(workshift.workshiftDetails.length).toBe(1);
|
|
43
|
+
expect(workshift.workshiftDetails[0].holidayGroup.code).toBe(0);
|
|
44
|
+
expect(workshift.workshiftDetails[0].holidayType).toBe(HolidayType.BRANCH);
|
|
45
|
+
expect(workshift.workshiftDetails[0].startDate).toEqual(new Date("2024-01-01"));
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
it('workscheduleWorkshift', () => {
|
|
49
|
+
|
|
50
|
+
let inputRule = '{"version":"1.0.0","input":{"batchId":"88f47ec2-1169-44c7-baa4-967287b09830","processType":"EVALUATE","startDate":"2025-04-03","endDate":"2025-04-03","contracts":[{"id":"92f38c8c-cdd3-461b-ad04-43711c48956b","holidays":[],"timeEvaluation":[{"date":"2025-04-03","workscheduleId":"c06b726a-887e-43fd-9299-a8c1d26a6f74","workscheduleWorkshiftId":"47a8db62-b112-4dfe-8a66-fb918d79f765","workshiftId":"cc75b648-20ac-41fc-a6d2-bd62221effc4","timeEvaluationSituations":[],"clockingEvents":[],"intervals":[]}],"employee":{"id":"92f38c8c-cdd3-461b-ad04-43711c48956b","code":2,"person":{},"hireDate":"2022-01-01","employer":{"code":1}},"histories":{"syndicateHistories":[{"syndicate":{"code":1,"name":"Tecnologia","startNightHour":1320,"endNightHour":300},"startDate":"2023-01-01"}]},"schedules":{"bridges":[{"originDate":"2025-04-03","destinationDate":"2025-04-07"}]},"hourBankAccounts":[{"hourBank":{"code":5},"creationDate":"2024-01-01","extinctionDate":"2024-04-30"},{"hourBank":{"code":8},"creationDate":"2024-07-01"},{"hourBank":{"code":1},"creationDate":"2024-10-24"}]}],"database":{"workschedules":[{"id":"c06b726a-887e-43fd-9299-a8c1d26a6f74","code":10,"workload":0,"type":"RIGID","definitionType":"DSR","clockingRegisters":[]},{"id":"47a8db62-b112-4dfe-8a66-fb918d79f765","code":15,"workload":240,"type":"RIGID","definitionType":"NORMAL","clockingRegisters":[{"sequence":1,"clockingEvent":480,"toleranceBefore":480,"toleranceAfter":480,"mobilityBefore":0,"mobilityAfter":0,"clockingEventScheduleType":"MANDATORY","usingType":"MANDATORY_ENTRY_OR_EXIT"},{"sequence":2,"clockingEvent":720,"toleranceBefore":720,"toleranceAfter":720,"mobilityBefore":0,"mobilityAfter":0,"clockingEventScheduleType":"MANDATORY","usingType":"MANDATORY_ENTRY_OR_EXIT"}]}],"workshifts":[{"id":"cc75b648-20ac-41fc-a6d2-bd62221effc4","code":1,"name":"Geral","dsrMinutes":440,"weekMinutes":2640,"monthMinutes":13200}],"situations":[],"holidays":[]},"currentUser":{"name":"admin@allanalves.com.br"}}}';
|
|
51
|
+
|
|
52
|
+
let context = new Context({ body: inputRule });
|
|
53
|
+
const workscheduleWorkshift = context.contracts[0].timeEvaluation[0].workscheduleWorkshift;
|
|
54
|
+
|
|
55
|
+
// horário
|
|
56
|
+
expect(workscheduleWorkshift.code).toBe(15);
|
|
57
|
+
expect(workscheduleWorkshift.workload).toBe(240);
|
|
58
|
+
expect(workscheduleWorkshift.type).toBe(WorkscheduleType.RIGID);
|
|
59
|
+
expect(workscheduleWorkshift.definitionType).toBe(WorkscheduleDefinitionType.NORMAL);
|
|
60
|
+
// marcações do horário
|
|
61
|
+
expect(workscheduleWorkshift.clockingRegisters[0].sequence).toBe(1);
|
|
62
|
+
expect(workscheduleWorkshift.clockingRegisters[0].clockingEvent).toBe(480);
|
|
63
|
+
expect(workscheduleWorkshift.clockingRegisters[0].toleranceBefore).toBe(480);
|
|
64
|
+
expect(workscheduleWorkshift.clockingRegisters[0].toleranceAfter).toBe(480);
|
|
65
|
+
expect(workscheduleWorkshift.clockingRegisters[0].mobilityBefore).toBe(0);
|
|
66
|
+
expect(workscheduleWorkshift.clockingRegisters[0].mobilityAfter).toBe(0);
|
|
67
|
+
expect(workscheduleWorkshift.clockingRegisters[0].clockingEventScheduleType).toBe(ClockingEventScheduleType.MANDATORY);
|
|
68
|
+
expect(workscheduleWorkshift.clockingRegisters[0].usingType).toBe(UsingType.MANDATORY_ENTRY_OR_EXIT);
|
|
69
|
+
|
|
70
|
+
expect(workscheduleWorkshift.clockingRegisters[1].sequence).toBe(2);
|
|
71
|
+
expect(workscheduleWorkshift.clockingRegisters[1].clockingEvent).toBe(720);
|
|
72
|
+
expect(workscheduleWorkshift.clockingRegisters[1].toleranceBefore).toBe(720);
|
|
73
|
+
expect(workscheduleWorkshift.clockingRegisters[1].toleranceAfter).toBe(720);
|
|
74
|
+
expect(workscheduleWorkshift.clockingRegisters[1].mobilityBefore).toBe(0);
|
|
75
|
+
expect(workscheduleWorkshift.clockingRegisters[1].mobilityAfter).toBe(0);
|
|
76
|
+
expect(workscheduleWorkshift.clockingRegisters[1].clockingEventScheduleType).toBe(ClockingEventScheduleType.MANDATORY);
|
|
77
|
+
expect(workscheduleWorkshift.clockingRegisters[1].usingType).toBe(UsingType.MANDATORY_ENTRY_OR_EXIT);
|
|
78
|
+
});
|
|
79
|
+
});
|