Páginas filhas
  • TOTVS HCM x Suricato - Api Rest recordClockMarkings

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

INTEGRAÇÃO

Contexto de Negócio (Introdução)

Atualmente a integração de marcações de ponto do Suricato para o TOTVS HCM ocorre através de uma conexão direta com o banco de dados, atualizando a tabela msa_control_marcac.

Há a necessidade de realizar esta integração através de uma API REST garantindo a integridade da informação e, evitando assim a necessidade de conexão direta com o banco de dados. 

Sistemas Envolvidos

  • HCM (módulo Controle de Frequência): O módulo Controle de Frequência permite de forma prática, segura e automática o controle da apuração de informações referentes à frequência dos funcionários de uma empresa, possibilitando, também, o controle e o acompanhamento do consumo e cobrança de refeições dos funcionários, quando esta é feita em refeitório na empresa.

  • Suricato (Telemática):  software multi-idioma para a gestão integrada da segurança e controle de acesso.

Pré-requisitos instalação/implantação/utilização

  • Versões mínima do TOTVS/Datasul: 12.1.34
  • Servidor de aplicação tomcat (não é compatível com o servidor de aplicação jboss)
  • Estrutura de rede estável, para que haja trafego de dados sem interrupção.
  • Datasul devidamente configurado e serviço Rest habilitado em seu server, com acesso à internet.

Integração

O objetivo desta integração é permitir a integração das marcações de ponto do Suricato para o Datasul e, este efetue efetuar a validação e gravação das marcações na tabela marcac_nova_integr, sem que ocorra acesso direto ao banco de dados por parte do Suricato.

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

Parâmetros e Chamada do Método:

Autenticação do tipo básica. 

Método POST.

{protocolo}://{host}/api/rh/v1/recordClockMarkings

Request da API: Exemplo:

{
    "items": [
                    {
                         "codRelogioExtChave": "",
                         "codFuncMsa": "529",
                         "codNsr": 1,
                         "codPisMsa": "15423654711",

                         "datMarcacAces": "2021-10-21 09:30:00.000",

                         "numHorarMarcacAces": 34200,
                         "codRep": "5009940099846",
                         "codUnidExtChave": "10;1",
                         "codUsuarExtChave": "10;1;529"
                    },
                    {
                         "codRelogioExtChave": "",
                         "codFuncMsa": "1356",
                         "codNsr": 2,
                         "codPisMsa": "15423654711",
                         "datMarcacAces": "2021-10-23 22:00:00.999",
                         "numHorarMarcacAces": 79200,
                         "codRep": "5009940099846",
                         "codUnidExtChave": "10;1",
                         "codUsuarExtChave": "10;1"
                    }

                 ]
}

Dados utilizados da API

Propriedade API RESTCAMPO HCMDESCRIÇÃOFormato / ExemplocompanyCodecdn_empresaEmpresa que a suspensão se aplica. 123baseCompanyIdcod_base_id_federBase do CNPJ da empresa que a suspensão se aplica. Será considerado apenas quando o código da empresa (companyCode) não for informado. 12345678tpProcidi_tip_proces_justicTipo de processo conforme leiaute do eSocial. 1nrProccod_proces_justicNúmero do processo. 12345678901234567890iniValiddat_inic_validInício da validade do processo. "2019-02"fimValiddat_term_validFim da validade do processo. "9999-12"indAutoriaidi_tip_autoriaAutoria da ação judicial. 2indMatProcidi_mater_procesIndicativo da matéria do processo ou alvará judicial.5observacaodes_obs_spedObservações relacionadas ao processo. Lorem ipsum dapibus molestie semper malesuada aliquam purus suspendisse tristique, etiam per urna arcu ante curabitur quam quis metus tempus, egestas a massa euismod sem fermentum maecenas sodales. vulputate molestie faucibus ac accumsan.ufVaracod_uf_varaUF da Vara. SCcodMuniccdn_munpio_spedCódigo do município, conforme tabela do IBGE. 1234567idVaracod_varaCódigo de Identificação da Vara. 1234infoSuspPode ter nenhuma ou várias suspensões conforme o processo. codSuspnum_seq_utilizCódigo indicativa da suspensão. 1indSuspidi_tip_decis_proces_justicIndicativo de suspensão da exigibilidade. "04"dtDecisaodat_decisData da decisão, sentença ou despacho. "2019-07-21"indDepositolog_depos_montanteIndicativo de depósito do montante integral. 

"S" para sim

"N" para não. 

Situações de Erros Tratados

