@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,284 @@
1
+ import { DateUtils } from "./dateUtils";
2
+
3
+ /**
4
+ * Representa um intervalo de datas, com uma data inicial e uma data final.
5
+ * O intervalo é considerado válido se a data inicial for anterior ou igual à data final.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ *
10
+ * const interval = new DateInterval(new Date('2023-01-01'), new Date('2023-01-05'));
11
+ * console.log(interval.start); // 2023-01-01T00:00:00.000Z.
12
+ * console.log(interval.end); // 2023-01-05T00:00:00.000Z.
13
+ *
14
+ * // Intervalo inválido.
15
+ * const invalidInterval = new DateInterval(new Date('2023-01-05'), new Date('2023-01-01')); // Lança erro.
16
+ *
17
+ * // Exemplo de uso em comparação de intervalos.
18
+ * const interval1 = new DateInterval(new Date('2023-01-01'), new Date('2023-01-05'));
19
+ * const interval2 = new DateInterval(new Date('2023-01-03'), new Date('2023-01-07'));
20
+ *
21
+ * // Verifica se interval1 está antes ou é igual a interval2.
22
+ * const isBeforeOrEquals = DateIntervalUtils.isBeforeOrEquals(interval1, interval2);
23
+ * console.log(isBeforeOrEquals); // true
24
+ * ```
25
+ *
26
+ */
27
+ export class DateInterval {
28
+ private readonly _start: Date;
29
+ private readonly _end: Date;
30
+
31
+ /**
32
+ * Criação de um intervalo de datas.
33
+ * @param start Início do intervalo.
34
+ * @param end Fim do intervalo.
35
+ * @throws Error se a data inicial for posterior à data final.
36
+ */
37
+ constructor(start: Date, end: Date) {
38
+ if (start > end) {
39
+ throw new Error("Start date must be before or equal to end date.");
40
+ }
41
+ this._start = start;
42
+ this._end = end;
43
+ }
44
+
45
+ /**
46
+ * Retorna a data inicial do intervalo.
47
+ *
48
+ * @example
49
+ * ```typescript
50
+ * const interval = new DateInterval(new Date('2023-01-01'), new Date('2023-01-05'));
51
+ * console.log(interval.start); // 2023-01-01T00:00:00.000Z.
52
+ * ```
53
+ *
54
+ */
55
+ get start(): Date {
56
+ return this._start;
57
+ }
58
+ /**
59
+ * Retorna a data final do intervalo.
60
+ *
61
+ * @example
62
+ * ```typescript
63
+ * const interval = new DateInterval(new Date('2023-01-01'), new Date('2023-01-05'));
64
+ * console.log(interval.end); // 2023-01-05T00:00:00.000Z.
65
+ * ```
66
+ */
67
+ get end(): Date {
68
+ return this._end;
69
+ }
70
+
71
+ /**
72
+ * Representa o intervalo de datas como uma string no formato ISO.
73
+ * @example
74
+ * ```typescript
75
+ * const interval = new DateInterval(new Date('2023-01-01'), new Date('2023-01-05'));
76
+ * console.log(interval.toString()); // DateInterval [start=2023-01-01T00:00:00.000Z, end=2023-01-05T00:00:00.000Z].
77
+ * ```
78
+ * @returns
79
+ */
80
+ toString(): string {
81
+ return `DateInterval [start=${this._start.toISOString()}, end=${this._end.toISOString()}]`;
82
+ }
83
+ }
84
+
85
+ /**
86
+ * Classe utilitária para manipulação de intervalos de datas.
87
+ * Fornece métodos para verificar relações entre intervalos, como se um intervalo está antes,
88
+ * depois, se sobrepõe ou se está contido em outro intervalo.
89
+ *
90
+ * @example
91
+ * ```typescript
92
+ * import { DateInterval, DateIntervalsUtils } from './DateIntervalUtils';
93
+ * const interval = new DateInterval(new Date('2023-01-01'), new Date('2023-01-05'));
94
+ * const intervalComp = new DateInterval(new Date('2023-01-03'), new Date('2023-01-07'));
95
+ * // Verifica se interval1 está antes ou é igual a interval2.
96
+ * const isBeforeOrEquals = DateIntervalsUtils.isBeforeOrEquals(interval, intervalComp);
97
+ * console.log(isBeforeOrEquals); // true
98
+ * ```
99
+ */
100
+ export const DateIntervalUtils = {
101
+
102
+ /**
103
+ * Verifica se o fim do intervalo `interval` está antes ou é igual ao início do intervalo `comparedInterval`.
104
+ * ```
105
+ * Representações
106
+ *
107
+ * interval........: |====|
108
+ * comparedInterval: |----|
109
+ *
110
+ * interval........: |======|
111
+ * comparedInterval: |------|
112
+ * ```
113
+ *
114
+ * @example
115
+ * ```typescript
116
+ * const interval = new DateInterval(new Date('2023-01-01'), new Date('2023-01-05'));
117
+ * const comparedInterval = new DateInterval(new Date('2023-01-06'), new Date('2023-01-10'));
118
+ * // Verifica se o fim do intervalo `interval` está antes ou é igual ao início do intervalo `comparedInterval`.
119
+ * const isBeforeOrEquals = DateIntervalUtils.isBeforeOrEquals(interval, comparedInterval);
120
+ * console.log(isBeforeOrEquals); // true
121
+ * ```
122
+ *
123
+ * @param interval intervalo.
124
+ * @param comparedInterval intervalo a ser comparado.
125
+ * @returns Se o fim do intervalo está antes ou é igual ao início do intervalo comparado.
126
+ */
127
+ isBeforeOrEquals(interval: DateInterval, comparedInterval: DateInterval): boolean {
128
+ return DateUtils.isBeforeOrEquals(interval.end, comparedInterval.start);
129
+ },
130
+
131
+ /**
132
+ * Verifica se o início do intervalo `interval` está depois ou é igual ao fim do intervalo `comparedInterval`.
133
+ * ```
134
+ * Representações
135
+ *
136
+ * interval........: |====|
137
+ * comparedInterval: |----|
138
+ *
139
+ * interval........: |======|
140
+ * comparedInterval: |------|
141
+ * ```
142
+ *
143
+ * @example
144
+ * ```typescript
145
+ * const interval = new DateInterval(new Date('2023-01-06'), new Date('2023-01-10'));
146
+ * const comparedInterval = new DateInterval(new Date('2023-01-01'), new Date('2023-01-05'));
147
+ * // Verifica se o início do intervalo `interval` está depois ou é igual ao fim do intervalo `comparedInterval`.
148
+ * const isAfterOrEquals = DateIntervalUtils.isAfterOrEquals(interval, comparedInterval);
149
+ * console.log(isAfterOrEquals); // true
150
+ * ```
151
+ *
152
+ * @param interval Intervalo.
153
+ * @param compareInterval intervalo a ser comparado.
154
+ * @returns Se o início do intervalo está depois ou é igual ao fim do intervalo comparado.
155
+ */
156
+ isAfterOrEquals(interval: DateInterval, compareInterval: DateInterval): boolean {
157
+ return DateUtils.isAfterOrEquals(interval.start, compareInterval.end);
158
+ },
159
+
160
+ /**
161
+ * Verifica se o intervalo `interval` sobrepõe completamente o intervalo `comparedInterval`.
162
+ * Se o intervalo for igual também será considerado sobreposto.
163
+ * ```
164
+ * Representações
165
+ *
166
+ * interval........: |========|
167
+ * comparedInterval: |----|
168
+ *
169
+ * interval........: |========|
170
+ * comparedInterval: |--------|
171
+ * ```
172
+ * @example
173
+ * ```typescript
174
+ * const interval = new DateInterval(new Date('2023-01-01'), new Date('2023-01-05'));
175
+ * const comparedInterval = new DateInterval(new Date('2023-01-02'), new Date('2023-01-04'));
176
+ * // Verifica se o intervalo `interval` sobrepõe completamente o intervalo `comparedInterval`.
177
+ * const isOverlaps = DateIntervalUtils.overlaps(interval, comparedInterval);
178
+ * console.log(isOverlaps); // true
179
+ * ```
180
+ *
181
+ * @param interval Intervalo a ser verificado.
182
+ * @param comparedInterval Intervalo comparado.
183
+ * @returns Se o intervalo sobrepõe ao intervalo comparado.
184
+ */
185
+ overlaps(interval: DateInterval, comparedInterval: DateInterval): boolean {
186
+ return DateUtils.isBeforeOrEquals(interval.start, comparedInterval.start) &&
187
+ DateUtils.isAfterOrEquals(interval.end, comparedInterval.end);
188
+ },
189
+
190
+ /**
191
+ * Verifica se o intervalo `interval` está completamente dentro do intervalo `compareInterval`.
192
+ * Se o intervalo for igual também será considerado dentro.
193
+ * ```
194
+ * Representações
195
+ *
196
+ * interval........: |====|
197
+ * comparedInterval: |--------|
198
+ *
199
+ * interval........: |========|
200
+ * comparedInterval: |--------|
201
+ * ```
202
+ *
203
+ * @example
204
+ * ```typescript
205
+ * const interval = new DateInterval(new Date('2023-01-02'), new Date('2023-01-04'));
206
+ * const comparedInterval = new DateInterval(new Date('2023-01-01'), new Date('2023-01-05'));
207
+ * // Verifica se o intervalo `interval` está completamente dentro do intervalo `compareInterval`.
208
+ * const isInto = DateIntervalUtils.into(interval, comparedInterval);
209
+ * console.log(isInto); // true
210
+ * ```
211
+ *
212
+ * @param interval Intervalo a ser verificado.
213
+ * @param comparedInterval Intervalo comparado.
214
+ * @returns Se o intervalo está completamente dentro do intervalo comparado.
215
+ * */
216
+ into(interval: DateInterval, comparedInterval: DateInterval): boolean {
217
+ return DateUtils.isBeforeOrEquals(comparedInterval.start, interval.start) &&
218
+ DateUtils.isAfterOrEquals(comparedInterval.end, interval.end);
219
+ },
220
+
221
+ /**
222
+ * Verifica se o intervalo `interval` sobrepõe o início do intervalo `compareInterval`.
223
+ * ```
224
+ * Representações
225
+ *
226
+ * interval........: |=======|
227
+ * compareInterval: |-------|
228
+ *
229
+ * interval........: |====|
230
+ * compareInterval: |-------|
231
+ * ```
232
+ *
233
+ * @example
234
+ * ```typescript
235
+ * const interval = new DateInterval(new Date('2023-01-01'), new Date('2023-01-05'));
236
+ * const comparedInterval = new DateInterval(new Date('2023-01-03'), new Date('2023-01-07'));
237
+ * // Verifica se o intervalo `interval` sobrepõe o início do intervalo `compareInterval`.
238
+ * const isOverStart = DateIntervalUtils.isOverStart(interval, comparedInterval);
239
+ * console.log(isOverStart); // true
240
+ * ```
241
+ *
242
+ * @param interval Intervalo a ser verificado.
243
+ * @param comparedInterval Intervalo comparado.
244
+ * @returns Se o intervalo sobrepõe o início do intervalo comparado.
245
+ *
246
+ */
247
+ isOverStart(interval: DateInterval, comparedInterval: DateInterval): boolean {
248
+ return DateUtils.isBeforeOrEquals(interval.start, comparedInterval.start) &&
249
+ DateUtils.isAfter(interval.end, comparedInterval.start) &&
250
+ DateUtils.isBefore(interval.end, comparedInterval.end);
251
+ },
252
+
253
+ /**
254
+ * Verifica se o intervalo `interval` começa depois e está sobre o fim do intervalo `compareInterval`.
255
+ * ```
256
+ * Representações
257
+ *
258
+ * interval........: |=======|
259
+ * compareInterval: |-------|
260
+ *
261
+ * interval........: |====|
262
+ * compareInterval: |-------|
263
+ * ````
264
+ *
265
+ * @example
266
+ * ```typescript
267
+ * const interval = new DateInterval(new Date('2023-01-03'), new Date('2023-01-07'));
268
+ * const comparedInterval = new DateInterval(new Date('2023-01-01'), new Date('2023-01-05'));
269
+ * * // Verifica se o intervalo `interval` começa depois e está sobre o fim do intervalo `compareInterval`.
270
+ * const isOverEnd = DateIntervalUtils.isOverEnd(interval, comparedInterval);
271
+ * console.log(isOverEnd); // true
272
+ * ```
273
+ * @param interval Intervalo a ser verificado.
274
+ * @param comparedInterval Intervalo comparado.
275
+ * @returns Se o intervalo sobrepõe o fim do intervalo comparado.
276
+ *
277
+ *
278
+ */
279
+ isOverEnd(interval: DateInterval, comparedInterval: DateInterval): boolean {
280
+ return DateUtils.isAfter(interval.start, comparedInterval.start) &&
281
+ DateUtils.isBefore(interval.start, comparedInterval.end) &&
282
+ DateUtils.isAfterOrEquals(interval.end, comparedInterval.end);
283
+ }
284
+ }