Pular para o conteúdo principal

API de integração de atestados

Esta documentação apresenta o contrato HTTP dos endpoints disponibilizados para a integração de atestados, incluindo as operações de consulta, inclusão, alteração e exclusão de registros.

Informações gerais

ItemValor
Contexto da aplicação/rh/dados
Recurso/api/atestados
Content-Type para POST/PUTapplication/json
Formato das datasyyyy-MM-dd
Formato de data e horayyyy-MM-dd'T'HH:mm:ss
CodificaçãoUTF-8

Exemplo de URL de testes:

https://rh.suite.betha.cloud/dados/v1/atestados

O endereço e o mecanismo de obtenção do token devem ser confirmados para o ambiente disponibilizado ao parceiro.

Resumo dos endpoints

MétodoCaminhoDescriçãoSucesso
GET/atestadosConsulta paginada de atestados200 OK
POST/atestados/integracaoCria um atestado200 OK
PUT/atestados/integracao/{id}Atualiza um atestado200 OK
DELETE/atestados/integracao/{id}Exclui um atestado204 No Content

Campos do corpo de integração

Os campos abaixo são utilizados pelo POST e pelo PUT.

CampoTipoObrigatórioRegras
idinteger (int64)Somente no PUTDeve identificar o mesmo atestado informado em {id}. Não enviar no POST.
matriculaobjectSimInformar uma matrícula existente por meio de matricula.id. A matrícula deve ser de funcionário ou estagiário.
matricula.idinteger (int64)SimIdentificador da matrícula.
numeroAtestadostringNãoNúmero externo ou número do documento de atestado.
inicioAtestadostring (date)SimFormato yyyy-MM-dd.
fimAtestadostring (date)SimFormato yyyy-MM-dd.
retornoTrabalhostring (date)SimFormato yyyy-MM-dd.
unidadestring (enum)SimConsulte a seção de enums.
duracaonumberSimValor entre 0 e 999. Quando unidade for DIAS, não pode ser fracionário.
localAtendimentostring (enum)SimConsulte a seção de enums.
observacaostringNãoObservação do atestado, com no máximo 5.000 caracteres.
dataPericiastring (date)NãoData da perícia no formato yyyy-MM-dd.
dataEntregastring (date-time)NãoData e hora da entrega no formato yyyy-MM-dd'T'HH:mm:ss.
deferidobooleanNãoIndica se o atestado foi deferido.
encaminharMedicobooleanNãoIndica se o atestado deve ser encaminhado para junta médica.
acompanhamentobooleanNãoIndica se o atestado decorre do acompanhamento de outra pessoa.
tipoobjectNãoReferência a um tipo de atestado existente.
tipo.idinteger (int64)CondicionalObrigatório quando tipo for enviado.
motivoConsultaMedicaobjectNãoReferência a um motivo de consulta médica existente.
motivoConsultaMedica.idinteger (int64)CondicionalObrigatório quando motivoConsultaMedica for enviado.
pessoaTerceiroobjectNãoPessoa acompanhada pelo titular do atestado.
pessoaTerceiro.idinteger (int64)CondicionalObrigatório quando pessoaTerceiro for enviado.
estabelecimentoobjectNãoEstabelecimento de saúde relacionado ao atendimento.
estabelecimento.idinteger (int64)CondicionalObrigatório quando estabelecimento for enviado.
profissionalobjectNãoProfissional responsável pelo atestado.
profissional.idinteger (int64)CondicionalObrigatório quando profissional for enviado.
codigosCidsarray de stringCondicionalCódigos de CID já cadastrados no RH. Obrigatório quando codigoCidPrincipal for informado.
codigoCidPrincipalstringCondicionalDeve existir em codigosCids. Obrigatório quando codigosCids possuir valores.
tipoAfastamentoobjectNãoReferência a um tipo de afastamento existente.
tipoAfastamento.idinteger (int64)CondicionalObrigatório quando tipoAfastamento for enviado.
afastamentoOrigemobjectNãoReferência ao afastamento que originou o atestado.
afastamentoOrigem.idinteger (int64)CondicionalObrigatório quando afastamentoOrigem for enviado.
anexosarrayNãoDocumentos relacionados ao atestado.
anexos[].idinteger (int64)Somente na alteraçãoIdentificador de um anexo existente. Omitir para um anexo novo.
anexos[].datastring (date)SimData do anexo no formato yyyy-MM-dd.
anexos[].motivostringNãoMáximo de 1.000 caracteres.
anexos[].tipoDocumentoobjectSimReferência a um tipo de documento existente.
anexos[].tipoDocumento.idinteger (int64)SimIdentificador do tipo de documento.
anexos[].arquivosarraySimDeve possuir ao menos um arquivo. O mesmo arquivo não pode ser repetido no mesmo anexo nem em anexos diferentes.
anexos[].arquivos[].idinteger (int64)SimIdentificador de arquivo previamente enviado ao storage da plataforma.

