Voa

Regras por operadora

Pacotes usam JSON declarativo. Este exemplo sintético avalia um campo da guia com uma expressão de correspondência integral.

from voa_tiss import check, examples, parse_lote

lote = parse_lote(examples.load("lote-valido"))
guia = lote["guias"][0]
cabecalho = "cabecalho_guia" if guia["tipo"] == "sp_sadt" else "cabecalho_consulta"
pointer = f"/guias/*/{cabecalho}/numero_guia_prestador"

pacote = {
    "operadora": "123456",
    "mantenedor": {"tipo": "comunidade"},
    "official": False,
    "versao_tiss": "4.03.00",
    "regras": [
        {
            "id": "exemplo.numero-guia",
            "descricao": "O número da guia deve ficar vazio neste exemplo.",
            "source": {
                "url": "https://example.org/regras",
                "titulo": "Pacote sintético",
                "data": "2026-01-01",
                "acesso": "publico",
            },
            "severity": "warning",
            "check": {"tipo": "padrao", "pointer": pointer, "regex": "^$"},
        }
    ],
}

relatorio = check(lote, operadora=pacote)
[(f.code, f.rule["id"], f.pointer) for f in relatorio.findings if f.rule]
Saída
[('regra.padrao',
  'exemplo.numero-guia',
  '/guias/0/cabecalho_guia/numero_guia_prestador'),
 ('regra.padrao',
  'exemplo.numero-guia',
  '/guias/1/cabecalho_guia/numero_guia_prestador')]

A severidade e a fonte fazem parte do achado. Pacotes oficiais exigem mantenedor do tipo operadora.