@careonbrasil/dashboard 14.0.0 → 14.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +359 -355
- package/esm2020/lib/dashboard.component.mjs +4 -4
- package/fesm2015/careonbrasil-dashboard.mjs +3 -3
- package/fesm2015/careonbrasil-dashboard.mjs.map +1 -1
- package/fesm2020/careonbrasil-dashboard.mjs +3 -3
- package/fesm2020/careonbrasil-dashboard.mjs.map +1 -1
- package/lib/dashboard.component.d.ts +1 -1
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -1,355 +1,359 @@
|
|
|
1
|
-
# @careonbrasil/dashboard
|
|
2
|
-
|
|
3
|
-
Biblioteca oficial de Dashboard de Recrutamento Institucional desenvolvida para o ecossistema CareOn.
|
|
4
|
-
|
|
5
|
-
Fornece uma solucao analitica completa de metricas de atracao e selecao de profissionais de saude, reunindo indicadores-chave (KPIs), analise qualitativa de desempenho com ondas vetoriais, aprofundamento individual por vaga, comparativos de mercado e alertas operacionais acionaveis.
|
|
6
|
-
|
|
7
|
-
Construida para projetos Angular 14 com suporte nativo a `ChangeDetectionStrategy.OnPush`, renderizacao vetorial SVG e integracao direta com `@careonbrasil/ng-charts`.
|
|
8
|
-
|
|
9
|
-
---
|
|
10
|
-
|
|
11
|
-
## Sumario
|
|
12
|
-
|
|
13
|
-
1. [Instalacao](#1-instalacao)
|
|
14
|
-
2. [Configuracao](#2-configuracao)
|
|
15
|
-
3. [Componentes](#3-componentes)
|
|
16
|
-
- [Dashboard Principal (`<careon-dashboard>`)](#1-dashboard-principal-careon-dashboard)
|
|
17
|
-
- [Esqueleto de Carregamento (`<careon-dashboard-skeleton>`)](#2-esqueleto-de-carregamento-careon-dashboard-skeleton)
|
|
18
|
-
- [Onda de Performance (`<careon-performance-wave>`)](#3-onda-de-performance-careon-performance-wave)
|
|
19
|
-
4. [Modelos de Dados](#4-modelos-de-dados)
|
|
20
|
-
- [DashboardOverviewData](#dashboardoverviewdata)
|
|
21
|
-
- [DashboardKpiSummary](#dashboardkpisummary)
|
|
22
|
-
- [DashboardAttentionItem](#dashboardattentionitem)
|
|
23
|
-
- [DashboardPerformanceAnalysis](#dashboardperformanceanalysis)
|
|
24
|
-
- [DashboardDutyAnalysis](#dashboarddutyanalysis)
|
|
25
|
-
- [DashboardDutySalaryComparison](#dashboarddutysalarycomparison)
|
|
26
|
-
- [Enums do Pacote](#enums-do-pacote)
|
|
27
|
-
5. [Compilacao e Publicacao](#5-compilacao-e-publicacao)
|
|
28
|
-
|
|
29
|
-
---
|
|
30
|
-
|
|
31
|
-
## 1. Instalacao
|
|
32
|
-
|
|
33
|
-
Instale o pacote
|
|
34
|
-
|
|
35
|
-
```bash
|
|
36
|
-
npm install @careonbrasil/dashboard
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
### Dependencias de Peer
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
|
44
|
-
|
|
|
45
|
-
| `@angular/
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
import {
|
|
64
|
-
|
|
65
|
-
@
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
],
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
1.
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
|
98
|
-
|
|
|
99
|
-
| `[
|
|
100
|
-
| `[
|
|
101
|
-
| `[
|
|
102
|
-
| `[
|
|
103
|
-
| `[
|
|
104
|
-
| `
|
|
105
|
-
| `
|
|
106
|
-
| `
|
|
107
|
-
| `
|
|
108
|
-
| `(
|
|
109
|
-
| `(
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
[
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
(
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
this.
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
console.log('
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
console.log('
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
console.log('
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
/**
|
|
221
|
-
|
|
222
|
-
/**
|
|
223
|
-
|
|
224
|
-
/**
|
|
225
|
-
|
|
226
|
-
/**
|
|
227
|
-
|
|
228
|
-
/**
|
|
229
|
-
|
|
230
|
-
/**
|
|
231
|
-
|
|
232
|
-
/**
|
|
233
|
-
|
|
234
|
-
/**
|
|
235
|
-
|
|
236
|
-
/**
|
|
237
|
-
|
|
238
|
-
/**
|
|
239
|
-
|
|
240
|
-
/**
|
|
241
|
-
|
|
242
|
-
/** Relacao de vagas
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
```
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
```
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
```
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
```
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
```
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
```
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
1
|
+
# @careonbrasil/dashboard
|
|
2
|
+
|
|
3
|
+
Biblioteca oficial de Dashboard de Recrutamento Institucional desenvolvida para o ecossistema CareOn.
|
|
4
|
+
|
|
5
|
+
Fornece uma solucao analitica completa de metricas de atracao e selecao de profissionais de saude, reunindo indicadores-chave (KPIs), analise qualitativa de desempenho com ondas vetoriais, aprofundamento individual por vaga, comparativos de mercado e alertas operacionais acionaveis.
|
|
6
|
+
|
|
7
|
+
Construida para projetos Angular 14 com suporte nativo a `ChangeDetectionStrategy.OnPush`, renderizacao vetorial SVG e integracao direta com `@careonbrasil/ng-charts`.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Sumario
|
|
12
|
+
|
|
13
|
+
1. [Instalacao](#1-instalacao)
|
|
14
|
+
2. [Configuracao](#2-configuracao)
|
|
15
|
+
3. [Componentes](#3-componentes)
|
|
16
|
+
- [Dashboard Principal (`<careon-dashboard>`)](#1-dashboard-principal-careon-dashboard)
|
|
17
|
+
- [Esqueleto de Carregamento (`<careon-dashboard-skeleton>`)](#2-esqueleto-de-carregamento-careon-dashboard-skeleton)
|
|
18
|
+
- [Onda de Performance (`<careon-performance-wave>`)](#3-onda-de-performance-careon-performance-wave)
|
|
19
|
+
4. [Modelos de Dados](#4-modelos-de-dados)
|
|
20
|
+
- [DashboardOverviewData](#dashboardoverviewdata)
|
|
21
|
+
- [DashboardKpiSummary](#dashboardkpisummary)
|
|
22
|
+
- [DashboardAttentionItem](#dashboardattentionitem)
|
|
23
|
+
- [DashboardPerformanceAnalysis](#dashboardperformanceanalysis)
|
|
24
|
+
- [DashboardDutyAnalysis](#dashboarddutyanalysis)
|
|
25
|
+
- [DashboardDutySalaryComparison](#dashboarddutysalarycomparison)
|
|
26
|
+
- [Enums do Pacote](#enums-do-pacote)
|
|
27
|
+
5. [Compilacao e Publicacao](#5-compilacao-e-publicacao)
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## 1. Instalacao
|
|
32
|
+
|
|
33
|
+
Instale o pacote via NPM ou Yarn:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
npm install @careonbrasil/dashboard
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### Dependencias de Peer
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
| Dependencia | Versao compativel | Finalidade |
|
|
43
|
+
| :--- | :--- | :--- |
|
|
44
|
+
| `@angular/core` | `>=14.0.0 <15.0.0` | Nucleo do Angular |
|
|
45
|
+
| `@angular/common` | `>=14.0.0 <15.0.0` | Diretivas comuns e pipes |
|
|
46
|
+
|
|
47
|
+
### Dependencias Diretas
|
|
48
|
+
|
|
49
|
+
| Dependencia | Versao compativel | Finalidade |
|
|
50
|
+
| :--- | :--- | :--- |
|
|
51
|
+
| `@careonbrasil/ng-charts` | `^14.0.6` | Biblioteca de graficos SVG CareOn |
|
|
52
|
+
| `tslib` | `^2.3.0` | Runtime helpers do TypeScript |
|
|
53
|
+
|
|
54
|
+
> **Nota de Estilo**: O dashboard utiliza tipografia corporativa padrao Montserrat. Recomenda-se carregar a fonte no projeto hospedeiro (`font-family: 'Montserrat', sans-serif`).
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## 2. Configuracao
|
|
59
|
+
|
|
60
|
+
Importe o modulo `CareonDashboardModule` no seu modulo Angular (ex: `AppModule` ou modulo de feature):
|
|
61
|
+
|
|
62
|
+
```typescript
|
|
63
|
+
import { NgModule } from '@angular/core';
|
|
64
|
+
import { BrowserModule } from '@angular/platform-browser';
|
|
65
|
+
import { CareonDashboardModule } from '@careonbrasil/dashboard';
|
|
66
|
+
|
|
67
|
+
import { AppComponent } from './app.component';
|
|
68
|
+
|
|
69
|
+
@NgModule({
|
|
70
|
+
declarations: [AppComponent],
|
|
71
|
+
imports: [
|
|
72
|
+
BrowserModule,
|
|
73
|
+
CareonDashboardModule
|
|
74
|
+
],
|
|
75
|
+
bootstrap: [AppComponent]
|
|
76
|
+
})
|
|
77
|
+
export class AppModule { }
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## 3. Componentes
|
|
83
|
+
|
|
84
|
+
### 1. Dashboard Principal (`<careon-dashboard>`)
|
|
85
|
+
|
|
86
|
+
Componente central que orquestra a visualizacao analitica completa. E estruturado nas seguintes secoes funcionais:
|
|
87
|
+
|
|
88
|
+
1. **Cabecalho com Filtros**: Titulo, subtitulo e alternador de periodo reativo (`Hoje`, `Semana`, `Mes`).
|
|
89
|
+
2. **Cards de Indicadores-Chave (KPIs)**: Vagas Publicadas, Candidatos Inscritos, Curriculos para Avaliar, Media de Candidatos por Vaga e Balanco de Status (Abertas vs. Encerradas) com badges de variacao comparativa.
|
|
90
|
+
3. **Secao "Precisa da sua atencao"**: Listagem de vagas prioritarias (sem candidatos ou com prazo expirando), com atalho para contato consultivo.
|
|
91
|
+
4. **Secao "Analise de Desempenho"**: Indicador de engajamento institucional por meio de curva de ondas vetorial (`PerformanceLevel`), status descritivo e recomendacoes praticas.
|
|
92
|
+
5. **Secao "Analise por Vaga"**: Seletor dropdown para inspecao de vaga individual com linha do tempo de candidaturas, taxa de conversao (grafico donut), funil de atracao e comparativo salarial regional.
|
|
93
|
+
6. **Secao "Candidaturas por Vaga"**: Grafico comparativo de barras verticais com linha de tendencia destacando a distribuicao de candidatos entre vagas ativas.
|
|
94
|
+
|
|
95
|
+
#### Inputs e Outputs
|
|
96
|
+
|
|
97
|
+
| Propriedade | Tipo | Padrao | Descricao |
|
|
98
|
+
| :--- | :--- | :--- | :--- |
|
|
99
|
+
| `[data]` | `DashboardOverviewData` | `undefined` | Conjunto completo de dados analiticos para alimentar o dashboard. |
|
|
100
|
+
| `[loading]` | `boolean` | `false` | Quando `true`, exibe o esqueleto de carregamento com animacao shimmer. |
|
|
101
|
+
| `[currentPeriod]` | `DashboardPeriod` | `DashboardPeriod.Week` | Periodo temporal ativo (`Today`, `Week`, `Month`). |
|
|
102
|
+
| `[title]` | `string` | `'Dashboard'` | Titulo principal exibido no cabecalho. |
|
|
103
|
+
| `[subtitle]` | `string` | `'Visao geral de recrutamento'` | Subtitulo ou nome da unidade no cabecalho. |
|
|
104
|
+
| `[emptyMessage]` | `string` | `'Nenhum dado registrado para o periodo selecionado.'` | Mensagem do estado vazio quando nao ha dados. |
|
|
105
|
+
| `[consultantPhone]` | `string` | `undefined` | Numero de telefone para o redirecionamento de input. |
|
|
106
|
+
| `[consultantMessage]` | `string` | `''` | Mensagem inicial pre-formatada para o WhatsApp. |
|
|
107
|
+
| `[zeroStateMode]` | `'publish' \| 'basic'` | `'publish'` | Modo de estado vazio das secoes: `'publish'` exibe chamada para publicacao; `'basic'` exibe aviso informativo. |
|
|
108
|
+
| `(periodChange)` | `EventEmitter<DashboardPeriod>` | — | Disparado quando o usuario clica em um filtro de periodo (`Hoje`, `Semana`, `Mes`). |
|
|
109
|
+
| `(attentionItemSelected)` | `EventEmitter<DashboardAttentionItem>` | — | Disparado ao clicar em um item da lista de atencao. |
|
|
110
|
+
| `(dutySelected)` | `EventEmitter<DashboardDutyAnalysis>` | — | Disparado ao selecionar uma vaga no dropdown da secao "Analise por Vaga". |
|
|
111
|
+
| `(publishDuty)` | `EventEmitter<string \| void>` | — | Disparado ao clicar nos botoes "Publicar Vaga" das areas de estado zero (emite o nome da secao de origem). |
|
|
112
|
+
| `(consultantClick)` | `EventEmitter<string>` | — | Disparado ao clicar nos links de suporte "Fale com um consultor" (emite a secao de origem). |
|
|
113
|
+
| `(itemSelected)` | `EventEmitter<DashboardItemSelectedEvent>` | — | Disparado ao selecionar elementos interativos dos graficos integrados. |
|
|
114
|
+
|
|
115
|
+
#### Exemplo de Uso
|
|
116
|
+
|
|
117
|
+
```html
|
|
118
|
+
<careon-dashboard
|
|
119
|
+
[data]="dashboardData"
|
|
120
|
+
[loading]="isLoading"
|
|
121
|
+
[currentPeriod]="selectedPeriod"
|
|
122
|
+
[title]="'Painel Institucional'"
|
|
123
|
+
[subtitle]="'Hospital Central'"
|
|
124
|
+
(periodChange)="onPeriodChange($event)"
|
|
125
|
+
(attentionItemSelected)="onAttentionItemClick($event)"
|
|
126
|
+
(dutySelected)="onDutyChange($event)"
|
|
127
|
+
(publishDuty)="onPublishDutyClick($event)"
|
|
128
|
+
(consultantClick)="onConsultantClick($event)"
|
|
129
|
+
></careon-dashboard>
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
```typescript
|
|
133
|
+
import { Component, OnInit } from '@angular/core';
|
|
134
|
+
import {
|
|
135
|
+
DashboardOverviewData,
|
|
136
|
+
DashboardPeriod,
|
|
137
|
+
DashboardAttentionItem,
|
|
138
|
+
DashboardDutyAnalysis
|
|
139
|
+
} from '@careonbrasil/dashboard';
|
|
140
|
+
|
|
141
|
+
@Component({
|
|
142
|
+
selector: 'app-analytics-page',
|
|
143
|
+
templateUrl: './analytics-page.component.html'
|
|
144
|
+
})
|
|
145
|
+
export class AnalyticsPageComponent implements OnInit {
|
|
146
|
+
dashboardData?: DashboardOverviewData;
|
|
147
|
+
isLoading = false;
|
|
148
|
+
selectedPeriod: DashboardPeriod = DashboardPeriod.Week;
|
|
149
|
+
|
|
150
|
+
ngOnInit(): void {
|
|
151
|
+
this.loadData(this.selectedPeriod);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
loadData(period: DashboardPeriod): void {
|
|
155
|
+
this.isLoading = true;
|
|
156
|
+
this.selectedPeriod = period;
|
|
157
|
+
// Exemplo: chamada a servico de dados
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
onPeriodChange(period: DashboardPeriod): void {
|
|
161
|
+
this.loadData(period);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
onAttentionItemClick(item: DashboardAttentionItem): void {
|
|
165
|
+
console.log('Navegar para vaga com atencao:', item.dutyId);
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
onDutyChange(duty: DashboardDutyAnalysis): void {
|
|
169
|
+
console.log('Vaga selecionada na analise:', duty.title);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
onPublishDutyClick(section?: string | void): void {
|
|
173
|
+
console.log('Abrir fluxo de publicacao a partir de:', section);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
onConsultantClick(section: string): void {
|
|
177
|
+
console.log('Contato com consultor acionado em:', section);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
---
|
|
183
|
+
|
|
184
|
+
### 2. Esqueleto de Carregamento (`<careon-dashboard-skeleton>`)
|
|
185
|
+
|
|
186
|
+
Componente visual independente que replica a disposicao geometrica dos cards de KPIs, listas de atencao e paineis de graficos do dashboard com animacao suave de shimmer. Util para telas com transicoes assincronas de carregamento.
|
|
187
|
+
|
|
188
|
+
```html
|
|
189
|
+
<careon-dashboard-skeleton></careon-dashboard-skeleton>
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
### 3. Onda de Performance (`<careon-performance-wave>`)
|
|
195
|
+
|
|
196
|
+
Componente vetorial SVG inline responsavel por desenhar as curvas caracteristicas de desempenho institucional. Pode ser utilizado separadamente em outros contextos institucionais:
|
|
197
|
+
|
|
198
|
+
#### Inputs
|
|
199
|
+
|
|
200
|
+
| Propriedade | Tipo | Padrao | Descricao |
|
|
201
|
+
| :--- | :--- | :--- | :--- |
|
|
202
|
+
| `[level]` | `PerformanceLevel` | `PerformanceLevel.Blue` | Nivel de performance que define a curvatura e as cores do gradiente (`Blue`, `Orange`, `Red`). |
|
|
203
|
+
|
|
204
|
+
#### Exemplo de Uso
|
|
205
|
+
|
|
206
|
+
```html
|
|
207
|
+
<careon-performance-wave [level]="PerformanceLevel.Orange"></careon-performance-wave>
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
---
|
|
211
|
+
|
|
212
|
+
## 4. Modelos de Dados
|
|
213
|
+
|
|
214
|
+
### `DashboardOverviewData`
|
|
215
|
+
|
|
216
|
+
Contrato mestre que alimenta o componente principal:
|
|
217
|
+
|
|
218
|
+
```typescript
|
|
219
|
+
export interface DashboardOverviewData {
|
|
220
|
+
/** Identificador unico da instituicao. */
|
|
221
|
+
institutionId?: number;
|
|
222
|
+
/** Razao social ou nome de exibicao da instituicao. */
|
|
223
|
+
institutionName?: string;
|
|
224
|
+
/** Rotulo do periodo ativo (ex: 'Hoje', 'Semana', 'Mes'). */
|
|
225
|
+
period?: string;
|
|
226
|
+
/** Data inicial do intervalo temporal coberto pelas metricas. */
|
|
227
|
+
startDate?: string | Date;
|
|
228
|
+
/** Data final do intervalo temporal coberto pelas metricas. */
|
|
229
|
+
endDate?: string | Date;
|
|
230
|
+
/** Resumo numerico dos KPIs superiores. */
|
|
231
|
+
kpis?: DashboardKpiSummary;
|
|
232
|
+
/** Pontos para o grafico de linha do tempo de candidaturas. */
|
|
233
|
+
timeline?: TimelinePoint[];
|
|
234
|
+
/** Dados para o grafico de barras comparativas entre vagas. */
|
|
235
|
+
comparison?: ComparisonItem[];
|
|
236
|
+
/** Distribuicao de candidaturas por categoria para grafico donut. */
|
|
237
|
+
distribution?: DonutChartItem[];
|
|
238
|
+
/** Distribuicao de status das vagas (abertas vs. encerradas). */
|
|
239
|
+
dutiesStatus?: StackedBarItem[];
|
|
240
|
+
/** Etapas do funil geral de recrutamento. */
|
|
241
|
+
recruitmentFunnel?: FunnelBarItem[];
|
|
242
|
+
/** Relacao de vagas prioritarias que requerem atencao imediata. */
|
|
243
|
+
attentionItems?: DashboardAttentionItem[];
|
|
244
|
+
/** Diagnostico qualitativo de performance geral com curva de ondas. */
|
|
245
|
+
performanceAnalysis?: DashboardPerformanceAnalysis;
|
|
246
|
+
/** Relacao de vagas detalhadas com metricas individuais para o seletor. */
|
|
247
|
+
vacanciesAnalysis?: DashboardDutyAnalysis[];
|
|
248
|
+
}
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
### `DashboardKpiSummary`
|
|
252
|
+
|
|
253
|
+
```typescript
|
|
254
|
+
export interface DashboardKpiSummary {
|
|
255
|
+
registeredVacancies?: number;
|
|
256
|
+
registeredVacanciesPrevious?: number;
|
|
257
|
+
registeredVacanciesDifference?: number;
|
|
258
|
+
|
|
259
|
+
candidateApplications?: number;
|
|
260
|
+
candidateApplicationsPrevious?: number;
|
|
261
|
+
candidateApplicationsDifference?: number;
|
|
262
|
+
|
|
263
|
+
pendingReviews?: number;
|
|
264
|
+
pendingReviewsPrevious?: number;
|
|
265
|
+
pendingReviewsDifference?: number;
|
|
266
|
+
|
|
267
|
+
averageCandidatesPerVacancy?: number;
|
|
268
|
+
averageCandidatesPerVacancyPrevious?: number;
|
|
269
|
+
averageCandidatesDifference?: number;
|
|
270
|
+
|
|
271
|
+
openVacancies?: number;
|
|
272
|
+
closedVacancies?: number;
|
|
273
|
+
totalVacancies?: number;
|
|
274
|
+
}
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
### `DashboardAttentionItem`
|
|
278
|
+
|
|
279
|
+
```typescript
|
|
280
|
+
export interface DashboardAttentionItem {
|
|
281
|
+
dutyId: number;
|
|
282
|
+
title: string;
|
|
283
|
+
subtitle: string;
|
|
284
|
+
candidatesCount?: number;
|
|
285
|
+
pendingReviewsCount?: number;
|
|
286
|
+
daysOpen?: number;
|
|
287
|
+
hoursOpen?: number;
|
|
288
|
+
isFixedJob?: boolean;
|
|
289
|
+
}
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
### `DashboardPerformanceAnalysis`
|
|
293
|
+
|
|
294
|
+
```typescript
|
|
295
|
+
export interface DashboardPerformanceAnalysis {
|
|
296
|
+
averageConversionRate?: number;
|
|
297
|
+
level?: PerformanceLevel | number;
|
|
298
|
+
highlightTitle?: string;
|
|
299
|
+
description?: string;
|
|
300
|
+
totalVacanciesInPeriod?: number;
|
|
301
|
+
}
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
### `DashboardDutyAnalysis`
|
|
305
|
+
|
|
306
|
+
```typescript
|
|
307
|
+
export interface DashboardDutyAnalysis {
|
|
308
|
+
dutyId: number;
|
|
309
|
+
title: string;
|
|
310
|
+
subtitle: string;
|
|
311
|
+
candidatesCount: number;
|
|
312
|
+
viewsCount: number;
|
|
313
|
+
conversionRate: number;
|
|
314
|
+
timelinePoints: TimelinePoint[];
|
|
315
|
+
conversionDonut?: DonutChartItem[];
|
|
316
|
+
funnelItems?: FunnelBarItem[];
|
|
317
|
+
salaryComparison?: DashboardDutySalaryComparison;
|
|
318
|
+
}
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
### `DashboardDutySalaryComparison`
|
|
322
|
+
|
|
323
|
+
```typescript
|
|
324
|
+
export interface DashboardDutySalaryComparison {
|
|
325
|
+
yourSalary?: number | null;
|
|
326
|
+
regionalAverageSalary?: number | null;
|
|
327
|
+
differencePercentage?: number | null;
|
|
328
|
+
status: DutySalaryStatus;
|
|
329
|
+
highlightTitle: string;
|
|
330
|
+
description: string;
|
|
331
|
+
badgeText?: string | null;
|
|
332
|
+
}
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
### Enums do Pacote
|
|
336
|
+
|
|
337
|
+
```typescript
|
|
338
|
+
export enum DashboardPeriod {
|
|
339
|
+
Today = 'Today',
|
|
340
|
+
Week = 'Week',
|
|
341
|
+
Month = 'Month'
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
export enum PerformanceLevel {
|
|
345
|
+
Blue = 'Blue',
|
|
346
|
+
Orange = 'Orange',
|
|
347
|
+
Red = 'Red'
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
export enum DutySalaryStatus {
|
|
351
|
+
BelowMarket = 'BelowMarket',
|
|
352
|
+
AtMarket = 'AtMarket',
|
|
353
|
+
AboveMarket = 'AboveMarket',
|
|
354
|
+
NotInformed = 'NotInformed',
|
|
355
|
+
InsufficientData = 'InsufficientData'
|
|
356
|
+
}
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
---
|