Prescripta v0.8.6
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.0foi 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.CRITICALe 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 apenasstatus=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% emapp. - 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/auditfoi consolidado emdocs/audits/docs/auditing; somentedocs/audiencespermanece.- 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_datecomo fonte. - Listagens e exports podem retornar paginação/manifesto adicionais.
MedicationModele listas string de fatos permanecem compatibilidade legada e estão deprecados para
novos fluxos; não há prazo de remoção nesta release.
Upgrade
- Faça backup e teste a restauração em ambiente isolado.
- Instale Python 3.12+, Node.js 24+ e dependências pelos lockfiles (
requirements-lock.txte
package-lock.json). Userequirements-dev.txtapenas em desenvolvimento/CI. - 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. - No diretório
backend, executealembic upgrade heade confirmealembic current/alembic check. - Execute os gates descritos em
docs/testing/ci-and-release-gates.mde valide login/cookie, grants,
snapshots e relatórios com dados fictícios. - 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 namain. - 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.mde 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
- versão:
0.8.6; - tag anotada:
v0.8.6; - commit publicado:
v0.8.6^{commit}(a tag é criada somente após CI verde desse SHA); - release: https://github.com/Soturine/Prescripta/releases/tag/v0.8.6.
Aviso: conteúdo exclusivamente demonstrativo e educacional. Não substitui avaliação profissional,
bula, protocolo, autoridade sanitária ou decisão institucional.