Modo demonstração no aparelho
Sem sessão, os registros ficam apenas neste navegador e a interpretação usa o motor local de regras.
As 7 camadas
A IA decide o que a usuária quis dizer. O backend decide o que pode ser feito.
Experience Layer
Interfaces da usuária: PWA mobile-first, desktop, captura por voz e texto, telas de confirmação e notificações.
PWA, voz, texto e confirmação prontos. Upload de foto/PDF e notificações push pendentes de configuração.
src/routes/* · src/components/youbot/* · src/lib/youbot/speech.ts
AI Gateway
Recebe a solicitação, autentica a sessão e prepara o contexto antes de qualquer interpretação.
Sessão validada no servidor antes da IA rodar; sem sessão, cai no motor local de demonstração.
src/lib/orchestrator/orchestrator.functions.ts · auth-middleware
AI Orchestrator
O cérebro: transforma linguagem natural em intenção + entidades estruturadas, monta o plano e aplica políticas.
IA (Gemini via Lovable AI) com fallback determinístico; plano e políticas sempre decididos no servidor.
src/lib/orchestrator/interpret.server.ts · policy.server.ts · contract.ts
Domain Services
Regras reais de cada área: Medical, Finance, Family/Casa, Calendar, Smasher, Content, Inventory e Documents.
Cada domínio valida e persiste seus registros; o orquestrador só propõe, o serviço de domínio executa.
src/lib/med/* · src/lib/fin/* · src/lib/casa/* · src/lib/content/* · src/lib/orchestrator/mapping.ts
Integration Hub
Fala com sistemas externos: calendário, WhatsApp, e-mail, OCR de agenda, push e pagamentos.
11 adaptadores catalogados, todos visivelmente 'pendente de configuração'. Nada é simulado.
src/lib/integrations/catalog.ts · src/routes/integracoes.tsx
Data Layer
Banco Postgres com autenticação, storage e isolamento por usuária.
RLS ativa em todas as tabelas; sem sessão, os dados ficam só no aparelho (modo demonstração).
Lovable Cloud · tabelas records, orchestrator_log, audit_log, profiles
Security & Audit
Autorização, políticas de confirmação, logs de auditoria, desfazer e proteção de dados sensíveis.
Ações sensíveis e externas exigem confirmação explícita; toda gravação gera entrada de auditoria com desfazer.
RLS no banco · policy.server.ts · audit_log · histórico no app
O cérebro: pipeline do Assistant Orchestrator
Cada etapa é código de verdade, não instrução dentro do prompt. Assim a lógica fica testável e auditável.
- 1
Input
Camada 1ImplementadaA usuária fala, escreve ou envia um arquivo pelo app.
Captura por voz e texto disponível em todas as telas pelo botão central.
src/components/youbot/CaptureSheet.tsx
- 2
Speech-to-Text / OCR
Camada 1ParcialTransforma áudio em texto e, no futuro, foto/PDF em texto.
Transcrição por voz do próprio aparelho já funciona. OCR de foto/PDF pendente de configuração.
src/lib/youbot/speech.ts · src/routes/medicina.importar.tsx
- 3
Normalize
Camada 3ImplementadaLimpa o texto, resolve datas relativas (amanhã, sexta) e padroniza valores.
Normalização em português: datas, horários, dinheiro, recorrência e área.
src/lib/youbot/nlu.ts
- 4
Intent Detection
Camada 3ImplementadaDescobre a intenção: criar compromisso, tarefa, financeiro, ideia ou consulta.
Modelo de linguagem no servidor com fallback determinístico de regras.
src/lib/orchestrator/interpret.server.ts
- 5
Entity Extraction
Camada 3ImplementadaExtrai pessoa, paciente, data, hora, local, valor, responsável e recorrência.
Saída sempre estruturada e validada antes de seguir adiante.
src/lib/orchestrator/interpret.server.ts · nlu.ts
- 6
Context Retrieval
Camada 4ImplementadaBusca o contexto da usuária: pacientes, contas, filhos, agenda e registros parecidos.
Context Engine no servidor: conversa recente, última pessoa citada, registros relacionados e agenda — só o necessário vai ao modelo.
src/lib/orchestrator/context.server.ts · src/lib/search/universal.ts
- 7
Policy Check
Camada 7ImplementadaDecide o que PODE ser feito: dado sensível, ação que sai do app, integração ausente.
A IA nunca autoriza. Toda permissão é decidida no servidor, com motivo escrito.
src/lib/orchestrator/policy.server.ts
- 8
Action Planning
Camada 3ImplementadaMonta o plano: salvar registro, programar lembrete, preparar mensagem, compartilhar.
Cada ação carrega se é interna ou externa e qual integração exigiria.
src/lib/orchestrator/policy.server.ts (buildPlan)
- 9
Confirmation
Camada 1ImplementadaMostra o resumo editável e espera o 'sim' da usuária quando a política exige.
Financeiro, dados de paciente e qualquer ação externa sempre pedem confirmação explícita.
src/components/youbot/CaptureSheet.tsx
- 10
Tool Execution
Camada 5ParcialExecuta as ferramentas autorizadas: calendário, mensagem, e-mail, documento.
Catálogo de ferramentas controladas com validação de dados e autorização no servidor; ferramentas externas seguem pendentes de configuração e nada é simulado.
src/lib/orchestrator/tools.ts · tools.server.ts · src/lib/integrations/catalog.ts
- 11
Persist
Camada 6ImplementadaGrava o registro no banco, com a identidade da usuária.
Gravação só no servidor, com RLS por usuária. Sem sessão, fica no aparelho (demonstração).
src/lib/orchestrator/orchestrator.functions.ts (executePlan)
- 12
Response
Camada 1ImplementadaDevolve a confirmação em português e atualiza as telas do domínio.
O registro aparece imediatamente na área certa depois do salvamento.
stores de domínio · telas de agenda, medicina, financeiro, casa
- 13
Audit Log
Camada 7ImplementadaRegistra o que foi interpretado, o que foi autorizado e o que foi gravado — com desfazer.
Cada comando vira uma linha auditável, do texto original até a decisão final.
tabelas orchestrator_log e audit_log · src/routes/historico.tsx
Context Engine — quem é “ela”?
Antes de chamar o modelo, o servidor monta um pacote mínimo de contexto e entrega só o necessário: menos custo, mais precisão.
Conversa recente
Últimos comandos da usuária e a pessoa citada em cada um.
Última paciente mencionada
Resolve pronomes como “ela”, “a mesma”, “essa paciente”.
Registros relacionados
Só os registros com palavras em comum com o comando atual.
Agenda próxima
Compromissos futuros para ancorar “semana que vem”.
src/lib/orchestrator/context.ts · context.server.ts
Tool Calling — ferramentas controladas
A IA não tem acesso ao banco. Ela só pode pedir uma destas ferramentas, e cada chamada é validada em dados e autorização antes de rodar. Exemplo: “A Ana fez laser hoje” vira search_patient → get_patient → create_procedure → create_followup.
search_patient()
Procura a paciente pelo nome dentro dos registros da usuária.
Exige: pessoa · records (kind=compromisso/tarefa, area=socciederm)
get_patient()
Carrega o histórico da paciente encontrada para dar contexto à ação.
Exige: pessoa · records + memória estruturada
create_patient()
Cadastra uma paciente nova.
Exige: pessoa · cadastro de pacientes
create_procedure()
Registra o procedimento realizado (laser, cirurgia, aplicação).
Exige: título · records (compromisso · socciederm)
create_followup()
Programa o retorno da paciente (D+1, D+7, D+14, D+30).
Exige: pessoa · records (tarefa · socciederm)
create_task()
Cria uma tarefa, com responsável opcional.
Exige: título · records (tarefa)
create_reminder()
Programa um lembrete interno com data e antecedência.
Exige: título, data · records (compromisso) + lembrete interno
create_calendar_event()
Cria compromisso no calendário interno do YOUbot.
Exige: título, data · records (compromisso)
create_expense()
Registra uma despesa com valor, categoria e meio de pagamento.
Exige: valor · records (financeiro · saída)
create_payment()
Registra um recebimento de paciente.
Exige: valor · records (financeiro · entrada)
search_inventory()
Consulta o estoque por item, lote ou validade.
Exige: nenhum campo · estoque da clínica
create_inventory_item()
Registra entrada de insumo com lote e validade.
Exige: título · estoque da clínica
search_memory()
Busca na memória operacional e estruturada para responder perguntas.
Exige: nenhum campo · records + cadastros
generate_document()
Prepara um documento editável (relatório, orientações, laudo).
Exige: título · documentos (rascunho editável)
generate_message()
Escreve a mensagem para copiar — não envia nada.
Exige: título · rascunho de mensagem
send_message()
Envia a mensagem para fora do app.
Exige: pessoa, título · WhatsApp / e-mail
src/lib/orchestrator/tools.ts · tools.server.ts
Intent Engine — catálogo de intenções
Detectar a intenção não basta: cada intenção declara a entidade envolvida, os campos obrigatórios e se o dado é sensível ou sai do app.
CREATE_TASKCriar tarefa
Entidade: Tarefa · Domínio: Calendar
Obrigatórios: título
“Pedir para a secretária confirmar a agenda de quinta”
CREATE_REMINDERCriar lembrete
Entidade: Lembrete · Domínio: Calendar
Obrigatórios: título, data
“Me lembra de falar com a Ana amanhã sobre o laser”
CREATE_EVENTCriar compromisso
Entidade: Compromisso · Domínio: Calendar
Obrigatórios: título, data
“Cirurgia da Helena sexta às 14h no Hospital Santa Luzia”
UPDATE_EVENTAtualizar compromisso
Entidade: Compromisso · Domínio: Calendar
Obrigatórios: título
“Passa a cirurgia da Helena para sábado às 9h”
CREATE_PATIENTCadastrar paciente
Entidade: Paciente · Domínio: Medical
Obrigatórios: pessoa
“Cadastrar a paciente nova, Beatriz Nogueira”
CREATE_FOLLOWUPProgramar follow-up
Entidade: Follow-up · Domínio: Medical
Obrigatórios: pessoa
“Follow-up D+7 da Ana depois do laser”
CREATE_PAYMENTRegistrar recebimento
Entidade: Recebimento · Domínio: Finance
Obrigatórios: valor
“Recebi 1.800 da paciente Ana por Pix”
CREATE_EXPENSERegistrar despesa
Entidade: Despesa · Domínio: Finance
Obrigatórios: valor
“Comprei material da clínica por 640 reais no cartão”
CREATE_INVENTORY_ITEMRegistrar insumo
Entidade: Insumo de estoque · Domínio: Inventory
Obrigatórios: título
“Chegaram 10 caixas de fio de sutura, validade em março”
CREATE_GIFT_IDEASalvar ideia de presente
Entidade: Presente · Domínio: Family / Casa
Obrigatórios: título
“Ideia de presente para a minha mãe: kit de jardinagem”
CREATE_SHOPPING_ITEMAdicionar à lista de compras
Entidade: Item de compra · Domínio: Family / Casa
Obrigatórios: título
“Põe café e azeite na lista do mercado”
CREATE_SMASHER_IDEASalvar ideia Smasher
Entidade: Ideia · Domínio: Smasher
Obrigatórios: título
“Ideia para o Smasher: ranking por região”
GENERATE_DOCUMENTGerar documento
Entidade: Documento · Domínio: Document
Obrigatórios: título
“Gera as orientações pós-procedimento da Ana”
GENERATE_MESSAGEGerar mensagem
Entidade: Mensagem · Domínio: Document
Obrigatórios: pessoa
“Escreve uma mensagem para a Ana confirmando o retorno”
GENERATE_REPORTGerar relatório
Entidade: Relatório · Domínio: Finance
Obrigatórios: —
“Fecha o relatório financeiro do mês”
SEARCH_MEMORYBuscar na memória
Entidade: Memória · Domínio: Memory / Busca
Obrigatórios: —
“O que eu anotei sobre a viagem de julho?”
SEARCH_PATIENTBuscar paciente
Entidade: Paciente · Domínio: Medical
Obrigatórios: pessoa
“Quando foi a última consulta da Ana?”
SEARCH_CONTACTBuscar contato
Entidade: Contato · Domínio: Memory / Busca
Obrigatórios: pessoa
“Qual é o telefone da escola da Manu?”
SEND_MESSAGEEnviar mensagem
Entidade: Mensagem · Domínio: Document
Obrigatórios: pessoa
“Manda a mensagem de confirmação para a Ana”
Comandos interpretados
O registro do pipeline aparece aqui depois de entrar — cada comando fica salvo com intenção, plano e decisão de política.