Os campos abaixo são retornados pela fonte, mas são somente para leitura e devem ser omitidos no POST e no PUT:

CampoTipoDescrição
dependentesarrayDependentes vinculados ao atestado.
dependentes[].idinteger (int64)Identificador do vínculo do dependente com o atestado.
dependentes[].dependenteobjectDados da pessoa dependente.
camposAdicionaisobjectValores dos campos adicionais configurados para atestados. As propriedades variam conforme a configuração da entidade.
idCargointeger (int64)Identificador do cargo da matrícula, calculado pela API.
descricaoCargostringDescrição do cargo da matrícula, calculada pela API.

Propriedades transitórias de controle de processamento e estruturas internas de persistência da classe Atestado não fazem parte do contrato de integração.

Regra do CID principal

As combinações aceitas são:

codigoCidPrincipalcodigosCidsResultado
ausenteausente ou vazioVálido
ausentepreenchidoInválido
preenchidoausente ou vazioInválido
preenchidopreenchido, mas sem o principalInválido
preenchidopreenchido e contendo o principalVálido

No corpo de escrita, utilize codigosCids e codigoCidPrincipal. Os campos cids e cidPrincipal são retornados pela API já resolvidos e não precisam ser enviados pelo integrador.

Enums aceitos na escrita

unidade

HORAS
DIAS

localAtendimento

AMBULATORIO
CLINICA
DOMICILIAR
HOSPITAL
POSTO_MEDICO
OUTRO

GET /atestados

Retorna uma página de atestados.

Parâmetros de query

ParâmetroTipoObrigatórioPadrãoDescrição
offsetintegerNão0Posição inicial da página.
limitintegerNão20Quantidade máxima de registros.
filterstringNãoFiltro no padrão de fontes de dados Betha.
sortstringNãoOrdenação no padrão de fontes de dados Betha.

Exemplo de requisição

GET
Host: rh.suite.betha.cloud/dados/v1/atestados
Accept: application/json
Authorization: Bearer <token>

O GET não possui corpo JSON.

Exemplo de resposta 200 OK

{
"offset": 0,
"limit": 20,
"total": 1,
"hasNext": false,
"content": [
{
"id": 84521,
"matricula": {
"id": 12345,
"tipo": "FUNCIONARIO",
"codigoMatriculaFormatado": "12345/1"
},
"profissional": null,
"tipo": null,
"duracao": 3,
"unidade": "DIAS",
"inicioAtestado": "2026-07-20",
"fimAtestado": "2026-07-22",
"retornoTrabalho": "2026-07-23",
"localAtendimento": "HOSPITAL",
"encaminharJuntaMedica": false,
"motivoConsultaMedica": null,
"numeroAtestado": "EXT-2026-0001",
"tipoAfastamento": {
"id": 321,
"descricao": "Auxílio-doença",
"classificacao": "AUXILIO_DOENCA_EMPREGADOR"
},
"afastamentoOrigem": null,
"deferido": null,
"acompanhamento": null,
"pessoaTerceiro": null,
"estabelecimento": null,
"idCargo": 44,
"descricaoCargo": "Analista administrativo",
"camposAdicionais": null,
"cidPrincipal": {
"id": 901,
"descricao": "Influenza com outras manifestações respiratórias",
"codigo": "J11.1",
"descricaoAbreviada": "Influenza",
"nivel": "SUBCATEGORIA"
},
"dependentes": [],
"cids": [
{
"id": 901,
"descricao": "Influenza com outras manifestações respiratórias",
"codigo": "J11.1",
"descricaoAbreviada": "Influenza",
"nivel": "SUBCATEGORIA"
},
{
"id": 902,
"descricao": "Tosse",
"codigo": "R05",
"descricaoAbreviada": "Tosse",
"nivel": "CATEGORIA"
}
],
"observacao": null
}
]
}

