21 - Estatísticas de Produtividade¶
EnfaseCloud.ScanEnfaseCloud.WebApiEnfaseCloud.WebApp
Draft
Objetivo¶
Registrar e consolidar métricas de produtividade operacional por operador e por cliente, abrangendo volume de páginas e arquivos digitalizados. O EnfaseCloud.Scan acumula os dados localmente e os envia para a nuvem via sincronização de catálogos.
Princípio arquitetural¶
- O
EnfaseCloud.Scané a fonte primária das estatísticas: registra localmente no SQLite a cada sessão de captura concluída. - O envio para a nuvem ocorre via sincronização de catálogos (mesmo mecanismo de sync de departamentos, tipos documentais e campos) — não requer upload do arquivo para existir.
- A
EnfaseCloud.WebApiconsolida e expõe os dados para oEnfaseCloud.WebApp.
Dados coletados por sessão de captura¶
Cada sessão registrada localmente deve conter:
| Campo | Tipo | Descrição |
|---|---|---|
SessionId |
UUID | Identificador único da sessão de captura. |
TenantKey |
string | Tenant ativo na estação. |
ClienteId |
int | Cliente selecionado. |
OperadorId |
string | Identificador do operador (usuário autenticado na estação). |
OperadorNome |
string | Nome do operador para exibição. |
DataHoraInicio |
datetime UTC | Início da sessão de captura. |
DataHoraFim |
datetime UTC | Fim da sessão (após salvar o PDF). |
DuracaoSegundos |
int | Duração total da sessão. |
TotalPaginas |
int | Páginas capturadas e entregues (após política de brancas). |
PaginasEmBranco |
int | Páginas brancas detectadas. |
PaginasRemovidas |
int | Páginas removidas pela política. |
PaginasRevisao |
int | Páginas enviadas para revisão. |
TotalArquivos |
int | Arquivos PDF gerados na sessão (normalmente 1). |
Dpi |
int | DPI utilizado. |
ModoCorDetectado |
string | Color / Grayscale / BlackAndWhite. |
ScannerNome |
string | Nome do dispositivo usado. |
TipoDocumentalId |
int? | Tipo documental indexado (se selecionado). |
Sincronizado |
bool | false até a sincronização com a nuvem confirmar recebimento. |
SincronizadoEm |
datetime? | Data/hora UTC em que a WebApi confirmou recebimento. |
Requisitos¶
EnfaseCloud.Scan — registro local¶
- Quando uma sessão de digitalização for concluída com sucesso (PDF salvo e aceito), o Scan deve persistir os dados da sessão no banco SQLite local.
- O Scan deve registrar a sessão mesmo que o upload do arquivo ainda não tenha ocorrido.
- O Scan deve marcar
Sincronizado = falseaté receber confirmação da WebApi. - O Scan deve incluir as sessões pendentes no payload de sincronização de catálogos.
- Quando a WebApi confirmar o recebimento, o Scan deve marcar
Sincronizado = truee registrarSincronizadoEm.
Sincronização via catálogos¶
- O envio das estatísticas deve usar o mesmo ciclo de sincronização dos catálogos (
SyncScope.CatalogsAndFilesouCatalogsOnly). - O payload de sync deve incluir um array
SessoesProdutividade[]com as sessões não sincronizadas. - A WebApi deve responder com os IDs confirmados para que o Scan marque
Sincronizado = true. - Sessões com mais de 90 dias e já sincronizadas podem ser purgadas do SQLite local.
WebApi — consolidação¶
- A WebApi deve persistir as sessões recebidas no banco do tenant.
- A WebApi deve expor os seguintes endpoints:
| Endpoint | Descrição |
|---|---|
GET /produtividade/operadores |
Totais por operador (páginas, arquivos, sessões, duração) no período. |
GET /produtividade/clientes |
Totais por cliente (páginas, arquivos, sessões) no período. |
GET /produtividade/resumo |
Visão consolidada: top operadores e top clientes. |
- Todos os endpoints devem suportar filtro por
dataInicio,dataFim,operadorIdeclienteId. - A WebApi deve calcular médias por operador: páginas/sessão, arquivos/hora, duração média de sessão.
EnfaseCloud.WebApp — exibição¶
- O WebApp deve exibir painel de produtividade com:
- ranking de operadores por volume de páginas e arquivos no período;
- volume por cliente (páginas digitalizadas, arquivos gerados);
- tendência temporal (por dia/semana/mês);
- indicadores: média de páginas por sessão, DPI mais usado, modo de cor predominante.
- O painel deve ser acessível apenas por perfis com permissão de relatórios.
Modelo de dados (WebApi)¶
SessaoProdutividade
SessionId UUID PK
TenantKey string
ClienteId int FK
OperadorId string
OperadorNome string
DataHoraInicio datetime
DataHoraFim datetime
DuracaoSegundos int
TotalPaginas int
PaginasEmBranco int
PaginasRemovidas int
PaginasRevisao int
TotalArquivos int
Dpi int
ModoCorDetectado string
ScannerNome string
TipoDocumentalId int?
RecebidoEm datetime ← data de recebimento na WebApi
Aceite¶
- Uma sessão concluída no Scan aparece na WebApi após a próxima sincronização.
- O painel exibe totais corretos por operador e por cliente para o período selecionado.
- Sessões não sincronizadas permanecem no SQLite e são enviadas no próximo ciclo.
- Operador sem sessões no período não aparece no ranking (sem linhas zeradas).
- A WebApi rejeita sessões duplicadas (mesmo
SessionId) sem erro — idempotente.