52 lines
3.8 KiB
Markdown
52 lines
3.8 KiB
Markdown
# Manifesto de Hardening: Arquitetura de Reservas & Pix (Jasmine/Daniela)
|
|
**Data:** 17/01/2026
|
|
**Status:** Estável (Com detalhes finos de valor em análise)
|
|
|
|
## 1. O Contexto
|
|
O sistema de reservas via WhatsApp (Jasmine -> Daniela) enfrentava instabilidades críticas que comprometiam a confiança do usuário:
|
|
- **Alucinação de Suíte:** A IA inventava ou persistia na suíte errada (ex: "Alexa") mesmo quando o usuário pedia outra ("Stilo"), ignorando o contexto recente.
|
|
- **Loop de Confirmação:** O agente entrava em loop perguntando "Posso reservar?" infinitamente.
|
|
- **Pix Quebrado:** O código Copia e Cola chegava cortado ou mal formatado, impossibilitando o pagamento.
|
|
- **Datas Erradas:** "Amanhã às 21h" era interpretado como "Hoje às 21h", gerando erro de disponibilidade.
|
|
|
|
## 2. Soluções Implementadas (A Muralha de Defesa)
|
|
|
|
### 🛡️ 1. Anti-Alucinação (O "Muro de Berlim")
|
|
Alteramos a lógica de leitura de histórico nas ferramentas `CheckAvailabilityTool` e `CreateReservationIntentTool`.
|
|
- **Como funciona:** O sistema varre as mensagens do usuário **de trás para frente**. Ao encontrar a palavra-chave **"Reiniciar"** (ou "Resetar"), ele **PARA** a leitura.
|
|
- **Resultado:** Qualquer suíte mencionada antes do reset se torna invisível para a ferramenta de validação. Isso impede que "fantasmas" de conversas passadas contaminem a nova reserva.
|
|
- **Aliases:** Adicionamos suporte a apelidos (ex: "hidro" = "Hidromassagem") para evitar bloqueios indevidos.
|
|
|
|
### 📅 2. Resolução de Data Inteligente
|
|
Corrigimos o bug onde fornecer um horário (`check_in_at`) sobrescrevia a data (`date`).
|
|
- **Nova Lógica:** Se o usuário diz "Amanhã" e depois "21:00", o sistema combina as duas informações (`Base Date` + `Time`), garantindo que a reserva caia no dia correto.
|
|
|
|
### 🔁 3. Check de Idempotência & Anti-Loop
|
|
Implementamos uma trava na `CreateReservationIntentTool`.
|
|
- **Lógica:** Antes de criar uma reserva, verificamos se já existe um "draft" idêntico (mesma suíte/preço) criado nos últimos 5 minutos.
|
|
- **Ação:** Se existir, a ferramenta **BLOQUEIA** a criação e retorna uma instrução imperativa: *"Reserva JÁ EXISTE. Pare de criar e CHAME O PIX AGORA."*
|
|
- **Resultado:** Fim dos loops de "Reserva confirmada" repetidos.
|
|
|
|
### 💸 4. Pix Robusto & Formatado
|
|
- **Formatação:** O `GeneratePixTool` agora retorna o código dentro de um bloco Markdown triplo (` ``` `), garantindo que o WhatsApp exiba como código monoespaçado (fácil de copiar).
|
|
- **Reconstrução (Frankenstein):** Se a API do Banco Inter retornar um código cortado (iniciando com `/spi/...`), o sistema detecta e **anexa automaticamente** o cabeçalho padrão (`000201...bancointer.com.br`), salvando o pagamento.
|
|
- **Log de Caixa Preta:** Adicionamos log do JSON bruto do banco para auditoria.
|
|
|
|
### 💰 5. Trava Global de Preço
|
|
- **Segurança:** A ferramenta de criação agora compara o preço da reserva com a **última cotação de disponibilidade** feita na conversa.
|
|
- **Resultado:** Se a IA tentar cobrar R$ 80,00 por uma suíte que foi cotada a R$ 60,00, o sistema bloqueia a transação.
|
|
|
|
## 3. Estado Atual & Próximos Passos
|
|
O fluxo "Happy Path" (Reiniciar -> Escolher -> Reservar -> Pix) está funcional e seguro.
|
|
|
|
**Ponto de Atenção (Investigação Ativa):**
|
|
- Houve um relato de divergência no valor final do Pix (Texto diz R$ 40,00, Pix cobra R$ 60,00).
|
|
- **Ação:** Adicionamos logs explícitos do ID da reserva no `GeneratePixTool` para rastrear se o sistema está pegando uma reserva "zumbi" antiga.
|
|
|
|
---
|
|
**Arquivos Chave Alterados:**
|
|
- `enterprise/app/services/captain/tools/check_availability_tool.rb`
|
|
- `enterprise/app/services/captain/tools/create_reservation_intent_tool.rb`
|
|
- `enterprise/app/services/captain/tools/generate_pix_tool.rb`
|
|
- `enterprise/app/services/captain/inter/cob_service.rb`
|