Voa

Gerar e corrigir um lote

O exemplo converte um XML de demonstração no modelo JSON, introduz um valor divergente e aplica a correção determinística.

from IPython.display import display

from voa_tiss import apply_fixes, build_lote, check, examples, parse_lote

lote = parse_lote(examples.load("lote-valido"))
item = lote["guias"][0]["procedimentos_executados"][0]
item["valor_total"] += 1

relatorio = check(lote)
achado = next(f for f in relatorio.findings if f.code == "item.valor_divergente")
display(achado.to_dict())
Saída
{'code': 'item.valor_divergente',
 'severity': 'error',
 'guia': '0001',
 'xpath': None,
 'pointer': '/guias/0/procedimentos_executados/0/valor_total',
 'message': 'Valor total do item diverge da quantidade, valor unitário e fator.',
 'fix': [{'op': 'test',
   'path': '/guias/0/procedimentos_executados/0/valor_total',
   'value': 10001},
  {'op': 'replace',
   'path': '/guias/0/procedimentos_executados/0/valor_total',
   'value': 10000}],
 'needs': None,
 'glosa': None,
 'rule': None}

O patch testa o valor atual antes de substituí-lo. A aplicação trabalha em uma cópia do lote.

corrigido = apply_fixes(lote, relatorio)
relatorio_final = check(corrigido)
xml = build_lote(corrigido)

display(
    {
        "valido": relatorio_final.valid,
        "codigos": [f.code for f in relatorio_final.findings],
        "round_trip": parse_lote(xml) == corrigido,
        "bytes_xml": len(xml),
    }
)
Saída
{'valido': True, 'codigos': [], 'round_trip': True, 'bytes_xml': 5018}