@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.
Files changed (128) hide show
  1. package/.github/copilot-instructions.md +11 -0
  2. package/.github/workflows/release.yaml +10 -0
  3. package/.gitlab-ci.yml +68 -0
  4. package/CHANGELOG.md +274 -0
  5. package/README.doc.md +658 -0
  6. package/README.md +117 -0
  7. package/assets/favicon.ico +0 -0
  8. package/catalog-info.yaml +19 -0
  9. package/jest.config.js +17 -0
  10. package/package.json +48 -0
  11. package/prompt.md +15 -0
  12. package/run_build_win.bat +1 -0
  13. package/run_link.bat +3 -0
  14. package/run_test.bat +1 -0
  15. package/sonar-project.properties +21 -0
  16. package/src/data/changes/changes.ts +92 -0
  17. package/src/data/context/context.ts +251 -0
  18. package/src/data/context/contextReference.ts +376 -0
  19. package/src/data/contract/contract.ts +272 -0
  20. package/src/data/dataset/database.ts +130 -0
  21. package/src/data/dataset/dataset.ts +275 -0
  22. package/src/data/definition/timeEvaluationSituationDefinitionHistory.ts +1425 -0
  23. package/src/data/employee/employee.ts +434 -0
  24. package/src/data/foundation/companyBranch.ts +66 -0
  25. package/src/data/foundation/costCenter.ts +47 -0
  26. package/src/data/foundation/employer.ts +35 -0
  27. package/src/data/foundation/employmentRelationship.ts +63 -0
  28. package/src/data/foundation/holiday.ts +84 -0
  29. package/src/data/foundation/holidayGroup.ts +47 -0
  30. package/src/data/foundation/jobPosition.ts +73 -0
  31. package/src/data/foundation/person.ts +35 -0
  32. package/src/data/foundation/situation.ts +301 -0
  33. package/src/data/foundation/syndicate.ts +244 -0
  34. package/src/data/foundation/workschedule.ts +688 -0
  35. package/src/data/foundation/workshift.ts +647 -0
  36. package/src/data/foundation/workshiftBase.ts +113 -0
  37. package/src/data/histories/companyBranchHistory.ts +128 -0
  38. package/src/data/histories/costCenterHistory.ts +114 -0
  39. package/src/data/histories/employmentRelationshipHistory.ts +116 -0
  40. package/src/data/histories/histories.ts +419 -0
  41. package/src/data/histories/jobPositionHistory.ts +117 -0
  42. package/src/data/histories/leaveHistory.ts +227 -0
  43. package/src/data/histories/timeEvaluationHistory.ts +191 -0
  44. package/src/data/histories/workshiftHistory.ts +66 -0
  45. package/src/data/hourBank/hourBank.ts +43 -0
  46. package/src/data/hourBank/hourBankAccount.ts +77 -0
  47. package/src/data/log/log.ts +38 -0
  48. package/src/data/schedules/bridge.ts +84 -0
  49. package/src/data/schedules/compensation.ts +332 -0
  50. package/src/data/schedules/overtimeAuthorization.ts +174 -0
  51. package/src/data/schedules/readiness.ts +150 -0
  52. package/src/data/schedules/schedules.ts +398 -0
  53. package/src/data/schedules/workscheduleChange.ts +91 -0
  54. package/src/data/schedules/workshiftChange.ts +76 -0
  55. package/src/data/timeEvaluation/adjustmentReason.ts +46 -0
  56. package/src/data/timeEvaluation/clockingEvent.ts +198 -0
  57. package/src/data/timeEvaluation/estimatedHours.ts +245 -0
  58. package/src/data/timeEvaluation/interval.ts +568 -0
  59. package/src/data/timeEvaluation/separatedHours.ts +134 -0
  60. package/src/data/timeEvaluation/timeEvaluation.ts +1540 -0
  61. package/src/data/timeEvaluation/timeEvaluationSituation.ts +154 -0
  62. package/src/data/user/user.ts +44 -0
  63. package/src/index.ts +60 -0
  64. package/src/test/builder/bridgeBuilder.builder.ts +28 -0
  65. package/src/test/builder/clockingEvent.builder.ts +49 -0
  66. package/src/test/builder/companyBranchHistoryBuilder.ts +29 -0
  67. package/src/test/builder/compensation.builder.ts +84 -0
  68. package/src/test/builder/contextReference.builder.ts +69 -0
  69. package/src/test/builder/costCenterHistoryBuilder.ts +29 -0
  70. package/src/test/builder/database.builder.ts +21 -0
  71. package/src/test/builder/datasetBuilder.ts +111 -0
  72. package/src/test/builder/dateIntervalBuilder.ts +25 -0
  73. package/src/test/builder/employee.builder.ts +91 -0
  74. package/src/test/builder/employmentRelationshipBuilder.ts +35 -0
  75. package/src/test/builder/employmentRelationshipHistoryBuilder.ts +29 -0
  76. package/src/test/builder/historiesBuilder.ts +56 -0
  77. package/src/test/builder/holiday.builder.ts +44 -0
  78. package/src/test/builder/hourBankAccountBuilder.ts +77 -0
  79. package/src/test/builder/hourBankBuilder.ts +32 -0
  80. package/src/test/builder/interval.builder.ts +113 -0
  81. package/src/test/builder/jobPositionHistoryBuilder.ts +29 -0
  82. package/src/test/builder/overtimeAuthorization.builder.ts +42 -0
  83. package/src/test/builder/readinessBuilder.builder.ts +57 -0
  84. package/src/test/builder/schedules.builder.ts +126 -0
  85. package/src/test/builder/situation.builder.ts +59 -0
  86. package/src/test/builder/syndicate.builder.ts +96 -0
  87. package/src/test/builder/syndicateHistoryBuilder.ts +33 -0
  88. package/src/test/builder/timeEvaluation.builder.ts +138 -0
  89. package/src/test/builder/timeEvaluationHistory.builder.ts +49 -0
  90. package/src/test/builder/timeEvaluationSituation.builder.ts +34 -0
  91. package/src/test/builder/workschedule.builder.ts +96 -0
  92. package/src/test/builder/workshift.builder.ts +179 -0
  93. package/src/test/builder/workshiftBuilder.ts +55 -0
  94. package/src/test/data/clockingEvent.spec.ts +56 -0
  95. package/src/test/data/context.spec.ts +176 -0
  96. package/src/test/data/currentUser.spec.ts +11 -0
  97. package/src/test/data/dataset.spec.ts +144 -0
  98. package/src/test/data/employee/employee.spec.ts +20 -0
  99. package/src/test/data/employmentRelationship/employmentRelationship.spec.ts +48 -0
  100. package/src/test/data/estimatedHours/estimatedHours.spec.ts +96 -0
  101. package/src/test/data/histories/costCenterHistory.spec.ts +32 -0
  102. package/src/test/data/histories/histories.spec.ts +306 -0
  103. package/src/test/data/holyday.spec.ts +89 -0
  104. package/src/test/data/hourBank/hourBank.spec.ts +48 -0
  105. package/src/test/data/hourBank/hourBankAccount.spec.ts +32 -0
  106. package/src/test/data/schedules/bridge.spec.ts +13 -0
  107. package/src/test/data/schedules/compesation.spect.ts +89 -0
  108. package/src/test/data/schedules/overtimeAuthorization.spec.ts +52 -0
  109. package/src/test/data/schedules/readiness.spec.ts +64 -0
  110. package/src/test/data/schedules/schedules.spec.ts +134 -0
  111. package/src/test/data/schedules/workscheduleChange.spec.ts +21 -0
  112. package/src/test/data/syndicate/syndicate.spec.ts +51 -0
  113. package/src/test/data/timeEvaluation.spec.ts +1057 -0
  114. package/src/test/data/timeEvaluationDefinition.spec.ts +144 -0
  115. package/src/test/data/workschedule/workschedule.spec.ts +194 -0
  116. package/src/test/data/workshift/workshift.spec.ts +79 -0
  117. package/src/test/utils/date.utils.spec.ts +198 -0
  118. package/src/test/utils/dateIntervalUtils.spec.ts +210 -0
  119. package/src/test/utils/object.utils.spec.ts +83 -0
  120. package/src/utils/dateIntervalUtils.ts +284 -0
  121. package/src/utils/dateUtils.ts +456 -0
  122. package/src/utils/decompressGzipLambda.ts +15 -0
  123. package/src/utils/object.utils.ts +156 -0
  124. package/trivy/vulnerabilities_scan.json +1160 -0
  125. package/tsconfig.json +32 -0
  126. package/tsconfig.spec.json +21 -0
  127. package/tslint.json +92 -0
  128. package/typedoc.json +22 -0
