PostgreSQL como base operacional — relacional, documentos e séries temporais no mesmo lugar — e um Vector Store dedicado (pgvector) à parte para a IA, isolado porque ali os dados não são anonimizados. Cadeia B2B2C controlada, dados de saúde que nunca se perdem e o caminho aberto para o padrão da saúde brasileira.
Em vez de operar dois bancos (relacional + NoSQL), consolidamos o operacional no Postgres — ele cobre relacional, documentos e séries temporais num sistema só, com transações ACID atravessando identidade, saúde e consentimento. A IA fica num Vector Store dedicado, à parte.
A fonte da verdade de tudo. Maduro, ACID, barato de operar e com extensões que dispensam um segundo banco. Anonimização, cadeia B2B2C e consentimento vivem num lugar só — mais fácil de auditar para a LGPD.
Cadeia de custódia B2B2C, identidade, vínculos e consentimento. Chaves estrangeiras e row-level security.
Faz o papel que o MongoDB faria: a balança manda 12 campos, o anel manda 4, e nada quebra. Indexável.
Para batimento contínuo de alta frequência. Comprime e consulta no tempo sem sair do Postgres.
Instância própria, fora do banco operacional. Embeddings do histórico e refeições para o nutricionista — com dados não anonimizados, então tem acesso e governança próprios.
Sessões e últimos valores de cada dispositivo, para o dashboard abrir instantâneo.
Não há mais "ponte entre bancos": o operacional é todo o mesmo Postgres, e identidade e saúde se ligam por chave estrangeira interna. Só a IA mora fora — num Vector Store dedicado, porque ali os dados não são anonimizados.
Cada linha de saúde (em JSONB ou na hypertable) carrega as mesmas chaves da camada relacional. Não é uma ligação entre bancos — é uma FK dentro do mesmo banco.
Resultado: uma consulta única pode juntar "quem é o paciente + o que ele mediu + se há consentimento" numa transação só — algo que exigiria orquestração entre dois sistemas no modelo anterior.
saude_embeddings ( usuario_id uuid, origem text, -- refeicao… conteudo text, embedding vector(1536) )
FHIR é o padrão da saúde para representar e trocar dados (recursos como Patient, Observation, Device). Não viramos um servidor FHIR agora, mas nomeamos e estruturamos o schema espelhando esses recursos — assim expor uma camada FHIR depois (parceiros, prontuários, RNDS) vira pouco trabalho.
São coisas diferentes — e usamos as duas. Pseudonimização protege a operação do dia a dia (reversível com a chave do cofre). Anonimização é irreversível e serve para dados que saem da plataforma (pesquisa, estatística).
Clique numa tabela para destacar suas conexões. Cada uma traz o recurso FHIR que ela espelha.
O que antes seria o MongoDB agora são tabelas do próprio Postgres. Todas carregam usuario_id e equipamento_id — a FK que liga à camada relacional.
O banco operacional no centro: os dados de saúde entram pela esquerda; o app do Eduardo e o profissional ficam à direita, trocando informação nas duas vias (sempre com consentimento). A IA mora embaixo, num Vector Store à parte — porque ali os dados não são anonimizados.
Do anel no dedo do Eduardo até o número no dashboard — tudo dentro do mesmo Postgres.