POST /atestados/integracao

Cria um atestado. O id é gerado pela API e não deve ser enviado.

Exemplo de requisição

POST
Host: rh.suite.betha.cloud/dados/v1/atestados/integracao
Content-Type: application/json
Accept: application/json
Authorization: Bearer <token>
{
"matricula": {
"id": 12345
},
"numeroAtestado": "0001",
"inicioAtestado": "2026-07-20",
"fimAtestado": "2026-07-22",
"retornoTrabalho": "2026-07-23",
"unidade": "DIAS",
"duracao": 3,
"localAtendimento": "HOSPITAL",
"observacao": "Atestado entregue pelo funcionário",
"dataPericia": "2026-07-21",
"dataEntrega": "2026-07-20T09:15:00",
"deferido": true,
"encaminharMedico": false,
"acompanhamento": true,
"tipo": {
"id": 5
},
"motivoConsultaMedica": {
"id": 12
},
"pessoaTerceiro": {
"id": 7788
},
"estabelecimento": {
"id": 30
},
"profissional": {
"id": 44
},
"codigosCids": [
"J11.1",
"R05"
],
"codigoCidPrincipal": "J11.1",
"tipoAfastamento": {
"id": 321
},
"afastamentoOrigem": {
"id": 7654
},
"anexos": [
{
"data": "2026-07-20",
"motivo": "Atestado médico apresentado pelo funcionário",
"tipoDocumento": {
"id": 10
},
"arquivos": [
{
"id": 9876
}
]
}
]
}

Exemplo de resposta 200 OK

{
"id": 84521,
"matricula": {
"id": 12345,
"tipo": "FUNCIONARIO"
},
"numeroAtestado": "EXT-2026-0001",
"inicioAtestado": "2026-07-20",
"unidade": "DIAS",
"duracao": 3,
"localAtendimento": "HOSPITAL",
"fimAtestado": "2026-07-22",
"observacao": "Atestado entregue pelo funcionário",
"retornoTrabalho": "2026-07-23",
"encaminharMedico": false,
"acompanhamento": true,
"motivoConsultaMedica": {
"id": 12,
"descricao": "Acompanhamento de dependente"
},
"pessoaTerceiro": {
"id": 7788,
"nome": "Maria da Silva",
"foto": null,
"cpf": "12345678909",
"dataNascimento": "2015-05-10",
"sexo": "FEMININO"
},
"estabelecimento": {
"id": 30,
"cnpj": "12345678000195",
"razaoSocial": "Clínica Exemplo Ltda.",
"nomeFantasia": "Clínica Exemplo",
"tipo": "GERAL"
},
"profissional": {
"id": 44,
"nome": "Dra. Ana Souza",
"profissao": "MEDICO",
"numeroConselho": "CRM 12345"
},
"anexos": [
{
"id": 4567,
"data": "2026-07-20",
"motivo": "Atestado médico apresentado pelo funcionário",
"atestado": {
"id": 84521
},
"tipoDocumento": {
"id": 10,
"descricao": "Atestado médico"
},
"arquivos": [
{
"id": 9876,
"description": "Atestado médico",
"name": "atestado-2026-0001.pdf",
"type": "application/pdf",
"size": 184320,
"bucket": "folha",
"key": "atestados/atestado-2026-0001.pdf",
"url": "https://storage.exemplo/arquivo-assinado"
}
]
}
],
"cids": [
{
"id": 901,
"descricao": "Influenza com outras manifestações respiratórias",
"codigo": "J11.1",
"descricaoAbreviada": "Influenza",
"nivel": "SUBCATEGORIA"
},
{
"id": 902,
"descricao": "Tosse",
"codigo": "R05",
"descricaoAbreviada": "Tosse",
"nivel": "CATEGORIA"
}
],
"codigoCidPrincipal": "J11.1",
"codigosCids": [
"J11.1",
"R05"
],
"tipoAfastamento": {
"id": 321,
"descricao": "Auxílio-doença",
"classificacao": "AUXILIO_DOENCA_EMPREGADOR"
},
"afastamentoOrigem": {
"id": 7654,
"tipoAfastamento": {
"id": 321,
"descricao": "Auxílio-doença",
"classificacao": "AUXILIO_DOENCA_EMPREGADOR"
},
"inicioAfastamento": "2026-07-20",
"fimAfastamento": "2026-07-22"
},
"cidPrincipal": {
"id": 901,
"descricao": "Influenza com outras manifestações respiratórias",
"codigo": "J11.1",
"descricaoAbreviada": "Influenza",
"nivel": "SUBCATEGORIA"
},
"dataPericia": "2026-07-21",
"tipo": {
"id": 5,
"descricao": "Atestado médico"
},
"dataEntrega": "2026-07-20T09:15:00",
"deferido": true,
"camposAdicionais": {},
"dependentes": [],
"idCargo": 44,
"descricaoCargo": "Analista administrativo"
}