@@ -0,0 +1,176 @@
1
+ import { Context } from "../../data/context/context";
2
+ import { compressGzipSync } from "../../utils/decompressGzipLambda";
3
+ import { ChangesType } from "../../data/changes/changes";
4
+
5
+ describe('Context', () => {
6
+
7
+ it('Basic data', () => {
8
+
9
+ let inputRule = '{"version":"1.0.0","input":{"batchId":"b0d3649a-28e8-4dcb-845c-b9a6307661ee","processType":"EVALUATE","startDate":"2025-04-09","endDate":"2025-04-09","contracts":[{"id":"943a66fb-3636-456f-b7ba-e3e1526e8892","holidays":[],"timeEvaluation":[{"date":"2025-04-09","workschedule":{"code":9998,"previousHours":{"dailyHours":0,"nightlyHours":0}},"workscheduleWorkshift":{},"workshift":{"code":1,"name":"08:00 1200-1330 1800/Hor.Rígid","dsrMinutes":440,"weekMinutes":2640,"monthMinutes":13200},"timeEvaluationSituations":[],"clockingEvents":[],"intervals":[]}],"employee":{"id":"943a66fb-3636-456f-b7ba-e3e1526e8892","code":1,"person":{},"hireDate":"2022-01-01","employeer":{"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":[],"holidays":[]},"currentUser":{"name":"admin@allanalves.com.br"}}}';
10
+
11
+ let context = new Context({ body: inputRule });
12
+ expect(context.batchId).toBe('b0d3649a-28e8-4dcb-845c-b9a6307661ee');
13
+ expect(context.startDate).toEqual(new Date('2025-04-09'));
14
+ expect(context.endDate).toEqual(new Date('2025-04-09'));
15
+ });
16
+
17
+
18
+ it('Sem schedule', () => {
19
+
20
+ let inputRule = '{"version":"1.0.0","input":{"batchId":"c1dd3808-22b8-4982-a1d7-fe72e993d2ad","processType":"EVALUATE","startDate":"2025-04-06","endDate":"2025-04-06","contracts":[{"id":"943a66fb-3636-456f-b7ba-e3e1526e8892","holidays":[],"timeEvaluation":[{"date":"2025-04-06","workschedule":{"code":9999,"previousHours":{"dailyHours":0,"nightlyHours":0}},"workscheduleWorkshift":{},"workshift":{"code":1,"name":"08:00 1200-1330 1800/Hor.Rígid","dsrMinutes":440,"weekMinutes":2640,"monthMinutes":13200},"timeEvaluationSituations":[],"clockingEvents":[],"intervals":[]}],"employee":{"id":"943a66fb-3636-456f-b7ba-e3e1526e8892","code":1,"person":{},"hireDate":"2022-01-01","hireDate":"2022-01-01","employeer":{"code":1}},"histories":{"syndicateHistories":[{"syndicate":{"code":1,"name":"Sind. Indústria Blumenau","startNightHour":1320,"endNightHour":300},"startDate":"2020-01-01"}]}}],"database":{"situations":[],"holidays":[]},"currentUser":{"name":"admin@allanalves.com.br"}}}';
21
+
22
+ let context = new Context({ body: inputRule });
23
+
24
+ expect(context.batchId).toBe('c1dd3808-22b8-4982-a1d7-fe72e993d2ad');
25
+ });
26
+
27
+
28
+ it('Gzip', () => {
29
+
30
+ let inputRule = '{"version":"1.0.0","input":{"batchId":"c1dd3808-22b8-4982-a1d7-fe72e993d2ad","processType":"EVALUATE","startDate":"2025-04-06","endDate":"2025-04-06","contracts":[{"id":"943a66fb-3636-456f-b7ba-e3e1526e8892","holidays":[],"timeEvaluation":[{"date":"2025-04-06","workschedule":{"code":9999,"previousHours":{"dailyHours":0,"nightlyHours":0}},"workscheduleWorkshift":{},"workshift":{"code":1,"name":"08:00 1200-1330 1800/Hor.Rígid","dsrMinutes":440,"weekMinutes":2640,"monthMinutes":13200},"timeEvaluationSituations":[],"clockingEvents":[],"intervals":[]}],"employee":{"id":"943a66fb-3636-456f-b7ba-e3e1526e8892","code":1,"person":{},"hireDate":"2022-01-01","employeer":{"code":1}},"histories":{"syndicateHistories":[{"syndicate":{"code":1,"name":"Sind. Indústria Blumenau","startNightHour":1320,"endNightHour":300},"startDate":"2020-01-01"}]}}],"database":{"situations":[],"holidays":[]},"currentUser":{"name":"admin@allanalves.com.br"}}}';
31
+
32
+ let context = new Context({
33
+ body: compressGzipSync(inputRule),
34
+ headers: {
35
+ 'Content-Encoding': 'gzip'
36
+ },
37
+ isBase64Encoded: false
38
+ });
39
+
40
+ expect(context.batchId).toBe('c1dd3808-22b8-4982-a1d7-fe72e993d2ad');
41
+ });
42
+
43
+
44
+ it('TimeEvaluationFunctions', () => {
45
+
46
+ const inputRule = '{"version":"1.0.0","input":{"batchId":"5897c26d-8875-40f6-ab02-27a36cc59632","processType":"EVALUATE","startDate":"2025-04-22","endDate":"2025-04-22","contracts":[{"id":"92f38c8c-cdd3-461b-ad04-43711c48956b","holidays":[],"timeEvaluation":[{"date":"2025-04-22","workscheduleId":"e7875638-42b4-479d-a825-10fa3b13fbae","workscheduleWorkshiftId":"e7875638-42b4-479d-a825-10fa3b13fbae","workshiftId":"47971e5f-3d1a-4494-8cf6-328c7dfa5394","timeEvaluationSituations":[],"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-22T07:09:00","clockingEventEnd":"2025-04-22T08:00:00","type":"OVERTIME","subType":"ENTER","situationCode":0,"situationReasonCode":0,"justifiedDays":0,"positionWorkingPart":{"workingHours":1,"part":1},"isNightly":false,"isOvertimeAuthorized":false,"isTolerancePeriod":false,"inClockingEventTolerance":false},{"clockingEventStart":"2025-04-22T08:00:00","clockingEventEnd":"2025-04-22T09:00:00","type":"WORKING","situationCode":0,"situationReasonCode":0,"justifiedDays":0,"positionWorkingPart":{"workingHours":1,"part":1},"isNightly":false,"isOvertimeAuthorized":false,"isTolerancePeriod":false,"inClockingEventTolerance":false},{"clockingEventStart":"2025-04-22T09:00:00","clockingEventEnd":"2025-04-22T09:30:00","type":"SNACK","situationCode":0,"situationReasonCode":0,"justifiedDays":0,"positionWorkingPart":{"workingHours":1,"part":1},"isNightly":false,"isOvertimeAuthorized":false,"isTolerancePeriod":false,"inClockingEventTolerance":false},{"clockingEventStart":"2025-04-22T09:30:00","clockingEventEnd":"2025-04-22T11:57:00","type":"WORKING","situationCode":0,"situationReasonCode":0,"justifiedDays":0,"positionWorkingPart":{"workingHours":1,"part":1},"isNightly":false,"isOvertimeAuthorized":false,"isTolerancePeriod":false,"inClockingEventTolerance":false},{"clockingEventStart":"2025-04-22T11:57:00","clockingEventEnd":"2025-04-22T12:00:00","type":"ABSENCE","subType":"EARLY_EXIT","situationCode":0,"situationReasonCode":0,"justifiedDays":0,"positionWorkingPart":{"workingHours":1,"part":1},"isNightly":false,"isOvertimeAuthorized":false,"isTolerancePeriod":false,"inClockingEventTolerance":false},{"clockingEventStart":"2025-04-22T12:00:00","clockingEventEnd":"2025-04-22T13:30:00","type":"MEAL","situationCode":0,"situationReasonCode":0,"justifiedDays":0,"positionWorkingPart":{"workingHours":1,"part":1},"isNightly":false,"isOvertimeAuthorized":false,"isTolerancePeriod":false,"inClockingEventTolerance":false},{"clockingEventStart":"2025-04-22T13:30:00","clockingEventEnd":"2025-04-22T13:32:00","type":"ABSENCE","subType":"DELAY","situationCode":0,"situationReasonCode":0,"justifiedDays":0,"positionWorkingPart":{"workingHours":1,"part":2},"isNightly":false,"isOvertimeAuthorized":false,"isTolerancePeriod":false,"inClockingEventTolerance":false},{"clockingEventStart":"2025-04-22T13:32:00","clockingEventEnd":"2025-04-22T16:00:00","type":"WORKING","situationCode":0,"situationReasonCode":0,"justifiedDays":0,"positionWorkingPart":{"workingHours":1,"part":2},"isNightly":false,"isOvertimeAuthorized":false,"isTolerancePeriod":false,"inClockingEventTolerance":false},{"clockingEventStart":"2025-04-22T16:00:00","clockingEventEnd":"2025-04-22T16:15:00","type":"SNACK","situationCode":0,"situationReasonCode":0,"justifiedDays":0,"positionWorkingPart":{"workingHours":1,"part":2},"isNightly":false,"isOvertimeAuthorized":false,"isTolerancePeriod":false,"inClockingEventTolerance":false},{"clockingEventStart":"2025-04-22T16:15:00","clockingEventEnd":"2025-04-22T18:00:00","type":"WORKING","situationCode":0,"situationReasonCode":0,"justifiedDays":0,"positionWorkingPart":{"workingHours":1,"part":2},"isNightly":false,"isOvertimeAuthorized":false,"isTolerancePeriod":false,"inClockingEventTolerance":false},{"clockingEventStart":"2025-04-22T18:00:00","clockingEventEnd":"2025-04-22T20:00:00","type":"OVERTIME","subType":"CHECKOUT","situationCode":0,"situationReasonCode":0,"justifiedDays":0,"positionWorkingPart":{"workingHours":1,"part":2},"isNightly":false,"isOvertimeAuthorized":false,"isTolerancePeriod":false,"inClockingEventTolerance":false}],"syndicateKey":"1"}],"employee":{"id":"92f38c8c-cdd3-461b-ad04-43711c48956b","code":2,"person":{"name":"Franky"},"hireDate":"2022-01-01","employmentRelationship":{"code":"1","contractType":"EMPLOYEE"},"employer":{"code":1},"jobPositionCode":"2","companyBranchCode":1,"workshiftCode":1,"workshiftGroupCode":4},"histories":{"jobPositionHistories":[{"startDate":"2022-01-01","jobPositionKey":"1_2"}],"companyBranchHistories":[{"startDate":"2022-08-08","companyBranchKey":"1_1"}]},"schedules":{"bridges":[{"originDate":"2025-04-25","destinationDate":"2025-04-26"}]},"hourBankAccounts":[{"hourBank":{"code":5},"creationDate":"2024-01-01","extinctionDate":"2024-04-30"},{"hourBank":{"code":1},"creationDate":"2024-10-24"},{"hourBank":{"code":8},"creationDate":"2024-07-01"}]}],"database":{"situations":[{"id":"209c328d-3fe8-446a-b690-846d75ef5ed5","code":1,"type":"WORKING","exception":false,"complementarySituationId":"209c328d-3fe8-446a-b690-846d75ef5ed5","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":"74072aa1-e4b0-4f2a-8573-72b7ad9f1cf5","code":17,"type":"ABSENCES","exception":true,"complementarySituationId":"74072aa1-e4b0-4f2a-8573-72b7ad9f1cf5","daytime":true},{"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":"aa1506e9-edd3-44bd-893c-56d00d3c6ca3","code":51,"type":"WORKING","exception":false,"complementarySituationId":"aa1506e9-edd3-44bd-893c-56d00d3c6ca3","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":3,"startDate":"2023-01-30","workSituationId":"209c328d-3fe8-446a-b690-846d75ef5ed5","nightShiftWorkPremiumId":"aa1506e9-edd3-44bd-893c-56d00d3c6ca3","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":"74072aa1-e4b0-4f2a-8573-72b7ad9f1cf5","tardinessSituationId":"74072aa1-e4b0-4f2a-8573-72b7ad9f1cf5","intermediateLeaveSituationId":"74072aa1-e4b0-4f2a-8573-72b7ad9f1cf5","earlyLeaveSituationId":"74072aa1-e4b0-4f2a-8573-72b7ad9f1cf5","absenceSituationOnRelayScheduleHolidaysId":"74072aa1-e4b0-4f2a-8573-72b7ad9f1cf5","percentageNextDay":true,"normalOvertimeSeparationLimit":0,"separateOvertimeAfterConvertingNightShiftHours":false,"overtimeBeforeId":"e75ba021-148e-4f36-bb3e-13e024cc1908","overtimeEntryId":"e75ba021-148e-4f36-bb3e-13e024cc1908","overtimeDuringMealId":"e75ba021-148e-4f36-bb3e-13e024cc1908","leaveOvertimeId":"e75ba021-148e-4f36-bb3e-13e024cc1908","overtimeAfterId":"2a2fae76-cf7e-498b-9107-0166f6e906ef","overtimeSeparationLimitDuringRest":0,"overtimeDuringRestId":"2a2fae76-cf7e-498b-9107-0166f6e906ef","overtimeSeparationLimitDuringCompensatedDays":0,"overtimeOnCompensatedDaysId":"2a2fae76-cf7e-498b-9107-0166f6e906ef","overtimeSeparationLimitDuringHoliday":0,"overtimeDuringHolidayId":"2a2fae76-cf7e-498b-9107-0166f6e906ef","overtimeSeparationLimitDuringDayOff":0,"overtimeDuringDayOffId":"2a2fae76-cf7e-498b-9107-0166f6e906ef"}],"jobPositions":[{"key":"1_2","code":2,"structureCode":1}],"workschedules":[{"id":"e7875638-42b4-479d-a825-10fa3b13fbae","code":1,"workload":465,"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":540,"toleranceBefore":540,"toleranceAfter":540,"mobilityBefore":0,"mobilityAfter":0,"intervalType":"RIGID","clockingEventScheduleType":"NOM_MANDATORY","usingType":"NON_MANDATORY_SNACK"},{"sequence":3,"clockingEvent":570,"toleranceBefore":570,"toleranceAfter":570,"mobilityBefore":0,"mobilityAfter":0,"intervalType":"RIGID","clockingEventScheduleType":"NOM_MANDATORY","usingType":"NON_MANDATORY_SNACK"},{"sequence":4,"clockingEvent":720,"toleranceBefore":720,"toleranceAfter":720,"mobilityBefore":0,"mobilityAfter":0,"intervalType":"RIGID","clockingEventScheduleType":"MANDATORY","usingType":"MANDATORY_MEAL"},{"sequence":5,"clockingEvent":810,"toleranceBefore":810,"toleranceAfter":810,"mobilityBefore":0,"mobilityAfter":0,"intervalType":"RIGID","clockingEventScheduleType":"MANDATORY","usingType":"MANDATORY_MEAL"},{"sequence":6,"clockingEvent":960,"toleranceBefore":960,"toleranceAfter":960,"mobilityBefore":0,"mobilityAfter":0,"intervalType":"RIGID","clockingEventScheduleType":"NOM_MANDATORY","usingType":"NON_MANDATORY_SNACK"},{"sequence":7,"clockingEvent":975,"toleranceBefore":975,"toleranceAfter":975,"mobilityBefore":0,"mobilityAfter":0,"intervalType":"RIGID","clockingEventScheduleType":"NOM_MANDATORY","usingType":"NON_MANDATORY_SNACK"},{"sequence":8,"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":0}}],"workshifts":[{"id":"47971e5f-3d1a-4494-8cf6-328c7dfa5394","code":1,"type":"PERMANENT","rotationWorkShift":true,"extensionNightHours":true,"dsrMinutes":440,"weekMinutes":2640,"monthMinutes":13200,"timeShiftType":"GENERAL","workshiftGroups":[{"code":1,"baseDate":"2022-08-01"},{"code":2,"baseDate":"2022-08-08"},{"code":3,"baseDate":"2022-08-15"},{"code":4,"baseDate":"1901-01-08"},{"code":4,"baseDate":"2022-08-22"},{"code":5,"baseDate":"2023-03-22"},{"code":5,"baseDate":"2022-08-29"},{"code":6,"baseDate":"2022-09-05"}],"workshiftDetails":[{"holidayGroup":{"code":2},"holidayType":"OWN","startDate":"2022-08-12"}]}],"companyBranches":[{"key":"1_1","code":1}],"syndicates":[{"key":"1","code":1,"nightStartHour":1320,"nightEndHour":300,"minimumInterval46Hours":30,"minimumInterval6Hours":90,"minimumWorkDuration6Hours":361}]},"currentUser":{"name":"admin@allanalves.com.br"}}}';
47
+
48
+ const context = new Context({ body: inputRule });
49
+ const timeEvaluation = context.contracts[0].timeEvaluation[0];
50
+
51
+ /************************* getOvertimeByRangeTime *******************************************/
52
+ // tem horas extras das 7:09 as 8:00 e das 18:00 as 20:00
53
+
54
+ // não traz horas extras
55
+ let startTime = 8 * 60;
56
+ let endTime = 18 * 60;
57
+ let overttime = timeEvaluation.getOvertimeByRangeTime(startTime, endTime);
58
+ expect(overttime.total).toEqual(0);
59
+
60
+ // traz todas as horas extras
61
+ startTime = 0;
62
+ endTime = 24 * 60;
63
+ overttime = timeEvaluation.getOvertimeByRangeTime(startTime, endTime);
64
+ expect(overttime.total).toEqual(171);
65
+
66
+ // traz hora extra somente antes das 8hrs
67
+ startTime = 5 * 60;
68
+ endTime = 8 * 60;
69
+ overttime = timeEvaluation.getOvertimeByRangeTime(startTime, endTime);
70
+ expect(overttime.total).toEqual(51);
71
+
72
+ // traz hora extra somente após as 18hrs
73
+ startTime = 18 * 60;
74
+ endTime = 22 * 60;
75
+ overttime = timeEvaluation.getOvertimeByRangeTime(startTime, endTime);
76
+ expect(overttime.total).toEqual(120);
77
+ /*******************************************************************************************/
78
+ });
79
+
80
+
81
+
82
+
83
+
84
+
85
+ it('estimatedHours', () => {
86
+
87
+ let inputRule = '{"version":"1.0.0","input":{"batchId":"2550c82c-beb1-45a5-8839-2fd90e44a646","processType":"EVALUATE","startDate":"2025-04-22","endDate":"2025-04-22","contracts":[{"id":"92f38c8c-cdd3-461b-ad04-43711c48956b","holidays":[],"timeEvaluation":[{"date":"2025-04-22","workschedule":{"code":1,"workload":465,"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":540,"toleranceBefore":540,"toleranceAfter":540,"mobilityBefore":0,"mobilityAfter":0,"intervalType":"RIGID","clockingEventScheduleType":"NOM_MANDATORY","usingType":"NON_MANDATORY_SNACK"},{"sequence":3,"clockingEvent":570,"toleranceBefore":570,"toleranceAfter":570,"mobilityBefore":0,"mobilityAfter":0,"intervalType":"RIGID","clockingEventScheduleType":"NOM_MANDATORY","usingType":"NON_MANDATORY_SNACK"},{"sequence":4,"clockingEvent":720,"toleranceBefore":720,"toleranceAfter":720,"mobilityBefore":0,"mobilityAfter":0,"intervalType":"RIGID","clockingEventScheduleType":"MANDATORY","usingType":"MANDATORY_MEAL"},{"sequence":5,"clockingEvent":810,"toleranceBefore":810,"toleranceAfter":810,"mobilityBefore":0,"mobilityAfter":0,"intervalType":"RIGID","clockingEventScheduleType":"MANDATORY","usingType":"MANDATORY_MEAL"},{"sequence":6,"clockingEvent":960,"toleranceBefore":960,"toleranceAfter":960,"mobilityBefore":0,"mobilityAfter":0,"intervalType":"RIGID","clockingEventScheduleType":"NOM_MANDATORY","usingType":"NON_MANDATORY_SNACK"},{"sequence":7,"clockingEvent":975,"toleranceBefore":975,"toleranceAfter":975,"mobilityBefore":0,"mobilityAfter":0,"intervalType":"RIGID","clockingEventScheduleType":"NOM_MANDATORY","usingType":"NON_MANDATORY_SNACK"},{"sequence":8,"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":0}},"workscheduleWorkshift":{"code":1,"workload":465,"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":540,"toleranceBefore":540,"toleranceAfter":540,"mobilityBefore":0,"mobilityAfter":0,"intervalType":"RIGID","clockingEventScheduleType":"NOM_MANDATORY","usingType":"NON_MANDATORY_SNACK"},{"sequence":3,"clockingEvent":570,"toleranceBefore":570,"toleranceAfter":570,"mobilityBefore":0,"mobilityAfter":0,"intervalType":"RIGID","clockingEventScheduleType":"NOM_MANDATORY","usingType":"NON_MANDATORY_SNACK"},{"sequence":4,"clockingEvent":720,"toleranceBefore":720,"toleranceAfter":720,"mobilityBefore":0,"mobilityAfter":0,"intervalType":"RIGID","clockingEventScheduleType":"MANDATORY","usingType":"MANDATORY_MEAL"},{"sequence":5,"clockingEvent":810,"toleranceBefore":810,"toleranceAfter":810,"mobilityBefore":0,"mobilityAfter":0,"intervalType":"RIGID","clockingEventScheduleType":"MANDATORY","usingType":"MANDATORY_MEAL"},{"sequence":6,"clockingEvent":960,"toleranceBefore":960,"toleranceAfter":960,"mobilityBefore":0,"mobilityAfter":0,"intervalType":"RIGID","clockingEventScheduleType":"NOM_MANDATORY","usingType":"NON_MANDATORY_SNACK"},{"sequence":7,"clockingEvent":975,"toleranceBefore":975,"toleranceAfter":975,"mobilityBefore":0,"mobilityAfter":0,"intervalType":"RIGID","clockingEventScheduleType":"NOM_MANDATORY","usingType":"NON_MANDATORY_SNACK"},{"sequence":8,"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":0}},"workshift":{"code":1,"type":"PERMANENT","rotationWorkShift":true,"extensionNightHours":true,"dsrMinutes":440,"weekMinutes":2640,"monthMinutes":13200,"timeShiftType":"GENERAL","workshiftGroups":[{"code":1,"baseDate":"2022-08-01"},{"code":2,"baseDate":"2022-08-08"},{"code":3,"baseDate":"2022-08-15"},{"code":4,"baseDate":"1901-01-08"},{"code":4,"baseDate":"2022-08-22"},{"code":5,"baseDate":"2023-03-22"},{"code":5,"baseDate":"2022-08-29"},{"code":6,"baseDate":"2022-09-05"}],"workshiftDetails":[{"holidayGroup":{"code":2},"holidayType":"OWN","startDate":"2022-08-12"}]},"timeEvaluationSituations":[{"situation":1,"numberOfHours":460},{"situation":17,"numberOfHours":5},{"situation":20,"numberOfHours":171}],"clockingEvents":[{"clockingEventDate":"2025-04-22","clockingEventTime":429,"identification":1002,"zoneOffset":"0"},{"clockingEventDate":"2025-04-22","clockingEventTime":717,"identification":1002,"zoneOffset":"0"},{"clockingEventDate":"2025-04-22","clockingEventTime":812,"identification":1002,"zoneOffset":"0"},{"clockingEventDate":"2025-04-22","clockingEventTime":1200,"identification":1002,"zoneOffset":"0"}],"intervals":[{"clockingEventStart":"2025-04-22T07:09:00","clockingEventEnd":"2025-04-22T08:00:00","type":"OVERTIME","subType":"ENTER","typeIntervalTolerance":"OVERTIME","subTypeIntervalTolerance":"ENTER","situationCode":0,"positionWorkingParte":{"workingHours":1,"part":1},"isNightly":false,"isOvertimeAuthorized":false,"withinClockingEventTolerance":false,"isTolerancePeriod":false,"inClockingEventTolerance":false},{"clockingEventStart":"2025-04-22T08:00:00","clockingEventEnd":"2025-04-22T09:00:00","type":"WORKING","subType":"DAY_OFF","typeIntervalTolerance":"WORKING","subTypeIntervalTolerance":"DAY_OFF","situationCode":0,"positionWorkingParte":{"workingHours":1,"part":1},"isNightly":false,"isOvertimeAuthorized":false,"withinClockingEventTolerance":false,"isTolerancePeriod":false,"inClockingEventTolerance":false},{"clockingEventStart":"2025-04-22T09:00:00","clockingEventEnd":"2025-04-22T09:30:00","type":"SNACK","subType":"DAY_OFF","typeIntervalTolerance":"SNACK","subTypeIntervalTolerance":"DAY_OFF","situationCode":0,"positionWorkingParte":{"workingHours":1,"part":1},"isNightly":false,"isOvertimeAuthorized":false,"withinClockingEventTolerance":false,"isTolerancePeriod":false,"inClockingEventTolerance":false},{"clockingEventStart":"2025-04-22T09:30:00","clockingEventEnd":"2025-04-22T11:57:00","type":"WORKING","subType":"DAY_OFF","typeIntervalTolerance":"WORKING","subTypeIntervalTolerance":"DAY_OFF","situationCode":0,"positionWorkingParte":{"workingHours":1,"part":1},"isNightly":false,"isOvertimeAuthorized":false,"withinClockingEventTolerance":false,"isTolerancePeriod":false,"inClockingEventTolerance":false},{"clockingEventStart":"2025-04-22T11:57:00","clockingEventEnd":"2025-04-22T12:00:00","type":"ABSENCE","subType":"ENTER","typeIntervalTolerance":"ABSENCE","subTypeIntervalTolerance":"ENTER","situationCode":0,"positionWorkingParte":{"workingHours":1,"part":1},"isNightly":false,"isOvertimeAuthorized":false,"withinClockingEventTolerance":false,"isTolerancePeriod":false,"inClockingEventTolerance":false},{"clockingEventStart":"2025-04-22T12:00:00","clockingEventEnd":"2025-04-22T13:30:00","type":"MEAL","subType":"DAY_OFF","typeIntervalTolerance":"MEAL","subTypeIntervalTolerance":"DAY_OFF","situationCode":0,"positionWorkingParte":{"workingHours":1,"part":1},"isNightly":false,"isOvertimeAuthorized":false,"withinClockingEventTolerance":false,"isTolerancePeriod":false,"inClockingEventTolerance":false},{"clockingEventStart":"2025-04-22T13:30:00","clockingEventEnd":"2025-04-22T13:32:00","type":"ABSENCE","subType":"BEFORE_WORKING","typeIntervalTolerance":"ABSENCE","subTypeIntervalTolerance":"BEFORE_WORKING","situationCode":0,"positionWorkingParte":{"workingHours":1,"part":2},"isNightly":false,"isOvertimeAuthorized":false,"withinClockingEventTolerance":false,"isTolerancePeriod":false,"inClockingEventTolerance":false},{"clockingEventStart":"2025-04-22T13:32:00","clockingEventEnd":"2025-04-22T16:00:00","type":"WORKING","subType":"DAY_OFF","typeIntervalTolerance":"WORKING","subTypeIntervalTolerance":"DAY_OFF","situationCode":0,"positionWorkingParte":{"workingHours":1,"part":2},"isNightly":false,"isOvertimeAuthorized":false,"withinClockingEventTolerance":false,"isTolerancePeriod":false,"inClockingEventTolerance":false},{"clockingEventStart":"2025-04-22T16:00:00","clockingEventEnd":"2025-04-22T16:15:00","type":"SNACK","subType":"DAY_OFF","typeIntervalTolerance":"SNACK","subTypeIntervalTolerance":"DAY_OFF","situationCode":0,"positionWorkingParte":{"workingHours":1,"part":2},"isNightly":false,"isOvertimeAuthorized":false,"withinClockingEventTolerance":false,"isTolerancePeriod":false,"inClockingEventTolerance":false},{"clockingEventStart":"2025-04-22T16:15:00","clockingEventEnd":"2025-04-22T18:00:00","type":"WORKING","subType":"DAY_OFF","typeIntervalTolerance":"WORKING","subTypeIntervalTolerance":"DAY_OFF","situationCode":0,"positionWorkingParte":{"workingHours":1,"part":2},"isNightly":false,"isOvertimeAuthorized":false,"withinClockingEventTolerance":false,"isTolerancePeriod":false,"inClockingEventTolerance":false},{"clockingEventStart":"2025-04-22T18:00:00","clockingEventEnd":"2025-04-22T20:00:00","type":"OVERTIME","subType":"CHECKOUT","typeIntervalTolerance":"OVERTIME","subTypeIntervalTolerance":"CHECKOUT","situationCode":0,"positionWorkingParte":{"workingHours":1,"part":2},"isNightly":false,"isOvertimeAuthorized":false,"withinClockingEventTolerance":false,"isTolerancePeriod":false,"inClockingEventTolerance":false}],"situationDefinitionKey":"3_2023-01-30_null","estimatedHours":{"meal":[{"dailyHours":90,"nightlyHours":0}],"snack":[{"dailyHours":30,"nightlyHours":0},{"dailyHours":15,"nightlyHours":0}],"work":[{"dailyHours":60,"nightlyHours":0},{"dailyHours":150,"nightlyHours":0},{"dailyHours":150,"nightlyHours":0},{"dailyHours":105,"nightlyHours":0}]}}],"employee":{"id":"92f38c8c-cdd3-461b-ad04-43711c48956b","code":2,"person":{"name":"Franky"},"hireDate":"2022-01-01","employmentRelationship":{"code":"1","contractType":"EMPLOYEE"},"employer":{"code":1},"jobPositionCode":"2","companyBranchCode":1,"workshiftCode":1,"workshiftGroupCode":4},"histories":{"jobPositionHistories":[{"startDate":"2022-01-01","jobPositionKey":"1_2"}],"companyBranchHistories":[{"startDate":"2022-08-08","companyBranchKey":"1_1"}]},"schedules":{"bridges":[{"originDate":"2025-04-25","destinationDate":"2025-04-26"}]},"hourBankAccounts":[{"hourBank":{"code":5},"creationDate":"2024-01-01","extinctionDate":"2024-04-30"},{"hourBank":{"code":1},"creationDate":"2024-10-24"},{"hourBank":{"code":8},"creationDate":"2024-07-01"}]}],"database":{"situations":[{"id":"209c328d-3fe8-446a-b690-846d75ef5ed5","code":1,"type":"WORKING","exception":false,"complementarySituationId":"209c328d-3fe8-446a-b690-846d75ef5ed5","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":"74072aa1-e4b0-4f2a-8573-72b7ad9f1cf5","code":17,"type":"ABSENCES","exception":true,"complementarySituationId":"74072aa1-e4b0-4f2a-8573-72b7ad9f1cf5","daytime":true},{"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":"aa1506e9-edd3-44bd-893c-56d00d3c6ca3","code":51,"type":"WORKING","exception":false,"complementarySituationId":"aa1506e9-edd3-44bd-893c-56d00d3c6ca3","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":3,"startDate":"2023-01-30","workSituationId":"209c328d-3fe8-446a-b690-846d75ef5ed5","nightShiftWorkPremiumId":"aa1506e9-edd3-44bd-893c-56d00d3c6ca3","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":"74072aa1-e4b0-4f2a-8573-72b7ad9f1cf5","tardinessSituationId":"74072aa1-e4b0-4f2a-8573-72b7ad9f1cf5","intermediateLeaveSituationId":"74072aa1-e4b0-4f2a-8573-72b7ad9f1cf5","earlyLeaveSituationId":"74072aa1-e4b0-4f2a-8573-72b7ad9f1cf5","absenceSituationOnRelayScheduleHolidaysId":"74072aa1-e4b0-4f2a-8573-72b7ad9f1cf5","percentageNextDay":true,"normalOvertimeSeparationLimit":0,"separateOvertimeAfterConvertingNightShiftHours":false,"overtimeBeforeId":"e75ba021-148e-4f36-bb3e-13e024cc1908","overtimeEntryId":"e75ba021-148e-4f36-bb3e-13e024cc1908","overtimeDuringMealId":"e75ba021-148e-4f36-bb3e-13e024cc1908","leaveOvertimeId":"e75ba021-148e-4f36-bb3e-13e024cc1908","overtimeAfterId":"2a2fae76-cf7e-498b-9107-0166f6e906ef","overtimeSeparationLimitDuringRest":0,"overtimeDuringRestId":"2a2fae76-cf7e-498b-9107-0166f6e906ef","overtimeSeparationLimitDuringCompensatedDays":0,"overtimeOnCompensatedDaysId":"2a2fae76-cf7e-498b-9107-0166f6e906ef","overtimeSeparationLimitDuringHoliday":0,"overtimeDuringHolidayId":"2a2fae76-cf7e-498b-9107-0166f6e906ef","overtimeSeparationLimitDuringDayOff":0,"overtimeDuringDayOffId":"2a2fae76-cf7e-498b-9107-0166f6e906ef"}],"jobPositions":[{"key":"1_2","code":2,"structureCode":1}],"companyBranches":[{"key":"1_1","code":1}]},"currentUser":{"name":"admin@allanalves.com.br"}}}';
88
+
89
+ const context = new Context({ body: inputRule });
90
+
91
+ const estimatedHours = context.contracts[0].timeEvaluation[0].estimatedHours;
92
+
93
+ // Testando as horas de refeição
94
+ expect(estimatedHours.meal.length).toBe(1);
95
+ expect(estimatedHours.meal[0].dailyHours).toBe(90);
96
+ expect(estimatedHours.meal[0].nightlyHours).toBe(0);
97
+
98
+ // Testando as horas de almoço
99
+ expect(estimatedHours.snack.length).toBe(2);
100
+ expect(estimatedHours.snack[0].dailyHours).toBe(30);
101
+ expect(estimatedHours.snack[0].nightlyHours).toBe(0);
102
+ expect(estimatedHours.snack[1].dailyHours).toBe(15);
103
+ expect(estimatedHours.snack[1].nightlyHours).toBe(0);
104
+
105
+ // Testando as horas de trabalho
106
+ expect(estimatedHours.work.length).toBe(4);
107
+ expect(estimatedHours.work[0].dailyHours).toBe(60);
108
+ expect(estimatedHours.work[0].nightlyHours).toBe(0);
109
+ expect(estimatedHours.work[1].dailyHours).toBe(150);
110
+ expect(estimatedHours.work[1].nightlyHours).toBe(0);
111
+ expect(estimatedHours.work[2].dailyHours).toBe(150);
112
+ expect(estimatedHours.work[2].nightlyHours).toBe(0);
113
+ expect(estimatedHours.work[3].dailyHours).toBe(105);
114
+ expect(estimatedHours.work[3].nightlyHours).toBe(0);
115
+ });
116
+
117
+
118
+
119
+ });
120
+
121
+ describe('Context', () => {
122
+ it('Logs', () => {
123
+
124
+ let inputRule = '{"version":"1.0.0","input":{"batchId":"b0d3649a-28e8-4dcb-845c-b9a6307661ee","processType":"EVALUATE","startDate":"2025-04-09","endDate":"2025-04-09","contracts":[{"id":"943a66fb-3636-456f-b7ba-e3e1526e8892","holidays":[],"timeEvaluation":[{"date":"2025-04-09","workschedule":{"code":9998,"previousHours":{"dailyHours":0,"nightlyHours":0}},"workscheduleWorkshift":{},"workshift":{"code":1,"name":"08:00 1200-1330 1800/Hor.Rígid","dsrMinutes":440,"weekMinutes":2640,"monthMinutes":13200},"timeEvaluationSituations":[],"clockingEvents":[],"intervals":[]}],"employee":{"id":"943a66fb-3636-456f-b7ba-e3e1526e8892","code":1,"person":{},"hireDate":"2022-01-01","employeer":{"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":[],"holidays":[]},"currentUser":{"name":"admin@allanalves.com.br"}}}';
125
+
126
+ let context = new Context({ body: inputRule });
127
+
128
+ context.logInfo('This is an info log');
129
+ context.logWarning('This is a warning log');
130
+ context.logError('This is an error log');
131
+
132
+ const changes = context.processChanges();
133
+
134
+ expect(changes.changesItems[0].getType()).toBe(ChangesType.LOG);
135
+ expect(changes.changesItems[0].getKey()).toBe("INFO");
136
+ expect(changes.changesItems[0].getValue()).toBe('This is an info log');
137
+
138
+ expect(changes.changesItems[1].getType()).toBe(ChangesType.LOG);
139
+ expect(changes.changesItems[1].getKey()).toBe("WARNING");
140
+ expect(changes.changesItems[1].getValue()).toBe('This is a warning log');
141
+
142
+ expect(changes.changesItems[2].getType()).toBe(ChangesType.LOG);
143
+ expect(changes.changesItems[2].getKey()).toBe("ERROR");
144
+ expect(changes.changesItems[2].getValue()).toBe('This is an error log');
145
+ });
146
+
147
+
148
+ it('timeEvaluation - Number of hours on situation', () => {
149
+
150
+ let inputRule = '{"version":"1.0.0","input":{"batchId":"f9c179a3-54ee-48c5-95f9-6a0852de0a2b","processType":"EVALUATE","startDate":"2025-06-25","endDate":"2025-06-25","contracts":[{"id":"943a66fb-3636-456f-b7ba-e3e1526e8892","holidaysKeys":[],"timeEvaluation":[{"date":"2025-06-25","workscheduleId":"dc3dd08e-f0b6-4569-8a5b-83e55b5b9ce3","workscheduleWorkshiftId":"dc3dd08e-f0b6-4569-8a5b-83e55b5b9ce3","workshiftId":"87db8a76-156c-4265-9989-39be06859135","timeEvaluationSituations":[{"situationId":"ceeacf87-0df3-4263-a8fa-d66d4bd3f4b0","situationCode":1,"numberOfHours":240},{"situationId":"eab898c7-87f8-4b6a-b67e-f62bba5c1c14","situationCode":101,"numberOfHours":270}],"clockingEvents":[{"clockingEventDate":"2025-06-25","clockingEventTime":480,"functionCode":0,"originType":"TYPED","useType":"CLOCKING"},{"clockingEventDate":"2025-06-25","clockingEventTime":720,"functionCode":0,"originType":"TYPED","useType":"CLOCKING"}],"intervals":[{"clockingEventStart":"2025-06-25T08:00:00","clockingEventEnd":"2025-06-25T12:00:00","type":"WORKING","situationCode":0,"situationReasonCode":0,"justifiedSituationCode":0,"justifiedDays":0,"positionWorkingPart":{"workingHours":1,"part":1},"isNightly":false,"isOvertimeAuthorized":false,"isTolerancePeriod":false,"inClockingEventTolerance":false},{"clockingEventStart":"2025-06-25T13:30:00","clockingEventEnd":"2025-06-25T18:00:00","type":"ABSENCE","subType":"EARLY_EXIT","situationCode":0,"situationReasonCode":0,"justifiedSituationCode":0,"justifiedDays":0,"positionWorkingPart":{"workingHours":1,"part":2},"isNightly":false,"isOvertimeAuthorized":false,"isTolerancePeriod":false,"inClockingEventTolerance":false}],"situationDefinitionKey":"3_2025-01-01_null","estimatedHours":{"meal":[{"dailyHours":90,"nightlyHours":0}],"snack":[],"work":[{"dailyHours":240,"nightlyHours":0},{"dailyHours":270,"nightlyHours":0}]},"syndicateKey":"1","missingClockingEvent":true}],"employee":{"id":"943a66fb-3636-456f-b7ba-e3e1526e8892","code":1,"person":{"name":"Eric Blauerstein"},"hireDate":"2020-01-01","employmentRelationshipId":"bda638aa-a392-4900-a388-58dd80b2d751","employer":{"code":1},"jobPositionCode":"2","companyBranchCode":1,"workshiftCode":1,"workshiftGroupCode":1},"histories":{"jobPositionHistories":[{"startDate":"2025-04-10","jobPositionKey":"1_2"}],"companyBranchHistories":[{"startDate":"2020-01-01","companyBranchKey":"1_1"}],"employmentRelationshipHistories":[{"startDate":"2020-01-01","endDate":"2025-05-31","employmentRelationshipId":"9f051554-763f-4d7a-a688-2ce8922f83a8"},{"startDate":"2025-06-01","employmentRelationshipId":"bda638aa-a392-4900-a388-58dd80b2d751"}],"timeEvaluationHistories":[{"startDate":"2025-04-10","type":"NORMAL","situationDefinitionKey":["3_2025-01-01_null"]}],"workshiftHistories":[{"startDate":"2020-01-01","workshiftId":"87db8a76-156c-4265-9989-39be06859135","workshiftGroupsCode":1}],"leaveHistories":[{"startDate":"2025-06-04","endDate":"2025-06-08","startTime":0,"endTime":0,"situationId":"07a513ab-a523-492b-af98-c04884241014"},{"startDate":"2025-06-13","endDate":"2025-06-13","startTime":0,"endTime":0,"situationId":"21ddf37a-7388-488c-afe3-53ce9868dbb9"},{"startDate":"2025-06-15","endDate":"2025-06-16","startTime":0,"endTime":0,"situationId":"bee787b7-94ec-477f-b2fd-3403007e28fb"},{"startDate":"2025-06-18","endDate":"2025-06-18","startTime":480,"endTime":600,"situationId":"bee787b7-94ec-477f-b2fd-3403007e28fb"},{"startDate":"2025-06-18","endDate":"2025-06-18","startTime":900,"endTime":1080,"situationId":"bee787b7-94ec-477f-b2fd-3403007e28fb"},{"startDate":"2025-06-20","endDate":"2025-06-23","startTime":0,"endTime":0,"situationId":"bee787b7-94ec-477f-b2fd-3403007e28fb"}]},"schedules":{"bridges":[{"originDate":"2025-06-08","destinationDate":"2025-06-09"},{"originDate":"2025-06-09","destinationDate":"2025-06-10"}],"workscheduleChanges":[{"date":"2025-05-19","workscheduleId":"5e6678d0-e63a-4fca-852c-7f481293487a"}],"workshiftChanges":[{"startDate":"2025-05-02","endDate":"2025-05-03","workshiftId":"0672b0da-0406-4fbf-a4ac-9c2631c2b5cd","workshiftGroupsCode":1},{"startDate":"2025-05-20","endDate":"2025-05-21","workshiftId":"0672b0da-0406-4fbf-a4ac-9c2631c2b5cd","workshiftGroupsCode":7}]},"hourBankAccounts":[{"hourBank":{"code":1},"creationDate":"2025-04-01","extinctionDate":"2025-04-11"},{"hourBank":{"code":1},"creationDate":"2025-05-01"}]}],"database":{"situations":[{"id":"ceeacf87-0df3-4263-a8fa-d66d4bd3f4b0","code":1,"type":"WORKING","exception":false,"complementarySituationId":"1ff19942-ace7-45ea-b886-861e75471795","daytime":true},{"id":"d609b9e3-25f3-419e-be4a-63d7cffdb5c1","code":2,"type":"VACATION","exception":false,"complementarySituationId":"4313de66-ec62-4bbf-b469-fe87546fc5c3","daytime":true},{"id":"bee787b7-94ec-477f-b2fd-3403007e28fb","code":4,"type":"LABORACCIDENT","exception":false,"complementarySituationId":"4313de66-ec62-4bbf-b469-fe87546fc5c3","daytime":true},{"id":"21ddf37a-7388-488c-afe3-53ce9868dbb9","code":5,"type":"MILITARYSERVICE","exception":false,"complementarySituationId":"4313de66-ec62-4bbf-b469-fe87546fc5c3","daytime":true},{"id":"07a513ab-a523-492b-af98-c04884241014","code":10,"type":"PAIDLEAVE","exception":false,"complementarySituationId":"bb5e3c0e-642d-481d-9726-7985a2e559aa","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":"bb5e3c0e-642d-481d-9726-7985a2e559aa","code":60,"type":"PAIDLEAVE","exception":false,"complementarySituationId":"07a513ab-a523-492b-af98-c04884241014","daytime":false},{"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":"1ff19942-ace7-45ea-b886-861e75471795","code":501,"type":"WORKING","exception":false,"complementarySituationId":"ceeacf87-0df3-4263-a8fa-d66d4bd3f4b0","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":"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":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"}],"jobPositions":[{"key":"1_2","code":2,"structureCode":1}],"workschedules":[{"id":"dc3dd08e-f0b6-4569-8a5b-83e55b5b9ce3","code":1,"workload":510,"type":"RIGID","definitionType":"NORMAL","clockingRegisters":[{"sequence":1,"clockingEvent":480,"toleranceBefore":470,"toleranceAfter":485,"mobilityBefore":0,"mobilityAfter":0,"clockingEventScheduleType":"MANDATORY","usingType":"MANDATORY_ENTRY_OR_EXIT"},{"sequence":2,"clockingEvent":720,"toleranceBefore":715,"toleranceAfter":730,"mobilityBefore":0,"mobilityAfter":0,"intervalType":"RIGID","clockingEventScheduleType":"MANDATORY","usingType":"MANDATORY_MEAL"},{"sequence":3,"clockingEvent":810,"toleranceBefore":800,"toleranceAfter":815,"mobilityBefore":0,"mobilityAfter":0,"intervalType":"RIGID","clockingEventScheduleType":"MANDATORY","usingType":"MANDATORY_MEAL"},{"sequence":4,"clockingEvent":1080,"toleranceBefore":1075,"toleranceAfter":1090,"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":"5e6678d0-e63a-4fca-852c-7f481293487a","code":344,"workload":540,"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":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":"87db8a76-156c-4265-9989-39be06859135","code":1,"type":"PERMANENT","rotationWorkShift":true,"extensionNightHours":true,"dsrMinutes":440,"weekMinutes":2640,"monthMinutes":13200,"timeShiftType":"GENERAL","workshiftGroups":[{"code":1,"baseDate":"1998-12-28"},{"code":2,"baseDate":"2001-01-20"},{"code":8,"baseDate":"1901-01-07"}],"workshiftDetails":[{"holidayGroup":{"code":0},"holidayType":"BRANCH","startDate":"2022-10-01"}]},{"id":"0672b0da-0406-4fbf-a4ac-9c2631c2b5cd","code":9,"type":"PERMANENT","rotationWorkShift":false,"extensionNightHours":true,"dsrMinutes":440,"weekMinutes":2640,"monthMinutes":13200,"timeShiftType":"THIRDSHIFT","workshiftGroups":[{"code":1,"baseDate":"2001-01-01"},{"code":2,"baseDate":"2001-01-02"},{"code":3,"baseDate":"2001-01-03"},{"code":4,"baseDate":"2001-01-04"},{"code":5,"baseDate":"2001-01-05"},{"code":6,"baseDate":"2001-01-06"},{"code":7,"baseDate":"2001-01-07"},{"code":8,"baseDate":"2001-01-08"}],"workshiftDetails":[{"holidayGroup":{"code":2},"holidayType":"OWN","startDate":"2022-10-01"}]}],"companyBranches":[{"key":"1_1","code":1}],"syndicates":[{"key":"1","code":1,"nightStartHour":1320,"nightEndHour":300,"minimumInterval4to6Hours":0,"minimumInterval6Hours":0,"minimumWorkDuration6Hours":361}],"employmentRelationships":[{"id":"bda638aa-a392-4900-a388-58dd80b2d751","code":"10.10.10","contractType":"EMPLOYEE"},{"id":"9f051554-763f-4d7a-a688-2ce8922f83a8","code":"2.2.2","contractType":"APRENTICE"}]},"currentUser":{"userName":"admin@matiello.com.br"}}}';
151
+
152
+ const context = new Context({ body: inputRule });
153
+
154
+ const timeEvaluation = context.contracts[0].timeEvaluation[0];
155
+
156
+ expect(timeEvaluation.getSituationHourByCodes(1, 101)).toBe(510);
157
+ expect(timeEvaluation.getSituationHourByCodes(1)).toBe(240);
158
+ expect(timeEvaluation.getSituationHourByCodes(999, 1)).toBe(240);
159
+ expect(timeEvaluation.getSituationHourByCodes(9999)).toBe(0);
160
+ expect(timeEvaluation.getSituationHourByCodes(1, 9999)).toBe(240);
161
+ expect(timeEvaluation.getSituationHourByCodes(998, 1, 9999)).toBe(240);
162
+
163
+ expect(timeEvaluation.getSituationHourByRange(1, 9999)).toBe(510);
164
+ expect(timeEvaluation.getSituationHourByRange(1, 10)).toBe(240);
165
+ expect(timeEvaluation.getSituationHourByRange(101, 102)).toBe(270);
166
+ expect(timeEvaluation.getSituationHourByRange(100, 101)).toBe(270);
167
+
168
+
169
+ expect(timeEvaluation.getSituationHour(1)).toBe(240);
170
+ expect(timeEvaluation.getSituationHour(101)).toBe(270);
171
+ expect(timeEvaluation.getSituationHour(9999)).toBe(0);
172
+
173
+
174
+ });
175
+
176
+ });
@@ -0,0 +1,11 @@
1
+ import { Context } from "../../data/context/context";
2
+
3
+ describe('Current User', () => {
4
+
5
+ it('Usuário corrente', () => {
6
+ let inputRule = '{"version":"1.0.0","input":{"batchId":"98733658-153a-4e70-a103-74f477817680","processType":"EVALUATE","startDate":"2025-03-20","endDate":"2025-03-20","contracts":[{"id":"92f38c8c-cdd3-461b-ad04-43711c48956b","holidays":[],"timeEvaluation":[{"date":"2025-03-20","workscheduleId":"e7875638-42b4-479d-a825-10fa3b13fbae","workscheduleWorkshiftId":"e7875638-42b4-479d-a825-10fa3b13fbae","workshiftId":"47971e5f-3d1a-4494-8cf6-328c7dfa5394","timeEvaluationSituations":[{"situationId":"209c328d-3fe8-446a-b690-846d75ef5ed5","situationCode":1,"numberOfHours":465}],"clockingEvents":[{"clockingEventDate":"2025-03-20","clockingEventTime":480,"functionCode":0,"originType":"ELECTRONIC","useType":"CLOCKING"},{"clockingEventDate":"2025-03-20","clockingEventTime":720,"functionCode":0,"originType":"ELECTRONIC","useType":"CLOCKING"},{"clockingEventDate":"2025-03-20","clockingEventTime":810,"functionCode":0,"originType":"ELECTRONIC","useType":"CLOCKING"},{"clockingEventDate":"2025-03-20","clockingEventTime":1080,"functionCode":0,"originType":"ELECTRONIC","useType":"CLOCKING"}],"intervals":[{"clockingEventStart":"2025-03-20T08:00:00","clockingEventEnd":"2025-03-20T09:00:00","type":"WORKING","situationCode":0,"situationReasonCode":0,"justifiedDays":0,"positionWorkingPart":{"workingHours":1,"part":1},"isNightly":false,"isOvertimeAuthorized":false,"isTolerancePeriod":false,"inClockingEventTolerance":false},{"clockingEventStart":"2025-03-20T09:00:00","clockingEventEnd":"2025-03-20T09:30:00","type":"SNACK","situationCode":0,"situationReasonCode":0,"justifiedDays":0,"positionWorkingPart":{"workingHours":1,"part":1},"isNightly":false,"isOvertimeAuthorized":false,"isTolerancePeriod":false,"inClockingEventTolerance":false},{"clockingEventStart":"2025-03-20T09:30:00","clockingEventEnd":"2025-03-20T12:00:00","type":"WORKING","situationCode":0,"situationReasonCode":0,"justifiedDays":0,"positionWorkingPart":{"workingHours":1,"part":1},"isNightly":false,"isOvertimeAuthorized":false,"isTolerancePeriod":false,"inClockingEventTolerance":false},{"clockingEventStart":"2025-03-20T12:00:00","clockingEventEnd":"2025-03-20T13:30:00","type":"MEAL","situationCode":0,"situationReasonCode":0,"justifiedDays":0,"positionWorkingPart":{"workingHours":1,"part":1},"isNightly":false,"isOvertimeAuthorized":false,"isTolerancePeriod":false,"inClockingEventTolerance":false},{"clockingEventStart":"2025-03-20T13:30:00","clockingEventEnd":"2025-03-20T16:00:00","type":"WORKING","situationCode":0,"situationReasonCode":0,"justifiedDays":0,"positionWorkingPart":{"workingHours":1,"part":2},"isNightly":false,"isOvertimeAuthorized":false,"isTolerancePeriod":false,"inClockingEventTolerance":false},{"clockingEventStart":"2025-03-20T16:00:00","clockingEventEnd":"2025-03-20T16:15:00","type":"SNACK","situationCode":0,"situationReasonCode":0,"justifiedDays":0,"positionWorkingPart":{"workingHours":1,"part":2},"isNightly":false,"isOvertimeAuthorized":false,"isTolerancePeriod":false,"inClockingEventTolerance":false},{"clockingEventStart":"2025-03-20T16:15:00","clockingEventEnd":"2025-03-20T18:00:00","type":"WORKING","situationCode":0,"situationReasonCode":0,"justifiedDays":0,"positionWorkingPart":{"workingHours":1,"part":2},"isNightly":false,"isOvertimeAuthorized":false,"isTolerancePeriod":false,"inClockingEventTolerance":false}],"situationDefinitionKey":"1_2022-08-01_null","estimatedHours":{"meal":[{"dailyHours":90,"nightlyHours":0}],"snack":[{"dailyHours":30,"nightlyHours":0},{"dailyHours":15,"nightlyHours":0}],"work":[{"dailyHours":60,"nightlyHours":0},{"dailyHours":150,"nightlyHours":0},{"dailyHours":150,"nightlyHours":0},{"dailyHours":105,"nightlyHours":0}]},"syndicateKey":"1"}],"employee":{"id":"92f38c8c-cdd3-461b-ad04-43711c48956b","code":2,"person":{"name":"Franky"},"hireDate":"2022-01-01","employmentRelationship":{"code":"1","contractType":"EMPLOYEE"},"employer":{"code":1},"jobPositionCode":"1","companyBranchCode":1,"workshiftCode":1,"workshiftGroupCode":4},"histories":{"jobPositionHistories":[{"startDate":"2025-01-01","jobPositionKey":"1_1"}],"companyBranchHistories":[{"startDate":"2022-08-08","companyBranchKey":"1_1"}]},"schedules":{"bridges":[]},"hourBankAccounts":[{"hourBank":{"code":5},"creationDate":"2024-01-01","extinctionDate":"2024-04-30"},{"hourBank":{"code":1},"creationDate":"2024-10-24"},{"hourBank":{"code":8},"creationDate":"2024-07-01"}]}],"database":{"situations":[],"holidays":[],"timeEvaluationSituationDefinitions":[],"jobPositions":[],"workschedules":[],"workshifts":[],"companyBranches":[],"syndicates":[]},"currentUser":{"userName":"admin@allanalves.com.br"}}}';
7
+ let context = new Context({ body: inputRule });
8
+ expect(context.currentUser.userName).toBe('admin@allanalves.com.br');
9
+ });
10
+
11
+ });
@@ -0,0 +1,144 @@
1
+ import { ChangesType } from "../../data/changes/changes";
2
+ import { Context } from "../../data/context/context";
3
+ import { DatasetBuilder } from "../builder/datasetBuilder";
4
+
5
+ describe('Dataset', () => {
6
+
7
+
8
+ it("deve retornar alterações do tipo ERROR quando houver errorMessage em timeEvaluation", () => {
9
+ const dataset = DatasetBuilder.withContractWithError().build();
10
+ dataset.contracts[0].timeEvaluation[0].invalidate("Erro de teste");
11
+ const changes = dataset.processChanges();
12
+ const errorChange = changes.changesItems.find(item => item.getType() === ChangesType.ERROR);
13
+ expect(errorChange).toBeDefined();
14
+ if (errorChange) {
15
+ expect(errorChange.getValue()).toBe("Erro de teste");
16
+ }
17
+ });
18
+
19
+ it("deve retornar alterações do tipo SITUATION quando houver timeEvaluationSituation.changed", () => {
20
+ const dataset = DatasetBuilder.withContractWithSituationChanged().build();
21
+ dataset.contracts[0].timeEvaluation[0].timeEvaluationSituations[0].numberOfHours = 8;
22
+ const changes = dataset.processChanges();
23
+ const situationChange = changes.changesItems.find(item => item.getType() === ChangesType.SITUATION);
24
+ expect(situationChange).toBeDefined();
25
+ if (situationChange) {
26
+ expect(situationChange.getKey()).toBe("1");
27
+ expect(situationChange.getValue()).toBe("8");
28
+ }
29
+ });
30
+
31
+ it("deve retornar alterações do tipo LOG quando houver logs", () => {
32
+ const dataset = DatasetBuilder.default().build();
33
+ dataset.logInfo("Mensagem de log");
34
+ const changes = dataset.processChanges();
35
+ const logChange = changes.changesItems.find(item => item.getType() === ChangesType.LOG);
36
+ expect(logChange).toBeDefined();
37
+ if (logChange) {
38
+ expect(logChange.getValue()).toBe("Mensagem de log");
39
+ }
40
+ });
41
+
42
+ it("deve retornar o usuário corrente", () => {
43
+ const dataset = DatasetBuilder.default().build();
44
+ expect(dataset.currentUser.userName).toBe("test-user");
45
+ });
46
+
47
+ it('Validar Change Pendency Change', () => {
48
+
49
+ let inputRule = '{"version":"1.0.0","input":{"batchId":"b0d3649a-28e8-4dcb-845c-b9a6307661ee","processType":"EVALUATE","startDate":"2025-04-09","endDate":"2025-04-09","contracts":[{"id":"943a66fb-3636-456f-b7ba-e3e1526e8892","holidays":[],"timeEvaluation":[{"date":"2025-04-09","workschedule":{"code":9998,"previousHours":{"dailyHours":0,"nightlyHours":0}},"workscheduleWorkshift":{},"workshift":{"code":1,"name":"08:00 1200-1330 1800/Hor.Rígid","dsrMinutes":440,"weekMinutes":2640,"monthMinutes":13200},"timeEvaluationSituations":[],"clockingEvents":[],"intervals":[]},{"date":"2025-04-10","generatePendingAdjustment":true,"workschedule":{"code":9998,"previousHours":{"dailyHours":0,"nightlyHours":0}},"workscheduleWorkshift":{},"workshift":{"code":1,"name":"08:00 1200-1330 1800/Hor.Rígid","dsrMinutes":440,"weekMinutes":2640,"monthMinutes":13200},"timeEvaluationSituations":[],"clockingEvents":[],"intervals":[]}],"employee":{"id":"943a66fb-3636-456f-b7ba-e3e1526e8892","code":1,"person":{},"hireDate":"2022-01-01","employeer":{"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":[],"holidays":[]},"currentUser":{"userName":"admin@allanalves.com.br"}}}';
50
+
51
+ let context = new Context({ body: inputRule });
52
+
53
+ const timeEvaluation = context.contracts[0].timeEvaluation[0];
54
+
55
+ expect(timeEvaluation.generatePendingAdjustment).toBeUndefined();
56
+ timeEvaluation.generatePendingAdjustment = true;
57
+ expect(timeEvaluation.generatePendingAdjustment).toBe(true);
58
+ timeEvaluation.generatePendingAdjustment = false;
59
+ expect(timeEvaluation.generatePendingAdjustment).toBe(false);
60
+
61
+
62
+ const timeEvaluation2 = context.contracts[0].timeEvaluation[1];
63
+ expect(timeEvaluation2.generatePendingAdjustment).toBeUndefined();
64
+ timeEvaluation2.generatePendingAdjustment = true;
65
+ expect(timeEvaluation2.generatePendingAdjustment).toBe(true);
66
+ });
67
+
68
+
69
+ it('Validar Changes Pendency', () => {
70
+
71
+ let inputRule = '{"version":"1.0.0","input":{"batchId":"b0d3649a-28e8-4dcb-845c-b9a6307661ee","processType":"EVALUATE","startDate":"2025-04-09","endDate":"2025-04-09","contracts":[{"id":"943a66fb-3636-456f-b7ba-e3e1526e8892","holidays":[],"timeEvaluation":[{"date":"2025-04-09","workschedule":{"code":9998,"previousHours":{"dailyHours":0,"nightlyHours":0}},"workscheduleWorkshift":{},"workshift":{"code":1,"name":"08:00 1200-1330 1800/Hor.Rígid","dsrMinutes":440,"weekMinutes":2640,"monthMinutes":13200},"timeEvaluationSituations":[],"clockingEvents":[],"intervals":[]},{"date":"2025-04-10","generatePendingAdjustment":true,"workschedule":{"code":9998,"previousHours":{"dailyHours":0,"nightlyHours":0}},"workscheduleWorkshift":{},"workshift":{"code":1,"name":"08:00 1200-1330 1800/Hor.Rígid","dsrMinutes":440,"weekMinutes":2640,"monthMinutes":13200},"timeEvaluationSituations":[],"clockingEvents":[],"intervals":[]}],"employee":{"id":"943a66fb-3636-456f-b7ba-e3e1526e8892","code":1,"person":{},"hireDate":"2022-01-01","employeer":{"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":[],"holidays":[]},"currentUser":{"userName":"admin@allanalves.com.br"}}}';
72
+
73
+ let context = new Context({ body: inputRule });
74
+
75
+ const timeEvaluation = context.contracts[0].timeEvaluation[0];
76
+ const timeEvaluation1 = context.contracts[0].timeEvaluation[1];
77
+
78
+ const changes = context.processChanges();
79
+ expect(changes.changesItems.length).toBe(0);
80
+
81
+
82
+ timeEvaluation.generatePendingAdjustment = true;
83
+ //Não alterou o status de pendência
84
+ timeEvaluation1.generatePendingAdjustment = true;
85
+
86
+ const changes2 = context.processChanges();
87
+ expect(changes2.changesItems.length).toBe(2);
88
+ expect(changes2.changesItems[0].getType()).toBe(ChangesType.PENDENCY);
89
+ expect(changes2.changesItems[0].getValue()).toBe("true");
90
+ expect(changes2.changesItems[0].getTimeEvaluationDate()).toBe("2025-04-09");
91
+ expect(changes2.changesItems[0].getContractId()).toBe("943a66fb-3636-456f-b7ba-e3e1526e8892");
92
+
93
+ expect(changes2.changesItems[1].getType()).toBe(ChangesType.PENDENCY);
94
+ expect(changes2.changesItems[1].getValue()).toBe("true");
95
+ expect(changes2.changesItems[1].getTimeEvaluationDate()).toBe("2025-04-10");
96
+ expect(changes2.changesItems[1].getContractId()).toBe("943a66fb-3636-456f-b7ba-e3e1526e8892");
97
+
98
+
99
+ });
100
+
101
+
102
+ it('Validar Changes Pendency - false', () => {
103
+
104
+ let inputRule = '{"version":"1.0.0","input":{"batchId":"b0d3649a-28e8-4dcb-845c-b9a6307661ee","processType":"EVALUATE","startDate":"2025-04-09","endDate":"2025-04-09","contracts":[{"id":"943a66fb-3636-456f-b7ba-e3e1526e8892","holidays":[],"timeEvaluation":[{"date":"2025-04-09","workschedule":{"code":9998,"previousHours":{"dailyHours":0,"nightlyHours":0}},"workscheduleWorkshift":{},"workshift":{"code":1,"name":"08:00 1200-1330 1800/Hor.Rígid","dsrMinutes":440,"weekMinutes":2640,"monthMinutes":13200},"timeEvaluationSituations":[],"clockingEvents":[],"intervals":[]},{"date":"2025-04-10","generatePendingAdjustment":true,"workschedule":{"code":9998,"previousHours":{"dailyHours":0,"nightlyHours":0}},"workscheduleWorkshift":{},"workshift":{"code":1,"name":"08:00 1200-1330 1800/Hor.Rígid","dsrMinutes":440,"weekMinutes":2640,"monthMinutes":13200},"timeEvaluationSituations":[],"clockingEvents":[],"intervals":[]}],"employee":{"id":"943a66fb-3636-456f-b7ba-e3e1526e8892","code":1,"person":{},"hireDate":"2022-01-01","employeer":{"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":[],"holidays":[]},"currentUser":{"userName":"admin@allanalves.com.br"}}}';
105
+
106
+ let context = new Context({ body: inputRule });
107
+
108
+ const timeEvaluation1 = context.contracts[0].timeEvaluation[1];
109
+
110
+ const changes = context.processChanges();
111
+ expect(changes.changesItems.length).toBe(0);
112
+
113
+
114
+ timeEvaluation1.generatePendingAdjustment = false;
115
+
116
+ const changes2 = context.processChanges();
117
+ expect(changes2.changesItems.length).toBe(1);
118
+ expect(changes2.changesItems[0].getType()).toBe(ChangesType.PENDENCY);
119
+ expect(changes2.changesItems[0].getValue()).toBe("false");
120
+ expect(changes2.changesItems[0].getTimeEvaluationDate()).toBe("2025-04-10");
121
+ expect(changes2.changesItems[0].getContractId()).toBe("943a66fb-3636-456f-b7ba-e3e1526e8892");
122
+
123
+
124
+ });
125
+
126
+
127
+ it('Dault dataset', () => {
128
+
129
+ const context = Context.empty();
130
+ context.logError("Erro de teste");
131
+
132
+ const changes = context.processChanges();
133
+
134
+ expect(changes.changesItems.length).toBe(1);
135
+ expect(changes.changesItems[0].getType()).toBe("LOG");
136
+ expect(changes.changesItems[0].getValue()).toBe("Erro de teste");
137
+ expect(changes.changesItems[0].getKey()).toBe("ERROR");
138
+ expect(changes.changesItems[0].getSequence()).toBe(0);
139
+ expect(changes.changesItems[0].getTimeEvaluationDate()).toBeNull();
140
+ expect(changes.changesItems[0].getContractId()).toBeNull();
141
+
142
+ });
143
+
144
+ })
@@ -0,0 +1,20 @@
1
+ import { Context } from "../../../data/context/context";
2
+
3
+ describe("Employee", () => {
4
+ it("Deve criar uma instância de Employee corretamente", () => {
5
+ const 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"}}}`;
6
+
7
+ const context = new Context({ body: inputRule });
8
+ const employee = context.contracts[0].employee;
9
+
10
+ expect(employee.code).toBe(2);
11
+ expect(employee.person.name).toBe("Franky");
12
+ expect(employee.employer.code).toBe(1);
13
+ expect(employee.hireDate).toEqual(new Date("2022-01-01"));
14
+ expect(employee.employmentRelationship.id).toBe("775ee7d1-5d7f-4a1b-b50b-b659a66014b2");
15
+ expect(employee.workshift.code).toBe(1);
16
+ expect(employee.workshiftGroup.code).toBe(4);
17
+ expect(employee.jobPosition.code).toBe(1);
18
+ expect(employee.companyBranch.code).toBe(1);
19
+ });
20
+ });