@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,76 @@
1
+ import { ObjectUtils } from "src/utils/object.utils";
2
+ import { WorkshiftBase, WorkshiftBaseParams } from "../foundation/workshiftBase";
3
+
4
+ /**
5
+ * @hidden
6
+ * Histórico de escala do colaborador.
7
+ * O histórico de escala é utilizado para verificar o escala do colaborador em uma data específica.
8
+ */
9
+ export interface WorkshiftChangeParams extends WorkshiftBaseParams {
10
+ /**
11
+ * Data final da troca de escala.
12
+ */
13
+ endDate: Date;
14
+ }
15
+
16
+ /**
17
+ * Representa uma programação de troca de escala.
18
+ *
19
+ * @example
20
+ * ```typescript
21
+ * workshiftChange.startDate; // Retorna a data inicial da troca de escala.
22
+ * workshiftChange.endDate; // Retorna a data final da troca de escala.
23
+ * workshiftChange.workshift; // Retorna a escala associada à troca.
24
+ * workshiftChange.workshift.code; // Retorna o código da escala.
25
+ * ```
26
+ * @see {@link Workshift}
27
+ *
28
+ */
29
+ export class WorkshiftChange extends WorkshiftBase {
30
+
31
+ /**
32
+ * Data final da troca de escala.
33
+ */
34
+ protected readonly _endDate: Date;
35
+
36
+ /**
37
+ * @hidden
38
+ * Construtor da classe WorkshiftChange.
39
+ * @param params Parâmetros necessários para a criação de WorkshiftChange.
40
+ */
41
+ constructor(params: WorkshiftChangeParams) {
42
+ super(params);
43
+ this._endDate = ObjectUtils.toDateOrThrow(params.endDate, "WorkshiftChange.endDate");
44
+ }
45
+
46
+ /**
47
+ * Data final da troca de escala.
48
+ * @example
49
+ * ```typescript
50
+ * let endDate = workshiftChange.endDate; // Retorna a data final da troca de escala.
51
+ * ```
52
+ *
53
+ * @returns Data final da troca de escala.
54
+ *
55
+ */
56
+ get endDate(): Date {
57
+ return this._endDate;
58
+ }
59
+
60
+ /**
61
+ * Clona a instância de WorkshiftChange.
62
+ *
63
+ * @returns Uma nova instância de WorkshiftChange com os mesmos parâmetros.
64
+ */
65
+ public static clone(object: WorkshiftChange): WorkshiftChange {
66
+ const workshiftChangeParams: WorkshiftChangeParams = {
67
+ startDate: object.startDate,
68
+ endDate: object.endDate,
69
+ workshiftId: object.workshiftId,
70
+ workshiftGroupId: object.workshiftGroupId
71
+ };
72
+ return new WorkshiftChange(workshiftChangeParams);
73
+ }
74
+
75
+
76
+ }
@@ -0,0 +1,46 @@
1
+ /**
2
+ * @hidden
3
+ * Parâmetros para criar um motivo de AdjustmentReason.
4
+ * @param code código do motivo de acerto.
5
+ * @typedef {Object} AdjustmentReasonParams
6
+ */
7
+ export interface AdjustmentReasonParams {
8
+ code: number;
9
+ }
10
+
11
+ /**
12
+ * Representa um motivo de acerto.
13
+ * Um motivo de acerto é utilizado para justificar ajustes em horários ou datas de trabalho.
14
+ * @example
15
+ * ```typescript
16
+ * adjustmentReason.code; // Retorna o código do motivo de acerto.
17
+ * ```
18
+ */
19
+ export class AdjustmentReason {
20
+ /**
21
+ * Código do motivo de acerto.
22
+ * @param code código do motivo de acerto.
23
+ */
24
+ private readonly _code: number;
25
+
26
+ /**
27
+ * @hidden
28
+ */
29
+ constructor(params: AdjustmentReasonParams) {
30
+ this._code = params.code;
31
+ }
32
+
33
+ /**
34
+ * Código do motivo de acerto.
35
+ *
36
+ * @example
37
+ * ```typescript
38
+ * let code = adjustmentReason.code; // Retorna o código do motivo de acerto.
39
+ * ```
40
+ * @returns Código do motivo de acerto.
41
+ */
42
+ get code(): number {
43
+ return this._code;
44
+ }
45
+ }
46
+
@@ -0,0 +1,198 @@
1
+ import { ObjectUtils } from "../../utils/object.utils";
2
+ import { DateUtils } from '../../utils/dateUtils';
3
+
4
+ /**
5
+ * @hidden
6
+ * Interface para os parâmetros de ClockingEvent.
7
+ */
8
+ export interface ClockingEventParams {
9
+ clockingEventDate: Date;
10
+ clockingEventTime: number;
11
+ functionCode: number;
12
+ originType: ClockingEventOriginType;
13
+ useType: ClockingUseType;
14
+ }
15
+
16
+ /**
17
+ * Enumeração para os tipos de origem de marcação.
18
+ * @enum {string}
19
+ */
20
+ export enum ClockingEventOriginType {
21
+ /**
22
+ * Marcação digitada.
23
+ */
24
+ TYPED = "TYPED",
25
+ /**
26
+ * Marcação eletrônica.
27
+ */
28
+ ELECTRONIC = "ELECTRONIC",
29
+ /**
30
+ * Marcação gerada.
31
+ */
32
+ GENERATED = "GENERATED"
33
+ }
34
+
35
+ /**
36
+ * Enumeração para tipo de uso de marcação.
37
+ * @enum {string}
38
+ * Possíveis valores:
39
+ * - `CLOCKING`: Evento padrão de marcação de ponto.
40
+ * - `WAITING`: Evento de espera para motoristas.
41
+ * - `REQUIRED_STOP`: Evento de parada obrigatória para motoristas.
42
+ * - `DRIVING`: Evento de direção para motoristas.
43
+ */
44
+ export enum ClockingUseType {
45
+ /**
46
+ * Evento padrão de marcação de ponto.
47
+ */
48
+ CLOCKING = "CLOCKING",
49
+ /**
50
+ * Evento de pausa abonada.
51
+ */
52
+ PAID_BREAK = "PAID_BREAK",
53
+ /**
54
+ * Evento de espera para motoristas.
55
+ */
56
+ WAITING = "WAITING",
57
+ /**
58
+ * Evento de parada obrigatória para motoristas.
59
+ */
60
+ REQUIRED_STOP = "REQUIRED_STOP",
61
+ /**
62
+ * Evento de direção para motoristas.
63
+ */
64
+ DRIVING = "DRIVING",
65
+ }
66
+
67
+
68
+ /**
69
+ * Representa uma marcação de ponto.
70
+ *
71
+ * @example
72
+ * ```typescript
73
+ * clockingEvent.clockingEventDateTime; // Retorna a data e hora da marcação.
74
+ * clockingEvent.clockingEventDate; // Retorna a data da marcação.
75
+ * clockingEvent.clockingEventTime; // Retorna a hora da marcação.
76
+ * clockingEvent.functionCode; // Retorna o código da função do relógio coletor.
77
+ * clockingEvent.originType; // Retorna a origem da marcação.
78
+ * clockingEvent.useType; // Retorna o tipo de uso da marcação.
79
+ * ```
80
+ *
81
+ * @see {@link ClockingEventOriginType}
82
+ * @see {@link ClockingUseType}
83
+ */
84
+ export class ClockingEvent {
85
+ /**
86
+ * Data da marcação.
87
+ */
88
+ private readonly _clockingEventDate: Date;
89
+ /**
90
+ * Hora da marcação.
91
+ */
92
+ private readonly _clockingEventTime: number;
93
+ /**
94
+ * Código da função do relógio coletor.
95
+ */
96
+ private readonly _functionCode: number;
97
+ /**
98
+ * Origem da marcação.
99
+ */
100
+ private readonly _originType: ClockingEventOriginType;
101
+ /**
102
+ * Tipo de uso da marcação.
103
+ */
104
+ private readonly _useType: ClockingUseType;
105
+
106
+ /**
107
+ * @hidden
108
+ */
109
+ constructor(params: ClockingEventParams) {
110
+ this._clockingEventDate = ObjectUtils.toDateOrThrow(params.clockingEventDate, "clockingEvent.clockingEventDate");
111
+ this._clockingEventTime = params.clockingEventTime;
112
+ this._functionCode = params.functionCode;
113
+ this._originType = params.originType;
114
+ this._useType = params.useType;
115
+ }
116
+
117
+ /**
118
+ * Retorna a data e hora da marcação.
119
+ *
120
+ * @example
121
+ * ```typescript
122
+ * let clockingDateTime = clockingEvent.clockingEventDateTime; // Retorna a data e hora da marcação.
123
+ * ```
124
+ * @return Data e hora da marcação.
125
+ */
126
+ get clockingEventDateTime(): Date {
127
+ return DateUtils.addMinutes(this._clockingEventDate, this._clockingEventTime);
128
+ }
129
+
130
+ /**
131
+ * Data da marcação.
132
+ * @example
133
+ * ```typescript
134
+ * let clockingDate = clockingEvent.clockingEventDate; // Retorna a data da marcação.
135
+ * ```
136
+ */
137
+ get clockingEventDate(): Date {
138
+ return this._clockingEventDate;
139
+ }
140
+
141
+ /**
142
+ * Hora da marcação em quantidade de minutos desde a meia-noite (08:00 = 480 min).
143
+ * @example
144
+ * ```typescript
145
+ * let clockingTime = clockingEvent.clockingEventTime; // Retorna a hora da marcação (08:00 = 480 min).
146
+ * ```
147
+ * @return Hora da marcação em minutos desde a meia-noite.
148
+ */
149
+ get clockingEventTime(): number {
150
+ return this._clockingEventTime;
151
+ }
152
+
153
+ /**
154
+ * Código da função do relógio coletor.
155
+ * @example
156
+ * ```typescript
157
+ * let functionCode = clockingEvent.functionCode; // Retorna o código da função do relógio coletor.
158
+ * ```
159
+ * @return Código da função do relógio coletor.
160
+ *
161
+ */
162
+ get functionCode(): number {
163
+ return this._functionCode;
164
+ }
165
+
166
+ /**
167
+ * Origem da marcação.
168
+ * @example
169
+ * ```typescript
170
+ * let originType = clockingEvent.originType; // Retorna a origem da marcação.
171
+ * ```
172
+ * @return Origem da marcação.
173
+ * @see {@link ClockingEventOriginType}
174
+ */
175
+ get originType(): ClockingEventOriginType {
176
+ return this._originType;
177
+ }
178
+
179
+ /**
180
+ * Tipo de uso do evento de marcação.
181
+ *
182
+ * Possíveis valores:
183
+ * - ClockingUseType.CLOCKING: Evento padrão de marcação de ponto.
184
+ * - (outros valores, se existirem)
185
+ *
186
+ * @example
187
+ * ```typescript
188
+ * let useType = clockingEvent.useType; // Retorna o tipo de uso da marcação.
189
+ * ```
190
+ * @return Tipo de uso da marcação.
191
+ * @see {@link ClockingUseType}
192
+ */
193
+ get useType(): ClockingUseType {
194
+ return this._useType;
195
+ }
196
+ }
197
+
198
+
@@ -0,0 +1,245 @@
1
+ import { SeparatedHours, SeparatedHoursParams } from "../timeEvaluation/separatedHours";
2
+
3
+
4
+ /**
5
+ * @hidden
6
+ * Interface para os parâmetros do construtor da EstimatedHours.
7
+ */
8
+ export interface EstimatedHoursParams {
9
+ meal: SeparatedHoursParams[];
10
+ snack: SeparatedHoursParams[];
11
+ work: SeparatedHoursParams[];
12
+ }
13
+
14
+ /**
15
+ * Representa a previsão de horas.
16
+ * Contém as horas previstas para refeições, lanches e trabalho.
17
+ * @example
18
+ * ```typescript
19
+ * estimatedHours.getWorkHours(1); // Retorna as horas de trabalho do primeiro intervalo do tipo work.
20
+ * estimatedHours.getWorkHours(); // Retorna o total das horas de trabalho do dia (quando não passa parâmetro).
21
+ * estimatedHours.getMealHours(1); // Retorna as horas de refeição do primeiro intervalo do tipo meal.
22
+ * estimatedHours.getSnackHours(); // Retorna o total das horas de lanche do dia (quando não passa parâmetro).
23
+ * ```
24
+ * @see {@link SeparatedHours}
25
+ */
26
+ export class EstimatedHours {
27
+ /**
28
+ * Horas de refeições previstas.
29
+ */
30
+ private readonly _meal: SeparatedHours[];
31
+ /**
32
+ * Horas de lanches previstas.
33
+ */
34
+ private readonly _snack: SeparatedHours[];
35
+ /**
36
+ * Horas de trabalho previstas.
37
+ */
38
+ private readonly _work: SeparatedHours[];
39
+
40
+ /**
41
+ * @hidden
42
+ * Construtor da classe EstimatedHours.
43
+ * @param params Parâmetros para inicializar EstimatedHours.
44
+ */
45
+ constructor(params: EstimatedHoursParams) {
46
+ this._meal = [];
47
+ if (Array.isArray(params.meal)) {
48
+ for (const mealItem of params.meal) {
49
+ this._meal.push(
50
+ new SeparatedHours(mealItem)
51
+ );
52
+ }
53
+ }
54
+
55
+ this._snack = [];
56
+ if (Array.isArray(params.snack)) {
57
+ for (const snackItem of params.snack) {
58
+ this._snack.push(
59
+ new SeparatedHours(snackItem)
60
+ );
61
+ }
62
+ }
63
+
64
+ this._work = [];
65
+ if (Array.isArray(params.work)) {
66
+ for (const workItem of params.work) {
67
+ this._work.push(
68
+ new SeparatedHours(workItem)
69
+ );
70
+ }
71
+ }
72
+ }
73
+
74
+ /**
75
+ * Retorna as horas previstas para refeições.
76
+ *
77
+ * @example
78
+ * ```typescript
79
+ * estimatedHours.meal; // Retorna as horas de refeição.
80
+ * ```
81
+ *
82
+ * @returns Uma lista de objetos do tipo SeparatedHours que contém as horas diurnas e noturnas.
83
+ * @see {@link SeparatedHours}
84
+ */
85
+ get meal(): SeparatedHours[] {
86
+ return this._meal;
87
+ }
88
+
89
+ /**
90
+ * Retorna as horas previstas para lanches.
91
+ *
92
+ * @example
93
+ * ```typescript
94
+ * estimatedHours.snack; // Retorna as horas de lanche.
95
+ * ```
96
+ * @returns Uma lista de objetos do tipo SeparatedHours que contém as horas diurnas e noturnas.
97
+ * @see {@link SeparatedHours}
98
+ */
99
+ get snack(): SeparatedHours[] {
100
+ return this._snack;
101
+ }
102
+
103
+ /**
104
+ * Retorna as horas previstas para horas de trabalho.
105
+ *
106
+ * @example
107
+ * ```typescript
108
+ * estimatedHours.work; // Retorna as horas de trabalho.
109
+ * ```
110
+ * @returns Um array de objetos do tipo SeparatedHours que contém as horas diurnas e noturnas.
111
+ * @see {@link SeparatedHours}
112
+ */
113
+ get work(): SeparatedHours[] {
114
+ return this._work;
115
+ }
116
+
117
+ /**
118
+ * Retorna a previsão de horas trabalhadas.
119
+ *
120
+ * ```
121
+ * Representação de previsão de horas
122
+ *
123
+ * 08:00 - Início do expediente
124
+ * 10:00 - Início do primeiro lanche
125
+ * 10:15 - Fim do primeiro lanche
126
+ * 12:00 - Início do almoço
127
+ * 13:30 - Fim do almoço
128
+ * 16:30 - Início do segundo lanche
129
+ * 16:45 - Fim do segundo lanche
130
+ * 18:00 - Fim do expediente
131
+ *
132
+ * 08:00 10:00 10:15 12:00 13:30 16:30 16:45 18:00
133
+ * |------------|------------|------------|------------|------------|------------|------------|
134
+ * | work(1) | snack(1) | work(2) | meal(1) | work(3) | snack(2) | work(4) |
135
+ * ```
136
+ *
137
+ * workHours = estimatedHours.getWorkHours(3) retorna as horas de trabalho das 13:30 às 16:30 (180 minutos).
138
+ *
139
+ * workHours = estimatedHours.getWorkHours( ) retorna o total das horas de trabalho do dia (480 minutos).
140
+ *
141
+ * @example
142
+ * ```typescript
143
+ * const workHours = estimatedHours.getWorkHours(1);
144
+ * console.log(`Horas de trabalho: ${workHours.dailyHours} horas diurnas, ${workHours.nightlyHours} horas noturnas`);
145
+ * ```
146
+ * @param index Parâmetro opcional para consultar a as horas previstas do número do intervalo. Iniciando por 1.
147
+ * @returns Um objeto do tipo SeparatedHours que contém as horas diurnas e noturnas.
148
+ */
149
+ public getWorkHours(index?: number): SeparatedHours {
150
+ return this.getHours(this._work, index);
151
+ }
152
+
153
+ /**
154
+ * Retorna a previsão de horas de refeição.
155
+ *
156
+ * ```
157
+ * Representação de previsão de horas
158
+ *
159
+ * 08:00 - Início do expediente
160
+ * 10:00 - Início do primeiro lanche
161
+ * 10:15 - Fim do primeiro lanche
162
+ * 12:00 - Início do almoço
163
+ * 13:30 - Fim do almoço
164
+ * 16:30 - Início do segundo lanche
165
+ * 16:45 - Fim do segundo lanche
166
+ * 18:00 - Fim do expediente
167
+ *
168
+ * 08:00 10:00 10:15 12:00 13:30 16:30 16:45 18:00
169
+ * |------------|------------|------------|------------|------------|------------|------------|
170
+ * | work(1) | snack(1) | work(2) | meal(1) | work(3) | snack(2) | work(4) |
171
+ * ```
172
+ *
173
+ * mealHours = estimatedHours.getMealHours(1) retorna as horas da refeição das 12:00 às 13:30 (90 minutos).
174
+ *
175
+ * @example
176
+ * ```typescript
177
+ * const mealHours = estimatedHours.getMealHours(1);
178
+ * console.log(`Horas de refeição: ${mealHours.dailyHours} horas diurnas, ${mealHours.nightlyHours} horas noturnas`);
179
+ * ```
180
+ *
181
+ * @param index Parâmetro opcional para consultar a as horas previstas do número do intervalo. Iniciando por 1.
182
+ * @returns Um objeto do tipo SeparatedHours que contém as horas diurnas e noturnas.
183
+ */
184
+ public getMealHours(index?: number): SeparatedHours {
185
+ return this.getHours(this._meal, index);
186
+ }
187
+
188
+ /**
189
+ * Retorna a previsão de horas de lanche.
190
+ *
191
+ * ```
192
+ * Representação de previsão de horas
193
+ *
194
+ * 08:00 - Início do expediente
195
+ * 10:00 - Início do primeiro lanche
196
+ * 10:15 - Fim do primeiro lanche
197
+ * 12:00 - Início do almoço
198
+ * 13:30 - Fim do almoço
199
+ * 16:30 - Início do segundo lanche
200
+ * 16:45 - Fim do segundo lanche
201
+ * 18:00 - Fim do expediente
202
+ *
203
+ * 08:00 10:00 10:15 12:00 13:30 16:30 16:45 18:00
204
+ * |------------|------------|------------|------------|------------|------------|------------|
205
+ * | work(1) | snack(1) | work(2) | meal(1) | work(3) | snack(2) | work(4) |
206
+ * ```
207
+ *
208
+ * snackHours = estimatedHours.getSnackHours(2) retorna as horas do lanche das 16:30 às 16:45 (15 minutos).
209
+ *
210
+ * @example
211
+ * ```typescript
212
+ * const snackHours = estimatedHours.getSnackHours(1);
213
+ * console.log(`Horas de lanche: ${snackHours.dailyHours} horas diurnas, ${snackHours.nightlyHours} horas noturnas`);
214
+ * ```
215
+ *
216
+ * @param index Parâmetro opcional para consultar a as horas previstas do número do intervalo. Iniciando por 1.
217
+ * @returns Um objeto do tipo SeparatedHours que contém as horas diurnas e noturnas.
218
+ */
219
+ public getSnackHours(index?: number): SeparatedHours {
220
+ return this.getHours(this._snack, index);
221
+ }
222
+
223
+ private getHours(estimatedHours: SeparatedHours[], index?: number): SeparatedHours {
224
+ if (index == null) {
225
+ return estimatedHours.reduce((total, current) => {
226
+ total.sumSeparatedHours(current);
227
+ return total;
228
+ }, this.createEmptySeparatedHours());
229
+ }
230
+
231
+ if (this.isInvalidIndex(index, estimatedHours)) {
232
+ return this.createEmptySeparatedHours();
233
+ }
234
+
235
+ return estimatedHours[index-1] || this.createEmptySeparatedHours();
236
+ }
237
+
238
+ private isInvalidIndex(index: number, array: SeparatedHours[]): boolean {
239
+ return (index <= 0 || index > array.length);
240
+ }
241
+
242
+ private createEmptySeparatedHours(): SeparatedHours {
243
+ return new SeparatedHours({ dailyHours: 0, nightlyHours: 0 });
244
+ }
245
+ }