Saltar para o conteúdo principal

Vista Kiosk

Visão geral

A vista Kiosk é uma interface para tablet/ecrã tátil pensada para operadores de chão de fábrica. Após autenticação por PIN, o operador vê uma grelha de cartões de trabalho (opcionalmente filtrados pela sua identidade — ver Filtros por Utilizador abaixo); cada cartão contém componentes ao vivo (temporizadores, contadores, botões de workflow) que o operador utiliza durante o turno.

Use-a quando:

  • Um único tablet é partilhado por vários operadores, cada um autenticado por PIN no início do seu turno.
  • Os cartões representam o trabalho do operador (encomendas, tarefas, máquinas) — não um menu de retalho.
  • Os workflows disparados a partir do cartão devem ser atribuídos ao operador, e não ao utilizador ao nível da organização com sessão iniciada no tablet.

Conceitos

Subutilizador

Uma linha numa Feature configurada que representa um operador. O subutilizador tem um PIN (tipicamente 4 dígitos, guardado em texto simples — segurança de nível kiosk) e um setor/função opcionais. A identidade é propagada aos descendentes através de um KioskSubuserScope, de modo a que as ações de workflow gravem _metadata.subuserId nos registos que criam.

Separadores

Categorização da grelha de trabalho. Os separadores são obrigatórios: um kiosk sem separadores não apresenta dados nenhuns, apenas um estado vazio ("Sem tabs configuradas") que pede ao admin que adicione pelo menos um. Cada separador tem um FilterGroup canónico aplicado aos cartões visíveis. O índice do separador ativo vive em KioskViewState.activeTabIndex e é atualizado ao tocar num separador.

Modo de ação do cartão

Configurável por vista (KioskCardConfig.actionMode):

ModoComportamento ao tocar no cartão
editForm (predefinição)Abre o formulário de edição da linha
panelAbre uma folha inferior com os workflows configurados
liveComponentsSem ação ao toque — o operador interage apenas com os componentes ao vivo dentro do cartão

Botão de turno (entrada/saída)

Um botão de primeira classe na barra superior que alterna entre "Marcar entrada" e "Marcar saída" com base no último registo de assiduidade do operador. O toque dispara um workflow configurado pelo admin (tipicamente create_record sobre uma Feature de assiduidade). Sem entidade nova — Configuration Over Code pura.

Chips de temporizadores ativos

A barra superior mostra chips com os temporizadores de tarefa que o operador em sessão tem a correr - os iniciados a partir do componente Timer numa das vistas embebidas nos separadores. Ficam de fora o contador de ocioso (contabilidade interna) e o perfil de temporizador configurado no próprio kiosk, que continua a viver no botão de temporizador dedicado da barra. Sem operador em sessão, ou sem nenhum temporizador de tarefa a correr, os chips desaparecem por completo.

Até 2 chips ficam visíveis, cada um com a etiqueta e o tempo decorrido a avançar; tocar no próprio chip para o temporizador, sem confirmação. A partir do 3.º temporizador, os chips colapsam num botão "+N" que abre o diálogo "Os meus temporizadores" com a lista completa e um botão de parar por linha. Um temporizador aberto há mais de 12 horas troca o ícone de parar por um ícone de aviso — tanto no chip como na lista — sinal de que ficou esquecido a correr e entrou em recuperação.

Layout (após o PIN)

┌──────────────────────────────────────────────────────────────┐
│ KioskTopBar avatar · nome/sector [chips] [+N] [shift] [logout] │
├──────────────────────────────────────────────────────────────┤
│ KioskTabBar [ Tab A ] [ Tab B ] [ Tab C ] (scrollable) │
├──────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ Card 1 │ │ Card 2 │ │ Card 3 │ <- card grid │
│ │ timer │ │ timer │ │ timer │ │
│ └─────────┘ └─────────┘ └─────────┘ │
│ │
└──────────────────────────────────────────────────────────────┘

Configuração de admin

Abra a caixa de diálogo de configuração da vista kiosk (contexto de admin). O formulário está dividido em secções:

Feature

Escolha a Feature cujas linhas são subutilizadores do kiosk, depois mapeie as colunas:

DefiniçãoObrigatórioDescrição
Feature de Utilizadores KiosksimOnde vivem as linhas de subutilizador
Campo de ID do UtilizadorsimIdentificador estável (gravado em _metadata.subuserId)
Campo de Nome de UtilizadorsimNome de exibição mostrado na barra superior
Campo de SenhasimO PIN (texto simples — nível kiosk)
Campo de SetoropcionalSetor/função para agrupamento e filtros por subutilizador

Filtros por Utilizador

Aparece assim que a secção Feature acima tiver uma feature selecionada. Mapeie uma coluna na Feature de trabalho para um valor sentinela resolvido no login: kiosk_user_id / kiosk_username / kiosk_sector. As linhas são filtradas para corresponder ao subutilizador ativo em tempo de execução.

Cartões

  • Campos a Mostrar — que colunas da feature aparecem no corpo do cartão.
  • Filtros — filtros ao nível do admin (FilterGroup canónico), aplicados antes dos filtros por separador e por subutilizador.
  • Acção ao tocar no card — escolha um dos 3 modos acima. Quando panel está selecionado, configure a lista de workflows mostrada na folha.

Separadores

Adicione, edite, reordene, ou remova separadores. Um kiosk novo nasce sem separadores nenhuns e só mostra conteúdo depois de se adicionar o primeiro. Cada separador abre uma caixa de diálogo com:

CampoDescrição
Nome da tabRótulo mostrado na barra de separadores
FeatureA feature cujos dados a tab mostra - lista as features do workspace atual mais as partilhadas de outros workspaces da mesma organização, ordenadas alfabeticamente e identificadas com o nome do workspace entre parênteses
VistaO tipo de vista que renderiza a feature (cartões, tabela, formulário, etc.); kiosk dentro de kiosk não é permitido
Identidade do operadorSó aparece depois de escolher uma Feature - mapeia colunas para o ID, o nome e o setor do operador, usados para pré-preencher um registo novo (aplica-se a vistas de formulário, com login de operador ativo); se a feature da tab tiver colunas elegíveis (Lista Ligada de seleção única cuja feature-alvo tem uma coluna Operador), aparece também Coluna para o colaborador

Depois de escolher a Feature, o diálogo mostra ainda a subsecção Filtro do operador, que lista as colunas elegíveis da feature da tab:

  • colunas do tipo Operador - comparadas diretamente com o operador autenticado;
  • colunas do tipo Lista Ligada de seleção única cuja feature-alvo tem uma coluna Operador - comparadas com o colaborador mapeado.

Sem operador autenticado, ou com um operador sem colaborador associado, a tab mostra 0 registos e apresenta um aviso discreto no topo. O mesmo aviso aparece também quando é a Coluna para o colaborador (linha "Identidade do operador" acima) que fica sem mapeamento - o carimbo é omitido (coluna vazia) no registo criado, não só o filtro que fica sem efeito.

A seleção de campos, os filtros e a ação ao tocar no card configuram-se na própria vista da tab (ver Cartões acima), não neste diálogo.

Botão de Turno

Três menus pendentes ligam o botão de turno: uma Feature (onde as linhas de check_in/check_out são guardadas), a coluna que guarda o tipo, e o workflow que realiza a escrita. Deixar qualquer um em branco oculta o botão.

O menu de Feature lista as features do workspace atual e as features partilhadas de outros workspaces da mesma organização, ordenadas alfabeticamente; uma feature partilhada de outro workspace aparece com o nome do workspace entre parênteses (ex.: "Assiduidade (Produção)").

Fluxo de autenticação

  1. O operador chega à vista kiosk (type: 'kiosk'). O router redireciona utilizadores com kiosk: true no seu userConfig para o seu rail configurado; a navegação para fora é revertida.
  2. A vista obtém a Feature de kiosk configurada e lista os subutilizadores como cartões em KioskUserGrid.
  3. Tocar num cartão → KioskPinDialog (modelo AdaptiveDialog).
  4. Insere o PIN. Se corresponder, a caixa de diálogo despacha SubuserLoggedIn para KioskSessionBloc e fecha.
  5. A vista é reconstruída envolvida em KioskSubuserScope. Os componentes descendentes (botões de workflow, ação create_record) leem o subutilizador ativo via KioskSubuserScope.of(context).
  6. O logout através do botão da barra superior despoleta uma caixa de diálogo de confirmação e, uma vez confirmado, devolve a vista à grelha de subutilizadores para o próximo operador.