
Qualquer modelo de pose registra 15 agachamentos bons em um joelho que cede. Eu construí a IA que pega a repetição 9.
Construí a primeira versão desta demo para provar que um modelo de pose conseguia contar agachamentos, e em um dia eu tinha provado a coisa errada. Alimentei o sistema com uma paciente sintética pós-LCA que chamei de Maria, 62 anos, oito semanas após a reconstrução do joelho, quinze agachamentos prescritos com peso corporal. A biblioteca gratuita de pose fez exatamente o que bibliotecas gratuitas de pose fazem. Registrou quinze repetições, contou todas e passou adiante. Quinze em quinze. Uma sessão limpa.
O problema foi a repetição 9. Na repetição 9, o joelho de Maria cede para dentro e ela desacelera para compensar, exatamente o movimento que um fisioterapeuta observa após uma reconstrução do LCA, porque é assim que as pessoas rompem de novo o enxerto. O modelo de pose viu um agachamento. Não viu um risco de nova lesão, porque ver isso não é para o que um modelo de pose serve. A repetição que ele deveria ter sinalizado foi a repetição que ele contou.
Foi o momento em que o produto de verdade ficou claro para mim. Eu vinha tratando a estimativa de pose como a parte difícil. Ela não é mais a parte difícil. É gratuita.
A estimativa de pose é gratuita, então parei de tentar competir com ela
Passei a primeira semana tentando construir um rastreador de keypoints melhor, e foi a semana mais desperdiçada do projeto. BlazePose e MoveNet já rodam no celular, a 30 quadros por segundo, entregando um esqueleto de 33 keypoints de graça. Toda plataforma de fisioterapia e app de bem-estar corporativo já tem isso ou pode encaixar amanhã. Competir ali é competir para dar de graça algo que já está sendo dado de graça.
O que ninguém entrega a você é a camada depois dos keypoints. Pegar um fluxo bruto de pose e transformá-lo em algo sobre o qual um clínico pode agir e um pagador vai reembolsar. Essa é a camada que decidi que a Kinetiq construiria, de ponta a ponta, e a tese à qual eu voltava sempre é esta.
A estimativa de pose é gratuita. O valor está no cérebro acima dela, e na prova faturável.
Então joguei fora o rastreador e construí o motor de interpretação em vez disso. Ele recebe o fluxo de keypoints (sintético para três das minhas pacientes de teste e, para uma quarta, extraído offline de um clipe real de agachamento capturado, para eu poder provar que o pipeline roda em filmagem real), suaviza com um filtro 1-Euro, filtra por confiança, segmenta repetições por auto-similaridade temporal e calcula as características sobre as quais um clínico de fato raciocina: ângulo articular e amplitude de movimento, um índice de valgo de joelho, uma razão de tempo descida-subida, suavidade do movimento como Log Dimensionless Jerk, e um índice de simetria esquerda-direita. NumPy simples, com testes unitários. Nenhum modelo no caminho de pontuação. Você pode montar o sistema inteiro em veriprajna.com/pt-BR/demos/verificacao-de-exercicio-com-biomecanica-de-ia-e-prova-rtm e vê-lo avaliar uma sessão.
Quando passei Maria de novo por esse motor, a repetição 9 voltou do jeito que deveria ter voltado na primeira vez.

O motor não diz só "repetição ruim." Ele escreve a cláusula que verificou: valgo 0,054 igual ou acima de 0,03, tempo 1,4 acima de 1,25. Um clínico pode escrutinar isso. Você não pode escrutinar uma caixa-preta, e depois de uma cirurgia de LCA você quer isso de verdade.
A repetição que eu tive tentação de forjar
Lembro exatamente onde fiquei ganancioso, e foi na repetição 12. Na repetição 12 da sessão de Maria, o keypoint do quadril cai abaixo do limiar de visibilidade. A confiança do rastreador naquela articulação fica baixa demais para confiar. Por alguns quadros o motor simplesmente não sabe onde está o quadril dela.
O movimento tentador, o que faz seu benchmark parecer melhor, é interpolar. Chutar a posição do quadril a partir dos quadros ao redor, calcular um ângulo mesmo assim, pontuar a repetição, manter o número limpo. Eu escrevi essa interpolação. Funcionou. E então li a literatura de acurácia monocular e apaguei isso.
O erro absoluto médio do ângulo de joelho com câmera única fica entre 9,3 e 21,9 graus (Nature Scientific Reports, 2025). Esse é o teto honesto desse tipo de medição. Se estou fabricando uma posição de quadril em um quadro de baixa confiança e depois reportando um ângulo articular a partir dela, não estou medindo um joelho, estou gerando um número de aparência plausível e chamando-o de clínico. Para uma empresa chamada Veriprajna, que significa sabedoria verdadeira, não foi uma decisão difícil.

