voa-tiss

health.voaPublished by voa.healthOfficial publisherv0.3.0Updated Oct 29, 2026

Ferramentas para validar documentos TISS e consultar TUSS, operadoras e dados da ANS.

VerifiedStreamable HTTPWeb executableFinanceDeveloper ToolsData & Analytics

Overview

AI-generated overview

Remote MCP server for Brazilian TISS healthcare billing: validate, fix and build TISS batches, look up TUSS codes, operators and ANS data.

What you can do
  • Validate, audit and fix TISS batches in JSON, then build TISS 4.03.00 XML and compute the epilogue hash
  • Look up TUSS codes by exact code or text, TISS domain tables, and ANS Table 38 gloss explanations
  • Query ANS operator records, operator network links by CNPJ or CNES, and D-TISS reference unit values
  • Read demonstrativos, plan reconciliation between decisions and guides, and aggregate rejection maps by provider
  • Build, parse and check SP/SADT authorization requests and responses
  • Send batches to a simulated operator sandbox and generate synthetic demonstrativos and authorizations
When to use it
Useful for hospitals, clinics, labs, health professionals and operators working with Brazilian health insurance billing who want an assistant to check TISS batches before submission, explain glosses, reconcile payments or look up TUSS and ANS data.
Requirements
Remote streamable HTTP endpoint; no authentication is declared for the MCP connection. The README notes that the HTTP API requires an sk_voa_ organization key sent as an Authorization Bearer header for non-sandbox operations, and that sandbox operations work without a key. Network access is required.
Before you install
Batches and guides may contain patient and billing data; the README says payloads are not stored or logged, but review the payload and telemetry policy before sending real data. Aggregated rejection-map collection is opt-in and pseudonymizes CPF with an HMAC secret while CNPJ stays in clear. Sandbox tools are for simulated data only. Fix and build tools change batch content, so review diffs before writing.

Installation

In SourceWeft

  1. Open voa-tiss in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/health.voa%2Ftiss/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "voa-tiss": {
      "type": "http",
      "url": "https://tiss-api.voa.health/mcp"
    }
  }
}

README

TISS 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.

[Terminal: tiss validate aprova o lote e confere o hash, o código do procedimento sai do lote para tiss tuss e o código da glosa sai do demonstrativo para tiss glosa]
A CLI tiss valida o lote, consulta o procedimento cobrado e explica a glosa que voltou no demonstrativo, tudo offline. Para ver um agente fechando o ciclo, veja o agente faturista.

