Versões comparadas

Chave

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

01. DADOS GERAIS

Produto:

RM

Linha de Produto:

Linhas_totvs
LinhaLinha RM

Segmento:

Segmentos_totvs
SegmentoRH

Função:Permitir a Exclusão do Abono utilizando a API de Abono (AllowanceAllowanceControl
País:Brasil
Requisito/Story/Issue:DRHJORNRM-8674

02. SITUAÇÃO/REQUISITO

Permitir que as marcações vindas do Suricato ou PontoWeb sejam inseridas em lote na tabela AINTEGRACAOBATIDASAo excluir um abono no Quírons a exclusão não é efetivada no RM e não retorna mensagem para o usuário.

03. SOLUÇÃO

Foi criada uma nova API: v2/recordClockMarkings/integracaobatidas para atender a integração de marcações em loteAdequado o método Delete da API  de Abono AllowanceControl .

04. VERSÕES

12.1.2510 e superiores2502.216

12.1.2506.XXX (ainda não disponível).165

12.1.2502.XXX (ainda não disponível)2510.100  e superiores.

05. UTILIZAÇÃO

Deck of Cards
id1
Confluence

{protocolo}://{host}

:

/{

porta

api}

/api

/rh/

v2/recordClockMarkings/integracaobatidasLembrando que o host e a porta devem ser configurados de acordo com o ambiente utilizado.
Exemplo de endpoint configurado corretamente:
Card
id1
labelPontoWebExemplo 1 : Excluindo Abono

Funcionário possui Abono cadastrado na data 03/10/2025

Image Added

Para a realização de testes foi utilizado a ferramenta POSTMAN . A  requisição deverá ser semelhante a imagem abaixo:

Como realizar a chamada da API REST

Endpoint:

Deve ser configurado da seguinte forma: 
Bloco de código
languagebash
theme
Bloco de código
languagebash
themeConfluence
http://localhost:8051/api/rh/v2/recordClockMarkings/integracaobatidas

Método:

O método disponibilizado pela API é POST, sendo obrigatório o preenchimento do corpo (body). Segue um exemplo de como enviar o body:

Bloco de código
languagebash
themeConfluence
titleBody
{ 
    "items" :[
        {
            "codRelogioExtChave": "PONTOWEB", 
            "codFuncMsa": "00001",
            "codNsr": 1,
            "datMarcacAces": "2025-09-02",
            "numHorarMarcacAces": 28800,
            "codRep": "55551234567895287",
            "codUsuarExtChave": "1;00001",
            "codPisMsa": "59008268339",
            "codCPF": "51427362653",
            "codFuso": "-0300",
            "inscrEmp": "01234567891234",
            "codCCT":"12345678914258778",
            "numVersLayout": "3"
        },
        {
            "codRelogioExtChave": "PONTOWEB", 
            "codFuncMsa": "00001",
            "codNsr": 2,
            "datMarcacAces": "2025-09-02",
            "numHorarMarcacAces": 43200,
            "codRep": "55551234567895287",
            "codUsuarExtChave": "1;00001",
            "codPisMsa": "59008268339",
            "codCPF": "51427362653",
            "codFuso": "-0300",
            "inscrEmp": "01234567891234" ,
            "codCCT":"12345678914258778",
            "numVersLayout": "3"
        }
    ]
 }

Resposta:

  • O retorno da API será em JSON. Segue um exemplo de resposta:

    Bloco de código
    languagebash
    themeConfluence
    titleResponse
    {
        "items": [
            {
                "codRelogioExtChave": "PONTOWEB",
                "codFuncMSA": "00001",
                "codNSR": 1,
                "datMarcacAces": "2025-09-02",
                "numHorarMarcacAces": 28800,
                "codRep": "55551234567895287",
                "codUsuarExtChave": "1;00001",
                "codPisMSA": "59008268339",
                "codCPF": "51427362653",
                "codFuso": "-0300",
                "inscrEmp": "01234567891234",
                "codCCT": "12345678914258778",
                "numVersLayout": 3,
                "status": 200,
                "errorCode": "",
                "message": "Gravação efetuada com sucesso"
            },
            { 
                "codRelogioExtChave": "PONTOWEB",
                "codFuncMSA": "00001",
                "codNSR": 1,
                "datMarcacAces": "2025-09-02",
                "numHorarMarcacAces": 28800,
                "codRep": "55551234567895287",
                "codUsuarExtChave": "1;00001",
                "codPisMSA": "59008268339",
                "codCPF": "51427362653",
                "codFuso": "-0300",
                "inscrEmp": "01234567891234",
                "codCCT": "12345678914258778",
                "numVersLayout": 3,
                "status": 400,
                "errorCode": "00002",
                "message": "NSR duplicado. Número já foi importado na InscrEmp informada."
            }         
        ]
    }
Card
id2
labelSuricato

v1/allowanceControl{allowanceId}

Image Added


O abono será excluído e demonstrará a seguinte mensagem 204 No Content.

Ao visualizar o espelho do funcionário o abono foi excluído.

Image Added



{protocolo}://{host}

:

/{

porta

api}

/api

/rh/

v2/recordClockMarkings/integracaobatidasLembrando que o host e a porta devem ser configurados de acordo com o ambiente utilizado.
Exemplo de endpoint configurado corretamente:
Card
id2
labelExemplo 2 : Excluindo Abono Inexistente

Funcionário não possui Abono cadastrado.
Image Added

Para a realização de testes foi utilizado a ferramenta POSTMAN . A  requisição deverá ser semelhante a imagem abaixo:

Como realizar a chamada da API REST

Endpoint:

Deve ser configurado da seguinte forma: 
Bloco de código
languagebash
themeConfluence
Bloco de código
languagebash
themeConfluence
http://localhost:8051/api/rh/v2/recordClockMarkings/integracaobatidas

Método:

O método disponibilizado pela API é POST, sendo obrigatório o preenchimento do corpo (body). Segue um exemplo de como enviar o body:

Bloco de código
languagebash
themeConfluence
titleBody
{ 
    "items" :[
        {
            "codRelogioExtChave": "1;1A", 
            "codFuncMsa": "00001",
            "codNsr": 5000,
            "datMarcacAces": "2025-09-05",
            "numHorarMarcacAces": 28800,
            "codRep": "55551234567895287",
            "codUsuarExtChave": "1;00001",
            "codPisMsa": "59008268339",
            "codCPF": "51427362653",
            "codFuso": "-0300",
            "inscrEmp": "01234567891234",
            "codCCT":"12345678914258778",
            "numVersLayout": "3"
        },
        {
            "codRelogioExtChave": "1;1A", 
            "codFuncMsa": "00001",
            "codNsr": 6000,
            "datMarcacAces": "2025-09-06",
            "numHorarMarcacAces": 43200,
            "codRep": "55551234567895287",
            "codUsuarExtChave": "1;00001",
            "codPisMsa": "59008268339",
            "codCPF": "51427362653",
            "codFuso": "-0300",
            "inscrEmp": "01234567891234" ,
            "codCCT":"12345678914258778",
            "numVersLayout": "3"
        }
    ]
 }

Resposta:

  • O retorno da API será em JSON. Segue um exemplo de resposta:

    Bloco de código
    languagebash
    themeConfluence
    titleResponse
    {
        "items": [
            {
                "codRelogioExtChave": "1;1A",
                "codFuncMSA": "00001",
                "codNSR": 6000,
                "datMarcacAces": "2025-09-06",
                "numHorarMarcacAces": 43200,
                "codRep": "55551234567895287",
                "codUsuarExtChave": "1;00001",
                "codPisMSA": "59008268339",
                "codCPF": "51427362653",
                "codFuso": "-0300",
                "inscrEmp": "01234567891234",
                "codCCT": "12345678914258778",
                "numVersLayout": 3,
                "status": 200,
                "errorCode": "",
                "message": "Gravação efetuada com sucesso"
            },
            {
                "codRelogioExtChave": "1;1A",
                "codFuncMSA": "00001",
                "codNSR": 5000,
                "datMarcacAces": "2025-09-05",
                "numHorarMarcacAces": 28800,
                "codRep": "55551234567895287",
                "codUsuarExtChave": "1;00001",
                "codPisMSA": "59008268339",
                "codCPF": "51427362653",
                "codFuso": "-0300",
                "inscrEmp": "01234567891234",
                "codCCT": "12345678914258778",
                "numVersLayout": 3,
                "status": 400,
                "errorCode": "00002",
                "message": "NSR duplicado. Número já foi importado na tabela"
            }
        ]
    }

Mensagens de Erro:

Table FilterfixedColstotalrow,,hidelabelsfalseddSeparatorsparkNameSparklinehidePanetruecustomNoTableMsgTextlimitHeightsparklinefalsedefaultisFirstTimeEntertruecell-widthhideColumnsfalsetotalRowNametotalColNamecustomNoTableMsgfalsedisabledfalseenabledInEditorfalseglobalFilterfalseid1759176505240_480190944iconfilterorderhideControlsfalseinversenumberingdatefiltercolumnsortstatus ⇧totalcoldisableSavefalserowsPerPageseparatorPoint (.)labelsthousandSeparatorignoreFirstNrowsddOperatoruserfilterdatepatterndd/mm/yynumberfilterheightValuehideFiltersupdateSelectOptionsfalseworklog365|5|8|y w d h m|y w d h misORANDshowNRowsifNotFilteredstatuserrorCodemessage200"Gravação efetuada com sucesso."400"00001""PIS em formato inválido ou inexistente no cadastro."400"00001""CPF em formato inválido ou inexistente no cadastro."400"00002""NSR duplicado. Número já foi importado na tabela"400"00002""NSR duplicado. Número já foi importado na InscrEmp informada." Obs: (Essa validação só é feita se o campo "CodRelogioExtChave" estiver com o valor PONTOWEB )400"00003""NSR não foi informado e é obrigatório"400"00006""Não foi informado o campo obrigatório: CodRelogioExtChave"400"00006""Não foi informado o campo obrigatório: codFuncMsa"400"00006""Não foi informado o campo obrigatório: numHorarMarcacAces"400"00006""Código do REP é obrigatório"400"00006""Não foi informado o campo obrigatório: codUsuarExtChave"400"00006""Data da marcação é obrigatória"400"00006""Campo 'datMarcacAces' no formato incorreto. Deve ser preenchido como data."400"00006""Tamanho do campo InscrEmp inválido. O campo permite a quantia de caracteres 11 ou 14 apenas."400"00006""Campo codRelogioExtChave no formato inválido. Deve ser preenchido para o Suricato: Coligada;Código do Terminal de Coleta ou para Ahgora: PONTOWEB."400"00006""Não foi informado o campo obrigatório: InscrEmp." Obs: (Essa validação só é feita se o campo "CodRelogioExtChave" estiver com o valor PONTOWEB )400"00007""Terminal de coleta não está cadastrado no ERP."400"99999""Erro interno na tabela. Registro não foi gravado."
Aviso
titleImportante

Uma marcação com dados errados ou incompletos não impede que outras marcações corretas sejam integradas. O motivo do erro será retornado na resposta da chamada, na propriedade "message".

06. ASSUNTOS RELACIONADOS

...

v1/allowanceControl{allowanceId}


Image Added




Card
id2
labelExemplo 3 : Mensagens de Validação
Nota
titleImportante

As mensagens de validações serão retornadas sempre que algum campo passado que seja obrigatório não tenha sido informado na requisição ou esteja informado erroneamente.

Retorno APIMensagem
204- No Content"Abono foi excluido com sucesso"
404- Not Found"Abono não encontrado na base de dados"
500- Internal Server Error"Os parâmetros da requisição não foram informados corretamente"