# Códigos de recusa

Toda recusa tem `codigo` (estável — decida por ele), `mensagem` (para
pessoas) e `campos[]`. Com problemas de mais de um tipo no mesmo pedido, o
código é o primeiro desta ordem: `CAMPO_DESCONHECIDO`, `DADOS_INVALIDOS`,
`DADOS_FALTANDO`.

A conferência garante a **forma** que o leiaute do eSocial exige; não garante
que o eSocial aceite o evento. As regras de validação dele (o cruzamento com o
cadastro do empregador e com eventos anteriores) só ele aplica, e a recusa
chega depois, pelo aviso `admissao.recusada` e pela consulta.

## Os códigos da recusa

| HTTP | código | o que fazer |
|---|---|---|
| 400 | `IDEMPOTENCY_KEY_INVALIDA` | O cabeçalho `Idempotency-Key` falta ou está fora da forma (8 a 100 caracteres, letras, dígitos e `. _ : -`). Nada foi gravado. |
| 401 | `CHAVE_INVALIDA` | Confira o cabeçalho `Authorization: Bearer <chave>` e se a chave é a de integração. Também sai quando a empresa deixou de ser atendida pelo escritório que gerou a chave. |
| 401 | `CHAVE_REVOGADA` | Use a outra chave ativa, ou peça ao escritório uma nova. |
| 403 | `EMPRESA_NAO_HABILITADA` | A empresa não envia ao eSocial pelo Motor, ou não envia esta admissão por ele (por exemplo, quem declara é outro sistema). Fale com o escritório. Nada foi gravado. |
| 403 | `CERTIFICADO_INDISPONIVEL` | O certificado A1 da empresa falta ou venceu; o escritório precisa subir o novo. Nada foi gravado. |
| 403 | `CHAVE_SEM_ESCOPO` | A chave não alcança a admissão; peça ao escritório uma chave de admissão. |
| 404 | `NAO_ENCONTRADA` | O id não existe ou não é da empresa desta chave; também a rota que não existe na API. |
| 405 | `METODO_NAO_PERMITIDO` | A rota existe, com outro método (o cabeçalho `Allow` diz qual). |
| 409 | `TRABALHADOR_JA_ADMITIDO` | Já há cadastro com este CPF na empresa. Se for reenvio seu, use a mesma `Idempotency-Key`; se for readmissão, fale com o escritório. |
| 409 | `IDEMPOTENCIA_CONFLITO` | A `Idempotency-Key` já foi usada com outro corpo. Reenvie o corpo original, ou use uma nova se for outra admissão. |
| 409 | `IDEMPOTENCIA_EM_CURSO` | Repita em alguns segundos com a mesma `Idempotency-Key`. |
| 413 | `CORPO_GRANDE_DEMAIS` | O corpo passa de 256 KB (uma admissão com 99 dependentes cabe com folga). |
| 422 | `CAMPO_DESCONHECIDO` | Tire do corpo o campo apontado em `campos[]` (inclusive `matricula`). |
| 422 | `DADOS_INVALIDOS` | Corrija os campos apontados em `campos[]` (forma, valor ou referência inexistente). |
| 422 | `DADOS_FALTANDO` | Complete os campos apontados em `campos[]`; os de jornada e sindicato são do cadastro do escritório. |
| 429 | `LIMITE_EXCEDIDO` | Mais de 60 chamadas por minuto com esta chave (ou credenciais recusadas demais vindas do mesmo endereço). Espere o `Retry-After`, em segundos. |
| 503 | `INDISPONIVEL` | Falha do Motor, não sua. Repita com a mesma `Idempotency-Key`, respeitando o `Retry-After`; não haverá duplicata. |

## Os códigos por campo

Vêm em `campos[]`, um por problema, com o caminho do campo no pedido.

