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:
- Parâmetro
WORKSHIFT_AUTO_ENABLED = 1
emnfs_core_par_parametro
; - Parâmetro
WORKSHIFT_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_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
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_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
eid-value
: necessário sincronização entre as tabelas.
- Criar referências (FK) na Entidade para o Grupo de Turno Automático;
- Rodar o DS;
- 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;
- Verificar se foram criadas as Tabelas APP
AUTO_GRUPO
,AUTO_TURNO
eAUTO_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 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;
FK para BOLETIM AUTO e Colunas de Status / Controle do processo de Sincronização (tabela de Boletins Mobile - PD);
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
, 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ãoHORIMETRO -> INICIAL
recebeMEDICAO -> INICIAL
; do contrário, recebe o último horímetro válido; SeMEDICAO -> FINAL > 0
, entãoHORIMETRO -> FINAL
recebeMEDICAO -> 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
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_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
-
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/ouFINAL
) 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;
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_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.
O campo
WORKSHIFT_PERPETUA
não é criado automaticamente, logo, é necessário a criação do campoWORKSHIFT_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 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('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);
Menu turno automático
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
.
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
).