Árvore de páginas


01. DADOS GERAIS

Produto:

TOTVS RH

Linha de Produto:

Linha Protheus

Segmento:

RH

Módulo:SIGAPON
Função:

PONAPI01

PONAPIRR1

PONA030

Requisito/Story/Issue (informe o requisito relacionado) :

DRHPAG-40173

DRHPAG-40184

DRHPAG-40185

DRHPAG-44762

DRHPAG-44973


02. 
SITUAÇÃO/REQUISITO

Atualmente o sistema trabalha com a tabela MSA_CONTROL_MARCAC quando é efetuado a integração com a Carol ou Suricato. 

No caso da integração com a Carol, é feito consumo de uma API da Carol e as marcações retornadas são gravadas na tabela MSA_CONTROL_MARCAC.

No caso da integração com o Suricato, o Suricato efetua uma conexão direta no banco de dados do Protheus para a gravação das marcações na tabela MSA_CONTROL_MARCAC.

Como a tabela MSA_CONTROL_MARCAC não possui estrutura de dicionário de dados padrão e no caso do Suricato é efetuado um acesso direito ao banco de dados, houve a necessidade de criação de uma tabela padrão do Protheus existente no dicionário de dados e a criação de uma API para que o Suricato efetue a integração das marcações, evitando assim a necessidade de conexão direta com o banco de dados..

03. SOLUÇÃO

Ajuste ao iniciar o processo de importação das marcações para integração com a Carol e o processo de leitura de marcações (PONM010) para integração com o Suricato para iniciar a migração automática dos dados da tabela MSA_CONTROL_MARCAC para a tabela RR1. A partir dessa migração, o sistema somente passará a validar a tabela RR1.

Além disso, foi disponibilizado a API REST recordClockMarkings com o método POST para que o Suricato efetue a integração informando as marcações e o Protheus efetue a gravação das marcações na tabela RR1, ou seja, não haverá mais acesso direto ao banco de dados do Protheus.

Importante

As alterações estão incluídas no pacote de Expedição Contínua do RH disponível na Central de Downloads liberado a partir de 27/12/2021.

