Assistente Virtual (IA) — Visão Geral
Última atualização: 16 de julho de 2026
O que é este fluxo
O app tem três superfícies de inteligência artificial: importar um pedido a partir de uma foto, áudio ou texto livre, receber uma sugestão de pedido pronta para um cliente, e conversar com uma assistente chamada Sophia na home. Das três, só uma de fato conversa com um serviço de IA real. As outras duas têm toda a interface pronta, incluindo animações de "pensando" e "digitando", em torno de dados fixos.
Resumo: o que é real e o que é mock
| Superfície | Estado | Documentado em |
|---|---|---|
| Importação de pedido por IA (nova venda) | Real, chama o serviço de IA | Importação de Pedido por IA |
| Chat com a Sophia (home) | Mock, resposta fixa | Chat com a Sophia |
| Sugestão de pedido (home/carteira) | Mock, apesar de existir um método de serviço real e não usado | Sugestão de Pedido |
O serviço de IA real: AIService e o backend "Sofia"
Existe um serviço de IA de fato, services/ai/ai.service.ts, que fala com um backend próprio de IA, configurado como uma URL separada da API principal do app:
// app.json
"API_AI_SOFIA_URL": "https://api.sofia.vidyacode.com.br"
AIService expõe dois métodos, e só um deles é chamado por alguma tela do app:
// ai.service.ts
export class AIService {
/** Envia um arquivo/áudio/texto junto do catálogo de produtos para o middleware de IA. */
async importProducts(params: ImportProductsParams): Promise<AiImportResponseData> {
// ... POST multipart para /api/extrair-produtos, com baseURL: AUTH_CONFIG.API_AI_SOFIA_URL
}
/** Busca um pedido sugerido para um vendedor/cliente num intervalo de datas. */
async suggestOrder(params: SuggestOrderParams): Promise<SuggestedOrder> {
// ... GET /pedido-sugerido
}
}
importProducts é chamado de fato pela tela de importação de pedido em nova venda, documentada em Importação de Pedido por IA. suggestOrder não é chamado por nenhuma tela, é exercitado só no teste automatizado do próprio serviço, documentado em Sugestão de Pedido.
O histórico de conversas do chat não é persistido
VirtualAssistantProvider, montado no layout raiz e usado pela tela de chat, guarda as conversas só em useState, sem nenhuma gravação em MMKV, SQLite ou qualquer outro storage:
// virtual-assistant.provider.tsx
export function VirtualAssistantProvider({ children }) {
const [conversations, setConversations] = useState<VirtualAssistantConversation[]>([]);
// startConversation, appendMessage, getConversationById operam só sobre esse estado em memória
}
Fechar o app, ou mesmo só recarregar a tela em desenvolvimento, apaga qualquer conversa em andamento. Isso é consistente com o restante do fluxo: nada aqui, além da importação de pedido, foi construído com persistência de dados reais em mente ainda.
Flags de configuração
cfg-ativarimportacaopedidoia e cfg-ativarsugestaopedidoia controlam a visibilidade das ações de importar/sugerir pedido, tanto na home quanto na carteira de clientes (documentado em Seleção e Navegação), seguindo o mesmo padrão de gating por flag já visto em outros fluxos. As duas vêm desligadas por padrão.
Armadilhas conhecidas
Ao testar qualquer uma dessas três superfícies, confirme primeiro qual delas está sendo tocada. É fácil assumir que, como a importação de pedido de fato funciona e chama um backend de IA real, o chat ou a sugestão de pedido também fazem algo parecido. Eles não fazem, hoje.