O envio de dados inesperados nos parâmetros de entrada da API REST pode ocasionar alguns erros. Desta forma, foram criados alguns tratamentos de erros, listados abaixo, cada um com sua respectiva mensagem e solução.

Tratamento de erros de integração Datasul HCM:

Mensagens de Pré-Validação

Erro

Mensagem

Solução

API RESPONSE

265

Processo (nrProc) deve ser informado(a). 

Verificar se a propriedade json nrProc está preenchida no pacote enviado .

Bloco de código
themeEclipse
linenumberstrue
collapsetrue
{
   			"message": "Processo (nrProc) deve ser informado(a).\n",
    		"code": "265",
    		"type": "error"
}
158

Informe um(a) Tipo Processo (tpProc) válido(a). Valores Válidos: 1 ou 2 ou 3

Verificar se a propriedade json tpProc existe e está com valor válido conforme leiaute do eSocial.   
Bloco de código
themeEclipse
linenumberstrue
collapsetrue
{
   			"message": "Informe um(a) Tipo Processo (tpProc) válido(a). Valores Válidos: 1 ou 2 ou 3.\n",
    		"code": "158",
            "type": "error"
}
56650

Processo cadastrado(a) no HCM deve ser mantido neste produto. Verifique o FP0030.

Se o processo já foi cadastrado pelo HCM (FP0030), a manutenção do mesmo deve ocorrer no HCM e não via integração. 
Bloco de código
themeEclipse
linenumberstrue
collapsetrue
{
   			"message": "Processo cadastrado(a) no HCM deve ser mantido neste produto. Verifique o FP0030.\n",
    		"code": "56650",
            "type": "error"
}
7137

Empresa não relacionada com Nenhum Empregador.

Empresa informada na integração (companyCode) deve ser um empregador ou estar relacionado a algum empregador. Verifique complemento do eSocial no FP0500 Manutenção Parâmetros Empresa RH. 
Bloco de código
themeEclipse
linenumberstrue
collapsetrue
{
   			"message": "Empresa não relacionada com Nenhum Empregador",
    		"code": "7137",
            "type": "error"
}
53817

Dado Registro infoSusp (codSusp: 1) incorreto - indSusp (50).

Este campo (indSusp) deve ter valor conforme leiaute do eSocial. 
Bloco de código
themeEclipse
linenumberstrue
collapsetrue
{
   			"message": "Dado Registro infoSusp (codSusp: 1) incorreto - indSusp (50).",
    		"code": "53817",
            "type": "error"
}


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


PropriedadeDescriçãoTipoObrigatório?Observação
itemsArray das marcaçõesArraySim
items.codRelogioExtChaveCódigo RelógioCaracterNão

Preenchido com o código da empresa e do relógio, conforme cadastrado no programa PE0620, campo Relógio.

Obrigatório ser informado quando a marcação for de refeitório.

items.codFuncMsaCódigo do funcionárioCaracterSimPreenchido com a matrícula do funcionário conforme cadastro no programa FP1500
items.codNsrCódigo NSRNuméricoSim
items.codPisMsaCódigo do PIS do FuncionárioCaracterSimObrigatório para marcações realizadas em dispositivos que atendem à portaria 1510.
items.datMarcacAcesData da marcaçãoCaracterSim
items.numHorarMarcacAcesHora da marcação em segundosNuméricoSim
items.codRepCódigo do REPCaracterNãoPreenchido com o número informado no programa PE0620, campo Número REP
items.codUnidExtChaveCódigo da UnidadeCaracterSimPreenchido com o código da empresa e estabelecimento. Ex.: "99;99"
items.codUsuarExtChaveCódigo do usuárioCaracterSimPreenchido com o código da empresa, estabelecimento e  matrícula. Ex.: "99;99;4"
items.codFusoFuso Horário CaracterSimObrigatório para marcações realizadas em dispositivos que atendem à portaria 671.
items.codCPFCódigo do CPF do FuncionárioCaracterSimObrigatório para marcações realizadas em dispositivos que atendem à portaria 671.
items.numVersLayoutVersão Layout Arquivo AFDNuméricoSim

Quando preenchido com o valor:

0 - marcações de refeitório

1 - marcações da portaria 1510 

3 - marcações da portaria 671

items.inscrEmpCNPJ ou CPF do empregadorDecimalNão
items.codCCTCódigo Convenção ColetivaDecimalNão

Preenchido com o valor vazio (branco), quando a marcação for originada de um REP da portaria antiga (1510 ou 1510 INMETRO).

