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.
- 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.
- 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_FILIAL | Nunca será validado e sempre será gravado sem conteúdo. | |
VAL_CONTROL_MARCAC | RR1_VALCON | Não há. |
COD_RELOGIO_EXT_CHAVE | RR1_CODREL | Não há. |
COD_FUNC_MSA | RR1_CODFUN | Não há. |
LOG_IMPORT_PRODUT | RR1_LOGIP | Não há. |
COD_NSR | RR1_CODNSR | Não há. |
COD_PIS_MSA | RR1_CODPIS | Não há. |
DAT_MARCAC_ACES | RR1_DATMAR | Somente 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_ACES | RR1_NUMMAR | Não há. |
COD_REP | RR1_CODREP | Não há. |
COD_UNID_EXT_CHAVE | RR1_CODUNI | Não há. |
COD_USUAR_EXT_CHAVE | RR1_CODUSU | Não há. |
A API REST recordClockMarkings será consumido pelo Suricato e poderá receber no método POST os seguintes parâmetros:
PROPRIEDADE | DESCRIÇÃO | TIPO | Obrigatório? |
---|---|---|---|
items | Array das marcações | Array | Sim |
items.codRelogioExtChave | Código Relógio | Caracter | Não |
items.codFuncMsa | Código do funcionário | Caracter | Sim |
items.codNsr | Código NSR | Numérico | Sim |
items.codPisMsa | Código do PIS | Caracter | Sim |
items.datMarcacAces | Data da marcação | Caracter | Sim |
items.numHorarMarcacAces | Número da hora marcação | Numérico | Sim |
items.codRep | Código do REP | Caracter | Não |
items.codUnidExtChave | Código da Unidade | Caracter | Sim |
items.codUsuarExtChave | Código do usuário | Caracter | Sim |
Informação
Segue um de X para da API recordClockMarkings para a tabela RR1
De (recordClockMarkings) | Para (RR1) |
---|---|
codRelogioExtChave | RR1_CODREL |
codFuncMsa | RR1_CODFUN |
codNsr | RR1_CODNSR |
codPisMsa | RR1_CODPIS |
datMarcacAces | RR1_DATMAR |
numHorarMarcacAces | RR1_NUMMAR |
codRep | RR1_CODREP |
codUnidExtChave | RR1_CODUNI |
codUsuarExtChave | RR1_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:
Erro | Mensagem | Solução |
---|---|---|
400 | A 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. |
500 | Ocorreu 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:
Status | errorCode | message |
---|---|---|
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.