> ## Documentation Index
> Fetch the complete documentation index at: https://developers.pontua.com.br/llms.txt
> Use this file to discover all available pages before exploring further.

# Ajustes de Registro e Motivos

> Workflow de correção de batidas — solicitar ajuste, aprovar/rejeitar, vincular colaboradores. Catálogo de motivos (atestado, esquecimento, equipamento).

**Ajustes de Registro** é o **workflow oficial** de correção de batidas
de ponto: quando um colaborador esqueceu de bater, quando o REP estava
fora, quando há atestado médico, etc. Em vez de criar registro
diretamente (que é auditável como `origem: AJUSTE`), o ajuste passa
por solicitação → aprovação → aplicação.

**Motivo de Ajuste e Abono** é o catálogo cadastrado pela UN com os
motivos válidos (atestado médico, esquecimento, equipamento indisponível,
etc.). Cada ajuste referencia um motivo do catálogo.

## Por que existe esse fluxo

<CardGroup cols={2}>
  <Card title="Auditoria CLT" icon="shield-check">
    Modificações em batidas precisam de trilha auditável. O fluxo
    força documentar **quem solicitou**, **quem aprovou**, **qual o
    motivo**, **quando aconteceu**.
  </Card>

  <Card title="Conformidade Portaria 671" icon="file-shield">
    Art. 98 exige preservação do registro original. Um ajuste é um
    **novo registro** que indica retificação, sem apagar o anterior.
  </Card>

  <Card title="Workflow RH/Gestor" icon="user-check">
    Permite divisão de papéis: colaborador solicita, gestor aprova,
    RH valida. Sistemas externos podem participar como aprovadores
    via API.
  </Card>

  <Card title="Estatística de retrabalho" icon="chart-line">
    Catalogar motivos mostra padrões: muito esquecimento → trocar REP;
    muito atestado → revisar saúde organizacional.
  </Card>
</CardGroup>

## Endpoints — Ajustes de Registro

| Método | Rota                                         | Descrição                                                |
| ------ | -------------------------------------------- | -------------------------------------------------------- |
| GET    | `/ajuste-registro`                           | Lista ajustes com filtros (status, período, colaborador) |
| GET    | `/ajuste-registro/count`                     | Contagem agregada                                        |
| GET    | `/ajuste-registro/{id}`                      | Detalhe                                                  |
| POST   | `/ajuste-registro`                           | Criar ajuste em massa                                    |
| POST   | `/ajuste-registro/solicitar`                 | Solicitar ajuste (fluxo aprovação)                       |
| POST   | `/ajuste-registro/previa`                    | Prévia da frequência **se** o ajuste fosse aplicado      |
| PUT    | `/ajuste-registro`                           | Editar em massa                                          |
| PATCH  | `/ajuste-registro/status`                    | Aprovar/rejeitar em massa                                |
| PATCH  | `/ajuste-registro/{id}/collaborators/bind`   | Vincular colaboradores ao ajuste                         |
| PATCH  | `/ajuste-registro/{id}/collaborators/unbind` | Desvincular                                              |

## Endpoints — Motivos

| Método | Rota                           | Descrição                       |
| ------ | ------------------------------ | ------------------------------- |
| GET    | `/motivo-ajuste-registro`      | Lista motivos cadastrados na UN |
| GET    | `/motivo-ajuste-registro/{id}` | Detalhe                         |
| POST   | `/motivo-ajuste-registro`      | Cria motivo                     |
| PUT    | `/motivo-ajuste-registro/{id}` | Atualiza                        |
| DELETE | `/motivo-ajuste-registro/{id}` | Remove                          |

