Bate Ponto
Sistema completo de marcação de ponto com geofencing, fluxo de aprovação e métricas em tempo real. Arquitetura em monorepo com NestJS + Next.js, preparado para times híbridos, home-office e presencial.
Geofencing inteligente
Cada batida é validada por distância Haversine entre a coordenada do funcionário e a sede da empresa (raio padrão de 650m). Fora do raio? O ponto vira uma solicitação que entra na fila de aprovação do admin.
- Política de geo adaptativa: presencial, home-office e híbrido.
- Híbrido: configuração por dia da semana (em casa vs empresa).
- Auditoria completa: distância, coordenadas e admin aprovador.
const dist = haversine(user.coords, empresa);
if (dist <= RAIO_M) {
// Dentro do raio
registrarPonto(evento);
sendMail('confirmação');
} else {
// Fora do raio
criarSolicitacao({
evento, dist, lat, lng,
status: 'pendente'
});
}
Monorepo Turbo
Estrutura organizada em apps (api, web) e packages(shared, database, apuracao). Build distribuído com Turborepo, cache compartilhado e dependências entre pacotes.
bateponto/
├── apps/
│ ├── api/ (NestJS)
│ └── web/ (Next.js)
└── packages/
├── shared/
├── database/
└── apuracao/
Aprovação granular
Admin recebe solicitações pendentes com geolocalização + distância exata. Pode aprovar (vira marcação real) ou recusar com motivo. Tudo auditado com timestamps e responsável.
Segurança em camadas
JWT com Passport.js, bcrypt (12 rounds), Helmet, Throttler contra brute-force e troca de senha obrigatória no primeiro acesso. Decorators custom @Roles e @CurrentUser.
Métricas + relatórios
Cálculo de horas trabalhadas, almoço, extras e esperadas — por dia, semana e mês. Agregações por time. Exports nativos para PDF (pdf-lib) e Excel (exceljs).
Stack completa
Backend
- NestJS 11
- Mongoose 9
- Zod + nestjs-zod
- Passport JWT
Frontend
- Next.js 15
- Radix UI
- React Hook Form
- TanStack Query/Table
Infra
- MongoDB
- Redis + BullMQ
- Turborepo
- Yarn 4 workspaces
Integrações
- Nodemailer (SMTP)
- pdf-lib + exceljs
- cep-promise
- date-fns + tz
Módulos do sistema
Marcações
4 eventos/dia: entrada, almoço, retorno, saída.
Funcionários
CRUD com roles, jornada e modelo de trabalho.
Solicitações
Aprovação de pontos fora do raio.
Ajustes
Correções manuais de horas pelo admin.
Equipes
Métricas agregadas por time.
Notificações
Emails de boas-vindas e confirmação.
Auth
JWT + troca de senha obrigatória.
Observability
Logs estruturados + métricas.