Foram necessárias alterações no dicionário, listadas abaixo, que serão aplicadas na base com a execução do UPDDISTR com o dicionário diferencial liberado no pacote de expedição contínua do RH.



    Criação de índices na tabela RR1:

    Ordem Chave
    1 RR1_CODUNI+RR1_LOGIP+DTOS(RR1_DATMAR)
    2 RR1_CODUNI+DTOS(RR1_DATMAR)
    3 RR1_CODREP+RR1_LOGIP+DTOS(RR1_DATMAR)
    4 RR1_CODREL+RR1_LOGIP+DTOS(RR1_DATMAR)
    5 RR1_CODREL+STR(RR1_CODNSR,9)
    6 STR(RR1_VALCON,16)+RR1_CODREL+STR(RR1_CODNSR,9)
    7 RR1_CODREP+STR(RR1_CODNSR,9)
    8 STR(RR1_VALCON,16)+RR1_CODREP+STR(RR1_CODNSR,9)

    Criação da tabela RR1:

    Arquivo Nome Compartilhamento Filial Compartilhamento Unidade de Negócio Compartilhamento Empresa X2_UNICO
    RR1990 Integração de marcações C C C RR1_VALCON

    Criação de campos na tabela RR1:

    Ordem Campo Tipo Tamanho Decimal Formato Contexto Propriedade Título Descrição Help
    01 RR1_FILIAL Caracter 2 0
    Real Alterar Filial Filial

    Filial

    02 RR1_VALCON Numérico 16 0 @E 9,999,999,999,999,999 Real Alterar Control. Mar Controle Marcação

    Código de controle da marcação

    03 RR1_CODREL Caracter 100 0
    Real Alterar Cod. Relógio Código Relógio

    Código do relógio

    04 RR1_CODFUN Caracter 100 0
    Real Alterar Cod. Func. Código do funcionário

    Código do funcionário

    05 RR1_LOGIP Caracter 1 0
    Real Alterar Log Import. Log de importação

    Log de importação do registro

    06 RR1_CODNSR Numérico 9 0 @E 999,999,999 Real Alterar Cod. NSR Código NSR

    Código NSR

    07 RR1_CODPIS Caracter 12 0
    Real Alterar Cod. PIS Código do PIS

    Código do PIS

    08 RR1_DATMAR Data 8 0
    Real Alterar Data Marc. Data da marcação

    Data da marcação

    09 RR1_NUMMAR Numérico 6 0 @E 999,999 Real Alterar Num Hor Mar. Número da hora marcação

    Número com o horário da marcação

    10 RR1_CODREP Caracter 17 0
    Real Alterar Cod. REP Código do REP

    Código do REP

    11 RR1_CODUNI Caracter 100 0
    Real Alterar Cod. Unid. Código da Unidade

    Código da unidade

    12 RR1_CODUSU Caracter 100 0
    Real Alterar Cod. Usuario Código do usuário

    Código do usuário

    Criação de parâmetro:

    Nome Tipo Descrição Conteúdo padrão
    MV_APISUR Lógico

    Define se a integração do Suricato com o Protheus ocorre por API (.T.) ou direto no banco (.F.) 

    .F.

    Observação

    O parâmetro MV_APISUR somente será avaliado na integração com o Suricato e serve para indicar se o Suricato já foi atualizado e está configurado para efetuar a integração das marcações via API.


    1. Para a integração com a Carol, a substituição do uso da tabela MSA_CONTROL_MARCAC será automática, desde que o dicionário de dados esteja atualizado. Dessa forma, quando for executado a integração para a importação das marcações, o sistema irá primeiro migrar os dados da tabela MSA_CONTROL_MARCAC para a tabela RR1 e as novas marcações já serão gravadas na tabela RR1.
    2. Para a integração com o Suricato, a substituição do uso da tabela MSA_CONTROL_MARCAC será automática, desde que o dicionário de dados esteja atualizado e o parâmetro MV_APISUR esteja ativo (configurado com .T.). Dessa forma, quando for executado o processo de leitura de marcações, o sistema irá primeiro migrar os dados da tabela MSA_CONTROL_MARCAC para a tabela RR1.


    Informação

    Segue um de X para da tabela MSA_CONTROL_MARCAC para a tabela RR1

    De (MSA_CONTROL_MARCAC)Para (RR1)Observação

    RR1_FILIALNunca será validado e sempre será gravado sem conteúdo.
    VAL_CONTROL_MARCACRR1_VALCONNão há.
    COD_RELOGIO_EXT_CHAVERR1_CODRELNão há.
    COD_FUNC_MSARR1_CODFUNNão há.
    LOG_IMPORT_PRODUTRR1_LOGIPNão há.
    COD_NSRRR1_CODNSRNão há.
    COD_PIS_MSARR1_CODPISNão há.
    DAT_MARCAC_ACESRR1_DATMARSomente irá conter a data. A hora do registro não será importada, já que tal informação também é gravada no campo RR1_NUMMAR.
    NUM_HORAR_MARCAC_ACESRR1_NUMMARNão há.
    COD_REPRR1_CODREPNão há.
    COD_UNID_EXT_CHAVERR1_CODUNINão há.
    COD_USUAR_EXT_CHAVERR1_CODUSUNão há.


    A API REST recordClockMarkings será consumido pelo Suricato e poderá receber no método POST os seguintes parâmetros:

    PROPRIEDADEDESCRIÇÃOTIPOObrigatório?
    itemsArray das marcaçõesArraySim
    items.codRelogioExtChaveCódigo RelógioCaracterNão
    items.codFuncMsaCódigo do funcionárioCaracterSim
    items.codNsrCódigo NSRNuméricoSim
    items.codPisMsaCódigo do PISCaracterSim
    items.datMarcacAcesData da marcaçãoCaracterSim
    items.numHorarMarcacAcesNúmero da hora marcaçãoNuméricoSim
    items.codRepCódigo do REPCaracterNão
    items.codUnidExtChaveCódigo da UnidadeCaracterSim
    items.codUsuarExtChaveCódigo do usuárioCaracterSim



    Informação

    Segue um de X para da API recordClockMarkings para a tabela RR1

    De (recordClockMarkings)Para (RR1)
    codRelogioExtChaveRR1_CODREL
    codFuncMsaRR1_CODFUN
    codNsrRR1_CODNSR
    codPisMsaRR1_CODPIS
    datMarcacAcesRR1_DATMAR
    numHorarMarcacAcesRR1_NUMMAR
    codRepRR1_CODREP
    codUnidExtChaveRR1_CODUNI
    codUsuarExtChaveRR1_CODUSU


    Exemplo de Request da API recordClockMarkings:

    {
    	"items": [
    				{
    					"codRelogioExtChave": "",
    					"codFuncMsa": "400425",
    					"codNsr": 1,
    					"codPisMsa": "012076853075",
    					"datMarcacAces": "2020-10-16 08:30:00.000",
    					"numHorarMarcacAces": 30600,
    					"codRep": "00000000000000001",
    					"codUnidExtChave": "T2L MG 01",
    					"codUsuarExtChave": "T2L MG 01 400425"
    				},
    				{
    					"codRelogioExtChave": "",
    					"codFuncMsa": "400426",
    					"codNsr": 2,
    					"codPisMsa": "012047284033",
    					"datMarcacAces": "2020-10-16 08:30:00.999",
    					"numHorarMarcacAces": 30600,
    					"codRep": "00000000000000001",
    					"codUnidExtChave": "T2L MG 01",
    					"codUsuarExtChave": "T2L MG 01 400426"
    				}
    		]
    }


    Retornos da API recordClockMarkings:

    ErroMensagemSolução
    400A tabela RR1 não existe no dicionário de dados. É necessário a atualização do sistema para utilizar este serviço.Efetue a execução do UPDDISTR para criação da tabela RR1 no dicionário de dados.
    500Ocorreu uma falha no retorno da informação: [descrição do erro]Houve algum erro interno do servidor. Contate o administrator do sistema para mais detalhes.


    A API irá retornar a lista com o indicativo individual de sucesso ou erro na gravação. Os retornos possíveis estão na lista abaixo:

    StatuserrorCodemessage
    200
    "Gravação efetuada com sucesso."
    400"00001""PIS em formato inválido ou inexistente no cadastro."
    400"00002""NSR duplicado. Número já foi importado na tabela"
    400"00003""NSR não foi informado e é obrigatório"
    400"00006""Não foi informado algum dos campos obrigatórios: 'codRelogioExtChave', 'codFuncMsa', 'codPisMsa', 'datMarcacAces', 'numHorarMarcacAces', 'codRep', 'codUnidExtChave' ou 'codUsuarExtChave'."
    400"00006""Campo 'codRelogioExtChave' no formato incorreto. Deve ser preenchido como texto."
    400"00006""Campo 'codFuncMsa' no formato incorreto. Deve ser preenchido como texto."
    400"00006""Campo 'codNsr' no formato incorreto. Deve ser preenchido como numérico."
    400"00006""Campo 'codPisMsa' no formato incorreto. Deve ser preenchido como texto."
    400"00006""Campo 'datMarcacAces' no formato incorreto. Deve ser preenchido como data."
    400"00006""Campo 'numHorarMarcacAces' no formato incorreto. Deve ser preenchido como numérico."
    400"00006""Campo 'codRep' no formato incorreto. Deve ser preenchido como texto."
    400"00006""Campo 'codUnidExtChave' no formato incorreto. Deve ser preenchido como texto."
    400"00006""Campo 'codUsuarExtChave' no formato incorreto. Deve ser preenchido como texto."
    400"00007""Foi enviado marcações de um relógio que não está cadastrado no ERP."
    400"99999""Erro interno no lock da tabela RR1. Registro não foi gravado"


    Exemplo de retorno da API recordClockMarkings:

    {
    	"items": [
    				{
    					"codFuncMsa": "400425",
    					"codNsr": 1,
    					"codPisMsa": "012076853075",
    					"datMarcacAces": "2020-10-16 08:30:00.000",
    					"numHorarMarcacAces": 30600,
    					"codUnidExtChave": "T2L MG 01",
    					"codUsuarExtChave": "T2L MG 01 400425",
    					"status": 400,
    					"errorCode": "000006",
    					"message": "Não foi informado algum dos campos obrigatórios: 'codRelogioExtChave', 'codFuncMsa', 'codPisMsa', 'datMarcacAces', 'numHorarMarcacAces', 'codRep', 'codUnidExtChave' ou 'codUsuarExtChave'."
    				},
    				{
    					"codRelogioExtChave": "",
    					"codFuncMsa": "400426",
    					"codNsr": 2,
    					"codPisMsa": "012047284033",
    					"datMarcacAces": "2020-10-16 08:30:00.999",
    					"numHorarMarcacAces": 30600,
    					"codRep": "00000000000000001",
    					"codUnidExtChave": "T2L MG 01",
    					"codUsuarExtChave": "T2L MG 01 400426",
    					"status": 400,
    					"errorCode": "00002",
    					"message": "NSR duplicado. Número já foi importado na tabela"
    				}
    		]
    }

    04. DEMAIS INFORMAÇÕES

    Não há.


    05. ASSUNTOS RELACIONADOS

    Integração Protheus x Carol - Importação de Batidas.

    Integração Protheus x Suricato.

    Configuração REST.