| código | campo | quem corrige | nota |
|---|---|---|---|
| `CPF_AUSENTE` · `CPF_INVALIDO` | `trabalhador.cpf` | você (o pedido) |  |
| `NOME_AUSENTE` | `trabalhador.nome_completo` | você (o pedido) |  |
| `SEXO_AUSENTE` | `trabalhador.genero` | você (o pedido) |  |
| `RACA_COR_AUSENTE` | `trabalhador.raca_cor` | você (o pedido) |  |
| `GRAU_INSTRUCAO_AUSENTE` | `trabalhador.grau_instrucao` | você (o pedido) |  |
| `DATA_NASCIMENTO_AUSENTE` | `trabalhador.data_nascimento` | você (o pedido) |  |
| `EMAIL_INVALIDO` | `trabalhador.email` | você (o pedido) | Recusado, nunca descartado em silêncio. |
| `LOGRADOURO_AUSENTE` · `BAIRRO_AUSENTE` · `CEP_AUSENTE` · `UF_AUSENTE` | `endereco.*` | você (o pedido) |  |
| `MUNICIPIO_AUSENTE` · `MUNICIPIO_INVALIDO` · `MUNICIPIO_DIVERGE_DA_UF` | `endereco.cod_municipio_ibge` | você (o pedido) |  |
| `DATA_ADMISSAO_AUSENTE` | `vinculo.data_admissao` | você (o pedido) |  |
| `CATEGORIA_AUSENTE` · `CATEGORIA_INVALIDA` | `vinculo.categoria` | você (o pedido) | Só `101` ou `103`. |
| `TP_REG_JOR_AUSENTE` · `TP_REG_JOR_INVALIDO` | `vinculo.tp_reg_jor` | você (o pedido) | De `1` a `4`. |
| `HORAS_MENSAIS_INVALIDAS` | `vinculo.horas_mensais` | você (o pedido) | Inteiro de 1 a 220. |
| `SALARIO_AUSENTE` · `SALARIO_INVALIDO` | `vinculo.salario_base` | você (o pedido) | Inválido quando tem mais de duas casas decimais. |
| `CARGO_AUSENTE` · `CBO_AUSENTE` · `CBO_FORA_DO_CATALOGO` | `vinculo.cargo.*` | você (o pedido) |  |
| `CARGO_SEM_CBO` | `vinculo.cargo.nome` | o escritório (o cadastro) | O cargo já cadastrado está sem CBO; o escritório o corrige no cadastro do cargo. |
| `JORNADA_AUSENTE` · `JORNADA_NAO_ENCONTRADA` | `vinculo.jornada_id` | você (o pedido) | Use um id do catálogo de jornadas. |
| `JORNADA_SEM_HORAS` · `JORNADA_SEM_TIPO` · `JORNADA_SEM_DESCRICAO` · `JORNADA_PARCIAL_SO_DOMESTICO` | `vinculo.jornada_id` | o escritório (o cadastro) | O escritório completa a jornada no cadastro dela. |
| `SINDICATO_AUSENTE` · `SINDICATO_NAO_ENCONTRADO` | `vinculo.sindicato_id` | você (o pedido) | Use um id do catálogo de sindicatos. |
| `SINDICATO_SEM_CNPJ` | `vinculo.sindicato_id` | o escritório (o cadastro) | O escritório completa o sindicato no cadastro dele. |
| `CLAUSULA_ASSECURATORIA_AUSENTE` | `contrato.clausula_assecuratoria` | você (o pedido) |  |
| `EXPERIENCIA_ACIMA_DE_90_DIAS` | `contrato.dias_*` | você (o pedido) |  |
| `DATA_TERMINO_INVALIDA` | `contrato.data_termino` | você (o pedido) | Tem de ser igual ou posterior à admissão. |
| `APRENDIZ_DADOS_OBRIGATORIOS` | `contrato · aprendiz.modalidade` | você (o pedido) | Categoria 103 sem contrato `PRAZO_DETERMINADO` ou sem a modalidade. |
| `APRENDIZ_FORA_DA_CATEGORIA` | `aprendiz` | você (o pedido) | Enviado fora da categoria 103. |
| `APRENDIZ_MODALIDADE_AUSENTE` · `APRENDIZ_INVALIDO` · `APRENDIZ_ENTIDADE_AUSENTE` · `APRENDIZ_ESTABELECIMENTO_AUSENTE` · `APRENDIZ_INCOERENTE` | `aprendiz.*` | você (o pedido) |  |
| `APRENDIZ_CNPJ_INVALIDO` | `aprendiz.cnpj_entidade_qualificadora · aprendiz.cnpj_pratica` | você (o pedido) |  |
| `APRENDIZ_INSCRICAO_INVALIDA` · `APRENDIZ_INSCRICAO_DA_PROPRIA_EMPRESA` · `APRENDIZ_CPF_NAO_SUPORTADO` | `aprendiz.estabelecimento_da_cota` | você (o pedido) |  |
| `PCD_TIPO_OBRIGATORIO` · `PCD_COTA_INCOERENTE` · `PCD_TIPO_SEM_DEFICIENCIA` | `deficiencia.*` | você (o pedido) |  |
| `PCD_COTA_APRENDIZ` | `deficiencia.conta_na_cota` | você (o pedido) | O aprendiz não conta na cota de pessoas com deficiência. |
| `DEPENDENTE_TIPO_OBRIGATORIO` · `DEPENDENTE_TIPO_INVALIDO` | `dependentes.N.tipo` | você (o pedido) |  |
| `DEPENDENTE_NOME_OBRIGATORIO` · `DEPENDENTE_NOME_INVALIDO` | `dependentes.N.nome` | você (o pedido) |  |
| `DEPENDENTE_NASCIMENTO_INVALIDO` | `dependentes.N.data_nascimento` | você (o pedido) |  |
| `DEPENDENTE_CPF_OBRIGATORIO` · `DEPENDENTE_CPF_INVALIDO` · `DEPENDENTE_CPF_DO_TRABALHADOR` · `DEPENDENTE_CPF_DO_EMPREGADOR` · `DEPENDENTE_CPF_REPETIDO` | `dependentes.N.cpf` | você (o pedido) |  |
| `DEPENDENTE_DESCRICAO_OBRIGATORIA` · `DEPENDENTE_DESCRICAO_INDEVIDA` · `DEPENDENTE_DESCRICAO_INVALIDA` | `dependentes.N.descricao` | você (o pedido) |  |
| `DEPENDENTE_REPETIDO` · `DEPENDENTE_LIMITE` | `dependentes.N · dependentes` | você (o pedido) |  |
| `DATA_INVALIDA` | `qualquer data` | você (o pedido) |  |
| `CAMPO_OBRIGATORIO` | `uma parte inteira do pedido` | você (o pedido) | `trabalhador`, `endereco`, `vinculo`, `contrato`, `contrato.tipo`, os dias do 1º período ou a data de término. |
| `VALOR_INVALIDO` | `qualquer campo` | você (o pedido) | Tipo errado (texto onde vai número, `"sim"` onde vai `true`, `null` onde se omite) ou fora das opções do contrato. |
| `DADOS_S2200_FALTANDO` | `(corpo)` | depende do campo | O que o S-2200 exige e não tem código próprio; a `mensagem` diz o quê. Na dúvida, o escritório. |
| `JSON_INVALIDO` | `(corpo)` | você (o pedido) |  |

## Avisos na resposta

Observações que não impediram a admissão, em `avisos[]` do `202`.

| código | o que significa |
|---|---|
| `CBO_DO_CADASTRO` | O cargo já existia com CBO diferente do informado; vale o do cadastro. |
