Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

TISS sem dor de cabeça, para pessoas e agentes de IA.

CI Versão no PyPI Versões do Python Licença Apache-2.0 MCP Registry

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.

Agente faturista fechando o ciclo TISS no terminal: valida o lote, corrige, envia à operadora simulada, lê as glosas e rascunha os recursos
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.

Início rápido

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

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

  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 remoto fica em https://tiss-api.voa.health/mcp. Agentes encontram as instruções de uso no AGENTS.md e na skill tiss.

claude mcp add --transport http 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 tiss@tiss
codex plugin marketplace add Voa-Health/tiss

No Codex, adicione a ~/.codex/config.toml:

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

No Cursor, adicione ao mcp.json:

{
  "mcpServers": {
    "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 "tiss[server]"
python -m 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, crie uma chave sk_tiss_ no painel da organização e envie-a em Authorization: Bearer. Não há limite diário.

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 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_tiss_. 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í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.

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.

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

Metadata

Release files for tiss 0.4.0a1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for tiss 0.4.0a1
File Size Uploaded Provenance
tiss-0.4.0a1.tar.gz 1.2 MB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for tiss 0.4.0a1
File Interpreter ABI Platform
tiss-0.4.0a1-py3-none-any.whl Python 3 none any Details

Total release size: 2.5 MB

Release files / tiss-0.4.0a1.tar.gz

Download URL tiss-0.4.0a1.tar.gz
Size 1.2 MB
Tags Source
SHA-256 checksum
How to use checksums
9a201b73734985da096022e036a3a71e168542e09babd8ea95d53ecdd1445280
BLAKE2b-256 checksum
How to use checksums
58b2455eadc09dc3b62b864c1ed9616fcb204a5840465697fd9643ed242f6cd9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 23, 2026.

Transparency log

Release files / tiss-0.4.0a1-py3-none-any.whl

Download URL tiss-0.4.0a1-py3-none-any.whl
Size 1.3 MB
Tags Python 3
SHA-256 checksum
How to use checksums
c5112c57825d1c763937e88a1696eaab777da2ec5f64f967c61efca3a40301c5
BLAKE2b-256 checksum
How to use checksums
72ff9962e6b46b2456df7f29499c53076b26a815890d61f827b97da6f8b5d46d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 23, 2026.

Transparency log

Security for tiss 0.4.0a1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for tiss-0.4.0a1.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 23, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page