Hub analítico · produto
Onde o Lisya está neste mapa
Os dezesseis guias anteriores descrevem o que um sistema de informação laboratorial deveria fazer no processamento analítico. Este mede o Lisya contra eles — lendo o modelo de dados e as rotas, não a apresentação comercial. Datado, com as lacunas nomeadas.
01Como medimos
Critério de leitura: um item só conta como existe se houver dado armazenado no modelo e caminho de uso — tela ou rota. Tela sem persistência conta como protótipo; campo sem tela conta como fundação. Tudo abaixo foi verificado no schema Prisma e nos módulos da API em 22 de setembro de 2026, e fica desatualizado com o próximo commit.
O resultado é desconfortável de um jeito específico: a fundação está mais completa do que a automação que ela deveria alimentar. Vários dados que custam caro para capturar já estão capturados — e não são lidos por ninguém.
02O que existe
| Capacidade | Como está no código | Guia correspondente |
|---|---|---|
| Motor de regras declarativo | `RegraVerificacao`: escopo (global, setor, exame, parâmetro, grupo), ordem, condições em `quando`, e 7 ações | regras |
| Modo observação | campo `shadow` na regra: avalia e registra sem executar a ação | autoverificação |
| As 7 ações do repertório | AUTO_CONFERIR, RETER, REPETIR, DILUIR, REFLEXO, ALARME, COMENTAR — inclusive alertar sem parar | regras |
| Explicação da decisão | `verificacaoTrace` guarda o texto do porquê; `verificacaoRegraId` aponta a regra | autoverificação |
| Ciclo de vida do resultado | digitado / conferido / liberado com autor e hora em cada etapa | resultados |
| Versionamento de retificação | `ResultadoVersao` congela a versão a cada liberação; `versao` incrementa | resultados |
| Trilha somente-acréscimo | `EventoResultado` registra a sequência sem edição | resultados |
| Comunicação de valor crítico | canal, quem recebeu e quando, no próprio resultado | referência e críticos |
| Exceções da dosagem como campo | `fatorDiluicao`, `valorBruto`, `repetido`, `motivoRepeticao`, `interferentes[]`, `flagEquipamento` | flags e diluição |
| Assinatura ICP-Brasil | hash, URL de validação, PDF e dados do certificado no resultado | validação |
| Interfaceamento bidirecional | ingestão de resultado, worklist por equipamento, ack e heartbeat | interfaceamento |
| Matriz equipamento × exame | `EquipamentoExame`, com `bloqueado` por par | distribuição |
| Calibração como porteiro | `Calibracao` por equipamento × exame; vencida ou reprovada torna o exame inapto | qc na corrida |
| Estado do equipamento | `StatusEquipamento` com motivo de bloqueio | distribuição |
A leitura otimista, e honesta, disso: o item mais difícil da lista — um motor de regras declarativo com modo observação, escopo e trilha da decisão — está feito. É a peça que a maioria dos sistemas não tem e que, quando falta, transforma toda regra em chamado para o fornecedor. Aqui ela existe, com a caneta no lugar certo.
03O que falta
| Lacuna | O que está no código hoje | O que ela impede |
|---|---|---|
| O vocabulário da regra tem 4 campos | `campo` aceita apenas `classificacao`, `delta`, `deltaAbs`, `cq` | nenhuma regra sobre flag, interferente, valor absoluto, idade, equipamento ou método |
| O resultado não sabe onde foi medido | `Resultado` não tem equipamento, método, lote de reagente nem calibração | responder “quais laudos saíram com o reagente do lote X” — e imprimir o método no laudo |
| Método é do exame, não da execução | `Exame.metodoId` é um só; o backup usa o mesmo texto | o laudo mente quando o exame roda no equipamento alternativo |
| Não existe corrida analítica | nenhum model de período; `CorridaCIQ` é a medição do controle | a lista de resultados afetados quando um controle reprova |
| O de-para mapeia só o código | `InterfaceamentoMapa` tem `codigo` → `exameParametroId`, e nada mais | conversão de unidade, casas decimais, fator e tradução de flags — o campo perigoso |
| Microbiologia é um sistema paralelo | `AmostraMicro` com paciente e exame em texto, `isolados` em Json | ciclo de vida comum, trilha única, e qualquer regra sobre antibiograma |
| Faixa mensurável não é cadastro | não há limite de detecção nem topo da faixa por exame × método | diluição automática, e reportar a relação com o limite nas pontas |
| Faixa de plausibilidade só como classificação | `ABSURDO` existe como rótulo, sem limites configuráveis por analito | retenção automática do valor fisiologicamente impossível |
| Repetição e diluição na bancada vivem em store local | catálogo de motivos e fila no cliente, não no modelo | indicador de repetição por analito e por equipamento |
| Sem consumo de reagente por teste | estoque existe; o vínculo com a execução não | bloquear roteamento para o que não tem insumo, e alertar antes de acabar |
A lacuna que dói mais: a primeira. O Lisya já guarda `flagEquipamento` e `interferentes[]` em cada parâmetro de resultado — capturar esses dados é o trabalho caro, e ele está feito. Mas a condição da regra não consegue lê-los. O dado está no banco, aparece na tela e é invisível para a automação. É exatamente o sintoma descrito no guia de motor de regras: captura e avaliação construídas em momentos diferentes, sem ninguém voltar para ligar as duas.
04O gargalo não é automação
Somando as dez lacunas, um padrão aparece — e é o mesmo que o guia de exceções antecipou.
Oito das dez lacunas são de modelagem, não de automação.
Não falta um motor — ele existe e é bom. Falta o que dar de comer a ele: o vínculo do resultado com o equipamento e o método, a corrida como período, os limites da faixa por exame × método, o de-para com unidade. Nenhum desses itens é uma tela; todos são campos e relações.
Por que isso é uma boa notícia: modelagem é trabalho conhecido, testável e que não depende de decisão de negócio nova. E porque o motor já existe, cada campo adicionado ao vocabulário se converte imediatamente em regras que o responsável técnico escreve sozinho, sem nova entrega de software. É o tipo de investimento cujo retorno não precisa de outra rodada de desenvolvimento para aparecer.
05A ordem proposta
Ordenada por efeito sobre esforço, e não por vistosidade. As três primeiras são pequenas e desbloqueiam a maior parte do resto.
Ampliar o vocabulário da regra
Aceitar flag, interferente, valor absoluto, atributos do paciente e estado de calibração na condição. O motor já executa; é o enum que limita. Menor esforço, maior efeito imediato.
Ligar resultado a equipamento, método e lote
Quatro chaves estrangeiras no resultado. Desbloqueiam o método no laudo, a investigação por lote de reagente e a regra específica de plataforma.
Completar o de-para com unidade e conversão
É o campo que falha em silêncio. Enquanto não existir, toda integração nova carrega um risco que ninguém consegue auditar.
Cadastrar faixa mensurável e plausibilidade por exame × método
Habilita diluição automática, reporte correto nas pontas e retenção do valor impossível. Três funções de um cadastro.
Criar a corrida analítica como período
Com vínculo do resultado e do controle. É o que transforma o CQ de programa em condição, e o que responde à pergunta retroativa.
Trazer repetição e diluição da bancada para o modelo
Hoje vivem em store local. No modelo, viram indicador por analito e por equipamento — e alimentam a revisão das regras.
Unificar microbiologia no ciclo de vida comum
Estruturar isolado e sensibilidade em vez de Json, e pendurar no mesmo resultado. É o maior trabalho da lista, e o que mais paga em dado utilizável.
Guarde: note que nenhum dos sete itens é uma tela nova. As telas do analítico existem — bancada, verificação, liberação, painel, reflexo, repetições, microbiologia, interfaceamento. O que falta está embaixo delas, e é isso que explica por que a operação parece coberta e a automação não rende o que deveria.
Resumo do guia: o Lisya tem a peça difícil — motor de regras declarativo com modo observação, escopo, trilha da decisão e as sete ações — e tem a captura das exceções da dosagem. A lacuna central é que o vocabulário da condição lê quatro campos, então flags e interferentes já capturados são invisíveis para a regra. Oito das dez lacunas são de modelagem. Para transformar isso em roteiro de conversa com laboratório, o guia seguinte traz as perguntas de descoberta.
Ver as perguntas de descoberta →Continue no hub de processamento analítico