01. DADOS GERAIS
Produto: | |
---|
Linha de Produto: | Linhas_totvs |
---|
Segmento | Distribuição |
---|
Region | Construção Projetos |
---|
Linha | Linha Protheus |
---|
|
|
---|
Segmento: | |
---|
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 e 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, é efetuado 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 migração da tabela para 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
Ao 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 , será iniciado 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 XXXXXX 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.
Informações |
---|
|
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 XX27/XX12/XXXX2021. 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. |
...
Deck of Cards |
---|
startHidden | false |
---|
id | dicionario |
---|
|
Card |
---|
default | true |
---|
id | six |
---|
label | SIX |
---|
title | Índices |
---|
| 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) |
|
Card |
---|
id | sx1sx2 |
---|
label | SX1SX2 |
---|
title | PerguntasTabela |
---|
| Criação da tabela RR1: OrdemArquivo | PerguntaNome | Tipo | Tamanho | Decimal | Objeto | Opções | Help | 21 | Qual Tipo Contrato ? | Numérico | 1 | 0 | Combo | 1=Indeterminado 2=Determinado 3=Intermitente 4=Todos | Informe para qual tipo de contrato deseja gerar as informações: 1 - Contrato indeterminado; 2 - Contrato determinado; 3 - Contrato intermitente; 4 - TodosCompartilhamento Filial | Compartilhamento Unidade de Negócio | Compartilhamento Empresa | X2_UNICO |
---|
RR1990 | Integração de marcações | C | C | C | RR1_VALCON |
|
Card |
---|
| 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_ | CODPRECaracter | 20 | 0 | Real | Alterar | Cod. Id. Pre | Cod. ID Previd. Social | Código ID Previdência Social | 04 | RR1_CODREL | Caracter | 100 | 0 |
| Real | Alterar | Cod. Relógio | Código Relógio | Código do relógio |
05 | RR1_NUMDA | Numérico | 2 | 0 | 99 | Real | Alterar | Direção Aces | Direção Acesso | Direção de acesso | 0604 | RR1_CODFUN | Caracter | 100 | 0 |
| Real | Alterar | Cod. Func. | Código do funcionário | Código do funcionário |
07 | RR1_CODFED | Caracter | 50 | 0 | Real | Alterar | Cod. Fed. | Código da Federação | Código da federação | 08 | RR1_CODHAS | Caracter | 254 | 0 | Real | Alterar | Cod. Hash | Código hash | Código do hash | 09 | RR1_LOGIP | Caracter | 1 | 0 |
| Real | Alterar | Log Import. | Log de importação | Log de importação do registro | 10CODLOTCaracter | 100 | 0 | Real | Alterar | Cod. Lote | Código do lote | Código do lote | 11 | RR1_CODNSR | Numérico | 9 | 0 | @E 999,999,999 | Real | Alterar | Cod. NSR | Código NSR | Código NSR | 1207 | RR1_CODPIS | Caracter | 12 | 0 |
| Real | Alterar | Cod. PIS | Código do PIS | Código do PIS |
13 | RR1_VALPER | Numérico | 8 | 0 | @E 99,999,999 | Real | Alterar | Perfil Acess | Perfil de acesso | Perfil de acesso | 1408 | RR1_DATMAR | Data | 8 | 0 |
| Real | Alterar | Data Marc. | Data da marcação | Data da marcação | 1509 | 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 | 1610 | RR1_CODREP | Caracter | 17 | 0 |
| Real | Alterar | Cod. REP | Código do REP | Código do REP | 1711 | RR1_CODUNI | Caracter | 100 | 0 |
| Real | Alterar | Cod. Unid. | Código da Unidade | Código da unidade | 1812 | RR1_CODUSU | Caracter | 100 | 0 |
| Real | Alterar | Cod. Usuario | Código do usuário | Código do usuário |
|
Card |
---|
id | sx6 |
---|
label | SX6 |
---|
title | Parâmetros |
---|
| 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. |
Dica |
---|
| 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. |
|
|
...
Informações |
---|
|
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_ID_PREVID_SOCIAL | RR1_CODPRE | Não há. | COD_RELOGIO_EXT_CHAVE | RR1_CODREL |
Não há. | NUM_DIRECAO_ACES | RR1_NUMDA | Não há. | COD_FUNC_MSA | RR1_CODFUN | Não há. | COD_ID_FEDERCOD_HASH | RR1_CODHAS | Não há. | RR1_CODFED | Não há. | LOG_IMPORT_PRODUT | RR1_LOGIP |
Não há. | COD_LOTE | RR1_CODLOT | Não há. | COD_NSR | RR1_CODNSR | Não há. | COD_PIS_MSA | RR1_CODPIS | Não há. |
VAL_PERF_ACES | RR1_VALPER | 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ções |
---|
|
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:
Bloco de código |
---|
{
"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:
Bloco de código |
---|
{
"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.
HTML |
---|
<style>
div.theme-default .ia-splitter #main {
margin-left: 0px;
}
.ia-fixed-sidebar, .ia-splitter-left {
display: none;
}
#main {
padding-left: 10px;
padding-right: 10px;
overflow-x: hidden;
}
.aui-header-primary .aui-nav, .aui-page-panel {
margin-left: 0px !important;
}
.aui-header-primary .aui-nav {
margin-left: 0px !important;
}
.aui-tabs.horizontal-tabs>.tabs-menu>.menu-item.active-tab a::after {
background: #FF9900; !important
}
.menu-item.active-tab {
border-bottom: none !important;
}
</style>
|