About voa-tiss
voa-tiss is an open-source toolkit for Brazilian TISS healthcare billing, for providers, health plans, and agents handling claims. It combines offline Python validation and correction with an HTTP API and a remote MCP server, and also supports TUSS and ANS data lookup.
Key features
- 01Validate and correct TISS batches
- 02Generate and parse TISS XML
- 03Read payment statements and explain denials
- 04Reconcile billed and paid amounts
- 05Look up TUSS, insurers, and hospital networks
Use cases
- 01Find and fix batch errors before submission
- 02Review denial codes and draft appeals
- 03Reconcile insurer payments against claims
MCP support
The remote MCP server at https://tiss-api.voa.health/mcp provides agents with 24 tools and 3 prompts for TISS operations, lookup, and reconciliation.
Configuration
Remote servers need no local install. Pick your client, then copy the config or install in one click.
https://tiss-api.voa.health/mcpclaude mcp add --transport http health-voa-tiss https://tiss-api.voa.health/mcp{"mcpServers":{"health-voa-tiss":{"type":"http","url":"https://tiss-api.voa.health/mcp"}}}Open in Cursor{"servers":{"health-voa-tiss":{"type":"http","url":"https://tiss-api.voa.health/mcp"}}}Open in VS Code{"mcpServers":{"health-voa-tiss":{"type":"http","url":"https://tiss-api.voa.health/mcp"}}}{"mcpServers":{"health-voa-tiss":{"serverUrl":"https://tiss-api.voa.health/mcp"}}}Run commands in a terminal; paste JSON into the client’s MCP config and restart. Servers that need sign-in will prompt on first connect.
Tools
Details
From the project READMETISS sem dor de cabeça, para pessoas e agentes de IA.
Valide, corrija e gere lotes TISS, entenda glosas e concilie demonstrativos, tudo em código aberto: uma biblioteca Python que roda offline, uma API HTTP e um MCP remoto para o seu agente de IA.
O agente faturista usando só o MCP público: corrige dois erros do lote, envia à operadora simulada, lê as glosas e rascunha um recurso por guia, sem inventar evidência.
Tip
Usa Claude Code, Codex ou Cursor? Conecte o MCP e peça em português, por exemplo "valide este lote e corrija o que der". Veja Conectar agentes.
Início rápido
pip install voa-tiss
from voa_tiss import examples, validate
report = validate(examples.load("lote-com-erros"))
[(finding.code, finding.severity) for finding in report.findings]
Cada achado traz um código estável, a localização e, quando possível, a correção pronta. Requer Python 3.10+.
Prefere testar no navegador? Abra o playground.
Para quem é
| Você é | O voa-tiss ajuda a |
|---|---|
| Prestador (hospital, clínica, laboratório) | pegar o erro antes da operadora e entender por que uma guia foi glosada |
| Profissional de saúde | conferir guias e códigos TUSS sem decorar o manual |
| Operadora | checar lotes na entrada com as suas regras, offline; ver o mapa de rejeição por prestador; oferecer sandbox com as suas regras; validar autorizações TISS; publicar regras com selo Oficial; e, nos módulos com agente, analisar contas e autorizações prévias |
| Paciente | entender em linguagem simples o que uma glosa significa |
| Gestor do SUS ou do governo | consultar dados abertos da ANS sobre operadoras, glosas e rede hospitalar |
Como funciona
Você não precisa escrever XML TISS à mão. O ciclo é sempre o mesmo:
- Valide o lote com
checkouvalidate. - Corrija com
apply_fixes: as correções são determinísticas, em JSON Patch. - Revalide até zerar os erros. Se faltar algum dado,
needsdiz exatamente qual perguntar. - Gere o XML com
build_lotee calcule o hash do epílogo comhash_epilogo.
Depois do envio, parse_demonstrativo lê o retorno da operadora, glosa explica
cada código da Tabela 38 e plan_reconciliation concilia o que foi pago com o
que foi cobrado. Para testar sem operadora real, use a
operadora simulada.
O que vem no pacote
- Biblioteca Python: validação, correção, geração, hash, auditoria, demonstrativos, TUSS, operadoras e rede hospitalar.
- API HTTP: as mesmas operações em
https://tiss-api.voa.health, com OpenAPI. - MCP remoto: 24 ferramentas e 3 prompts para agentes, no registro oficial de MCP.
- Operadora simulada: envie lotes e receba protocolo, demonstrativo e glosas sem tocar em produção.
- Agente faturista: um agente completo para adaptar ao seu fluxo.
- TISS-Bench: 40 tarefas sintéticas para medir agentes com e sem o MCP.
Por que confiar
- Offline e determinístico: validar, corrigir e gerar roda na sua máquina, sem telemetria; a mesma entrada dá sempre a mesma saída.
- XSD fixado por hash: a validação usa o esquema TISS oficial, conferido por hash.
- À prova de prompt injection: texto livre da guia é dado, nunca instrução.
- Seus dados não ficam com a gente: veja a política de payloads e telemetria em API HTTP.
- Medido: no TISS-Bench, com quatro modelos, o acerto médio subiu de 58% sem o MCP para 81% com ele. Gerar um lote do zero ainda fica em 16% nos dois modos.
Conectar agentes
O MCP remoto fica em https://tiss-api.voa.health/mcp. Agentes encontram as
instruções de uso no AGENTS.md e na
skill voa-tiss.
claude mcp add --transport http voa-tiss https://tiss-api.voa.health/mcp
Skill, plugins, Codex e Cursor
Ver detalhes
npx skills add Voa-Health/tiss
claude plugin marketplace add Voa-Health/tiss && claude plugin install voa-tiss@voa-tiss
codex plugin marketplace add Voa-Health/tiss
No Codex, adicione a ~/.codex/config.toml:
[mcp_servers.voa-tiss]
url = "https://tiss-api.voa.health/mcp"
No Cursor, adicione ao mcp.json:
{
"mcpServers": {
"voa-tiss": {
"url": "https://tiss-api.voa.health/mcp"
}
}
}
Tutoriais
| Tutorial | O que você aprende |
|---|---|
| Validar um lote (notebook) | ler achados e corrigir |
| Demonstrativo e conciliação (notebook) | conferir o que a operadora pagou |
| TUSS e SP/SADT (notebook) | buscar códigos e montar a guia |
| Gerar e corrigir um lote (notebook) | sair do JSON para o XML válido |
| Regras por operadora (notebook) | auditar com regras publicadas |
| Operadora simulada (notebook) | testar envios e glosas |
| Autorização SP/SADT (notebook) | solicitar e analisar autorizações |
| Mapa de rejeição (notebook) | agregar achados por prestador |
API HTTP
Servidor local, chaves e telemetria
Ver detalhes
Instale o extra do servidor e inicie a API local:
pip install "voa-tiss[server]"
python -m voa_tiss.server --host 127.0.0.1 --port 8000
Valide XML como JSON ou como corpo XML:
python -c 'import json, pathlib; print(json.dumps({"xml": pathlib.Path("lote.xml").read_text()}))' \
| curl https://tiss-api.voa.health/v1/validate \
-H 'Content-Type: application/json' \
--data-binary @-
curl https://tiss-api.voa.health/v1/validate \
-H 'Content-Type: application/xml' \
--data-binary @lote.xml
Consulte o OpenAPI e o catálogo de operações.
Sem chave, só as operações do sandbox respondem. Para as demais, entre com a conta Voa em tiss-api.voa.health/chaves e envie a chave recebida. Não há limite diário.
curl https://tiss-api.voa.health/v1/validate \
-H "Authorization: Bearer $VOA_TISS_API_KEY" \
-H 'Content-Type: application/xml' \
--data-binary @lote.xml
A chave vale 24 horas. Renove com o refresh_token recebido no login; chave
inválida ou expirada retorna 401:
curl https://tiss-api.voa.health/v1/keys/refresh \
-H 'Content-Type: application/json' \
-d '{"refresh_token": "..."}'
O serviço não armazena nem registra payloads e não os usa para treinar modelos.
Quando ativada por POSTHOG_KEY, a telemetria agregada contém operação,
códigos de achados, registro ANS, versão TISS e data; na emissão de chave,
inclui nível e identificador da organização, sem e-mail. Envie
X-Voa-Telemetry: off para desativá-la. A biblioteca local permanece offline e
nunca envia telemetria. VOA_TISS_API_KEY é a variável que clientes HTTP locais
podem ler para enviar uma chave de acesso.
Referência
Símbolos da biblioteca
Ver detalhes
Para renderizar a guia SP/SADT em PDF, instale pip install "voa-tiss[pdf]".
| Símbolo | Uso |
|---|---|
validate | Valida um lote TISS e retorna um relatório. |
check | Verifica um lote JSON e propõe correções. |
apply_fixes | Aplica correções determinísticas ao lote JSON. |
build_lote | Gera o XML TISS a partir de um lote validado. |
parse_lote | Converte XML TISS em um lote JSON. |
audit | Audita o lote com o contexto da operadora. |
validate_package | Valida um pacote de regras de operadora e lista os erros. |
hash_epilogo | Calcula o hash do epílogo. |
glosa | Consulta um código da Tabela 38. |
dominio.lookup / dominio.search | Consulta tabelas de domínio TISS. |
operadoras.lookup / operadoras.search | Consulta operadoras ativas na ANS. |
operadoras.perfil | Junta o cadastro e os indicadores de glosa da ANS. |
parse_demonstrativo | Lê um demonstrativo e retorna decisões por guia. |
plan_reconciliation | Propõe conciliação entre decisões e guias. |
sadt_missing | Lista campos obrigatórios ausentes da guia SP/SADT. |
sadt_catalog | Retorna uma cópia do catálogo SP/SADT. |
render_sadt (extra pdf) | Gera um PDF da guia SP/SADT. |
tuss.lookup | Consulta um código TUSS. |
tuss.search | Busca registros TUSS por texto. |
rede.* | Consulta vínculos da rede hospitalar da ANS. |
json_schema | Retorna o esquema JSON de um tipo público. |
examples | Disponibiliza exemplos sintéticos do pacote. |
voa_tiss.rede baixa e verifica os dados na primeira consulta. Defina
VOA_TISS_REDE com o caminho de um SQLite local para usar uma cópia própria.
Campos de um achado
Ver detalhes
| Campo | Significado |
|---|---|
code | Código estável em docs/codigos.md |
severity | error ou warning |
guia | Identificador da guia, quando houver |
xpath | Localização no XML, quando houver |
message | Descrição concisa do achado |
pointer | JSON Pointer no lote JSON, quando houver |
fix | Correção em JSON Patch, quando determinística |
needs | Campos necessários para completar a guia |
glosa | Código provável da Tabela 38, quando houver |
rule | Regra de operadora que gerou o achado, quando houver |
Mais
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.