Expand description
§tiss-hash
Hash MD5 do epílogo <ans:hash> em XMLs do Padrão TISS/ANS (Padrão TISS
— Troca de Informações em Saúde Suplementar, regulamentado pela
Agência Nacional de Saúde Suplementar).
Spec canônica: docs/SPEC.md no repositório principal.
Implementação de referência: conformance/reference.py (Python + lxml).
Esta crate bate byte-a-byte com a referência nos vetores em
conformance/vectors.json (positivos comparam expected_md5; negativos
exigem Err, ex.: múltiplos <ans:hash> e BOM UTF-16/UTF-32).
§Algoritmo (resumo)
- Parse do XML.
- Zerar o conteúdo de
<ans:hash>(substituir por string vazia). - Concatenar o
.textde cada nó-folha (elemento ou comentário sem filhos elemento/comentário/PI), em ordem de documento. - MD5 dos bytes UTF-8 da string concatenada (não ISO-8859-1, apesar do manual TISS).
- Hex lowercase, 32 caracteres.
Ver conformance/AMBIGUITY_NOTES.md para o catálogo das 15 decisões
canônicas (CDATA, entidades, atributos, comentários, etc.).
§Quickstart
use tiss_hash::{hash_tiss, hash_tiss_file};
let raw = std::fs::read("envio.xml").unwrap();
let digest = hash_tiss(&raw).unwrap();
println!("{digest}"); // 32 chars hex lowercase
// ou direto do arquivo
let digest = hash_tiss_file("envio.xml").unwrap();§Decisão de parser: roxmltree
Avaliadas três opções:
- roxmltree (escolhida) — parser DOM puro, API próxima do
ElementTree/lxmldo Python. Suporta iteraçãodescendants()que inclui nósComment(semântica idêntica àlxml.iter()da referência). Zero alloc além da árvore. Limitação: aceita só&strUTF-8, exige pré-decodificação ISO-8859-1 manual (feita aqui — mapping 1:1 byte → codepoint). - quick-xml — SAX/streaming, mais rápido em throughput, mas exige reconstruir manualmente o conceito de “folha” e tracking de pilha. Descartado por não ser necessário pra performance esperada (XMLs TISS geralmente < 5 MB).
- xmltree — DOM básico, menos manutenção, sem
descendants()ergonômico. Descartado.
Enums§
- Tiss
Hash Error - Erros possíveis no cálculo do hash TISS.
Constants§
- TISS_
NAMESPACE - Namespace XML do Padrão TISS/ANS. Usado para localizar
<ans:hash>.
Functions§
- hash_
tiss - Calcula o hash MD5 canônico do epílogo TISS/ANS a partir dos bytes do XML.
- hash_
tiss_ file - Atalho: lê o arquivo do disco e calcula
hash_tiss.