Saneamento

Vinte anos de dados presos num sistema fechado

A autarquia não conseguia extrair os próprios dados do sistema que usava há duas décadas. Migramos cadastro, leituras, faturas e histórico para um ERP próprio — e no caminho descobrimos que quase metade da inadimplência registrada era erro de exportação do legado.

Cliente
Autarquia municipal de saneamento
Vinte anos de dados presos num sistema fechado
48%
da inadimplência não existia
3.301
ligações migradas
1.108
títulos de dívida ativa reconciliados
0
registros órfãos na migração

Contexto

Uma autarquia municipal de saneamento, responsável pelo abastecimento de todo o município, operava havia mais de vinte anos num sistema proprietário fechado. Todo o acervo vivia em bancos Firebird espalhados por cerca de sessenta arquivos, sem documentação e sem qualquer via de exportação suportada.

Na prática a autarquia era dona da operação mas não dos dados: cada relatório fora do padrão dependia do fornecedor, e trocar de sistema significava recomeçar do zero — o que para uma prestadora de saneamento é inaceitável, porque o histórico de consumo é a base do faturamento e da defesa em qualquer contestação.

O problema

Conseguir ler os arquivos foi só o começo. Ao conferir os dados importados contra os relatórios oficiais, os números não fechavam — e a diferença não era pequena.

A exportação do legado trazia lançamentos de tarifa de água com consumo zero e valor corrompido: uma única ligação aparecia com um débito centenas de vezes maior que a conta real, o mesmo número repetido mês após mês. Eram 698 faturas nessa condição — o suficiente para responder por 48% de toda a inadimplência aparente. Não era dívida: era um campo errado puxado na exportação.

A dívida ativa tinha o problema oposto. Reconstruída a partir do movimento mensal, ela gerava o dobro de devedores reais, cada um com valor baixo, enquanto metade dos devedores de verdade simplesmente não aparecia. O total até coincidia por acaso; o detalhe por ligação estava todo errado — e é o detalhe que vai para a cobrança judicial.

O que construímos

Um ERP de saneamento completo, em Laravel, cobrindo o ciclo inteiro: cadastro de ligações e hidrômetros, leitura em campo por aplicativo, faturamento, arrecadação, dívida ativa, ordens de serviço e atendimento por protocolo.

E, antes disso, a ferramenta de migração — que acabou sendo metade do projeto:

• Toolchain para ler os bancos Firebird do legado, montada do zero e documentada
• Comandos de importação idempotentes, um por domínio, que podem rodar de novo sem duplicar
• Correção automática das faturas com valor corrompido, usando a tarifa vigente na época de cada competência
• Importador de dívida ativa validado contra o total do relatório oficial antes de gravar qualquer linha

Decisões técnicas

Eleger uma fonte da verdade por domínio, não a mais conveniente. Para a dívida ativa existia um banco inteiro dedicado a ela no legado — e nós o descartamos. A verdade era a Relação de Devedores, o relatório que a autarquia efetivamente usa e reconhece. Migrar o banco teria sido mais fácil e teria produzido números que ninguém conseguiria defender numa execução fiscal.

Toda importação nasce em modo simulação. Os comandos rodam sem gravar por padrão e só efetivam com autorização explícita. O importador de dívida ativa confere a soma contra o rodapé do relatório oficial antes de tocar no banco: se o alinhamento das colunas mudar, ele para em vez de gravar lixo com aparência de dado bom.

Nunca reescrever o que já foi pago. Fatura quitada é registro contábil e fica intocada, mesmo quando contém o valor corrompido do legado. A correção alcança apenas o que está em aberto — o que afeta cobrança —, preservando a rastreabilidade do que já passou pelo caixa.

Corrigir pela tarifa da época, não pela atual. Cada fatura-fantasma foi recalculada com a tarifa mínima vigente na competência dela. Usar a tarifa de hoje seria mais simples e cobraria a mais de quem consumiu anos atrás.

Resultado

A migração subiu com 3.301 ligações, 146 mil leituras, 86 mil faturas e 231 mil eventos de histórico — sem um único registro órfão. Todas as matrículas do relatório de devedores casaram com o cadastro migrado.

A inadimplência registrada caiu praticamente à metade — não porque alguém pagou, mas porque metade dela nunca existiu. A autarquia parou de perseguir cobrança de valores que eram erro de exportação, e passou a trabalhar sobre uma base que corresponde à realidade.

A dívida ativa foi consolidada em 1.108 títulos, conferindo com o relatório oficial da autarquia, e os lançamentos-lixo herdados do legado foram cancelados. Cada título carrega marcação própria, então a cobrança judicial trabalha só sobre o que é executável.

Hoje a autarquia tem os próprios dados em banco aberto, documentado, com exportação em qualquer formato e sem depender de terceiro para responder à agência reguladora.

Stack

Laravel PHP 8.4 MySQL Vue 3 Inertia Flutter Firebird (legado) Leaflet

Um desafio parecido?

Conte o contexto e a gente responde se é para nós.

Falar com a gente