Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Introdução

O Módulo Turno Automático objetiva executar operações automáticas de abertura e fechamento de turnos, assim como migrar / processar informações de (Boletins/Apontamento) recebidos de MOBILE, para uma determinada Entidade. Durante o processo de migração são criados vínculos entre os boletins/apontamentos MOBILE e AUTO;

Pré-requesitos

São pré-requisitos para esse módulo:

  1. Parâmetro WORKSHIFT_AUTO_ENABLED = 1 em nfs_core_par_parametro;
  2. Parâmetro WORKSHIFT_TABLE_INTERFERENCIA em nfs_core_par_parametro para definir a tabela de Interferências (se não definido, será usada a tabela OPER ou EQP_OPER, nessa ordem;
  3. Definir opções no BOLETIM (->TIPO = 1 e ->MOBILE_TABLE = 2) em nfs_core_ds_tabela -> OPTIONS as opções:
{
  "main_table": "EQP",
  "workshift_auto_enabled": true,
  "id-control": "fixed",
  "id-value": 9999
}
  • main_table: tabela principal do boletim (ex.: EQP ou FUNCIONARIO);
  • workshift_auto_enabled: define que o NFS Core faça o clone dessa tabela;
  • id-control e id-value: necessário sincronização entre as tabelas.
  1. Definir opções no APONTAMENTO (->TIPO = 1 e ->MOBILE_TABLE = 1) em nfs_core_ds_tabela -> OPTIONS as opções:
{
  "workshift_auto_enabled": true,
  "id-control": "fixed",
  "id-value": 9999
}
  • workshift_auto_enabled: define que o NFS Core faça o clone dessa tabela;
  • id-control e id-value: necessário sincronização entre as tabelas.
  1. Criar referências (FK) na Entidade para o Grupo de Turno Automático;
  2. Rodar o DS;
  3. Verificar se foram criadas as Tabelas do Sistema:
  • nfs_work_shift: tabela de configurações do Turno Automático
CREATE TABLE `nfs_work_shift` (
  `SEQ_DB` bigint NOT NULL AUTO_INCREMENT,
  `EMPRESA` int NOT NULL,
  `FILIAL` int NOT NULL,
  `LOCAL` int NOT NULL,
  `TITLE` varchar(100) DEFAULT NULL,
  `CONFIG` text,
  `INS_DH` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `ENABLED` int DEFAULT '1',
  UNIQUE KEY `SEQ_DB_UNIQUE` (`SEQ_DB`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT;
  • nfs_work_shift_log: tabela de log dos processos de Turno Automático
CREATE TABLE `nfs_work_shift_log` (
  `SEQ_DB` bigint NOT NULL AUTO_INCREMENT,
  `INS_DH` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `ENTIDADE_SEQ_DB` bigint unsigned NOT NULL,
  `TURNO_SEQ_DB` bigint unsigned NOT NULL,
  `BOLETIM_SEQ_DB` bigint unsigned NOT NULL,
  `TURNO_DATA` date DEFAULT NULL,
  `HORA_INI` timestamp NULL DEFAULT NULL,
  `HORA_FIM` timestamp NULL DEFAULT NULL,
  `MINUTOS_ANTES` int DEFAULT '0',
  `MINUTOS_DEPOIS` int DEFAULT '0',
  `PERDAS` varchar(500) DEFAULT NULL,
  `INS_USUARIO_SEQ_DB` bigint unsigned NOT NULL,
  `IND_SIT_PROC` tinyint DEFAULT '0',
  `IND_SIT_PROC_DH` timestamp NULL DEFAULT NULL,
  `IND_SIT_PROC_DESC` varchar(500) DEFAULT NULL,
  `TENTATIVAS` tinyint DEFAULT '1',
  `INCONSISTENCIA` tinyint DEFAULT '0',
  `INCONSISTENCIA_DESC` varchar(500) DEFAULT NULL,
  `BLOQUEADO` tinyint NOT NULL DEFAULT '0',
  UNIQUE KEY `SEQ_DB_UNIQUE` (`SEQ_DB`),
  UNIQUE KEY `nfs_work_shift_log_main_idx` (`ENTIDADE_SEQ_DB`,`TURNO_SEQ_DB`,`TURNO_DATA`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT;
  1. Verificar se foram criadas as Tabelas APP AUTO_GRUPO, AUTO_TURNO e AUTO_GRUPO_TURNO;

Em alguns casos, para criarmos o vinculo da entidade com o Grupo de Turno Automático, será necessário remover a restrição de FK do campo LINK em core_ds_tabela_campo. {.is-warning}

Sinônimos // Abstração

Entende-se como:

  • Entidade: tabela principal / chave em relação a qual os Turnos Automáticos são criados;
  • Interferência: grupo de dados que classificam apontamentos, podendo ser conhecido também como OPERAÇÕES OU PERDAS;

Demais Definições na estrutura de Tabelas

Colunas de apenas apontamentos automáticos (tabela de Boletins Automáticos - PDA), FK para BOLETIM MOBILE e FK para TURNO AUTOMÁTICO;

Boletim Auto

FK para BOLETIM AUTO e Colunas de Status / Controle do processo de Sincronização (tabela de Boletins Mobile - PD);

Boletim Mobile

FK para APONTAMENTO MOBILE (tabela de Apontamentos Auto);

Apontamento AUTO

FK para APONTAMENTO AUTO e colunas de Controle do processo de Sincronização (tabela de Apontamento Mobile);

Apontamento Mobile

Configuração Inicial

A configuração inicial segue de acordo com os registros de nfs_work_shift, com definições a seguir:

1. TITLE: Título do Painel, exibido no topo do Módulo;

TITLE='Gerenciamento de Turnos Automáticos'

2. CONFIG: JSON com as definições do ambiente de Turno Automático;

{
  "ENTIDADE": "EQP",
  "CONTROLE_HORIMETRO": true,
  "SPLIT_APT": true,
  "INTEGRACAO": {
    "COLUNA": "INTEGRA_ST",
    "DESCRICAO": "INTEGRA_DESC",
    "DATA_HORA": "INTEGRA_DH",
    "STATUS_OK": 0,
    "STATUS_ERRO": 5
  },
  "BOLETIM": {
    "TABELA": "EQP_BOLETIM",
    "KEY": "EQP_SEQ_DB",
    "COLUNAS": {
      "HR_INICIAL_MARTE": "HR_FINAL_MARTE",
      "MEDICAO_INICIO_GE": "MEDICAO_FIM_GE"
    },
    "MEDICAO": {
      "INICIAL": "HR_INICIAL_MARTE",
      "FINAL": "HR_FINAL_MARTE"
    },
    "HORIMETRO": {
      "INICIAL": "MEDICAO_INICIO_GE",
      "FINAL": "MEDICAO_FIM_GE"
    },
    "DECIMAIS": 1
  },
  "APONTAMENTO": {
    "TABELA": "EQP_APT",
    "KEY": "EQP_SEQ_DB",
    "CHECK_TURNO": "",
    "COLUNAS": {
      "ENCARREGADO_SEQ_DB": "ENCARREGADO_SEQ_DB",
      "EQP_OS_SEQ_DB": "EQP_OS_SEQ_DB",
      "HR_MARTE": "HR_MARTE_FIM",
      "MEDICAO_GE": "MEDICAO_GE_FINAL"
    },
    "MEDICAO": {
      "INICIAL": "HR_MARTE",
      "FINAL": "HR_MARTE_FIM"
    },
    "HORIMETRO": {
      "INICIAL": "MEDICAO_GE",
      "FINAL": "MEDICAO_GE_FINAL"
    },
    "DECIMAIS": 1
  },
  "PERDA": {
    "TABELA": "EQP_OPER",
    "KEY": "PERDA_SEQ_DB",
    "COLUNAS": ["INTERFERENCIA_PRI", "INTERFERENCIA_SEC", "INTERFERENCIA_TER"]
  },
  "PAINEL": ["EQP", "EQP_AUTO"]
}

Onde:

  • ENTIDADE: Entidade Principal;
  • CONTROLE_HORIMETRO: Se o processo de Turno Automático deve ou não controlar o progresso do valores de horímetro;
  • SPLIT_APT: se os Apontamentos Mobile devem ou não passar por processo de Split (quando estes estiverem entre dois turnos);

    Para que o processo ocorra corretamente é necessário que os horários sejam contínuos (fim de um, início do outro). Por exemplo: Turno A: 00:00:00 -> 12:00:00 | Turno B: 12:00:00 -> 00:00:00 {.is-warning}

  • INTEGRACAO: Se os dados gerados pelo Turno Automático fizerem parte de um processo de Integração é necessário especificar as colunas relacionadas;
  • BOLETIM: Definições do processo de sincronização e controle dos dados de Boletins;
  • APONTAMENTO: Definições do processo de sincronização e controle dos dados de Apontamentos;
  • PERDA: Definições do processo de sincronização e controle dos dados de Perdas / Paradas;
  • PAINEL: Define as Entidades que terão seus paineis exibidos.

As definições obrigatórias são exemplificadas abaixo:

{
  "ENTIDADE": "EQP",
  "BOLETIM": {
    "TABELA": "EQP_BOLETIM",
    "KEY": "EQP_SEQ_DB"
  },
  "APONTAMENTO": {
    "TABELA": "EQP_APT",
    "KEY": "EQP_SEQ_DB"
  }
}

As definições de CONTROLE_HORIMETRO, INTEGRACAO e PERDA são opcionais.

A propriedade CHECK_TURNO do grupo APONTAMENTO deve ser usada em situações onde a identificação do Turno Automático venha diretamente de Mobile, permitindo que apontamentos dentro do mesmo range de hora possam ser inseridos em determinado Turno Automático.

Detalhamento das Propriedades

CONTROLE_HORIMETRO

É utilizada para controlar a progressão contínua do horímetro (maior ou igual ao atual). Nesse processo os valores especificados em MEDICAO, INICIAL e FINAL, são usado para controlar a progressão dos valores salvos em HORIMETRO, INICIAL e FINAL.

Exemplo: Se MEDICAO -> INICIAL > 0, então HORIMETRO -> INICIAL recebe MEDICAO -> INICIAL; do contrário, recebe o último horímetro válido; Se MEDICAO -> FINAL > 0, então HORIMETRO -> FINAL recebe MEDICAO -> FINAL; do contrário, recebe o último horímetro válido;

INTEGRACAO

As propriedades definidas são usadas para sinalizar se os dados são consistentes ou inconsistentes. Os valores de COLUNA, DESCRICAO e DATA_HORA são referências diretas às colunas definidas no Boletim, sinalizando em COLUNA se os dados são Consistente/Inconsistência, assumindo os valores em STATUS_OK e STATUS_ERRO, respectivamente.

BOLETIM / APONTAMENTO

As propriedades definidas em TABELA, KEY definem os vínculos com as tabelas Boletim e Apontamento Mobile e suas respectivas chaves-primárias PK. As propriedades COLUNAS definem os dados de serão migrados (DE/PAPA) do último Boletim / Apontamento para os próximos Boletins / Apontamentos automáticos. Nesses grupos também são definidas as colunas de Controle de Medição, onde MEDICAO e HORIMETRO guardam essas referências (descrito anteriomente). A propriedade DECIMAIS refere-se ao número de casas decimais usadas no processo de controle como fator de arredondadmento.

Ambiente WorkShift / Turno Automático

Log de Processos de Turno Automático

An image

Onde:

  • Carrega logs de agendamentos dos turnos já abertos e/ou fechados de acordo com a data:
Carrega logs de agendamentos dos turnos
  • Força abertura de agendamentos do dia (caso não rode na hora programada, de todos os equipamentos):
Força abertura de agendamentos do dia
  • Filtro rápido dos dados de log carregados:
Filtro rápido dos dados de log carregados
  • Informações:
  • Link de Acesso ao painel de detalhes Link de Acesso ao painel de detalhes
  • Apenas apontamentos automáticos Apenas apontamentos automáticos (WORKSHIFT_ONLY = 1)
  • Boletim com Inconsistência Boletim com Inconsistência
  • Boletim liberado para Integração ou Integrado Boletim liberado para Integração ou Integrado
  • Boletim bloqueado para Integração ou com Erro Boletim bloqueado para Integração ou com Erro
  • Operações:

operations_buttons.png

  • Sincronizar: verifica se existem dados novos vindo de mobile, sincroniza e, se necessário, fecha o turno automático;
  • Reprocessar: excluir todos os dados do Turno Automático atual, sincroniza e, se necessário, fecha o turno automático;
  • Aprovar: ajusta turno automático e sincroniza se houver inconsistência de apontamento fechado fora do horário do turno.

O processo de Aprovação não deve ser usado em conjunto com a propriedade SPLIT_APT. Essa operação será removida automaticamente em futuras atualizações quando a propriedade estiver definida. {.is-warning}

Configurar os Turnos e os Grupos de Turnos

Configurações dos Turnos Automático

turno_agendamento.png

  • Hora Inicial e Final do Turno (hh:mm:ss): horário de abrangência do turno, onde todos os apontamentos da entidade para o range de horário serão migrados para o boletim do Turno Automático;

  • Ajustes de Tolerância (minutos): definições de tolerância (INICIAL e/ou FINAL) para processar / migrar dados de Mobile para o Turnos Automáticos;

  • Dias da Semana por Tipo: comportamento de abertura do Turno Automático de acordo com o dia da semana, onde:

    • Não: não são criado turnos automáticos para o data/hora especificada;
    • AUTOMÁTICO: sempre vai criar o turno automático para a data/hora especificada;
    • POR DEMANDA: só cria o turno automático se receber dados do mobile para data/hora especificada;
  • Interferências: definições relacionadas às perdas / interferências que serão apontadas automáticamente nas seguintes situações:

    • Primárias, Secundárias e Terciárias: são aquelas que geram apontamentos lançados automaticamente na abertura do boletim e no fechamento. A interferência com 0 (zero) minutos será usada para complementar o boletim, seja na abertura ou no fechamento;

turno_perdas.png

As definições seguem a relação interferência => tempo min.

Observações:

  1. Se você especificar uma (1) interferência e tempo = 0 min, será feito um apontamento com FIM_DH nulo (aberto);
  2. Se você especificar uma (1) interferência e tempo > 0 min, será feito um apontamento com FIM_DH = INI_DH + min;
  3. Só pode haver uma (1) interferência com tempo = 0 min;
  4. A interferência com tempo = 0 min também será usada para complementar o turno automático (preencher saltos de horário e complementos no fechamento do turno, se necessário);
  5. Se não houver interferência com tempo = 0 não serão criados apontamentos complementares (que preencherão espaços entre apontamentos).
  • Refeição: essa interferência deverá ser apontada automaticamente quando não for recebida nenhuma comunicação de Mobile (WORKSHIFT_ONLY = 1 no Boletim AUTO). Uma vez definida, o lançamento deve ter horário e duração definidos;
  • Medição: essa interferência deverá ser apontada automaticamente para corrigir possíveis "saltos" de horímetro quando quando o controle de horímetro estiver ativo (CONTROLE_HORIMETRO = true).

Configurações de Grupos de Turnos Automático

Criação do Grupos de turnos automático que serão atribuídos à Entidade do turno Automático.

Cada grupo deve ter ao menos um (1) turno automático atribuídos.

IMPORTANTE! Não se deve atribuir turnos automáticos com horários conflitantes, salvo aqueles onde a propriedade CHECK_TURNO estiver estabelecida! {.is-danger}

Interferências que Perpetuam

São interferência que orientam a abertura dos Turnos Automático, permitindo que ao encerrar um boletim com uma dessas interferências o próximo boletim seja aberto com essa mesma interferência.

perda_perpetua_destacado.png

O campo WORKSHIFT_PERPETUA não é criado automaticamente, logo, é necessário a criação do campo WORKSHIFT_PERPETUA (campo destacado na imagem acima) "Perpetua no turno automático?" para tratar a operação/interferência que perpetua e deve ser criado na tabela APP_OPER através da nfs_core_ds_tabela_campo {.is-warning}

INSERT INTO nfs_core_ds_tabela_campo (TABELA_NOME, NOME, SEQ,
SYS, SEND_XMOVA, GRID, GRID_MOBILE, DESCRICAO, DESCRICAO_RESUMIDA,
TIPO, OBRIGATORIO, TAMANHO, TAMANHO_DECIMAL, MASCARA, INSERT_UPDATE,
DISABLED, HINT, LINK, VALIDACAO, OPCOES, VALOR_DEFAULT,
VALIDACAO_VIEW, FILTRO_VIEW, TOOLTIP_MESSAGE, PROPERTIES) VALUES('OPER', 'WORKSHIFT_PERPETUA', 12, 0, 1, 1, 1,
'Perpetua no turno automático?', 'Perpetua?', 'BOOL', 0, NULL,
NULL, NULL, 'IU', '0', NULL, NULL, NULL,
'param:CRUD_OPCOES_BOOL;showKey:0', '0', NULL, NULL, NULL, NULL);

Para habilitar o menu de turno automático, será necessária adicionar permissão para o menu de seq_db = 10050 na tabela nfs_acl_grupo_permissao.

menu_auto.png

Este menu virá apenas com os menus para tabelas AUTO_GRUPO, AUTO_TURNO, e para o painel de gerenciamento; caso seja necessário adicionar submenus ou algum outro item, criar o item desejado em nfs__core_menu e atribuir como FATHER o menu de turno automático (SEQ_DB = 10050).