[!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

sh
pip install tiss
python
from 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.

CLI

Instale a CLI com pip install tiss ou execute sem instalar com uvx tiss validate lote.xml.

ComandoUso
tiss validate <paths...>Valida arquivos XML/JSON ou pastas. Use --operadora REGISTRO para aplicar regras.
tiss fix <arquivo>Mostra um diff; use --write ou -o CAMINHO para gravar.
tiss hash <arquivo>Calcula o hash; --check compara com o epílogo.
tiss glosa <código>Consulta a Tabela 38.
tiss tuss <código|termo>Busca códigos e descrições TUSS.
tiss operadora <registro>Consulta o perfil da operadora.
tiss mapa <pasta>Gera o mapa agregado de rejeição.
tiss mcpInicia o MCP local em stdio; requer tiss[mcp].
tiss serveInicia a API HTTP local; requer tiss[server].

Os códigos de saída são 0 para sucesso, 1 para achados ou itens não encontrados e 2 para uso inválido ou entrada ilegível. Para integração com GitHub Actions, use tiss validate --format github lote.xml.

Para quem é

Você éO 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údeconferir guias e códigos TUSS sem decorar o manual
Operadorachecar 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
Pacienteentender em linguagem simples o que uma glosa significa
Gestor do SUS ou do governoconsultar 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:

  1. Valide o lote com check ou validate.
  2. Corrija com apply_fixes: as correções são determinísticas, em JSON Patch.
  3. Revalide até zerar os erros. Se faltar algum dado, needs diz exatamente qual perguntar.
  4. Gere o XML com build_lote e calcule o hash do epílogo com hash_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

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 local roda offline e mantém as guias na máquina:

sh
claude mcp add tiss -- uvx --from "tiss[mcp]" tiss mcp

Para usar o serviço remoto:

sh
claude mcp add --transport http tiss https://tiss-api.voa.health/mcp

Agentes encontram instruções em AGENTS.md e na skill tiss.

Skill, plugins, Codex e Cursor

Ver detalhes
sh
npx skills add Voa-Health/tissclaude plugin marketplace add Voa-Health/tiss && claude plugin install tiss@tisscodex plugin marketplace add Voa-Health/tiss

No Codex, adicione a ~/.codex/config.toml para o MCP local:

toml
[mcp_servers.tiss]command = "uvx"args = ["--from", "tiss[mcp]", "tiss", "mcp"]

Para usar o serviço remoto:

toml
[mcp_servers.tiss]url = "https://tiss-api.voa.health/mcp"

No Cursor, adicione ao mcp.json para o MCP local:

json
{  "mcpServers": {    "tiss": {      "command": "uvx",      "args": ["--from", "tiss[mcp]", "tiss", "mcp"]    }  }}

Para usar o serviço remoto:

json
{  "mcpServers": {    "tiss": {      "url": "https://tiss-api.voa.health/mcp"    }  }}

Privacidade

CLI, MCP local, Action e hook rodam na sua máquina ou runner, sem chave, registro de uso ou telemetria. As chamadas de rede do pacote são feitas apenas por ferramentas rede/D-TISS, que baixam dados públicos, e sandbox_*, que usam a operadora simulada.

CI e pre-commit

Use a Action para validar lotes no GitHub Actions:

yaml
- uses: Voa-Health/tiss@v0  with:    paths: lotes/

O input opcional operadora aplica as regras locais dessa operadora. Para instalar o hook, adicione ao .pre-commit-config.yaml:

yaml
repos:  - repo: https://github.com/Voa-Health/tiss    rev: v0.5.0    hooks:      - id: tiss-validate

Sem assets opcionais

A Action e o hook instalam apenas tiss (com lxml) e validam com os XSD 4.02.00 e 4.03.00 incluídos no pacote. Não instalam pdf nem baixam dados de rede/D-TISS; fora o download do pacote, nada vai à rede. operadora aplica apenas regras incluídas no pacote. O hook seleciona arquivos .xml; limite-o com files: se o repositório tiver outros XML.

Tutoriais

TutorialO 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:

sh
pip install "tiss[server]"tiss serve --host 127.0.0.1 --port 8000

Valide XML como JSON ou como corpo XML:

sh
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, crie a chave sk_voa_ da organização, que vale para os produtos da Voa, no painel da organização e envie-a em Authorization: Bearer. Não há limite diário.

sh
curl https://tiss-api.voa.health/v1/validate \  -H "Authorization: Bearer $TISS_API_KEY" \  -H 'Content-Type: application/xml' \  --data-binary @lote.xml

Chave inválida ou revogada retorna 401, e a revogação vale em até 60 segundos. Chave sem o escopo da operação (tiss:validate, tiss:build, tiss:sandbox, tiss:accounts, tiss:authorization ou tiss:rules) retorna 403. Cada chamada com chave entra no uso da organização, por operação e por chave. Auto-hospedado, sem TISS_BACKEND_URL e TISS_SERVICE_SECRET, o servidor não exige chave.

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, sem e-mail. Envie X-Voa-Telemetry: off para desativá-la. A biblioteca local permanece offline e nunca envia telemetria. TISS_API_KEY é a variável que clientes HTTP locais podem ler para enviar uma chave de acesso.

O mapa de rejeição hospedado é uma coleta separada, opt-in e desligada por padrão. Quando habilitado no /org, envia somente agregados por prestador, código, regra e mês. O payload do mapa usa a versão "2" e chaves em inglês; aceite apenas version: "2". Essa quebra evita compatibilidade ambígua entre os contratos antigos e novos. O payload contém version, lotes, guias, ignored, providers e rows; as linhas usam provider, month, code, glosa, rule_id, guias e affected_amount. Os resumos usam guias_with_finding e total_amount. O CPF é pseudonimizado com HMAC e segredo próprio da organização antes de sair do cliente; o CNPJ permanece em claro, e o código do prestador na operadora tem preferência. A retenção é de 24 meses, e a organização pode desligar a coleta e apagar tudo no /org. A telemetria anônima permanece independente e não muda com esse aceite.

Na CLI, mapa --enviar usa TISS_KEY e envia ao servidor público. TISS_MAPA_URL substitui a URL de envio (padrão: https://tiss-api.voa.health/v1/rejection-map/submit). Sem TISS_SEGREDO_PSEUDONIMO, a CLI busca o segredo antes de agregar, via GET /v1/rejection-map/config, no mesmo servidor e com Bearer sk_voa_. O envio usa POST /v1/rejection-map/submit, com o mapa agregado como corpo JSON.

Referência

Símbolos da biblioteca

Ver detalhes

Para renderizar a guia SP/SADT em PDF, instale pip install "tiss[pdf]".

SímboloUso
validateValida um lote TISS e retorna um relatório.
checkVerifica um lote JSON e propõe correções.
apply_fixesAplica correções determinísticas ao lote JSON.
build_loteGera o XML TISS a partir de um lote validado.
parse_loteConverte XML TISS em um lote JSON.
auditAudita o lote com o contexto da operadora.
validate_packageValida um pacote de regras de operadora e lista os erros.
hash_epilogoCalcula o hash do epílogo.
glosaConsulta um código da Tabela 38.
dominio.lookup / dominio.searchConsulta tabelas de domínio TISS.
operadoras.lookup / operadoras.searchConsulta operadoras ativas na ANS.
operadoras.perfilJunta o cadastro e os indicadores de glosa da ANS.
parse_demonstrativoLê um demonstrativo e retorna decisões por guia.
plan_reconciliationPropõe conciliação entre decisões e guias.
sadt_missingLista campos obrigatórios ausentes da guia SP/SADT.
sadt_catalogRetorna uma cópia do catálogo SP/SADT.
render_sadt (extra pdf)Gera um PDF da guia SP/SADT.
tuss.lookupConsulta um código TUSS.
tuss.searchBusca registros TUSS por texto.
rede.*Consulta vínculos da rede hospitalar da ANS.
tiss_referenciaConsulta valores unitários de referência D-TISS da ANS por TUSS.
json_schemaRetorna o esquema JSON de um tipo público.
examplesDisponibiliza exemplos sintéticos do pacote.

tiss.rede baixa e verifica os dados na primeira consulta. Defina TISS_REDE com o caminho de um SQLite local para usar uma cópia própria. tiss.referencia consulta valores unitários de referência da ANS por TUSS, UF e semestre; o valor pago é somente o pago diretamente ao fornecedor, não o total pago pela operadora. Defina TISS_REFERENCIA para usar um SQLite local.

Campos de um achado

Ver detalhes
CampoSignificado
codeCódigo estável em docs/codigos.md
severityerror ou warning
guiaIdentificador da guia, quando houver
xpathLocalização no XML, quando houver
messageDescrição concisa do achado
pointerJSON Pointer no lote JSON, quando houver
fixCorreção em JSON Patch, quando determinística
needsCampos necessários para completar a guia
glosaCódigo provável da Tabela 38, quando houver
ruleRegra de operadora que gerou o achado, quando houver

Mais

Source: README.md at commit 76db67c

Tools

26

tiss_validate

Valida XML TISS ou lote em JSON. Quando usar: antes de gerar ou enviar um lote. Quando não usar: para corrigir achados sem aplicar o ciclo validar → tiss_apply_fixes → validar de novo.

Parametersxmldatalotecontextooperadora

tiss_parse_demonstrativo

Lê decisões de um demonstrativo. Quando usar: para identificar pagamentos e glosas. Quando não usar: para validar lotes.

Parametersxmlrequired

tiss_plan_reconciliation

Propõe vínculos entre decisões e guias. Quando usar: após ler um demonstrativo. Quando não usar: para alterar guias.

Parametersguiasrequiredid_keydecisoesrequiredstatus_keyoperadora_keyprestador_key

tuss_lookup

Busca um código TUSS exato. Quando usar: para consultar código ou vigência. Quando não usar: para buscar por descrição.

Parameterscoderequireddatatabelainclude_expired

tiss_sadt_missing

Identifica campos obrigatórios SP/SADT ausentes. Quando usar: antes de renderizar uma guia. Quando não usar: para validar um lote.

Parametersvaluesrequired

tiss_sadt_catalog

Retorna o catálogo SP/SADT. Quando usar: para conhecer campos e domínios. Quando não usar: para preencher uma guia sem dados.

Takes no parameters.

tiss_rede

Consulta as operadoras vinculadas a um CNPJ ou CNES. Quando usar: para identificar vínculos de um estabelecimento. Quando não usar: para buscar o cadastro geral; use operadora_lookup.

Parameterscnescnpjlimite

operadora_rede

Consulta os estabelecimentos vinculados a uma operadora. Quando usar: para identificar unidades da rede por UF. Quando não usar: para buscar o cadastro geral; use operadora_lookup.

Parametersuflimiteregistrorequired

operadora_perfil

Consulta o cadastro e a série semestral de glosa e pagamento de uma operadora na ANS. Quando usar: para conhecer uma operadora pelo registro ANS. Quando não usar: para buscar operadoras por nome.

Parametersregistro_ansrequired

tiss_sandbox_enviar_lote

Envia um lote à operadora simulada. Quando usar: para testar integração local. Quando não usar: para transmitir dados reais.

Parametersxmlrequiredcenariotentativaregistro_ans

tiss_sandbox_demonstrativo

Gera o demonstrativo de um protocolo simulado. Quando usar: após enviar um lote. Quando não usar: com protocolo de outra operadora.

Parametersprotocolorequired

tiss_build

Gera o XML TISS 4.03.00 de um lote em JSON, com hash do epílogo. Consulte tiss://schemas/lote para o esquema estrutural. Quando usar: depois de validar o lote em JSON sem erros. Quando não usar: para corrigir achados; use tiss_apply_fixes.

Parametersloterequired

tiss_hash

Calcula o hash do epílogo de um XML TISS. Quando usar: para conferir a integridade do XML. Quando não usar: para validar o conteúdo; use tiss_validate.

Parametersxmlrequired

tiss_audit

Audita um lote JSON com regras locais e contexto da operadora. Quando usar: para identificar inconsistências administrativas. Quando não usar: para aplicar correções; use tiss_apply_fixes.

Parametersdataloterequiredcontextooperadora

tiss_rejection_map

Agrega achados por prestador e mês, sem expor dados das guias; CPF é pseudonimizado. Quando usar: para analisar rejeições por prestador. Quando não usar: para consultar guias individuais ou corrigir lotes.

Parametersdatalotesrequiredregrascontextooperadorasegredo_pseudonimo

tiss_apply_fixes

Aplica correções JSON Patch de um relatório ao lote. Quando usar: depois de tiss_validate ou tiss_audit com achados corrigíveis. Quando não usar: para inventar dados ausentes; peça-os ao usuário.

Parametersloterequiredreportrequired

glosa_explain

Explica um código da Tabela 38 da ANS. Quando usar: ao interpretar uma glosa recebida. Quando não usar: para validar ou corrigir o lote.

Parameterscodigorequired

tiss_dominio

Consulta tabelas e códigos de domínio TISS. Quando usar: para localizar um código ou termo de domínio. Quando não usar: para buscar procedimentos TUSS; use tuss_search.

Parametersdatatextocodigolimitetabelainclude_expired

operadora_lookup

Busca operadoras ativas pelo nome, registro, CNPJ ou localidade. Quando usar: para localizar uma operadora na base pública. Quando não usar: para consultar vínculos hospitalares; use tiss_rede.

Parameterstextorequiredlimite

tiss_referencia

Consulta valores unitários de referência D-TISS da ANS por procedimento TUSS. Quando usar: para comparar valores informados por UF, modalidade, porte e semestre. Quando não usar: para glosa ou preço contratado de uma operadora; use as ferramentas de operadoras.

Parametersufrequiredportecodigorequiredtabelasemestremodalidade

tiss_autorizacao_build

Gera XML TISS 4.03.00 para solicitação ou resposta de autorização SP/SADT.

Parametersmensagemrequired

tiss_autorizacao_parse

Interpreta solicitações e respostas de autorização SP/SADT.

Parametersxmlrequired

tiss_autorizacao_check

Valida uma solicitação SP/SADT e retorna uma decisão explicável.

Parametersxmlcontextosolicitacao

tiss_sandbox_autorizacao

Gera uma resposta SP/SADT sintética nos cenários disponíveis.

Parametersxmlcenariosolicitacao

buscar_docs

Busca trechos da documentação local da biblioteca. Quando usar: para encontrar instruções e referências da API. Quando não usar: para consultar dados clínicos ou códigos específicos.

Parameterstextorequiredlimite

Version history

1
  1. v0.3.0LatestOct 22, 2026

Score

100% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts