## Guia de pensamento para alinhar Jasmine + Daniela Reservas

Sempre que precisar revisar ou ajustar o fluxo de reservas, siga este checklist mental. Ele garante que toda intervenção esteja alinhada com o objetivo macro que você descreveu (contato cordial → ativar Daniela → coleta completa → cálculo do valor por dia → Pix de 50% → confirmação final).

1. **Entenda o contexto final do usuário**  
   - O cliente entra com um “bom dia”, “posso reservar?” ou similar.  
   - O objetivo é caminhar até uma reserva confirmada com Pix: sem desvios, sem repetição de perguntas.  
   - Qualquer erro deve ser interpretado à luz desse fluxo (não como uma exceção isolada).

2. **Priorize o fluxo estruturado, não atalhos “temáticos”**  
   - Jasmine deve sempre responder com cordialidade inicial e detectar quando acionar Daniela.  
   - Toda ação de reserva (dados do cliente, suíte, data, valor) deve ser comandada por Daniela, informando o cliente do próximo passo.
   - Evite fallback direto do Brain para respostas livres quando o fluxo já está em andamento.

3. **Mantenha estado consistente durante todo o fluxo**  
   - O cenário ativo precisa persistir na conversa: `active_scenario_key`, `expires_at`, `active_scenario_state`.  
   - O `state` guarda stage, dados coletados (CPF, suíte, data) e resultados de ferramentas (availability, pix).  
   - Em cada turno, atualize esse estado e só encerre quando o Pix for gerado ou o cliente disser “cancelar/obrigado”.

4. **Ferramentas obedecem ao roteiro**  
   - `check_availability` determina o valor correto conforme a data e o dia da semana (verfica as tabelas).  
   - `create_reservation_intent` guarda os dados coletados; jamais pula etapas.  
   - `generate_pix` deve receber o valor calculado e aplicar exatamente `valor / 2` quando solicitado (entrada 50%).  
   - Se algum passo falhar, o sistema deve comunicar o erro (fallback adequado) e manter o cliente no fluxo, não encerrar com mensagens genéricas como “dificuldades técnicas”.

5. **Fluxo conversacional esperado**  
   1. Jasmine responde com cordialidade e confirma a intenção.  
   2. Daniela entra pedindo nome/CPF, suíte, data, horário.  
   3. Daniela informa valor, explica “pode pagar 50% agora via Pix”.  
   4. Daniela chama `generate_pix`, envia o código, explica "copie e cole".  
   5. Após cliente avisar “paguei”, Daniela confirma a reserva e encerra o cenário.  
   6. Se o cliente desistir ou pedir humano, encerre/limpe sticky e deixe Lucia (Jasmine) responder com fallback apropriado.

6. **Logs e documentação**  
   - Sempre que alterar algo, registre nas instruções/prompt das agents (ex: prompt da Daniela deve explicitar o roteiro).  
   - Se necessário fazer mudanças pontuais, vincule essas mudanças ao fluxo (não apenas "ajustar o Pix").  
   - Use este documento como ponto de referência antes de testar: se você “esquecer”, leia e repita mentalmente o que o Rodrigo quer.

Se precisar de ajuda para transformar isso em tarefas técnicas (migrations, short-circuit, state), é só avisar.

---

## Documento de referência ampliado (fluxo reserva + Pix)

### 1. Objetivo “padrão-ouro”
O sistema deve rodar este fluxo previsível para cada pedido de reserva:
1. Cliente cumprimenta → Jasmine responde educadamente.
2. Cliente manifesta “quero reservar” → Jasmine delega para Daniela.
3. Daniela conduz todo o plano: coleta dados, chama ferramentas (precio/disponibilidade/pix), monta a próxima mensagem.
4. Jasmine publica o texto final no tom oficial (voz única para o cliente).
5. Coleta obrigatória concentrada na Daniela: nome completo, CPF, suíte, data, horário/período.
6. Daniela confirma: “Sua reserva ficou assim… total R$T. Posso gerar o Pix (50%)?”
7. Cliente confirma → Daniela gera Pix de metade do total e instrui “copie e cole no seu banco”.
8. Após o cliente avisar “paguei”, Daniela confirma o pagamento e informa que a reserva está confirmada.

Sucesso significa que a reserva segue esse roteiro, com Pix gerado/confirmado e sem decisões aleatórias.

### 2. Papéis e responsabilidades
- **Jasmine (“interface única”)**: cumprimenta, decide se deve delegar, publica as respostas da Daniela e mantém o tom padrão. Nunca responde diretamente sobre reservas, preços ou Pix — sempre delega ao subagente adequado.
- **Daniela (“motor transacional”)**: permanece na camada interna. Recebe contexto, coleta dados, valida, chama `check_availability`, `create_reservation_intent`, `generate_pix`, constrói o `mensagem_para_cliente` e retorna também o `estado_atualizado` e as ações requisitadas.

### 3. Regras de comportamento
- Tom educado e uniforme mesmo quando a resposta vem da Daniela.
- Não inventar preços ou disponibilidade: os valores derivam exclusivamente de `check_availability` e do histórico fornecido.
- Sempre perguntar “posso gerar o Pix?” antes de chamar `generate_pix`.
- Não sair do fluxo: enquanto o sticky scenario estiver ativo, o Brain não deve responder com mensagens independentes ou fallback.

### 4. Arquitetura mínima para consistência
A) **Sticky “modo reserva”** – Conversa persiste: `active_scenario_key`, `active_scenario_expires_at`, `active_scenario_state`. Uma vez ativado por Daniela, todas as próximas mensagens vão direto para ela até conclusão/cancelamento.
B) **Estado mínimo persistido** – `active_scenario_state` deve conter:
   - `stage` (p.ex. collecting_data, quoting, waiting_payment)
   - `collected` (nome, CPF, suíte, data, horário)
   - `last_quote` (preço, disponibilidade, dia/turno)
   - `pix_status` (pending/paid/confirmed)
Isso evita perda de memória entre turnos e mantém o fluxo determinístico.

### 5. Tratamento de erros (visão macro)
Quando surgir um erro (resposta desalinhada, ferramenta falhando, handoff disparado), trace o contexto:
1. Qual stage estava ativo?
2. Jasmine desviou e respondeu sozinha?
3. Daniela repetiu perguntas ou perdeu dados?
4. Qual tool falhou ou retornou inválido?
Corrija sempre com base nesse fluxo padrão — não apenas “ajuste a frase”, mas reforce o sticky/state/sequence.

### 6. Como trabalhamos na prática
Sempre que você me mostrar um erro, envie:
1. Mensagem do cliente.
2. Resposta publicada pela Jasmine.
3. Trecho do log relevante (20–60 linhas) indicando decisão/tool.

Com isso eu devolvo:
* Onde travar o sticky/state.
* Qual prompt deve ser ajustado.
* Qual ferramenta/filtro precisa validar o valor ou o Pix.

### 7. Regra mestre
“Daniela é o cérebro do fluxo transacional e retorna o texto pronto; Jasmine é a única voz que publica para o cliente no tom oficial. O sistema deve manter estado e sticky para que o fluxo seja determinístico.”

---

## 🎯 Simulação de atendimento ideal – experiência perfeita de reserva

**Cliente:**  
Boa noite

**Jasmine:**  
Boa noite! 😊  
Seja bem-vindo. Como posso te ajudar hoje?

**Cliente:**  
Gostaria de fazer uma reserva

**Jasmine:**  
Perfeito! Vou te ajudar com isso 😊  
Para darmos continuidade à sua reserva, poderia me informar, por favor, seu nome completo e CPF?

**Cliente:**  
João Pedro da Silva, CPF 123.456.789-00

**Jasmine:**  
Obrigada, João 😊  
Agora me diga, por favor: qual suíte você deseja reservar?

**Cliente:**  
Suíte Luxo

**Jasmine:**  
Ótima escolha! ✨  
Para qual data e horário/período você gostaria da reserva?

**Cliente:**  
Dia 20/02, das 22h às 10h

**Jasmine:**  
Perfeito! Só um instante que vou verificar a disponibilidade e os valores para você 😊

(internamente: Daniela consulta disponibilidade e preço)

**Jasmine:**  
Prontinho! 😊  
Sua reserva ficou assim:

• Suíte: Luxo  
• Data: 20/02  
• Horário: das 22h às 10h  
• Valor total: R$ 300,00

Para confirmar a reserva, é necessário o pagamento de 50% (R$ 150,00).  
Posso gerar o Pix para você agora?

**Cliente:**  
Pode sim

**Jasmine:**  
Perfeito 😊  
Segue abaixo o Pix para pagamento da entrada:

💰 Valor: R$ 150,00  
📌 Chave Pix: 123e4567-e89b-12d3-a456-426614174000

👉 Basta copiar a chave Pix, colar no aplicativo do seu banco e realizar o pagamento.  
Assim que pagar, me avise por aqui para que eu confirme sua reserva, tudo bem?

**Cliente:**  
Pronto, acabei de pagar

**Jasmine:**  
Só um instante que vou confirmar o pagamento para você 😊

(internamente: Daniela confirma pagamento)

**Jasmine:**  
Pagamento confirmado com sucesso! ✅

Sua reserva está confirmada 🎉  
Resumo final:

• Suíte: Luxo  
• Data: 20/02  
• Horário: das 22h às 10h  
• Entrada paga: R$ 150,00

Qualquer dúvida ou se precisar de algo mais, é só me chamar.  
Será um prazer te receber! 😊✨

### 🔑 Por que essa experiência é boa  
- Linguagem humana e educada  
- Um pedido por vez (sem sobrecarregar)  
- Confirmação clara antes da cobrança  
- Segurança no Pix  
- Encerramento com sensação de sucesso

Se quiser, nos próximos passos posso:
- marcar onde entra cada stage,  
- transformar isso em script técnico para os prompts da Daniela/Jasmine, ou  
- criar a versão “anti-confusão” (quando o cliente muda de assunto ou responde errado).

### 💬 Instrução extra: Pix Copia e Cola completo
Quando o GeneratePixTool retornar o código, **garanta que o bloco de código contenha a string inteira**, iniciando em `0002010...` e terminando no checksum `...6304XXXX`. Esse é o valor que o cliente precisa colar no banco; qualquer corte causa “Pix inválido”. Copie exatamente o `raw_payload` do tool (ou o `formatted_message` caso já contenha a string completa) e anexe no bloco antes de enviar. Nada deve ser truncado ou substituído pela Jasmine depois de a mensagem sair.