Então o motor se abstém. Diz, na tela, "repetição não pontuada, quadril não visível." Acinzenta o esqueleto. Não finge.
Nunca chutamos ângulos articulares a partir de keypoints de baixa confiança.
Coloquei essa frase na tela porque queria que a disciplina ficasse visível, não enterrada em um arquivo de configuração. Nas repetições oclusas do meu conjunto rotulado, três de três se abstiveram e zero ângulos foram fabricados, e isso não é uma afirmação que eu faço, é um invariante com teste unitário. Uma repetição oclusa que fosse pontuada mesmo assim seria, por definição, um ângulo fabricado. O teste pegaria. Recusar-se a responder é um recurso pelo qual tive que lutar contra os próprios instintos para manter.
Por que o mesmo agachamento passa para um paciente e falha para o próximo?
Quase enviei um único limiar global, e uma fisioterapeuta a quem mostrei um build inicial me tirou essa ideia em uns trinta segundos. O ponto dela era simples. Um agachamento de 80 graus de uma mulher oito semanas pós-LCA é bom progresso. O mesmo agachamento de 80 graus de um cliente saudável de bem-estar de 30 anos é uma repetição preguiçosa. Se o seu motor pontua os dois iguais, ele não entende reabilitação, entende geometria.
Então o motor de regras ficou adaptativo à população. Os limiares se ancoram no perfil do paciente: faixa etária, condição, semana de recuperação. Maria, pós-LCA semana 8, recebe uma meta de flexão de 75 graus. Jordan, um atleta de bem-estar corporativo de 30 anos com joelhos saudáveis, recebe 95. Construí um controle na demo para tornar o ponto inegável: mude o dropdown de perfil, mantenha exatamente o mesmo movimento e veja o veredito mudar.

Na primeira vez que mudei aquele dropdown na frente de alguém e a coluna inteira de vereditos mudou sob um movimento que não mudou, eu vi a pessoa entender. O mesmo movimento recebe um veredito diferente conforme o perfil, e isso é julgamento clínico, não um bug. Esta também é a parte da tese que não envelhece. Quando a estimativa de pose ficar perfeita, e vai ficar, o sensor ainda não consegue dizer que 80 graus significam uma coisa para um joelho em cicatrização e outra para um joelho saudável. Esse entendimento vive na camada acima.
Agentes aconselham, o código decide
Deixei um agente de IA me constranger uma vez, e é por isso que a arquitetura tem a cara que tem. Todo mundo a quem eu apresentava queria a capacidade da moda: um agente que lê a sessão e escreve a nota clínica, um agente que observa a tendência e escala. Tudo bem. Montei um Clinical Scribe e um Longitudinal Monitor sobre outra paciente, Eleanor, 70 anos, pós-prótese de joelho, cuja amplitude de movimento está declinando em silêncio ao longo do histórico de sessões.
O primeiro rascunho que o escriba escreveu era fluente e confiante e continha uma figura de amplitude de movimento que não estava na evidência. Ele tinha arredondado, ou suavizado, ou simplesmente inventado um número que soava bem. Se eu tivesse confiado, teria enviado uma nota clínica com uma medição fabricada. Esse é o modo de falha inteiro de colocar um modelo de linguagem em um loop médico, e eu acabara de ver acontecer na minha própria tela.
A correção foi tornar os agentes estruturalmente incapazes disso. Toda figura que um agente introduz é checada contra a evidência determinística. Qualquer número que não esteja na saída do motor é rejeitado, e o template determinístico é mostrado no lugar. Ambos os agentes se abstêm por completo quando não há chave de API. Eles interpretam e comunicam. Eles não decidem.

Agentes aconselham, o código decide.
Essa frase é a decisão de design estruturante da demo inteira. O núcleo de confiança, cada veredito por repetição e a determinação de faturamento, é código simples com testes unitários, sem modelo de linguagem em lugar nenhum perto. Os agentes ficam por cima, delimitados e grounding-checked, fazendo a única coisa em que são genuinamente bons: transformar números verificados em prosa pronta para o clínico. No momento em que um agente ganha voto no veredito, você perdeu a auditabilidade que era o ponto inteiro.
O que um pagador de fato reembolsa é um recibo, não uma contagem de repetições
A razão comercial pela qual construí qualquer disso é algo que aprendi lendo as regras de faturamento do CMS, e não era assim que eu esperava passar um mês. Clínicos podem faturar Remote Therapeutic Monitoring sob CPT 98975-98981, mais os códigos de 2026 98979 e 98985, e o limiar de qualificação de 2026 caiu para tão pouco quanto 2 dias e 10 minutos de dados (pesquisa Veriprajna WP29, 2026). Mas o CMS não reembolsa coordenadas brutas. Exige dados coletados por dispositivo vinculados a uma decisão de tratamento. Um monte de keypoints não é faturável. Uma determinação documentada e auditável é.
Essa lacuna não é pequena, porque o problema subjacente não é pequeno. A adesão a exercícios domiciliares de fisioterapia fica em torno de 35 por cento, e 65 por cento dos pacientes abandonam o programa no primeiro mês (pesquisa Veriprajna WP29, 2026). O autorrelato superestima a conformidade, então o clínico muitas vezes fatura e trata com dados em que não pode confiar. Do lado do empregador, condições musculoesqueléticas custam cerca de 3.591 dólares por funcionário por ano, estima-se que 36 por cento das cirurgias MSK sejam consideradas desnecessárias (90 bilhões de dólares), e mais da metade dos funcionários resiste a compartilhar dados de saúde por privacidade (pesquisa Veriprajna WP29, 2026). Dados de exercício verificados, seguros para a privacidade e faturáveis são o que todo mundo nessa cadeia está perdendo.
Então a última coisa que o motor faz por sessão é decidir: faturável, precisa de revisão do clínico, ou dados insuficientes do dispositivo, e exporta um relatório de sessão em formato FHIR. Observações por repetição, a cláusula de limiar verificada para cada uma, o consolidado da sessão, a determinação de RTM e os campos de documentação que o CMS pede. Eu digo em formato FHIR, nunca validado em FHIR, porque é JSON estruturado que espelha os formatos de campo Observation e DocumentReference, não um payload postado em um EHR ao vivo. Eu emito. Não finjo fazer POST.
A sessão de Maria, com o sinalizador de valgo na repetição 9, não fatura automaticamente. Ela vai primeiro para um clínico, porque um sinal de nova lesão deve ser visto por um humano antes de virar cobrança. Essa é a nuance honesta em que eu insistia: faturável não significa tudo-certo, significa documentado o bastante para se defender.

Os números naquele painel são os que me importam, e quero ser preciso sobre o escopo deles. A verdade de referência aqui é o veredito implicado pelos parâmetros físicos plantados versus os limiares do perfil, calculado independentemente do motor, e então as repetições são renderizadas em keypoints com ruído de medição adicionado depois que os rótulos estão fixos, para o motor ter que recuperar o veredito através do ruído. Nesse conjunto a concordância é 100 por cento em 25 casos claros e 100 por cento em 10 casos limítrofes situados dentro de cerca de um desvio-padrão de um limiar. Isso é um resultado de discriminação em um conjunto sintético rotulado, não uma garantia de mundo aberto, e os casos limítrofes são os que virariam sob um limiar ingênuo, que é exatamente por que eu os reporto em separado. Essas são medidas duráveis: acurácia da tarefa, vazão de automação e honestidade. Elas não envelhecem quando o modelo de pose melhora, porque nenhuma delas é uma taxa de erro do modelo de pose.
A pergunta com que eu fico
Entrei nisso pensando que estava construindo um produto de visão computacional, e estou saindo convencido de que construí um produto de responsabilização que por acaso começa com uma câmera. O trabalho interessante nunca foi obter os keypoints. Foi decidir o que o sistema tem permissão de afirmar, quando deve se abster, de quem são os limiares que valem, e o que um clínico pode colocar a própria licença em jogo. Se você quiser ver o motor avaliar um joelho que cede, recusar uma repetição oclusa e exportar o recibo, ele roda sem chave em veriprajna.com/pt-BR/demos/verificacao-de-exercicio-com-biomecanica-de-ia-e-prova-rtm.
E se preferir assistir a isso a me ouvir descrever, aqui está o sistema inteiro rodando de ponta a ponta.
A pergunta que continuo revirando, e a que eu genuinamente gostaria que outros construtores discutissem comigo, é esta. À medida que os sensores assintotam para o perfeito, a tentação será deixar o modelo decidir mais, porque ele raramente estará errado. Mas raramente-errado é exatamente a condição sob a qual um número fabricado causa o maior dano, porque você parou de checar. Então onde, nos seus próprios sistemas, está a linha que você se recusa a deixar o modelo cruzar, e você consegue apontar o código que a impõe?