Preenchido com o valor do acordo coletivo, quando a marcação for originada de um REP A.

Preenchido com o valor vazio (branco), quando a marcação for originada de um equipamento de controle de acesso em refeitório.

Preenchido sem zeros a esquerda. 


Exemplos do Json de Request da API:


Expandir
titleMarcações Portaria 1510

{
    "items": [
                    {
                         "codRelogioExtChave": "",
                         "codFuncMsa": "529",
                         "codNsr": 1,
                         "codCPF:"",
                         "codPisMsa": "15423654711",
                         "datMarcacAces": "2021-10-21 09:30:00.000",
                         "numHorarMarcacAces": 34200,
                         "codRep": "5009940099846",
                         "codUnidExtChave": "10;1",
                         "codUsuarExtChave": "10;1;529",
                         "codCCT":""
                    },

                    {
                         "codRelogioExtChave": "",
                         "codFuncMsa": "1356",
                         "codNsr": 2,
                         "codCPF:"",
                         "codPisMsa": "15423654711",
                         "datMarcacAces": "2021-10-23 22:00:00.999",
                         "numHorarMarcacAces": 79200,
                         "codRep": "5009940099846",
                         "codUnidExtChave": "10;1",
                         "codUsuarExtChave": "10;1",
                         "codCCT":""
                    }

                 ]
}

Expandir
titleMarcação Portaria 671 REP-A

{
    "items": [
                {
                    "codRelogioExtChave": "",
                    "codFuncMsa": "4",
                    "codNsr": 1000,
                    "codCPF": "02709509903",
                    "codFuso": "-0300",
                    "numVersLayout": 3,
                    "inscrEmpr": "012457856000158",
                    "datMarcacAces": "2022-09-08 09:30:00.000",
                    "numHorarMarcacAces": 34200,
                    "codRep": "858585565656",
                    "codUnidExtChave": "99;99",
                    "codUsuarExtChave": "99;99;4",
                    "codCCT": "19269592961497986"

                },
                {
                    "codRelogioExtChave": "",
                    "codFuncMsa": "4",
                    "codNsr": 1002,
                    "codCPF": "02709509903",
                    "datMarcacAces": "2022-09-08 22:00:00.999",
                    "numHorarMarcacAces": 79200,
                    "codFuso": "-0300",
                    "numVersLayout": 3,
                    "inscrEmpr": "012457856000158",
                    "datMarcacAces": "2022-09-08 09:30:00.000",
                    "codRep": "858585565656",
                    "codUnidExtChave": "99;99",
                    "codUsuarExtChave": "99;99;4"
                    "codCCT": "19269592961497986"
                }

        ]
}

Expandir
titleMarcação Portaria 671 REP-C

{
    "items": [
                {
                    "codRelogioExtChave": "",
                    "codFuncMsa": "4",
                    "codNsr": 1000,
                    "codCPF": "02709509903",
                    "codFuso": "-0300",
                    "numVersLayout": 3,
                    "inscrEmpr": "012457856000158",
                    "datMarcacAces": "2022-09-08 09:30:00.000",
                    "numHorarMarcacAces": 34200,
                    "codRep": "858585565656",
                    "codUnidExtChave": "99;99",
                    "codUsuarExtChave": "99;99;4",
                    "codCCT": ""

                },
                {
                    "codRelogioExtChave": "",
                    "codFuncMsa": "4",
                    "codNsr": 1002,
                    "codCPF": "02709509903",
                    "datMarcacAces": "2022-09-08 22:00:00.999",
                    "numHorarMarcacAces": 79200,
                    "codFuso": "-0300",
                    "numVersLayout": 3,
                    "inscrEmpr": "012457856000158",
                    "datMarcacAces": "2022-09-08 09:30:00.000",
                    "codRep": "858585565656",
                    "codUnidExtChave": "99;99",
                    "codUsuarExtChave": "99;99;4"
                    "codCCT": ""
                }

        ]
}

Expandir
titleRefeitório

{
    "items": [
                    {
                         "codRelogioExtChave": "10;1",
                         "codFuncMsa": "529",
                         "codNsr": 1,
                         "codCPF":"",
                         "numVersLayout": 0,
                         "codPisMsa": "15423654711",
                         "codFuso": "",
                         "datMarcacAces": "2021-10-21 09:30:00.000",
                         "numHorarMarcacAces": 34200,
                         "codRep": "5009940099846",
                         "codUnidExtChave": "10;1",
                         "codUsuarExtChave": "10;1;529",
                         "codCCT":""
                    },

                    {
                         "codRelogioExtChave": "10;1",
                         "codFuncMsa": "1356",
                         "codNsr": 2,
                         "codCPF":"",
                         "numVersLayout": 0,
                         "codPisMsa": "15423654711",
                         "codFuso": "",
                         "datMarcacAces": "2021-10-23 22:00:00.999",
                         "numHorarMarcacAces": 79200,
                         "codRep": "5009940099846",
                         "codUnidExtChave": "10;1",
                         "codUsuarExtChave": "10;1",
                         "codCCT":""
                    }

                 ]
}



