@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
package/README.doc.md ADDED
@@ -0,0 +1,658 @@
1
+ # Biblioteca de Regras de Apuração de Eventos de Ponto
2
+
3
+ Esta biblioteca é uma implementação em Node.js para a criação de regras de apuração de eventos de ponto, permitindo a personalização do processamento de eventos de ponto e apurações de horas trabalhadas.
4
+ A biblioteca é projetada para ser utilizada em ambientes como AWS Lambda, onde você pode receber eventos de ponto e processá-los de acordo com regras personalizadas.
5
+
6
+
7
+ ## Dicas de como usar a biblioteca
8
+
9
+ Tudo começa pelo contexto [Context](./classes/Context.html), que é a base para a execução das regras de apuração. O contexto contém informações sobre o dados recebido para serem customizados,
10
+ como: contratos, colaboradores, apurações, históricos, programações entre outros.
11
+
12
+ Com o contexto carregado, você pode acessar os contratos dos colaboradores, e iterar sobre as apurações de cada contrato. A partir daí, você pode implementar suas regras personalizadas para processar as apurações.
13
+
14
+ As informações sobre os contratos e colaboradores estão disponíveis através da classe [Contract](./classes/Contract.html), que contém métodos para consultar informações do colaborador, históricos, programações, banco de horas, entre outros. Vai encontrar informações de todos as apurações do colaborador, sem contextualização de data, ou seja, todas os históricos e programações do colaborador estão disponíveis sem contexto de dia, permitindo que você acesse dados históricos e programações que podem não ter sido aplicada em um dia, como afastamentos em dias de DSR.
15
+
16
+ As informações sobre as apurações estão disponíveis através da classe [TimeEvaluation](./classes/TimeEvaluation.html), que contém métodos para manipular e validar as apurações. Na apuração,
17
+ você pode acessar informações como situações, marcações, horários, escalas, feriados e outros dados relevantes para a lógica de negócio. Os históricos e programações também estão disponíveis para
18
+ consulta e manipulação, sem a necessidade de filtrar quais são os históricos ou programações associados a apuração do dia atual, pois a biblioteca já faz isso para você.
19
+
20
+ A alteração de situações é feita através do objeto [TimeEvaluation](./classes/TimeEvaluation.html), nele é disponibilizado métodos como `setSituationHour`, `sumSituationHour`,
21
+ `resetSituationHour`, entre outros, que permitem modificar as situações conforme a lógica de negócio definida. Todas as situações que são referências nas definições de situações históricos ou
22
+ programações são carregadas no contexto, com informações completas como código, tipo e situação complementar, caso a regra adicione uma situação que não esteja definida no contexto, a biblioteca
23
+ irá aceitar a situação, mas não disponibilizará informações adicionais sobre ela, como tipo e situação complementar. Sendo o consultor responsável por estas informações.
24
+
25
+
26
+ ## Saídas da regra
27
+
28
+ A regra permite fazer as seguintes alterações, como:
29
+ - Modificar as situações.
30
+ - Invalidar a apuração para não ser calculada.
31
+ - Customizar a geração de pendências de acerto.
32
+ - Gerar logs personalizados, do tipo `logInfo`, `logError`, `logWarning`.
33
+
34
+
35
+ ## Desenvolvimento
36
+
37
+ ### Utilização em labdas AWS
38
+
39
+ Para utilizar a biblioteca, importe os módulos necessários no seu projeto Node.js/Javascript. Por exemplo, uma versão inicial da lambda:
40
+
41
+ Arquivo: `package.json`, deve ser adicionado o exemplo abaixo e substituir a dependência `hcm-clocking-event-rule-nodejs` pela última versão disponível no [npm](https://www.npmjs.com/package/hcm-clocking-event-rule-nodejs).
42
+
43
+ ```json
44
+ {
45
+ "name": "k02fEIVHGoYutimeEvaluationRulePoint",
46
+ "version": "1.0.0",
47
+ "description": "",
48
+ "main": "index.js",
49
+ "scripts": {
50
+ "test": ""
51
+ },
52
+ "dependencies": {
53
+ "hcm-clocking-event-rule-nodejs":"1.0.0"
54
+ },
55
+ "author": "",
56
+ "license": ""
57
+ }
58
+ ```
59
+
60
+
61
+ Arquivo: `index.js`, arquivo inicial da lambda, deve ser criado na raiz do projeto e conter o seguinte código:
62
+
63
+ ```javascript
64
+ const { Context } = require('hcm-clocking-event-rule-nodejs');
65
+ const { TimeEvaluationRule } = require('./rule/TimeEvaluationRule');
66
+
67
+
68
+ exports.handler = async(event) => {
69
+ return sendRes(200, event);
70
+ };
71
+
72
+ const sendRes = (status, event) => {
73
+
74
+ let context = new Context(event);
75
+ try{
76
+ const evaluationService = new TimeEvaluationRule(context);
77
+ evaluationService.execute();
78
+ } catch(error) {
79
+ context.logError(`Erro: ${error.message}, stack: ${error.stack}`);
80
+ }
81
+
82
+ const body = context.getBodyResult();
83
+
84
+ var response = {
85
+ statusCode: status,
86
+ headers: {
87
+ "Content-Type": "application/json"
88
+ },
89
+ body: body
90
+ };
91
+
92
+ return response;
93
+ };
94
+ ```
95
+
96
+ Arquivo: `TimeEvaluationRule.js`, deve ser criado na rule do projeto e conter o seguinte código, exemplo de uma regra de apuração:
97
+
98
+ ```javascript
99
+ const { DateUtils, DateIntervalUtils, DateInterval } = require('hcm-clocking-event-rule-nodejs');
100
+
101
+ class TimeEvaluationRule {
102
+ constructor(context) {
103
+ this.context = context;
104
+ }
105
+
106
+ execute() {
107
+ try{
108
+ //Iterar sobre os contratos do contexto e executar alguma lógica
109
+ this.context.contracts.forEach((contract) => {
110
+ //Iterar sobre as apurações do contrato do colaborador
111
+ contract.timeEvaluation.forEach((timeEvaluation) => {
112
+ try{
113
+ this.timeEvaluation(timeEvaluation, contract);
114
+ } catch(error) {
115
+ timeEvaluation.invalidate(`Erro: ${error.message}, stack: ${error.stack}`);
116
+ }
117
+
118
+ });
119
+ });
120
+ } catch(error) {
121
+ this.context.logError(`Erro: ${error.message}, stack: ${error.stack}`);
122
+ }
123
+ }
124
+
125
+ /**
126
+ * Método para processar as apurações.
127
+ * @param {TimeEvaluation} timeEvaluation - Apuração
128
+ * @param {Contract} contract - O contrato do colaborador
129
+ */
130
+ timeEvaluation(timeEvaluation, contract){
131
+ // Implementar a lógica de customização....
132
+ }
133
+
134
+ }
135
+
136
+ module.exports = { TimeEvaluationRule };
137
+ ```
138
+
139
+ Arquivo de test: `test.js`, deve ser criado na pasta `test` do projeto e conter o seguinte código, exemplo de um teste unitário:
140
+
141
+ ```javascript
142
+ const { handler } = require('../index'); // Certifique-se de que o caminho está correto
143
+
144
+ const event = {
145
+ body: '' // aqui será adicionado o contexto de regra.
146
+ };
147
+
148
+ handler(event).then(response => {
149
+ console.log("Response:", response);
150
+ }).catch(err => {
151
+ console.error("Error:", err);
152
+ });
153
+ ```
154
+
155
+
156
+ ### Ambiente Local para desenvolvimento (Opcional)
157
+
158
+ #### Criando um servidor local para testes
159
+
160
+ 1. Criar uma pasta para o projeto e inicializar um projeto Node.js:
161
+
162
+ ```bash
163
+ mkdir regras-local
164
+ cd regras-local
165
+ npm init -y
166
+ ```
167
+
168
+ 2. Alterar o arquivo `package.json` para incluir a dependência da biblioteca e configurações:
169
+
170
+ ```json
171
+ {
172
+ "name": "regras-local",
173
+ "version": "1.0.0",
174
+ "description": "",
175
+ "main": "src/server.js",
176
+ "scripts": {
177
+ "start": "node src/server.js",
178
+ "dev": "nodemon"
179
+ },
180
+ "dependencies": {
181
+ "circular-json": "^0.5.9",
182
+ "cross-env": "^7.0.3",
183
+ "express": "^4.21.2",
184
+ "hcm-clocking-event-rule-nodejs":"0.22.0"
185
+ },
186
+ "devDependencies": {
187
+ "nodemon": "^3.1.10"
188
+ }
189
+ }
190
+ ```
191
+
192
+ 3. Criar um arquivo na pasta raiz com o nome `nodemon.json` e adicionar o seguinte código:
193
+
194
+ ```json
195
+ {
196
+ "watch": ["src"],
197
+ "ext": "js,json",
198
+ "ignore": ["node_modules"],
199
+ "exec": "cross-env TZ=UTC node src/server.js"
200
+ }
201
+ ```
202
+
203
+ 4. Criar a pasta `src` e dentro dela criar o arquivo `server.js` com o seguinte conteúdo:
204
+
205
+ ```javascript
206
+ const express = require('express');
207
+ const { Context, IntervalTypes, DateUtils } = require('hcm-clocking-event-rule-nodejs');
208
+
209
+ const app = express();
210
+ app.use(express.json());
211
+ const port = process.env.PORT || 3000;
212
+
213
+ // Iniciar o servidor Express
214
+ app.listen(port,() => {
215
+ console.log(`Servidor rodando em http://localhost:${port}`);
216
+ });
217
+
218
+ // Endpoint para chamar o handler como se fosse AWS Lambda
219
+ app.post('/rule', async(req, res) => {
220
+ try {
221
+ const event = { body: req.body };
222
+ const result = await exports.handler(event);
223
+ res.status(result.statusCode).json(JSON.parse(result.body));
224
+ } catch(err) {
225
+ res.status(500).json({ error: err.message });
226
+ }
227
+ });
228
+
229
+ // Handler para AWS Lambda
230
+ exports.handler = async(event) => {
231
+ // O AWS Lambda recebe o body como string
232
+ const body = typeof event.body === 'string' ? JSON.parse(event.body) : event.body;
233
+ const context = new Context({ body: JSON.stringify(body) });
234
+
235
+ executeRule(context);
236
+ const changes = context.getBodyResult();
237
+ return {
238
+ statusCode: 200,
239
+ body: changes,
240
+ };
241
+ };
242
+
243
+ /**
244
+ * Função para executar a regra de apuração. Substitua a lógica de negócio
245
+ * conforme necessário.
246
+ * @param {Context} context - O contexto com os dados de apuração.
247
+ * */
248
+ function executeRule(context) {
249
+ context.contracts.forEach((contract) => {
250
+ contract.timeEvaluation.forEach((timeEvaluation) => {
251
+ timeEvaluation.timeEvaluationSituations.forEach((timeEvaluationSituation) => {
252
+ // implementar a lógica de customização....
253
+ });
254
+ });
255
+ });
256
+ }
257
+ ```
258
+
259
+ 5. Instalar os pacotes necessários:
260
+
261
+ ```bash
262
+ npm install
263
+ ```
264
+
265
+ 6. Rodar o servidor local para testes:
266
+
267
+ ```bash
268
+ npm run dev
269
+ ```
270
+ Após executar o comando acima, o servidor estará rodando em `http://localhost:3000`. Exemplo de saída do terminal:
271
+
272
+ ```
273
+ PS C:\regras-local> npm run dev
274
+
275
+ > regras-local@1.0.0 dev
276
+ > nodemon
277
+
278
+ [nodemon] 3.1.10
279
+ [nodemon] to restart at any time, enter `rs`
280
+ [nodemon] watching path(s): src\**\*
281
+ [nodemon] watching extensions: js,json
282
+ [nodemon] starting `cross-env TZ=UTC node src/server.js`
283
+ Servidor rodando em http://localhost:3000
284
+ ```
285
+
286
+
287
+ 7. Acesse o servidor local em `http://localhost:3000/rule` e envie um POST com o corpo contendo os dados de apuração que deseja processar. Para obter o json com o dados da apuração acesse a tela de acerto com permissão de desenvolvedor, no dia clique em ações na opção de exportar entrada de regra.
288
+
289
+ Sugestão utilizar um aplicativo como o [Postman](https://www.postman.com/) ou [Insomnia](https://insomnia.rest/) para enviar requisições POST com o corpo JSON ou fazer via linha de comando com `curl`, substituindo o parâmetro data-raw pelo json que deseja enviar:
290
+
291
+ ```bash
292
+ curl --location 'http://localhost:3000/rule' --header 'Content-Type: application/json' --data-raw '{
293
+ "version": "1.0.0",
294
+ "input": {...}}'
295
+ ```
296
+
297
+
298
+ #### Depuração em VS Code
299
+
300
+ Caso desejar depurar o código da regra diretamente no Visual Studio Code (VS Code) para facilitar o desenvolvimento e testes, você precisará configurar o ambiente de depuração.
301
+
302
+ Siga estes passos:
303
+
304
+ 1. No VS Code, clique em "Run and Debug" (ícone de play com inseto na barra lateral) ou pressione Ctrl+Shift+D.
305
+ 2. Clique em "create a launch.json file" se ainda não existir.
306
+ 3. Escolha "Node.js" como ambiente.
307
+ 4. No arquivo `launch.json`, adicione a configuração para rodar seu arquivo:
308
+
309
+ ```json
310
+ {
311
+ "version": "0.2.0",
312
+ "configurations": [
313
+ {
314
+ "type": "pwa-node",
315
+ "request": "launch",
316
+ "name": "Debug server.js",
317
+ "program": "${workspaceFolder}/src/server.js",
318
+ "env": {
319
+ "PORT": "3000"
320
+ }
321
+ }
322
+ ]
323
+ }
324
+ ```
325
+ 5. Salve o arquivo e clique em "Start Debugging" (F5).
326
+
327
+
328
+ ## Limitações
329
+
330
+ A regra trabalha somente considerando os dias apurados, ou seja, informações sobre dias que não foram apurados não estão disponíveis no contexto. Isso significa que a biblioteca não pode acessar dados de dias futuros ou passados que não foram processados.
331
+ A biblioteca é projetada para ser utilizada em ambientes de execução como AWS Lambda, e possui algumas limitações:
332
+ - Não é possível acessar diretamente o banco de dados, pois a biblioteca não possui suporte para manipulação direta de banco de dados.
333
+ - Leitura de campos e entidades customizadas.
334
+ - Buscar dados que não estão carregados no contexto, como por exemplo, buscar dados de um banco de dados externo ou períodos que não foram calculados.
335
+ - Informações sobre usuário, papéis, permissões e abrangência.
336
+ - Manipulação de banco de dados.
337
+
338
+
339
+ ## Comparação entre XT e X
340
+
341
+ <table>
342
+ <thead>
343
+ <tr>
344
+ <th style="width: 20%;">Função</th>
345
+ <th style="width: 40%;">Gestão do Ponto XT</th>
346
+ <th style="width: 40%;">Gestão do Ponto X</th>
347
+ </tr>
348
+ </thead>
349
+ <tbody>
350
+ <tr>
351
+ <td>Retorna o dia da semana da data passada</td>
352
+ <td><code>int getDiaSem(LocalDate data)</code></td>
353
+ <td><code>DateUtils.getWeekDay(dataRef): string</code></td>
354
+ </tr>
355
+ <tr>
356
+ <td>Retorna o dia da data passada</td>
357
+ <td><code>int getDiaData(LocalDate data)</code></td>
358
+ <td><code>DateUtils.getDay(dataRef): number</code></td>
359
+ </tr>
360
+ <tr>
361
+ <td>Retorna o mês da data passada</td>
362
+ <td><code>int getMesData(LocalDate data)</code></td>
363
+ <td><code>DateUtils.getMonth(dataRef): number</code></td>
364
+ </tr>
365
+ <tr>
366
+ <td>Retorna o ano da data passada</td>
367
+ <td><code>int getAnoData(LocalDate data)</code></td>
368
+ <td><code>DateUtils.getYear(dataRef): number</code></td>
369
+ </tr>
370
+ <tr>
371
+ <td>Retorna a quantidade de dias em um determinado mês</td>
372
+ <td><code>int getQtdDiasMes(LocalDate data)</code></td>
373
+ <td><code>DateUtils.getNumberOfDaysInMonth(dataRef): number</code></td>
374
+ </tr>
375
+ <tr>
376
+ <td>Retorna a última data em um determinado mês</td>
377
+ <td><code>LocalDate getUltimoDiaMes(LocalDate data)</code></td>
378
+ <td><code>DateUtils.getLastDayOfMonth(dataRef): Date</code></td>
379
+ </tr>
380
+ <tr>
381
+ <td>Retorna o usuário corrente</td>
382
+ <td><code>long getUsuarioAtivo()</code></td>
383
+ <td><code>context.currentUser: User</code></td>
384
+ </tr>
385
+ <tr>
386
+ <td>Retorna as contas dos bancos de horas que o colaborador possui na data</td>
387
+ <td><code>List&lt;IContaBH&gt; buscaContas(int numEmp, int tipCol, int numCad, LocalDate data)</code></td>
388
+ <td>
389
+ <code>contract.hourBankAccounts: HourBankAccount[]</code> ou<br>
390
+ <code>timeEvaluation.hourBankAccounts: HourBankAccount[]</code>
391
+ </td>
392
+ </tr>
393
+ <tr>
394
+ <td>Retorna o colaborador</td>
395
+ <td><code>IColaboradorPonto getColaborador(int empresa, int tipo, int cadastro)</code></td>
396
+ <td><code>contract.employee: Employee</code></td>
397
+ </tr>
398
+ <tr>
399
+ <td>Retorna a data inicial do processamento do cálculo</td>
400
+ <td><code>LocalDate getDataInicial()</code></td>
401
+ <td><code>context.startDate: Date</code></td>
402
+ </tr>
403
+ <tr>
404
+ <td>Retorna a data final do processamento do cálculo</td>
405
+ <td><code>LocalDate getDataFinal()</code></td>
406
+ <td><code>context.endDate: Date</code></td>
407
+ </tr>
408
+ <tr>
409
+ <td>Retorna uma lista de históricos de afastamento na apuração</td>
410
+ <td><code>List&lt;HistoricoAfastamento&gt; getHistoricosAfastamento()</code></td>
411
+ <td><code>timeEvaluation.leaveHistories: LeaveHistory[]</code></td>
412
+ </tr>
413
+ <tr>
414
+ <td>Retorna o histórico de apuração do colaborador na apuração</td>
415
+ <td><code>HistoricoApuracao getHistoricoApuracao()</code></td>
416
+ <td><code>timeEvaluation.timeEvaluationHistory: TimeEvaluationHistory</code></td>
417
+ </tr>
418
+ <tr>
419
+ <td>Retorna o histórico do cargo do colaborador na apuração</td>
420
+ <td><code>HistoricoCargo getHistoricoCargo()</code></td>
421
+ <td><code>timeEvaluation.jobPositionHistory: JobPositionHistory</code></td>
422
+ </tr>
423
+ <tr>
424
+ <td>Retorna o histórico do centro de custo do colaborador na apuração</td>
425
+ <td><code>HistoricoCentroCusto getHistoricoCentrodeCusto()</code></td>
426
+ <td><code>timeEvaluation.costCenter: CostCenter</code></td>
427
+ </tr>
428
+ <tr>
429
+ <td>Retorna o histórico de escala do colaborador na apuração</td>
430
+ <td><code>HistoricoEscala getHistoricoEscala()</code></td>
431
+ <td><code>timeEvaluation.workshiftHistory: WorkshiftHistory</code></td>
432
+ </tr>
433
+ <tr>
434
+ <td>Retorna o histórico de filial do colaborador na apuração</td>
435
+ <td><code>HistoricoFilial getHistoricoFilial()</code></td>
436
+ <td><code>timeEvaluation.companyBranchHistory: CompanyBranchHistory</code></td>
437
+ </tr>
438
+ <tr>
439
+ <td>Retorna o histórico do sindicato do colaborador na apuração</td>
440
+ <td><code>HistoricoSindicato getHistoricoSindicato()</code></td>
441
+ <td><code>timeEvaluation.syndicate: Syndicate</code></td>
442
+ </tr>
443
+ <tr>
444
+ <td>Retorna o histórico de vínculo do colaborador na apuração</td>
445
+ <td><code>HistoricoVinculo getHistoricoVinculo()</code></td>
446
+ <td><code>timeEvaluation.employmentRelationshipHistory: EmploymentRelationshipHistory</code></td>
447
+ </tr>
448
+ <tr>
449
+ <td>Retorna uma lista de autorização de horas extras do colaborador na apuração</td>
450
+ <td><code>List&lt;AutorizacaoHorasExtras&lt; getAutorizacoesHorasExtras()</code></td>
451
+ <td><code>timeEvaluation.overtimeAuthorizations: OvertimeAuthorization[]</code></td>
452
+ </tr>
453
+ <tr>
454
+ <td>Retorna a programação de ponte do colaborador na apuração</td>
455
+ <td><code>Ponte getPonte()</code></td>
456
+ <td><code>timeEvaluation.bridge: Bridge</code></td>
457
+ </tr>
458
+ <tr>
459
+ <td>Retorna uma lista de sobreaviso do colaborador na apuração</td>
460
+ <td><code>List&lt;SobreavisoProntidao&lt; getSobreaviso()</code></td>
461
+ <td><code>timeEvaluation.readinesses: Readiness[]</code></td>
462
+ </tr>
463
+ <tr>
464
+ <td>Retorna o feriado na data</td>
465
+ <td><code>Feriado getFeriado(LocalDate data)</code></td>
466
+ <td>
467
+ <code>timeEvaluation.holiday: Holiday</code> ou <br>
468
+ <code>contract.getHolidayByDate(date): Holiday</code>
469
+ </td>
470
+ </tr>
471
+ <tr>
472
+ <td>Retorna o horário na apuração</td>
473
+ <td><code>Horario getHorario()</code></td>
474
+ <td><code>timeEvaluation.workschedule: Workschedule</code></td>
475
+ </tr>
476
+ <tr>
477
+ <td>Retorna a escala na apuração</td>
478
+ <td><code>Escala getEscala()</code></td>
479
+ <td><code> timeEvaluation.workshift: Workshift</code></td>
480
+ </tr>
481
+ <tr>
482
+ <td>Retorna uma lista com as marcações realizadas</td>
483
+ <td><code>List&lt;MarcacaoRegra&lt; getMarcacoesRealizadas(boolean isConsiderarGeradas)</code></td>
484
+ <td><code>timeEvaluation.getClockingEvents(true): ClockingEvent[]</code></td>
485
+ </tr>
486
+ <tr>
487
+ <td>Retorna o total de minutos apurados em determinada situação</td>
488
+ <td><code>int getHorSit(int codSit)</code></td>
489
+ <td><code>timeEvaluation.getSituationHour(situationCode): number</code></td>
490
+ </tr>
491
+ <tr>
492
+ <td>Retorna o total de minutos apurados em um range de situações</td>
493
+ <td><code>int getHorSitFaixa(int sitIni, int sitFim)</code></td>
494
+ <td><code>timeEvaluation.getSituationHourByRange(startCode, endCode): number</code></td>
495
+ </tr>
496
+ <tr>
497
+ <td>Retorna o total de minutos apurados em um grupo de situações</td>
498
+ <td><code>int getHorSit(int... codSit)</code></td>
499
+ <td><code>timeEvaluation.getSituationHourByCodes(15, 16): number</code></td>
500
+ </tr>
501
+ <tr>
502
+ <td>Retorna o código do horário conforme a escala</td>
503
+ <td><code>int getHorarioEscala()</code></td>
504
+ <td><code>timeEvaluation.workscheduleWorkshift: Workschedule</code></td>
505
+ </tr>
506
+ <tr>
507
+ <td>Retorna a programação de troca de escala</td>
508
+ <td><code>int getTrocaEscala(LocalDate data)</code></td>
509
+ <td><code>timeEvaluation.workshiftChange: WorkshiftChange</code></td>
510
+ </tr>
511
+ <tr>
512
+ <td>Retorna a programação de troca de horário</td>
513
+ <td><code>int getTrocaHorario(LocalDate data)</code></td>
514
+ <td><code>timeEvaluation.workscheduleChange: WorkscheduleChange</code></td>
515
+ </tr>
516
+ <tr>
517
+ <td>Retorna a previsão de horas de trabalho</td>
518
+ <td><code>ISeparacaoHoras getHorasPrevistas(int codigoHorario)</code></td>
519
+ <td><code>timeEvaluation.estimatedHours.work: SeparatedHours[]</code></td>
520
+ </tr>
521
+ <tr>
522
+ <td>Retorna a previsão de horas de refeição</td>
523
+ <td><code>ISeparacaoHoras getRefeicaoPrevista()</code></td>
524
+ <td><code>timeEvaluation.estimatedHours.meal: SeparatedHours[]</code></td>
525
+ </tr>
526
+ <tr>
527
+ <td>Retorna a previsão de horas de lanche</td>
528
+ <td><code>ISeparacaoHoras getLanchePrevisto(int parte)</code></td>
529
+ <td><code>timeEvaluation.estimatedHours.snack: SeparatedHours[]</code></td>
530
+ </tr>
531
+ <tr>
532
+ <td>Permite cancelar o processamento e mostrar mensagem</td>
533
+ <td><code>void mensagemLog(String mensagem)</code></td>
534
+ <td>
535
+ <code>context.logError(msg): void</code> ou <br/>
536
+ <code>timeEvaluation.invalidate(msg): void</code>
537
+ </td>
538
+ </tr>
539
+ <tr>
540
+ <td>Retorna horas extras diurnas</td>
541
+ <td><code>ISeparacaoHoras getExtrasIntervalo(int horIni, int horFim)</code></td>
542
+ <td><code>timeEvaluation.getOvertimeByRangeTime(360, 480): SeparatedHours</code></td>
543
+ </tr>
544
+ <tr>
545
+ <td>Soma uma quantidade de horas em determinada situação</td>
546
+ <td><code>void somaHorasSituacao(int codSit, int qtdeHoras)</code></td>
547
+ <td><code>timeEvaluation.sumSituationHour(situationCode, numberOfHours): void</code></td>
548
+ </tr>
549
+ <tr>
550
+ <td>Zera a quantidade de horas apuradas de uma determinada situação</td>
551
+ <td><code>void zeraHorasSituacao(int... codSit)</code></td>
552
+ <td>
553
+ <code>timeEvaluation.resetSituationHour(situationCode): void</code> ou <br/>
554
+ <code>timeEvaluation.resetSituationHourByCodes(situationCode[]): void</code>
555
+ </td>
556
+ </tr>
557
+ <tr>
558
+ <td>Zera a quantidade de horas apuradas de uma faixa de situações</td>
559
+ <td><code>void zeraHorasSituacaoFaixa(int sitIni, int sitFim)</code></td>
560
+ <td><code>timeEvaluation.resetSituationHourByRange(startCode, endCode): void</code></td>
561
+ </tr>
562
+ <tr>
563
+ <td>Altera a quantidade de horas apuradas</td>
564
+ <td><code>void setHorSit(int codSit, int horas)</code></td>
565
+ <td><code>timeEvaluation.setSituationHour(situationCode, numberOfHours): void</code></td>
566
+ </tr>
567
+ <tr>
568
+ <td>Retorna a quantidade de horas diurnas e noturnas de um tipo de intervalo</td>
569
+ <td><code>ISeparacaoHoras getHorasSeparadas(TipoIntervalo tipo)</code></td>
570
+ <td><code>timeEvaluation.getSeparateHours(intervalType, tolerance): SeparatedHours</code></td>
571
+ </tr>
572
+ <tr>
573
+ <td>Retorna a quantidade de horas diurnas e noturnas de um tipo de intervalo com tolerância</td>
574
+ <td><code>ISeparacaoHoras getHorasSeparadas(TipoIntervalo tipo, boolean consideraTolerancia)</code></td>
575
+ <td><code>timeEvaluation.getSeparateHours(intervalType, tolerance): SeparatedHours</code></td>
576
+ </tr>
577
+ <tr>
578
+ <td>Retorna a quantidade de horas diurnas e noturnas de um tipo de intervalo e expediente</td>
579
+ <td><code>ISeparacaoHoras getHorasSeparadas(TipoIntervalo tipo, int expediente)</code></td>
580
+ <td><code>timeEvaluation.getSeparateHoursWithExpedientPart(intervalType, part, tolerance): SeparatedHours</code></td>
581
+ </tr>
582
+ <tr>
583
+ <td>Retorna a quantidade de horas diurnas e noturnas de um tipo de intervalo e expediente com tolerância</td>
584
+ <td><code>ISeparacaoHoras getHorasSeparadas(TipoIntervalo tipo, int expediente, boolean consideraTolerancia)</code></td>
585
+ <td><code>timeEvaluation.getSeparateHoursWithExpedientPart(intervalType, part, tolerance): SeparatedHours</code></td>
586
+ </tr>
587
+ <tr>
588
+ <td>Retorna a quantidade de horas diurnas e noturnas de um subtipo de intervalo</td>
589
+ <td><code>ISeparacaoHoras getHorasSeparadas(SubTipoIntervalo subTipo)</code></td>
590
+ <td><code>timeEvaluation.getSeparateHoursIntervalSubType(intervalSubType, tolerance): SeparatedHours</code></td>
591
+ </tr>
592
+ <tr>
593
+ <td>Retorna a quantidade de horas diurnas e noturnas de um subtipo de intervalo com tolerância</td>
594
+ <td><code>ISeparacaoHoras getHorasSeparadas(SubTipoIntervalo subTipo, boolean consideraTolerancia)</code></td>
595
+ <td><code>timeEvaluation.getSeparateHoursIntervalSubType(intervalSubType, tolerance): SeparatedHours</code></td>
596
+ </tr>
597
+ <tr>
598
+ <td>Retorna a quantidade de horas diurnas e noturnas de um subtipo de intervalo e expediente</td>
599
+ <td><code>ISeparacaoHoras getHorasSeparadas(SubTipoIntervalo subTipo, int expediente)</code></td>
600
+ <td><code>timeEvaluation.getSeparateHoursIntervalSubTypeWithExpedientPart (intervalSubType, part, tolerance): SeparatedHours</code></td>
601
+ </tr>
602
+ <tr>
603
+ <td>Retorna a quantidade de horas diurnas e noturnas de um subtipo de intervalo e expediente com tolerância</td>
604
+ <td><code>ISeparacaoHoras getHorasSeparadas(SubTipoIntervalo subTipo, int expediente, boolean consideraTolerancia)</code></td>
605
+ <td><code>timeEvaluation.getSeparateHoursIntervalSubTypeWithExpedientPart (intervalSubType, part, tolerance): SeparatedHours</code></td>
606
+ </tr>
607
+ <tr>
608
+ <td>Permite modificar o indicador para gerar pendência no dia apurado</td>
609
+ <td><code>void setGerarPendenciaAcerto(boolean gerarPendencia)</code></td>
610
+ <td><code>timeEvaluation.generatePendingAdjustment(true): void</code></td>
611
+ </tr>
612
+ <tr>
613
+ <td>Retorna o indicador de que no dia apurado será gerada uma pendência</td>
614
+ <td><code>boolean isGerarPendenciaAcerto()</code></td>
615
+ <td><code>timeEvaluation.generatePendingAdjustment: boolean</code></td>
616
+ </tr>
617
+ <tr>
618
+ <td>Retorna o indicador de que o dia atual tem falta de marcação</td>
619
+ <td><code>boolean isFaltaMarcacao()</code></td>
620
+ <td><code>timeEvaluation.missingClockingEvent: boolean</code></td>
621
+ </tr>
622
+ <tr>
623
+ <td>Retorna a definição de situação que está sendo utilizada na apuração</td>
624
+ <td><code>DefinicoesSituacoes getDefinicaoSituacoes()</code></td>
625
+ <td><code>timeEvaluation.situationDefinition: TimeEvaluationSituationDefinitionHistory</code></td>
626
+ </tr>
627
+ <tr>
628
+ <td>Retorna a lista de compensações existente para o colaborador</td>
629
+ <td><code>List&lt;Compensacao&lt;> getCompensacoes()</code></td>
630
+ <td><code>timeEvaluation.: Compensation[]</code></td>
631
+ </tr>
632
+ <tr>
633
+ <td>Retorna uma lista de intervalos calculados na apuração</td>
634
+ <td><code>List&lt;IntervaloCalculo&lt; getIntervalosCalculados()</code></td>
635
+ <td>
636
+ <code>timeEvaluation.intervals: Interval[]</code> ou<br/>
637
+ <code>timeEvaluation.getCalculatedIntervalByType(intervalType): Interval[]</code> ou<br/>
638
+ <code>timeEvaluation.getCalculatedIntervalBySubType(intervalSubType): Interval[]</code>
639
+ </td>
640
+ </tr>
641
+ <tr>
642
+ <td>Retorna um determinado intervalo calculado na apuração indexado</td>
643
+ <td><code>IntervaloCalculo getIntervaloCalculado(int indice)</code></td>
644
+ <td><code>timeEvaluation.getCalculatedIntervalByIndex(index): Interval</code></td>
645
+ </tr>
646
+ <tr>
647
+ <td>Retorna a quantidade de horas trabalhadas no dia</td>
648
+ <td><code>ISeparacaoHoras getHorasTrabalhadas()</code></td>
649
+ <td><code>timeEvaluation.getSeparateHours(IntervalTypes.WORKING, true): SeparatedHours</code></td>
650
+ </tr>
651
+ <tr>
652
+ <td>Retorna a quantidade de minutos trabalhados em determinada parte do expediente</td>
653
+ <td><code>ISeparacaoHoras getHorasTrabalhadas(int parte)</code></td>
654
+ <td><code>timeEvaluation.getSeparateHoursWithExpedientPart (IntervalTypes.WORKING, part, tolerance): SeparatedHours</code></td>
655
+ </tr>
656
+ </tbody>
657
+ </table>
658
+