Audesp sem rejeição: gerar, validar e conferir o arquivo antes de transmitir
O tribunal lê o arquivo, não a sua tela. Gere a partir dos lançamentos, valide contra o leiaute, concilie os totais e guarde protocolo e versão de cada envio.
Último dia do prazo, 16h. A equipe de sistemas da prefeitura fictícia de Vila Serena gera o arquivo de prestação de contas, transmite e recebe rejeição. Um código de despesa não existe na tabela do tribunal, três registros têm data fora do período e o total enviado não bate com o balancete. Na tela do sistema interno estava tudo certo, com nomes de rubrica que a equipe entende e somas corretas.
A resposta curta: para o Audesp, o TCE-SP lê o arquivo no leiaute que ele publicou, não a sua tela. O arquivo precisa sair dos mesmos lançamentos que a tela mostra, passar por validação estrutural e de regra antes da transmissão e ter os totais conciliados com os relatórios internos. Cada envio fica guardado com protocolo, versão do leiaute e hash.
Por que o arquivo e a tela divergem
A tela do sistema é feita para a equipe: rubrica com nome amigável, agrupamentos internos, filtros que escondem o que não interessa. O arquivo para o tribunal segue outra lógica: códigos de tabelas oficiais, campos obrigatórios que a tela nem mostra, formato de data e valor exatos. Quando os dois são produzidos por caminhos diferentes, divergem.
A divergência mais perigosa nasce da digitação paralela. Perto do prazo, alguém exporta uma planilha, corrige à mão o que o validador recusou e gera o arquivo dali. O envio passa, mas agora o que o tribunal recebeu não é o que está no banco. No próximo período, ou numa auditoria, ninguém consegue explicar a diferença.
E há a versão do leiaute. O tribunal publica manuais e esquemas por fase e exercício, e eles mudam. Código que funcionava no ano anterior pode gerar arquivo rejeitado no atual. Há dois posts vizinhos sobre isso: o manual da fase é o contrato do arquivo e anote a data da versão que você implementou. Aqui o foco é o processo de geração e conferência.
Como gerar e conferir o arquivo, passo a passo
- Registre a versão do leiaute que o gerador implementa, com a data do manual baixado da página de documentação do Audesp.
- Gere a partir dos lançamentos já gravados, por uma consulta ou view única, nunca de planilha intermediária.
- Mapeie códigos internos para códigos oficiais numa tabela de correspondência, e falhe se algum lançamento não tiver correspondência.
- Valide a estrutura contra o esquema publicado, quando a fase fornecer um.
- Valide as regras que o esquema não pega: período, obrigatórios com conteúdo, somas.
- Concilie os totais do arquivo com o relatório que o setor contábil assina.
- Transmita e guarde arquivo, hash, protocolo, data, versão do leiaute e quem enviou.
Uma fonte só para tela e arquivo
Em Vila Serena, a tela de despesas e o gerador passaram a ler da mesma view. A tela mostra o nome da rubrica; o gerador usa o código oficial da tabela de correspondência. Os nomes de tabela e coluna abaixo são do sistema fictício.
CREATE VIEW vw_despesa_prestacao AS
SELECT l.id AS lancamento_id,
l.data_lancamento,
l.valor_centavos,
r.nome AS rubrica_nome,
c.codigo_oficial AS rubrica_codigo
FROM lancamentos l
JOIN rubricas r ON r.id = l.rubrica_id
LEFT JOIN correspondencia_codigo c ON c.rubrica_id = r.id
WHERE l.situacao = 'confirmado';
O LEFT JOIN é proposital: lançamento sem correspondência aparece com rubrica_codigo nulo, e o gerador pode recusar antes de montar o arquivo, em vez de inventar um código. Valores em centavos inteiros evitam a soma que fecha na tela e não fecha no arquivo por arredondamento, como em dinheiro em centavos.
Validação estrutural com o esquema
Se a documentação da fase traz esquema XSD para arquivos XML, use-o antes de qualquer envio. Pela linha de comando, com xmllint (pacote libxml2):
xmllint --noout --schema esquema-da-fase.xsd prestacao-2026-09.xml
Sem erros, ele informa que o arquivo valida. Com erros, lista linha e elemento. Isso pega campo obrigatório ausente, tipo errado e elemento fora de ordem, mas não pega regra de negócio.
Validação de regra e conciliação
O script abaixo, em Python com lxml, valida contra o esquema e depois confere período e total. Os nomes de elemento são ilustrativos; use os do leiaute oficial da sua fase.
from datetime import date
from lxml import etree
esquema = etree.XMLSchema(etree.parse("esquema-da-fase.xsd"))
doc = etree.parse("prestacao-2026-09.xml")
if not esquema.validate(doc):
for erro in esquema.error_log:
print(f"linha {erro.line}: {erro.message}")
raise SystemExit(1)
inicio, fim = date(2026, 9, 1), date(2026, 9, 30)
total_centavos = 0
problemas = []
for item in doc.iter("Despesa"):
d = date.fromisoformat(item.findtext("Data"))
if not (inicio <= d <= fim):
problemas.append(f"Despesa {item.findtext('Id')} com data {d} fora do período")
total_centavos += round(float(item.findtext("Valor")) * 100)
total_balancete = 184_532_917 # centavos, do relatório assinado pela contabilidade
if total_centavos != total_balancete:
problemas.append(f"Total do arquivo {total_centavos} difere do balancete {total_balancete}")
for p in problemas:
print(p)
raise SystemExit(1 if problemas else 0)
O valor do balancete vem do relatório que o responsável contábil confere, não do próprio arquivo. Conciliar o arquivo com ele mesmo não prova nada. Rodar esse script em toda geração transforma a rejeição das 16h do último dia numa lista de pendências na semana anterior.
Guardar o que foi enviado
Depois da transmissão, guarde o arquivo exato, o hash dele, o protocolo devolvido, data e hora, a versão do leiaute e o usuário que enviou. O hash prova que o arquivo guardado é o enviado:
sha256sum prestacao-2026-09.xml > prestacao-2026-09.xml.sha256
Reenvio e retificação seguem as regras da fase, que dizem quando um novo arquivo substitui o anterior e o que precisa acompanhar. Não apague o envio anterior do seu arquivo histórico: ele é a prova do que foi entregue naquela data.
Por fim, o responsável pela prestação de contas é o gestor e a equipe contábil designada, não o programador sozinho. O sistema gera e confere; quem assina valida o conteúdo. Este guia trata do processo técnico e não substitui as orientações do tribunal nem do profissional contábil responsável.
Erros comuns
- Gerar o arquivo de uma planilha corrigida à mão. O envio passa, mas o tribunal recebe dados que não estão no banco.
- Usar nome de rubrica no lugar do código oficial. Rejeição imediata ou, pior, código parecido aceito com significado errado.
- Preencher código ausente com um valor "genérico". O arquivo valida e a classificação da despesa fica errada.
- Validar só a estrutura. Data fora do período e total que não fecha passam pelo esquema.
- Manter o gerador do exercício anterior sem conferir o manual novo. Mudança de leiaute vira rejeição perto do prazo.
- Não guardar protocolo e arquivo enviado. Na auditoria, ninguém prova o que foi entregue.
Checklist
- A versão e a data do leiaute implementado estão registradas.
- Tela e gerador leem da mesma consulta ou view.
- Todo código interno tem correspondência oficial, ou a geração falha.
- O arquivo é validado contra o esquema publicado, quando houver.
- Período, obrigatórios e totais são conferidos por script.
- O total do arquivo é conciliado com o relatório da contabilidade.
- Cada envio guarda arquivo, hash, protocolo, versão do leiaute e quem enviou.
Pegue o último arquivo enviado e escolha um lançamento qualquer da tela do sistema: você consegue achá-lo no arquivo, com o mesmo valor e o código oficial certo?
Referência: https://www.tce.sp.gov.br/audesp/documentacao