Situações de Erros Tratados

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:

statuserrorCodemessageOBS
200
Marcação gravada com sucesso.
40000001PIS em formato inválido ou inexistente no cadastro.
40000002NSR duplicado. Número já foi importado na tabela marcac_nova_integr .
40000003NSR não foi informado e é obrigatório.
40000006É obrigatório informar o campo codRelogioExtChave.
40000006É obrigatório informar o campo codFuncMsa.
40000006É obrigatório informar o campo codPisMsa.Somente quando não estiverem informados os campos: codPisMsa e codCPF  
40000006É obrigatório informar o campo datMarcacAces.
40000006É obrigatório informar o campo numHorarMarcacAces.
40000006É obrigatório informar o campo codRep.
40000006É obrigatório informar o campo codUnidExtChave.
40000006É obrigatório informar o campo codUsuarExtChave.
40000006Campo 'codRelogioExtChave' no formato incorreto. Deve ser preenchido como texto e conter o código da empresa e do relógio no ERP.
40000006Campo 'codNsr' no formato incorreto. Deve ser preenchido como numérico.
40000006Campo 'numHorarMarcacAces' no formato incorreto. Deve ser preenchido como numérico.
40000006Campo 'codUnidExtChave' no formato incorreto. Deve ser preenchido como texto e conter o código da empresa e do estabelecimento no ERP.
40000006Campo 'codUsuarExtChave' no formato incorreto. Deve ser preenchido como texto e conter o código da empresa, do estabelecimento e matricula do funcionário no ERP.
40000006Foi enviado marcações de um relógio que não está cadastrado no ERP
40000006

Verifique codCPF informado

Somente quando o campo codCPF estiver informado e seu dígito verificador estiver incorreto.


Exemplo de retorno da API recordClockMarkings:



Expandir
titleRetorno Portaria 1510

{
    "items": [
                   {
                       "codRelogioExtChave": "",
                       "codFuncMsa": "529",
                       "codNsr": 1,
                       "codPisMsa": "17962727770",
                       "datMarcacAces": "2021-10-21 09:30:00.000",
                       "numHorarMarcacAces": 34200,
                       "codRep": "5009940099846",
                       "codUnidExtChave": "10;1",
                       "codUsuarExtChave": "10;1;529",
                       "status": 200,
                       "errorCode": "",
                       "codCCT":"",
                       "message": "Marcação gravada com sucesso"
                   },
                   {
                       "codRelogioExtChave": "",
                       "codFuncMsa": "1356",
                       "codNsr": 2,
                       "codPisMsa": "10699643292",
                       "datMarcacAces": "2021-10-22 22:00:00.999",
                       "numHorarMarcacAces": 79200,
                       "codRep": "5009940099846",
                       "codUnidExtChave": "10;1",
                       "codUsuarExtChave": "10;1",
                       "status": 400,
                       "errorCode": "00006",
                       "codCCT":"",     
                       "message": "Campo 'codUsuarExtChave' no formato incorreto. Deve ser preenchido como texto e conter o código da empresa, do estabelecimento e matricula do funcionário no ERP."
                   }
                 ]
}

Expandir
titleRetorno Portaria 671 REP-A

{
    "items": [
                   {
                       "codRelogioExtChave": "",
                       "codFuncMsa": "529",
                       "codNsr": 1,
                       "codCPF": "02709509903",
                       "datMarcacAces": "2021-10-21 09:30:00.000",
                       "numHorarMarcacAces": 34200,
                       "codRep": "5009940099846",
                       "codUnidExtChave": "10;1",
                       "codUsuarExtChave": "10;1;529",
                       "status": 200,
                       "errorCode": "",
                       "codCCT":"19269592961497986",
                       "message": "Marcação gravada com sucesso"
                   },
                   {
                       "codRelogioExtChave": "",
                       "codFuncMsa": "1356",
                       "codNsr": 2,
                       "codCPF": "02709509903",
                       "datMarcacAces": "2021-10-22 22:00:00.999",
                       "numHorarMarcacAces": 79200,
                       "codRep": "5009940099846",
                       "codUnidExtChave": "10;1",
                       "codUsuarExtChave": "10;1",
                       "status": 400,
                       "errorCode": "00006",
                       "codCCT":"19269592961497986",     
                       "message": "Campo 'codUsuarExtChave' no formato incorreto. Deve ser preenchido como texto e conter o código da empresa, do estabelecimento e matricula do funcionário no ERP."
                   }
                 ]
}