PUT /atestados/integracao/{id}

Atualiza um atestado existente.

Parâmetros de caminho

ParâmetroTipoObrigatórioDescrição
idinteger (int64)SimIdentificador do atestado.

O corpo deve representar o estado completo do atestado. Para evitar atualização do registro errado, envie o mesmo identificador no caminho e em id no JSON.

Exemplo de requisição

PUT
Host: rh.suite.betha.cloud/dados/v1/atestados/integracao/84521
Content-Type: application/json
Accept: application/json
Authorization: Bearer <token>
{
"id": 84521,
"matricula": {
"id": 12345
},
"numeroAtestado": "0001-RETIFICADO",
"inicioAtestado": "2026-07-20",
"fimAtestado": "2026-07-23",
"retornoTrabalho": "2026-07-24",
"unidade": "DIAS",
"duracao": 4,
"localAtendimento": "HOSPITAL",
"observacao": "Atestado retificado após conferência",
"dataPericia": "2026-07-22",
"dataEntrega": "2026-07-20T09:15:00",
"deferido": true,
"encaminharMedico": false,
"acompanhamento": true,
"tipo": {
"id": 5
},
"motivoConsultaMedica": {
"id": 12
},
"pessoaTerceiro": {
"id": 7788
},
"estabelecimento": {
"id": 30
},
"profissional": {
"id": 44
},
"codigosCids": [
"J11.1"
],
"codigoCidPrincipal": "J11.1",
"tipoAfastamento": {
"id": 321
},
"afastamentoOrigem": {
"id": 7654
},
"anexos": [
{
"id": 4567,
"data": "2026-07-20",
"motivo": "Documento retificado",
"tipoDocumento": {
"id": 10
},
"arquivos": [
{
"id": 9876
}
]
}
]
}

Exemplo de resposta 200 OK