Schema completo em [Referência da API](/api-reference#tag/Ajustes-Registro).

## Fluxo workflow

```
[Colaborador esquece de bater]
       ↓
POST /ajuste-registro/solicitar
       ↓
   PENDENTE
       ↓
[Gestor revisa]
       ↓
PATCH /ajuste-registro/status (APROVADO ou REJEITADO)
       ↓
APROVADO → batida criada com origem AJUSTE
       ↓
[Frequência recalculada]
```

## Fluxos típicos

### Solicitar ajuste por esquecimento

```javascript theme={null}
async function solicitarAjusteEsquecimento(
  token,
  colaboradorId,
  dataHora,
  motivoId,
) {
  const resp = await fetch(
    'https://api.pontua.com.br/ajuste-registro/solicitar',
    {
      method: 'POST',
      headers: {
        Authorization: `Bearer ${token}`,
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({
        colaboradorId,
        dataHora,           // ISO 8601 da batida que faltou
        motivoId,           // do catálogo de motivos
        observacao: 'Esqueci de bater entrada',
      }),
    },
  )

  const ajuste = await resp.json()
  return ajuste.id  // PENDENTE até gestor aprovar
}
```

### Prévia: simular impacto antes de aplicar

```javascript theme={null}
async function simularImpacto(token, ajusteRequest) {
  // Em vez de criar o ajuste, simular como ficaria a frequência
  const previaResp = await fetch(
    'https://api.pontua.com.br/ajuste-registro/previa',
    {
      method: 'POST',
      headers: {
        Authorization: `Bearer ${token}`,
        'Content-Type': 'application/json',
      },
      body: JSON.stringify(ajusteRequest),
    },
  )

  const previa = await previaResp.json()
  // previa contém os totais de horas trabalhadas/extras se aprovado
  return previa
}
```

### Aprovar lote pelo gestor

```javascript theme={null}
async function aprovarLote(token, ajusteIds) {
  await fetch('https://api.pontua.com.br/ajuste-registro/status', {
    method: 'PATCH',
    headers: {
      Authorization: `Bearer ${token}`,
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      ajusteIds,
      novoStatus: 'APROVADO',
    }),
  })
}
```

### Cadastrar motivos padrão na UN

```javascript theme={null}
async function setupMotivosPadrao(token) {
  const motivos = [
    { nome: 'Atestado médico', tipo: 'ABONO' },
    { nome: 'Esquecimento de bater', tipo: 'AJUSTE' },
    { nome: 'Equipamento indisponível', tipo: 'AJUSTE' },
    { nome: 'Atestado odontológico', tipo: 'ABONO' },
    { nome: 'Reunião externa', tipo: 'AJUSTE' },
    { nome: 'Falha no app', tipo: 'AJUSTE' },
  ]

  for (const m of motivos) {
    await fetch('https://api.pontua.com.br/motivo-ajuste-registro', {
      method: 'POST',
      headers: {
        Authorization: `Bearer ${token}`,
        'Content-Type': 'application/json',
      },
      body: JSON.stringify(m),
    })
  }
}
```

## Gotchas conhecidos

<Warning title="Ajuste em período fechado precisa de reabertura">
  Se você tenta `POST /ajuste-registro/solicitar` para data em
  fechamento `CONCLUIDO`, retorna erro. Reabra o fechamento primeiro
  ([Fechamento](/referencia/fechamento)), aplique o ajuste, feche de novo.
</Warning>

<Warning title="Aprovação em massa NÃO valida regras individuais">
  `PATCH /status` em lote aceita conjunto de IDs sem revalidar regras
  específicas (ex.: tolerância de turno). Use a `previa` antes para
  simular cada ajuste se houver dúvida.
</Warning>

<Warning title="Motivo deletado deixa ajustes órfãos">
  `DELETE /motivo-ajuste-registro/{id}` não cascateia. Ajustes que
  referenciavam o motivo continuam com `motivoId` apontando para
  inexistente. Em vez de deletar, marque o motivo como inativo se
  o sistema permitir.
</Warning>

<Warning title="Vínculo de colaboradores em ajuste em massa">
  `POST /ajuste-registro` cria ajuste **em massa** — útil para casos
  como "todos do departamento X tiveram falha de REP no dia 15". Após
  criar, vincule colaboradores via `bind/unbind` antes de aprovar.
</Warning>

## Veja também

* [Registros de Ponto](/referencia/registros-ponto) — origem `AJUSTE` é resultado deste fluxo
* [Frequência](/referencia/frequencia) — recalculada após aprovação
* [Fechamento](/referencia/fechamento) — bloqueia ajustes pós-conclusão
* [Lidar com fechamento](/guias-praticas/lidar-com-fechamento) — fluxo completo
