Skip to main content
Fechamento é o ato de encerrar um período de trabalho (mensal, quinzenal) — a partir desse momento, registros de ponto, ajustes e alterações no banco de horas daquele período ficam congelados. Folha pode ser exportada com confiança de que valores não vão mudar. Trabalhar com o fechamento é boa prática para integradores: gerar relatórios e exportar folha só após o fechamento concluído evita divergências entre sistemas.

Por que fechamento existe

Imutabilidade

Período fechado não aceita novos registros ou ajustes sem reabertura explícita. Garante que a folha exportada bate com o que está no Pontua.

Auditoria Portaria 671

A Portaria 671 exige trilha auditável de modificações. Fechamento é o marco temporal que separa “em revisão” de “definitivo”.

Workflow de RH

Antes de fechar, RH revisa ocorrências (atrasos, faltas), aprova ajustes pendentes, ajusta exceções de turno. Fechamento é “já revisei tudo”.

Reabertura controlada

Se erro descoberto pós-fechamento, RH pode reabrir o período (com auditoria de quem reabriu e por que). Mas é evento raro — implica re-emitir folha.

Endpoints

MétodoRotaDescrição
GET/fechamentosLista fechamentos (com filtros por período/status)
GET/fechamentos/{id}Detalhe
POST/fechamentosCria novo fechamento (inicia processo)
PATCH/fechamentos/concluir/{id}Conclui fechamento (congelamento ativo)
PATCH/fechamentos/cancelar/{id}Cancela/reabre fechamento
Schema completo em Referência da API.

Estados de fechamento

PROCESSANDO ──┬── CONCLUIDO  (período congelado)

              └── CANCELADO  (revertido para aberto)

Fluxos típicos

Verificar antes de exportar folha

async function exportarFolhaSeFechado(token, mes) {
  // 1. Listar fechamentos do mês
  const { resultados } = await fetch(
    `https://api.pontua.com.br/fechamentos?` +
    `dataInicio=${mes}-01&dataFim=${mes}-31`,
    { headers: { Authorization: `Bearer ${token}` } },
  ).then((r) => r.json())

  const fechamento = resultados[0]

  if (!fechamento || fechamento.status !== 'CONCLUIDO') {
    throw new Error(`Mês ${mes} não está fechado — exportação prematura.`)
  }

  // 2. OK, fechado — disparar export
  return fetch('https://api.pontua.com.br/payment-sheet/export', {
    method: 'POST',
    headers: {
      Authorization: `Bearer ${token}`,
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({ /* ... */ }),
  })
}

Sync diário com BI — pular se período aberto

async function syncBI(token, datas) {
  for (const data of datas) {
    // Se a data está em fechamento aberto, dados podem mudar — pular
    const fechamento = await getFechamentoDaData(token, data)
    if (fechamento?.status !== 'CONCLUIDO') {
      console.log(`Skip ${data}: fechamento ainda aberto`)
      continue
    }

    // Período fechado, dados estáveis — sync OK
    await syncFrequenciaDoDia(token, data)
  }
}

Reabrir período para correção (raro)

async function reabrirFechamento(token, fechamentoId, motivo) {
  // CUIDADO: reabertura invalida exports/relatórios já gerados.
  // Sempre comunique RH e folha externa antes.
  await fetch(
    `https://api.pontua.com.br/fechamentos/cancelar/${fechamentoId}`,
    {
      method: 'PATCH',
      headers: {
        Authorization: `Bearer ${token}`,
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({ motivo }),
    },
  )
}

Gotchas conhecidos

Se você gerou export de folha de um fechamento que depois foi reaberto, o TXT já entregue à folha externa continua válido lá — precisa cancelar manualmente do lado do sistema downstream também.
POST /registro-ponto em data dentro de período CONCLUIDO retorna 422 ou similar. Use o fluxo de Ajustes com aprovação para casos legítimos pós-fechamento.
Algumas UNs operam fechamento granular (ex.: comercial fecha dia 25, operações dia 5). Liste fechamentos com filtros para descobrir o status efetivo do período/colaborador antes de assumir “está fechado”.
Toda reabertura fica registrada com usuário, timestamp e motivo. Em fiscalização do MTE, reaberturas frequentes podem ser questionadas. Use com parcimônia.

Veja também