Visão Geral¶
O que é esta integração?¶
A integração Nayax → Saipos é um sistema que conecta terminais de pagamento Nayax com o sistema POS Saipos, permitindo que transações realizadas em máquinas de vending ou self-service sejam automaticamente registradas no sistema de gestão do restaurante.
Como Funciona?¶
sequenceDiagram
participant N as Nayax
participant W as Webhook
participant DB as Database
participant J as JobsProcessor
participant S as Saipos
N->>W: POST /webhooks/nayax
W->>W: Autenticação
W->>DB: Salva evento
W->>DB: Cria job (PENDING)
W-->>N: 200 OK (imediato)
loop A cada 20s
J->>DB: Busca jobs PENDING
J->>DB: Marca como PROCESSING
J->>J: Transforma dados
J->>S: POST /order
alt Sucesso
S-->>J: 200 OK
J->>DB: Marca como SENT
else Erro
S-->>J: 4xx/5xx
J->>DB: Marca como FAILED/DLQ
end
end Características Principais¶
1. Recepção de Webhooks¶
O sistema recebe webhooks do Nayax contendo informações sobre transações realizadas.
Endpoint: POST /webhooks/nayax
Autenticação suportada:
- Bearer Token (JWT ou Nayax)
- Basic Auth
2. Processamento Assíncrono¶
Utiliza o Outbox Pattern para garantir que nenhuma transação seja perdida:
- Recepção imediata: Webhook retorna 200 OK instantaneamente
- Salvamento: Evento é salvo no banco de dados
- Enfileiramento: Job é criado com status
PENDING - Processamento: Worker processa jobs a cada 20 segundos
- Retry: Jobs com falha são retentados com backoff exponencial
3. Transformação de Dados¶
O Mapper converte o formato Nayax para o formato Saipos:
- Mapeamento de formas de pagamento (
tenderType) - Cálculo de totais, descontos e acréscimos
- Ajuste de somas para evitar diferenças de centavos
- Geração de IDs únicos (com timestamp para testes)
4. Sistema Multi-tenant¶
Suporta múltiplos restaurantes com:
- Credenciais Saipos isoladas por restaurante
- Sistema de permissões (OWNER, ADMIN, MANAGER, EMPLOYEE, VIEWER)
- Vínculo N:N entre usuários e restaurantes
5. Resiliência¶
- Retry com backoff: 30s → 2min → 5min → 15min → 30min → 60min
- DLQ (Dead Letter Queue): Erros permanentes (400, 422)
- Reaper: Limpa jobs travados automaticamente
- Lock otimista: Evita processamento duplicado
Casos de Uso¶
Restaurante Self-Service¶
graph LR
A[Cliente] --> B[Terminal Nayax]
B --> C[Pagamento]
C --> D[Webhook]
D --> E[Sistema]
E --> F[Saipos]
F --> G[Pedido na Cozinha] - Cliente seleciona produtos no terminal
- Realiza pagamento (Pix, cartão, etc)
- Nayax envia webhook com transação
- Sistema processa e envia para Saipos
- Pedido aparece no sistema do restaurante
Máquina de Vending¶
graph LR
A[Cliente] --> B[Máquina Nayax]
B --> C[Compra + Pagamento]
C --> D[Webhook]
D --> E[Sistema]
E --> F[Saipos]
F --> G[Registro de Venda] - Cliente compra produto na máquina
- Pagamento processado pelo Nayax
- Transação enviada via webhook
- Sistema registra venda no Saipos
Benefícios¶
Para o Negócio¶
- Automação completa: Sem intervenção manual
- Rastreabilidade: Todas as transações registradas
- Centralização: Todos os dados no Saipos
- Relatórios unificados: Visão consolidada de vendas
Para o Desenvolvedor¶
- Alta confiabilidade: Outbox pattern + retry
- Observabilidade: Logs detalhados em cada etapa
- Manutenibilidade: Código bem estruturado e documentado
- Testabilidade: Modo de teste built-in
Para a Operação¶
- Monitoramento: Dashboard de métricas
- Alertas: Notificação de problemas
- Troubleshooting: Queries prontas para debug
- Reprocessamento: Jobs podem ser retentados manualmente
Fluxo de Dados¶
Entrada (Nayax)¶
{
"transactionKey": "550e8400-e29b-41d4-a716-446655440000",
"storeCode": "LOJA001",
"totalAmount": 50.00,
"items": [...],
"payments": [...]
}
Saída (Saipos)¶
{
"order_id": "550e8400-e29b-41d4-a716-446655440000",
"cod_store": "LOJA_SAIPOS_001",
"total_amount": 50.00,
"items": [...],
"payment_types": [...]
}
Próximos Passos¶
Agora que você entende como funciona, vamos para a arquitetura detalhada: