Skip to content

Prescripta v0.8.6

Choose a tag to compare

@Soturine Soturine released this 29 Jul 05:58
· 106 commits to main since this release

Prescripta v0.8.6

Resumo

Esta é a consolidação correta da linha v0.8.6. A entrega elimina falsos verdes conhecidos,
centraliza a decisão clínica determinística, introduz dose dimensional e snapshots imutáveis, endurece
autorização/sessão/IA, adiciona Alembic/PostgreSQL aos gates e registra com precisão o que permanece
fora do escopo.

A release histórica v8.6.0 foi numerada incorretamente. Ela permanece preservada e não recebe
retroativamente os hardenings desta entrega. A versão corrigida e consolidada é v0.8.6.

A maturidade não foi inflada: Prescripta continua 0.x, demonstrativo e educacional. Não é
dispositivo médico validado, EHR/HMIS operacional, servidor FHIR, implementação SMART ou serviço CDS
Hooks conforme. Não use em atendimento ou com dados reais.

Principais mudanças

Decisão, cobertura e dose

  • ClinicalDecisionEnvelope é a fonte canônica de status, severidade, achados, ações, fontes, dados
    ausentes e cobertura.
  • CRITICAL e hard block possuem precedência e não podem coexistir com resposta favorável.
  • Falta de regra, contexto ou fonte vigente produz abstention/cobertura insuficiente, nunca “sem risco”.
  • O endpoint de checagem resolve paciente, medicamento, regras e limites no servidor; o cliente não
    injeta conhecimento clínico.
  • Dose usa quantidade/unidade/dimensão explícitas para massa, frequência, taxa, infusão e procedimento.
    Conversões mg/mcg/g são exatas; dimensão incompatível e sexo necessário ausente causam abstention.

Snapshot, auditoria e autorização

  • Cada decisão persiste snapshot imutável com JSON canônico e hash
    sha256-canonical-json-v1; relatório histórico de prescrição lê somente o snapshot.
  • Decisão, eventos e snapshot formam uma transação única com rollback e idempotência persistente.
  • Backend aplica instituição e grant por paciente em rotas por objeto, incluindo relatório, export e
    counseling; testes negativos cobrem tenant escape.
  • Exports de auditoria percorrem páginas até limite explícito e incluem manifesto com total retornado e
    flag de truncamento em PDF, JSON e CSV.
  • Override é evento separado: exige justificativa, autoria clínica e segundo revisor independente;
    crítico/hard block não admite override.

Segurança, IA e busca lexical

  • Browser usa cookie HttpOnly/SameSite; login possui lockout persistente e MFA TOTP opcional.
  • Ambiente não local rejeita segredo demo, SQLite, auto-seed, CORS local/wildcard e ausência de chave de
    criptografia. Health público revela apenas status=ok.
  • URLs de provider externo exigem HTTPS, allowlist e IP público; redirects não são seguidos. Ollama local
    é exceção exclusiva do modo local.
  • Explicação clínica recebe audit_id, autoriza o objeto, lê o snapshot e envia somente allowlist
    minimizada. IA não altera decisão, risco, dose, bloqueio ou recomendação final.
  • Credenciais persistidas são criptografadas e o circuit breaker usa estado compartilhado no banco.
  • A base interna agora usa índice lexical versionado, chunks, IDs/hashes de fonte, deduplicação, validade
    e filtro heurístico de prompt injection. Isso não constitui RAG clinicamente validado.

Dados, banco e qualidade

  • Terminologia confirmada usa código, termo exato ou alias; substring/fuzzy não decide alergia ou
    interação.
  • Data de nascimento é autoritativa e idade é calculada na data clínica; divergência recebida é rejeitada.
  • Pacientes e medicamentos possuem paginação server-side nos fluxos principais.
  • Alembic passa upgrade, downgrade, upgrade e schema check; produção exige schema no head.
  • CI executa PostgreSQL 17, backend Ubuntu/Windows, frontend, Playwright, cobertura de branches com gate
    de 80%, CodeQL, pip/npm audit, gitleaks e SBOM CycloneDX. A suíte local desta release possui 132 testes
    backend e mede 81,28% em app.
  • Conversões de massa ganharam teste baseado em propriedades com Hypothesis.

Documentação e assets

  • README atual é uma entrada estável; histórico fica no changelog, auditorias e releases.
  • Foram adicionados threat model, clinical safety hazard log, runbooks de backup/restauração e resposta
    a incidentes, além de benchmark com fontes primárias consultadas em 29/07/2026.
  • docs/audit foi consolidado em docs/audits/docs/auditing; somente docs/audiences permanece.
  • Evidência visual corrente fica em docs/assets/current; a coleção histórica foi preservada.

Hashes SHA-256 dos assets correntes:

459f5bd6c1f525b744070175dcdc4b2fccc58ec4222d94199973150857764167  docs/assets/current/ai-health.png
35660390e7bfecf3bd2dcabfaab9c4dd8e91795b43dcb469de66b55038bd2380  docs/assets/current/dashboard-readiness.png
68d687c6e974c217290f13eb1c2e7968550af1e00c0ca2ed5ed7c7f8bbb8b2b6  docs/assets/current/prescripta-current-demo.gif
d7b11bef57bbe3686d278c190d5deb2553ec980c7f378bcf807487008bd3fd6c  docs/assets/current/protocols-list.png
01ab0adb00361a8c4169ce991cf667873e70a26dbbdc2aa0ab5e81e4c010e3af  docs/assets/current/reports-detail.png

Commits da consolidação

  • 29408f5 — versão e metadados v0.8.6;
  • 4d5fa41 — estrutura de auditorias/audiências;
  • a4ed84e — decisão canônica, dose dimensional, snapshot e transação;
  • 6d874e8 — autorização por objeto e hardening de aplicação/IA;
  • b927c03 — Alembic e migration baseline;
  • 6221fb6 — cookie de sessão, frontend estrito e lint real;
  • df00123 — CI, scans, proveniência e gates;
  • daa872a — exports completos e manifesto;
  • e49e254 — terminologia, integridade, paginação e remoção de código morto;
  • 8e9072d — override governado e estado de provider compartilhado;
  • 75d3988 — cobertura e property-based testing;
  • 18e9b1d — arquitetura de segurança, limites e operações;
  • 8f2562b — separação efetiva de dependências runtime/dev;
  • b0134ea — gates separados de lint e typecheck;
  • 5f9a718 — correção do pin de setup-node e da profundidade do checkout de qualidade;
  • v0.8.6^{commit} — correção final dos gates e evidência de fechamento/publicação.

Breaking changes e deprecações

  • Checagem CDS rejeita regras/limites clínicos fornecidos como verdade pelo cliente e pode retornar
    abstention quando IDs/contexto não forem resolvidos.
  • Browser não lê mais bearer token do localStorage; integrações web devem permitir cookies e
    credentials. A resposta bearer para clientes de API é transitória.
  • Ambiente não local não inicia com SQLite/defaults demo e não cria schema automaticamente.
  • Deploy existente deve executar Alembic antes de iniciar a aplicação.
  • Idade divergente da data de nascimento é rejeitada; consumidores devem tratar birth_date como fonte.
  • Listagens e exports podem retornar paginação/manifesto adicionais.
  • MedicationModel e listas string de fatos permanecem compatibilidade legada e estão deprecados para
    novos fluxos; não há prazo de remoção nesta release.

Upgrade

  1. Faça backup e teste a restauração em ambiente isolado.
  2. Instale Python 3.12+, Node.js 24+ e dependências pelos lockfiles (requirements-lock.txt e
    package-lock.json). Use requirements-dev.txt apenas em desenvolvimento/CI.
  3. Configure PostgreSQL, segredo forte, PRESCRIPTA_AUTO_SEED=false, CORS explícito e
    PRESCRIPTA_CONFIG_ENCRYPTION_KEY; mantenha chamadas externas de IA desligadas até configurar
    allowlist, credencial e política institucional.
  4. No diretório backend, execute alembic upgrade head e confirme alembic current/alembic check.
  5. Execute os gates descritos em docs/testing/ci-and-release-gates.md e valide login/cookie, grants,
    snapshots e relatórios com dados fictícios.
  6. Não migre dados reais sem DPIA/RIPD, retenção, backup, resposta a incidentes, validação clínica e
    avaliação regulatória próprias.

Limitações conhecidas

  • P0-10 depende de validação clínica, QMS, segurança clínica e enquadramento regulatório externos.
  • Catálogo/rulesets são demo e não cobrem medicamentos, populações ou especialidades de forma suficiente.
  • RiskEngine, protocolos e cliente frontend ainda possuem módulos grandes; fatos clínicos e catálogo
    legado não foram migrados integralmente.
  • Não há OIDC/BFF, revogação central de JWT, DLP independente, WORM, object storage, egress firewall,
    observabilidade produtiva ou secret manager integrado.
  • Branch protection depende de configuração externa do GitHub; esta publicação seguiu a autorização
    excepcional de commits diretos na main.
  • FHIR-like é apenas importação parcial; SMART/CDS Hooks, terminologia oficial e conformidade não existem.
  • Busca lexical não possui avaliação formal de recall, precision, groundedness, poisoning ou drift.
  • O risco npm temporariamente aceito está delimitado em docs/security/accepted-risks.md e expira em
    15/08/2026.

Consulte a matriz de fechamento, o
relatório final, o
modelo de ameaça e o hazard log.

Identidade da publicação

Aviso: conteúdo exclusivamente demonstrativo e educacional. Não substitui avaliação profissional,
bula, protocolo, autoridade sanitária ou decisão institucional.