Sistema de Controle de Faltas com Confirmacao Automatica via WhatsApp.
SaaS para clinicas, psicologos, dentistas, estetica e saloes que resolve o problema de faltas e no-shows em agendamentos. Envia confirmacoes automaticas via WhatsApp, rastreia taxas de faltas e ajuda profissionais a reduzirem prejuizos.
- Framework: Next.js 14+ (App Router) com TypeScript
- Styling: Tailwind CSS + shadcn/ui
- ORM: Prisma v7 com PostgreSQL
- Auth: NextAuth.js v4 (credentials provider, JWT)
- State: Zustand (global) + TanStack Query (server state)
- Forms: React Hook Form + Zod v4
- Charts: Recharts
- WhatsApp: Evolution API (self-hosted)
- Scheduler: node-cron (a cada 30 minutos)
- Testes: Vitest + Testing Library + Playwright
- Node.js 18+
- PostgreSQL (ou conta Supabase)
- Evolution API configurada (para envio de WhatsApp)
# 1. Instalar dependencias
npm install
# 2. Configurar variaveis de ambiente
cp .env.example .env
# Editar .env com suas credenciais
# 3. Rodar migrations
npx prisma migrate dev
# 4. Seed com dados de teste
npx prisma db seed
# 5. Iniciar o servidor
npm run devO app estara disponivel em http://localhost:3000.
- Email: admin@teste.com
- Senha: 123456
- Clinica: Clinica Saude Total
| Variavel | Descricao |
|---|---|
DATABASE_URL |
Connection string PostgreSQL |
NEXTAUTH_SECRET |
Segredo para JWT do NextAuth |
NEXTAUTH_URL |
URL da aplicacao (http://localhost:3000) |
EVOLUTION_API_URL |
URL da instancia Evolution API |
EVOLUTION_API_KEY |
API key da Evolution API |
EVOLUTION_INSTANCE_NAME |
Nome da instancia no Evolution |
- Instale a Evolution API via Docker
- Crie uma instancia e conecte seu WhatsApp via QR code
- Configure o webhook da instancia para apontar para
{SUA_URL}/api/webhook/whatsapp - Preencha as variaveis
EVOLUTION_API_*no.env
Tela de autenticacao simples com email e senha. Registro cria a conta do profissional com nome da clinica.
- 4 cards de metricas: Total de Agendamentos, Taxa de Confirmacao, Taxa de Faltas, Prejuizo Estimado
- Grafico de barras semanal (confirmados vs faltas)
- Lista dos agendamentos do dia com status colorido
- Visao semanal com navegacao por semanas
- Agendamentos agrupados por dia com status visual (verde=confirmado, amarelo=pendente, vermelho=falta)
- Criar/editar agendamentos via modal
- Tabela com busca por nome/telefone
- CRUD completo via modais
- Visualizacao de historico por paciente
- Valor medio da consulta (para calculo de prejuizo)
- Horarios de antecedencia para confirmacao e lembrete
- Templates de mensagem customizaveis com variaveis:
{nome},{data},{hora},{clinica} - Status da conexao WhatsApp
1. Profissional agenda consulta
2. 24h antes: sistema envia confirmacao via WhatsApp
"Ola {nome}, sua consulta na {clinica} esta agendada para {data} as {hora}.
Responda 1 para CONFIRMAR ou 2 para CANCELAR."
3. Paciente responde "1" (ou sim/ok) -> Status = CONFIRMADO
Paciente responde "2" (ou nao/cancelar) -> Status = CANCELADO
4. Se nao responder em tempo: 6h antes envia lembrete
5. Se nao confirmar ate o horario: marca como NO_SHOW
6. Dashboard mostra metricas atualizadas
saas1/
├── prisma/
│ ├── schema.prisma # Schema do banco (User, Patient, Appointment, etc.)
│ └── seed.ts # Dados de teste
├── src/
│ ├── app/
│ │ ├── (auth)/ # Login e registro
│ │ ├── (dashboard)/ # Dashboard, agenda, pacientes, config
│ │ └── api/ # API routes (CRUD, auth, webhook, dashboard)
│ ├── components/ui/ # Componentes shadcn/ui
│ ├── hooks/use-api.ts # TanStack Query hooks
│ ├── lib/
│ │ ├── auth.ts # NextAuth config
│ │ ├── prisma.ts # Prisma singleton
│ │ ├── services/ # WhatsApp, scheduler, templates, webhook parser
│ │ ├── types/ # TypeScript types
│ │ └── validations/ # Zod schemas
│ └── stores/ # Zustand stores
├── tests/
│ ├── unit/ # Testes unitarios (vitest)
│ ├── integration/ # Testes de integracao
│ └── e2e/ # Testes E2E (playwright)
├── instrumentation.ts # Inicializacao do scheduler
└── .env.example # Variaveis de ambiente
npm run dev # Dev server
npm run build # Build de producao
npm run test # Rodar testes
npm run lint # Lint
npm run db:migrate # Prisma migrate
npm run db:seed # Seed do banco
npm run db:studio # Prisma Studio (GUI do banco)| Metodo | Rota | Descricao |
|---|---|---|
| POST | /api/auth/[...nextauth] | Login/auth |
| POST | /api/auth/register | Registro |
| GET/POST | /api/patients | Listar/criar pacientes |
| GET/PUT/DELETE | /api/patients/[id] | Detalhe/editar/remover paciente |
| GET/POST | /api/appointments | Listar/criar agendamentos |
| GET/PUT/DELETE | /api/appointments/[id] | Detalhe/editar/remover agendamento |
| GET | /api/dashboard | Metricas do mes |
| GET/PUT | /api/settings | Configuracoes |
| POST | /api/webhook/whatsapp | Webhook Evolution API |