Skip to main content
Frequência consolida os registros de ponto brutos em uma visão por colaborador / data com horas trabalhadas, ausências, atrasos e jornada esperada. É a fonte canônica para integrações com folha de pagamento, BI e dashboards gerenciais — não os registros brutos. A diferença prática:
CamadaGranularidadeUse quando
Registro de Ponto1 linha = 1 batidaAuditoria fina, AFD/AEJ, comprovantes
Frequência1 linha = 1 colaborador × 1 diaBI, dashboards, sync com folha
RelatóriosArquivo consolidado mensalCompliance, exportação para folha externa
A tag Frequency substitui as rotas legacy /registro-ponto/gestao/* e /registro-ponto/frequencias*, todas marcadas como deprecated. Sua integração nova deve usar exclusivamente /frequency/*.

Como a frequência é calculada

A jornada esperada do colaborador é definida pelo turno que ele está alocado. Pontua suporta 4 tipos de turno (Fixo, Flexível, Revezamento, Ciclo) — veja Turnos e Calendário. A cada dia, o calculador agrupa as batidas em pares entrada/saída formando jornadas, calcula a carga horária real, compara com a esperada e classifica:
Saldo = horas trabalhadas - carga horária esperada

Se saldo > 0 e dia útil:
  → Horas extras (com percentual conforme regra de ponto)

Se saldo > 0 e domingo/feriado:
  → 100% de adicional típico (CLT Art. 67)

Se saldo < 0:
  → Atraso ou falta parcial
  → Banco de horas (se houver acordo) ou desconto folha

Tolerâncias

A Portaria 671 e o CLT (Art. 58 §1º) permitem tolerância de 5 a 10 minutos por marcação. Pontua aplica essa tolerância no cálculo — batida 5min adiantada/atrasada não gera saldo positivo nem desconto. A configuração exata da tolerância depende da Regra de Ponto vinculada ao colaborador (RIGIDA, FLEXIVEL_INTERVALOS, FLEXIBILIDADE_HORARIOS) — ver Regras de Ponto.

Status de frequência

Cada dia é classificado em um status:
StatusSignificado
PRESENTETrabalhou (com ou sem atrasos toleráveis)
FALTASem batidas no dia esperado de trabalho (-1 no saldo do mês)
ATESTADOAusência justificada por atestado médico (não conta como falta)
FERIASEm férias (sem expectativa de jornada)
FOLGAFolga programada (ex: domingo, feriado, banco de horas compensado)

Endpoints públicos

Retorna uma linha por colaborador por dia dentro do período consultado. Para uma equipe de 50 pessoas em um mês, são ~1500 linhas — sempre use paginação.Top use case: sync diário/noturno com sistema de folha. Cron pega frequências de D-1, alimenta folha do mês corrente.Filtros típicos:
  • dataInicio / dataFim — período (ISO 8601)
  • colaboradorId — específico
  • departamentoId — agregar por departamento
  • unidadeNegocioId — relevante se token cobre múltiplas UNs
Schema completo no try-it.
Retorna o que era para o colaborador trabalhar naquele dia (horário do turno, intervalo configurado, exceções aplicáveis).Útil para validar antes de:
  • Marcar uma falta (verificar se era dia útil dele)
  • Criar uma batida ajuste (saber a janela esperada)
  • Sincronizar escala com seu sistema de gestão
Filtra automaticamente para colaboradores subordinados ao usuário logado, baseado em hierarquia configurada na UN.
Esse endpoint só faz sentido com JWT de usuário gestor, não com API key da unidade. Com API key (que não tem hierarquia associada), o filtro de subordinação não se aplica e o resultado pode incluir todos da UN.
Use casos: dashboard de gestor, app de aprovação de ajustes.
Métricas agregadas de pontualidade da equipe:
  • % de batidas dentro da janela esperada
  • Top atrasadores
  • Distribuição de atrasos por departamento
Para dashboard executivo. Não confunda com cálculo individual de horas extras — isso vem de /frequency/daily ou de Relatórios.

Modelo de dados (resumido)

{
  data: string                    // ISO 8601 date (yyyy-MM-dd)
  colaboradorId: string

  jornadaEsperada: {
    horasMinutos: string          // "08:00"
    intervalo: string             // "01:00"
    inicio?: string               // "08:00" (turnos com horário fixo)
    fim?: string                  // "17:00"
  }

  registros: Array<{
    dataHora: string
    tipo: "ENTRADA" | "SAIDA" | "INICIO_INTERVALO" | "FIM_INTERVALO"
    nsr: number
  }>

  totais: {
    horasTrabalhadas: string      // "08:15" — formato HH:MM
    horasExtras: string           // "00:15"
    horasFalta: string            // "00:00"
    horasAtraso: string           // "00:00"
  }

  status: "PRESENTE" | "FALTA" | "ATESTADO" | "FERIAS" | "FOLGA"
  ocorrencias: string[]           // ["BATIDA_DUPLICADA", "FORA_DO_CERCO", ...]
}

Fluxos típicos

Sync noturno com folha de pagamento

async function syncDiarioFolha(token) {
  const ontem = new Date(Date.now() - 86400000).toISOString().slice(0, 10)

  let pagina = 0
  while (true) {
    const resp = await fetch(
      `https://api.pontua.com.br/frequency/daily?` +
      `dataInicio=${ontem}&dataFim=${ontem}&pagina=${pagina}&limite=100`,
      { headers: { Authorization: `Bearer ${token}` } },
    )
    const { resultados, totalRegistros } = await resp.json()

    for (const freq of resultados) {
      await meuSistemaFolha.upsertFrequencia({
        colaborador: freq.colaboradorId,
        data: freq.data,
        horasTrabalhadas: freq.totais.horasTrabalhadas,
        horasExtras: freq.totais.horasExtras,
        status: freq.status,
      })
    }

    if ((pagina + 1) * 100 >= totalRegistros) break
    pagina++
  }
}

Validar jornada esperada antes de criar atestado

async function criarAtestadoComValidacao(token, colaboradorId, data) {
  // 1. Verificar se era dia esperado de trabalho
  const espResp = await fetch(
    `https://api.pontua.com.br/frequency/expected?` +
    `colaboradorId=${colaboradorId}&data=${data}`,
    { headers: { Authorization: `Bearer ${token}` } },
  )
  const { jornadaEsperada } = await espResp.json()

  if (!jornadaEsperada || jornadaEsperada.horasMinutos === '00:00') {
    console.log(`${data} não é dia útil para ${colaboradorId}, atestado dispensável`)
    return null
  }

  // 2. Era dia útil → criar atestado via fluxo de Ajustes
  // (ver Ajustes de Registro)
}

Dashboard de presença em tempo real

async function dashboardPresenca(token, departamentoId) {
  const hoje = new Date().toISOString().slice(0, 10)
  const resp = await fetch(
    `https://api.pontua.com.br/frequency/daily?` +
    `dataInicio=${hoje}&dataFim=${hoje}&departamentoId=${departamentoId}&limite=100`,
    { headers: { Authorization: `Bearer ${token}` } },
  )
  const { resultados } = await resp.json()

  return {
    presentes: resultados.filter((f) => f.status === 'PRESENTE').length,
    faltas: resultados.filter((f) => f.status === 'FALTA').length,
    atestados: resultados.filter((f) => f.status === 'ATESTADO').length,
    ferias: resultados.filter((f) => f.status === 'FERIAS').length,
  }
}

Gotchas conhecidos

Frequência é calculada continuamente conforme batidas e ajustes entram. Um valor lido hoje pode mudar amanhã se houver aprovação de ajuste retroativo. Para snapshot imutável, use o relatório oficial (AFD/AEJ) gerado após fechamento do período.
Se a regra de ponto do colaborador muda no meio do mês, dias antes da mudança usam regra antiga; dias depois, nova regra. Em integrações que reportam “horas extras totais do mês”, isso pode causar inconsistência se a regra mudou — sempre cite a regra na hora do cálculo.
Atraso de 5 min ainda é atraso para o RH, mas não gera saldo negativo na frequência (tolerância CLT). Se sua integração é para acompanhamento disciplinar, complemente com query nos registros brutos via GET /registro-ponto.
As rotas deprecated em /registro-ponto/gestao/* foram substituídas, não simplesmente renomeadas. Há diferenças sutis em:
  • Cálculo de pontualidade (nova versão considera tolerância configurada)
  • Agrupamento por departamento (nova versão respeita hierarquia eSocial)
  • Formato de horários (HH:MM string em vez de minutos integer)
Migre para /frequency/* em integração nova; para integrações existentes, planeje migração antes da remoção das deprecated.

Endpoints expostos publicamente

MétodoRotaDescrição
GET/frequency/dailyFrequências diárias consolidadas (1 linha por colab × dia)
GET/frequency/expectedJornada esperada para colaborador/data
GET/frequency/managementFrequência filtrada por subordinação (gestor)
GET/frequency/management/punctualityMétricas de pontualidade agregadas
Schema completo + try-it em Referência da API.

Veja também