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:
- Parâmetro
WORKSHIFT_MO_AUTO_ENABLED = 1
emnfs_core_par_parametro
; - Parâmetro
WORKSHIFT_MO_TABLE_INTERFERENCIA
emnfs_core_par_parametro
para definir a tabela de Interferências (se não definido, será usada a tabelaOPER
ouEQP_OPER
, nessa ordem; - Definir opções no BOLETIM (
->TIPO = 1
e->MOBILE_TABLE = 2
) emnfs_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
eid-value
: necessário sincronização entre as tabelas.
- Definir opções no APONTAMENTO (
->TIPO = 1
e->MOBILE_TABLE = 1
) emnfs_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
eid-value
: necessário sincronização entre as tabelas.
- Criar referências (FK) na Entidade para o Grupo de Turno Automático de Mão de Obra;
- Rodar o DS;
- 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;";
- Verificar se foram criadas as Tabelas APP
MO_AUTO_GRUPO
,MO_AUTO_TURNO
eMO_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
emcore_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;
FK para BOLETIM AUTO e Colunas de Status / Controle do processo de Sincronização (tabela de Boletins Mobile);
FK para APONTAMENTO MOBILE (tabela de Apontamentos Auto);
FK para APONTAMENTO AUTO e colunas de Controle do processo de Sincronização (tabela de Apontamento Mobile);
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
Onde:
- Carrega logs de agendamentos dos turnos já abertos e/ou fechados de acordo com a data:

- Força abertura de agendamentos do dia (caso não rode na hora programada, de todos os equipamentos):

- Filtro rápido dos dados de log carregados:

- Informações:
Link de Acesso ao painel de detalhes
Apenas apontamentos automáticos (WORKSHIFT_MO_ONLY = 1)
Boletim com Inconsistência
Boletim liberado para Integração ou Integrado
Boletim bloqueado para Integração ou com Erro
- Operações:
- 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
-
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/ouFINAL
) 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;
As definições seguem a relação interferência => tempo min.
Observações:
- Se você especificar uma (1) interferência e tempo = 0 min, será feito um apontamento com
FIM_DH
nulo (aberto); - Se você especificar uma (1) interferência e tempo > 0 min, será feito um apontamento com
FIM_DH = INI_DH + min
; - Só pode haver uma (1) interferência com tempo = 0 min;
- 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);
- 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.
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 tabelaAPP_OPER
através danfs_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);
Menu Turno Automático
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
.
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
).