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.