Expandir
titleRetorno Portaria 671 REP-C

{
    "items": [
                   {
                       "codRelogioExtChave": "",
                       "codFuncMsa": "529",
                       "codNsr": 1,
                       "codCPF": "02709509903",
                       "datMarcacAces": "2021-10-21 09:30:00.000",
                       "numHorarMarcacAces": 34200,
                       "codRep": "5009940099846",
                       "codUnidExtChave": "10;1",
                       "codUsuarExtChave": "10;1;529",
                       "status": 200,
                       "errorCode": "",
                       "codCCT":"",
                       "message": "Marcação gravada com sucesso"
                   },
                   {
                       "codRelogioExtChave": "",
                       "codFuncMsa": "1356",
                       "codNsr": 2,
                       "codCPF": "02709509903",
                       "datMarcacAces": "2021-10-22 22:00:00.999",
                       "numHorarMarcacAces": 79200,
                       "codRep": "5009940099846",
                       "codUnidExtChave": "10;1",
                       "codUsuarExtChave": "10;1",
                       "status": 400,
                       "errorCode": "00006",
                       "codCCT":"",     
                       "message": "Campo 'codUsuarExtChave' no formato incorreto. Deve ser preenchido como texto e conter o código da empresa, do estabelecimento e matricula do funcionário no ERP."
                   }
                 ]
}

Expandir
titleRetorno Refeitório

{
    "items": [
                   {
                       "codRelogioExtChave": "",
                       "codFuncMsa": "529",
                       "codNsr": 1,
                       "codPisMsa": "17962727770", ou "codCPF": "02709509903",
                       "datMarcacAces": "2021-10-21 09:30:00.000",
                       "numHorarMarcacAces": 34200,
                       "codRep": "5009940099846",
                       "codUnidExtChave": "10;1",
                       "codUsuarExtChave": "10;1;529",
                       "status": 200,
                       "errorCode": "",
                       "codCCT":"",
                       "message": "Marcação gravada com sucesso"
                   },
                   {
                       "codRelogioExtChave": "",
                       "codFuncMsa": "1356",
                       "codNsr": 2,
                       "codPisMsa": "10699643292", ou "codCPF": "02709509903",
                       "datMarcacAces": "2021-10-22 22:00:00.999",
                       "numHorarMarcacAces": 79200,
                       "codRep": "5009940099846",
                       "codUnidExtChave": "10;1",
                       "codUsuarExtChave": "10;1",
                       "status": 400,
                       "errorCode": "00006",
                       "codCCT":"",     
                       "message": "Campo 'codUsuarExtChave' no formato incorreto. Deve ser preenchido como texto e conter o código da empresa, do estabelecimento e matricula do funcionário no ERP."
                   }
                 ]
}

OBS: Estas mensagens de validações serão retornadas sempre que algum campo passado que seja obrigatório ou que algum campo enviado tenha sua origem de dados em outra tabela e não seja localizado na mesma ou não estejam de acordo com o leiaute do eSocial. Vale lembrar que são apenas exemplos de mensagens de erros e podendo variar o nome da propriedade enviada.



Checklist de suporte da aplicação

Itens a serem verificados durante o atendimento:

  • Verificar se os pré-requisitos foram atendidos para a chamada da API;
  • Verificar se na chamada da API o EndPoint, o nome do serviço e todos os campos obrigatórios foram informados;
  • Verificar se o retorno da API apresenta algum erro tratado (códigos e mensagens de erro citados neste documento) e consultar a solução na mesma tabela que descreve o erro;
  • Em caso de Erro não tratado, verificar se possui alguma informação de banco de dados, conexão com o servidor, clientlog, log do appServer ou algo que possa identificar a origem do problema.

EMS2:

  • Verificar se os parâmetros de conexão foram cadastrados corretamente no CD0387: URL, Porta, Usuário e Senha.
  • Verificar se estão cadastrados corretamente os processos no CD2021 dentro do período selecionado no CD2014.
  • Verificar se o processo (CD2021) está relacionado ao estabelecimento (CD2021A).