{
"id": 84521,
"matricula": {
"id": 12345,
"tipo": "FUNCIONARIO"
},
"numeroAtestado": "0001-RETIFICADO",
"inicioAtestado": "2026-07-20",
"unidade": "DIAS",
"duracao": 4,
"localAtendimento": "HOSPITAL",
"fimAtestado": "2026-07-23",
"observacao": "Atestado retificado após conferência",
"retornoTrabalho": "2026-07-24",
"encaminharMedico": false,
"acompanhamento": true,
"motivoConsultaMedica": {
"id": 12,
"descricao": "Acompanhamento de dependente"
},
"pessoaTerceiro": {
"id": 7788,
"nome": "Maria da Silva",
"foto": null,
"cpf": "12345678909",
"dataNascimento": "2015-05-10",
"sexo": "FEMININO"
},
"estabelecimento": {
"id": 30,
"cnpj": "12345678000195",
"razaoSocial": "Clínica Exemplo Ltda.",
"nomeFantasia": "Clínica Exemplo",
"tipo": "GERAL"
},
"profissional": {
"id": 44,
"nome": "Dra. Ana Souza",
"profissao": "MEDICO",
"numeroConselho": "CRM 12345"
},
"anexos": [
{
"id": 4567,
"data": "2026-07-20",
"motivo": "Documento retificado",
"atestado": {
"id": 84521
},
"tipoDocumento": {
"id": 10,
"descricao": "Atestado médico"
},
"arquivos": [
{
"id": 9876,
"description": "Atestado médico",
"name": "atestado-2026-0001.pdf",
"type": "application/pdf",
"size": 184320,
"bucket": "folha",
"key": "atestados/atestado-2026-0001.pdf",
"url": "https://storage.exemplo/arquivo-assinado"
}
]
}
],
"cids": [
{
"id": 901,
"descricao": "Influenza com outras manifestações respiratórias",
"codigo": "J11.1",
"descricaoAbreviada": "Influenza",
"nivel": "SUBCATEGORIA"
}
],
"codigoCidPrincipal": "J11.1",
"codigosCids": [
"J11.1"
],
"tipoAfastamento": {
"id": 321,
"descricao": "Auxílio-doença",
"classificacao": "AUXILIO_DOENCA_EMPREGADOR"
},
"afastamentoOrigem": {
"id": 7654,
"tipoAfastamento": {
"id": 321,
"descricao": "Auxílio-doença",
"classificacao": "AUXILIO_DOENCA_EMPREGADOR"
},
"inicioAfastamento": "2026-07-20",
"fimAfastamento": "2026-07-23"
},
"cidPrincipal": {
"id": 901,
"descricao": "Influenza com outras manifestações respiratórias",
"codigo": "J11.1",
"descricaoAbreviada": "Influenza",
"nivel": "SUBCATEGORIA"
},
"dataPericia": "2026-07-22",
"tipo": {
"id": 5,
"descricao": "Atestado médico"
},
"dataEntrega": "2026-07-20T09:15:00",
"deferido": true,
"camposAdicionais": {},
"dependentes": [],
"idCargo": 44,
"descricaoCargo": "Analista administrativo"
}

Se o {id} não existir, a API retorna erro de recurso não encontrado com a mensagem:

Nenhum atestado foi encontrado para o identificador informado.

DELETE /atestados/integracao/{id}

Exclui o atestado e trata os vínculos de afastamento, ausência e anexos associados.

Parâmetros de caminho

ParâmetroTipoObrigatórioDescrição
idinteger (int64)SimIdentificador do atestado.

Exemplo de requisição

DELETE
Host: rh.suite.betha.cloud/dados/v1/atestados/integracao/84521
Accept: application/json
Authorization: Bearer <token>

O DELETE não possui corpo JSON.

Resposta 204 No Content

Não há corpo na resposta:

<sem conteúdo>

Se o {id} não existir, a API retorna erro de recurso não encontrado com a mensagem:

Nenhum atestado foi encontrado para o identificador informado.

Respostas de erro

StatusSituação
400 Bad RequestJSON inválido, campo obrigatório ausente, enum inválido, referência inexistente ou regra de negócio não atendida.
401 UnauthorizedToken ausente ou inválido.
403 ForbiddenToken sem o escopo necessário.
404 Not FoundAtestado informado no PUT ou DELETE não encontrado.
500 Internal Server ErrorErro interno não tratado.

Entre as validações que podem produzir 400 estão:

  • duração, unidade, data inicial ou data final ausente;
  • duração fora do intervalo de 0 a 999;
  • duração fracionada com unidade DIAS;
  • matrícula que não seja de funcionário ou estagiário;
  • CID informado que não exista no cadastro;
  • CID principal ausente da lista de CIDs;
  • documento sem data, tipo de documento ou arquivo;
  • arquivo repetido em um ou mais anexos.

O formato exato do envelope de erro é fornecido pela infraestrutura comum da API e pode variar conforme o tipo da exceção. A integração deve usar o status HTTP e a mensagem retornada, sem depender de um único formato de envelope.