Guia interativo e critico dos 3 projetos que formam a plataforma de atendimento médico via WhatsApp.
Backend Python que processa mensagens WhatsApp via agentes IA.
Frontend Next.js para a equipe médica gerenciar pacientes, consultas e NPS.
Documentacao de negocio, vendas, precificacao e operações (não e código).
prompt_versions, podendo usar LLM diferente.Principal ponto de integração: mesmo schema Supabase.
Mensagens fluem apenas atraves do Chatwoot — não ha API direta.
3 tabelas (organizations, accounts, user_accounts) com RLS.
Vault do Supabase armazena API keys encriptadas por organizacao.
Prompts .md em repo separado, sincronizados ao banco via GitHub Actions.
CRM e Chatwoot tem formatos diferentes — exige conversão constante.
Gravar em duas tabelas paralelas cria divergencia sutil ao longo do tempo. O custo de manter isso "so para compatibilidade" tende ao infinito.
Acoplamento forte por schema. Qualquer mudança em uma tabela pode quebrar o outro sistema sem aviso. Falta contrato explicito.
O handle_message() concentra toda a logica. Dificil testar, debugar e evoluir. Cada passo deveria ser um step isolado em um workflow engine ou state machine explicita.
Tratar sintomas em vez de causas. Se o LLM vaza tool calls, a solucao e estruturar saida (Pydantic output model) em vez de sanitizar texto depois.
Prompts são código. Versionar em outro repo com sync por GitHub Actions adiciona complexidade sem ganho claro sobre versionar dentro do byia-api.
tenant_configsGod table. Mistura feature flags, credenciais, prompts, config de TTS, NPS, reminders. Deveria ser dividida (feature_flags, integrations, messaging_config).
CRM tem dois padrões ativos: client-side (supabaseByiaminiapp) e server actions. Migração parcial cria inconsistencia — ou termina ou remove.
contatos, consultas, pacientes ao lado de account_id, organization_id. Padronizar (ingles para código, portugues so para UI).
eslint: ignoreDuringBuilds: trueDesabilitar lint no build esconde problemas. O próprio CLAUDE.md lista como "TODO avaliar" — já passou da hora.
CRM chama BYIA_API_URL para invalidar cache. Deveria haver um contrato OpenAPI/tRPC entre os dois para evitar quebras silenciosas.
Tools retornam strings magicas para controle de fluxo. Deveriam retornar objetos tipados com status discriminado (union types).
Apesar das criticas — várias decisões são solidas. Ver o que preservar.