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

Turno Automático Mão de Obra

Introdução

O Módulo Turno Automático Mão de Obra (TA MO) 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 Encarregada (estrutura mestre/detalhes). 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_MO_AUTO_ENABLED = 1 em nfs_core_par_parametro;
  2. Parâmetro WORKSHIFT_MO_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_mo_auto_enabled": true,
  "id-control": "fixed",
  "id-value": 9999
}
  • main_table: tabela principal do boletim (ex.: EFETIVO_FUNCIONARIO ou FUNCIONARIO);
  • workshift_mo_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_mo_auto_enabled": true,
  "id-control": "fixed",
  "id-value": 9999
}
  • workshift_mo_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 de Mão de Obra;
  2. Rodar o DS;
  3. Verificar se foram criadas as Tabelas do Sistema:
  • nfs_work_shift_mo: tabela de configurações do TA MO:
CREATE TABLE `nfs_work_shift_mo` (
  `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 default CHARSET = utf8 ROW_FORMAT = COMPACT;
  • nfs_work_shift_mo_log: tabela de log dos processos de TA MO:
CREATE TABLE `nfs_work_shift_mo_log` (
  `SEQ_DB` bigint NOT NULL AUTO_INCREMENT,
  `SEQ_DB` bigint NOT null auto_increment,
  `INS_DH` timestamp null default CURRENT_TIMESTAMP,
  `ENTIDADE_SEQ_DB` bigint(20) unsigned not null,
  `TURNO_SEQ_DB` bigint(20) unsigned not null,
  `BOLETIM_SEQ_DB` bigint(20) unsigned not null,
  `TURNO_DATA` date null default null,
  `HORA_INI` timestamp null default null,
  `HORA_FIM` timestamp null default null,
  `MINUTOS_ANTES` int default 0,
  `MINUTOS_DEPOIS` int default 0,
  `OPERADORES` varchar(1000) default null,
  `PERDAS` varchar(500) default null,
  `INS_USUARIO_SEQ_DB` bigint unsigned NOT null,
  `IND_SIT_PROC` tinyint default '0', -- 1 abriu; -1 erro; 2 fechou; -2 erro ao fechar
  `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) NULL,
  `BLOQUEADO` TINYINT DEFAULT 0 NOT NULL,
  UNIQUE KEY `SEQ_DB_UNIQUE` (`SEQ_DB`),
  UNIQUE KEY `nfs_work_shift_mo_log_main_idx` (`ENTIDADE_SEQ_DB`,`TURNO_SEQ_DB`,`TURNO_DATA`) USING BTREE,
  KEY `nfs_work_shift_mo_log_entidade_unsyncced` (`ENTIDADE_SEQ_DB`,`IND_SIT_PROC`,`HORA_INI`) USING BTREE,
  KEY `nfs_work_shift_mo_log_entidade_ini_idx` (`ENTIDADE_SEQ_DB`,`HORA_INI`) USING BTREE
) ENGINE = InnoDB default CHARSET = utf8 ROW_FORMAT = COMPACT;";
  1. Verificar se foram criadas as Tabelas APP MO_AUTO_GRUPO, MO_AUTO_TURNO e MO_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 TA's 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 Mão de Obra), FK para BOLETIM MOBILE e FK para TURNO AUTOMÁTICO;

app_mo_boletim_auto.png

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

app_mo_boletim.png

FK para APONTAMENTO MOBILE (tabela de Apontamentos Auto);

app_mo_apt_auto.png

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

app_mo_apt.png

Configuração Inicial

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

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

TITLE='Gerenciamento de Turnos Automáticos Mão de Obra'

2. CONFIG: JSON com as definições do ambiente de TA;

{
  "ENTIDADE": "EFETIVO_FUNCIONARIO",
  "MASTER_KEY": "ENCARREGADO_SEQ_DB",
  "SPLIT_APT": true,
  "INTEGRACAO": {
    "COLUNA": "INTEGRA_ST",
    "DESCRICAO": "INTEGRA_DESC",
    "DATA_HORA": "INTEGRA_DH",
    "STATUS_OK": 0,
    "STATUS_ERRO": 5
  },
  "BOLETIM": {
    "TABELA": "MO_BOLETIM",
    "KEY": "EFETIVO_FUNCIONARIO_SEQ_DB",
    "COLUNAS": {
      "COLUNA_TO": "COLUNA_FROM"
    }
  },
  "APONTAMENTO": {
    "TABELA": "EQP_APT",
    "KEY": "EQP_SEQ_DB",
    "CHECK_TURNO": "",
    "COLUNAS": {
      "COLUNA_TO": "COLUNA_FROM"
    }
  },
  "PERDA": {
    "TABELA": "INTERFERENCIA",
    "KEY": "INTERFERENCIA_SEQ_DB",
    "COLUNAS": ["INTERFERENCIA_PRI", "INTERFERENCIA_SEC", "INTERFERENCIA_TER"]
  },
  "PAINEL": ["EQP", "EQP_AUTO"]
}

Onde:

  • ENTIDADE: Entidade Principal;
  • MASTER_KEY: FK da ENTIDADE Mestre -> detalhes (Ex.: Encarregado -> Operador);
  • 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 TA MO 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": "EFETIVO_FUNCIONARIO",
  "MASTER_KEY": "ENCARREGADO_SEQ_DB",
  "BOLETIM": {
    "TABELA": "EQP_BOLETIM",
    "KEY": "EQP_SEQ_DB"
  },
  "APONTAMENTO": {
    "TABELA": "EQP_APT",
    "KEY": "EQP_SEQ_DB"
  }
}

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

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

Detalhamento das Propriedades

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.

Ambiente Turno Automático de Mão de Obra

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_MO_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 Mão de Obra

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 TA;

  • Ajustes de Tolerância (minutos): definições de tolerância (INICIAL e/ou FINAL) para processar / migrar dados de Mobile para o TA's;

  • 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_MO_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 TA, 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_MO_PERPETUA não é criado automaticamente, logo, é necessário a criação do campo (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('INTERFERENCIA', 'WORKSHIFT_MO_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 TA, será necessária adicionar permissão para o menu de seq_db = 10060 na tabela nfs_acl_grupo_permissao.

menu_auto.png

Este menu virá apenas com os menus para tabelas MO_AUTO_GRUPO, MO_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 = 10060).