Ir para o conteúdo

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.WebApi consolida e expõe os dados para o EnfaseCloud.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 = false até 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 = true e registrar SincronizadoEm.

Sincronização via catálogos

  • O envio das estatísticas deve usar o mesmo ciclo de sincronização dos catálogos (SyncScope.CatalogsAndFiles ou CatalogsOnly).
  • 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, operadorId e clienteId.
  • 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.