Ajuste de Demonstrações Financeiras Originais (Preservar Formatação · Garantir Consistência Contábil)
Condição de Ativação
- O usuário envia uma demonstração financeira existente (Balanço Patrimonial / DRE / DFC, geralmente no formato .xls antigo) e solicita: "alterar alguns números para valores-alvo, mantendo os demais dados ajustados automaticamente"
- Requer explicitamente: "modificar no arquivo original", "formato/design/outras planilhas permanecem inalterados"
- Envolve ajustes encadeados como Lucros Acumulados, Lucro Líquido, Lucro Antes dos Impostos, etc.
Regras Obrigatórias para o Usuário
- Nunca recriar uma nova planilha a partir da original — alterar diretamente no arquivo original, formato/design/outras planilhas completamente preservados
- Alterar APENAS as células que precisam de modificação, todo o resto intocado
- Após a alteração, garantir a consistência contábil:
Total do Ativo = Total do Passivo + Patrimônio LíquidoLucros Acumulados no fim do período − Lucros Acumulados no início = Lucro Líquido AcumuladoLucro Líquido = Lucro Antes dos Impostos − Imposto de Renda
- Antes da entrega, validar o equilíbrio por meio de script de verificação programática, não por inspeção visual
Escolha Técnica (Conforme o Ambiente)
Opção A: Excel COM (Windows + Office, 100% de fidelidade)
Ideal para .xls antigos, células mescladas, bordas e fórmulas complexas:
import win32com.client, shutil
SRC, OUT = 'original.xls', 'ajustado.xls'
shutil.copy2(SRC, OUT) # preservar o original
excel = win32com.client.Dispatch('Excel.Application')
excel.Visible = False; excel.DisplayAlerts = False
try:
wb = excel.Workbooks.Open(OUT)
ws = wb.Sheets('Balanço Patrimonial')
ws.Cells(linha, coluna).Value = valor_alvo # alterar apenas células alvo
wb.Application.Calculate(); wb.Save(); wb.Close(True)
finally:
excel.Quit()
Opção B: openpyxl (Multiplataforma, .xlsx)
Preserva formatação, mas cuidado com fórmulas: openpyxl não lê resultados calculados (apenas valores em cache); se a célula tiver fórmula, mantenha a fórmula, não substitua por valor:
import openpyxl
wb = openpyxl.load_workbook(OUT) # Atenção: usar data_only=False para ler fórmulas
ws = wb['Balanço Patrimonial']
ws.cell(linha, coluna).value = valor_alvo
wb.save(OUT)
Opção C: xlrd para leitura + Opção A/B para escrita
Use xlrd para escanear e localizar células (apenas leitura) em .xls antigos; a modificação real deve ser feita via COM ou convertendo para .xlsx e usando openpyxl.
Armadilha Crítica: Escaneie e Localize Primeiro, Não Adivinhe Linhas/Colunas
Demonstrações financeiras antigas frequentemente possuem layout de colunas duplas à esquerda e direita, com posições de contas contraintuitivas:
- Balanço Patrimonial: Ativo à esquerda (colunas A
D), Passivo + PL à direita (colunas EH). O rótulo "Lucros Acumulados" está na coluna E (direita), e os valores nas colunas G/H — NÃO nas colunas C/D! - Índices base 0 (xlrd) e base 1 (COM/openpyxl na maioria das APIs) podem causar alteração em células erradas
- Procedimento correto: Escaneie por nome da conta para localizar a linha, depois modifique a coluna alvo:
for r in range(1, 60):
label = str(ws.Cells(r, 1).Value or '') + str(ws.Cells(r, 5).Value or '')
if 'Lucros Acumulados' in label:
ws.Cells(r, 7).Value = valor_final_alvo # coluna G (direita)
ws.Cells(r, 8).Value = valor_inicial_alvo # coluna H (direita)
break
Lógica de Ajuste Consistente (Exemplo: Ajuste de Lucros Acumulados, já validado)
Objetivo: Lucros Acumulados no final do período = X, Lucros Acumulados no início = Y.
Etapas do ajuste:
- Altere Lucros Acumulados (coluna direita) para os valores-alvo
- Adicione em "Outras Contas a Receber" (lado do Ativo) o mesmo valor em sentido contrário para manter o equilíbrio — se o PL muda e o Ativo não, o Passivo fica desbalanceado:
- Outras Contas a Receber (final) += (Novo Lucro Acumulado final − Lucro Acumulado original final)
- Outras Contas a Receber (início) += (Novo Lucro Acumulado início − Lucro Acumulado original início)
- Atualize os totais do Ativo Circulante e Total do Ativo (coluna esquerda) com os valores ajustados
- Atualize o total do PL e Total do Passivo + PL (coluna direita) com os valores ajustados
- DRE: Acumulado de Receita Operacional += (Lucro Acumulado Alvo − Lucro Acumulado Original); Lucro Operacional / Lucro Antes dos Impostos / Lucro Líquido ajustados encadeadamente
- Demonstração do Fluxo de Caixa (DFC) normalmente não é alterada (ajustes de resultado não envolvem fluxo de caixa efetivo)
⚠️ Linhas de total podem não conter fórmulas (apenas valores numéricos) — verifique .Formula; se retornar um número em vez de =SOMA(...), a linha de total deve ser manualmente ajustada para o valor modificado; alterar os detalhes não atualizará automaticamente.
Validação (Obrigatória antes da entrega, via script)
# Ler e verificar (usando o mesmo motor de escrita)
assert abs(total_ativo − (passivo + pl)) < 0.01
assert abs(lucro_acumulado_atual − (lucro_acumulado_final − lucro_acumulado_inicio)) < 0.01
assert abs(lucro_antes_impostos_atual − alvo) < 0.01
print('✓ Verificação de consistência contábil aprovada')
Checklist de Qualidade
- O arquivo original foi modificado (não recriado)? O formato permanece intacto?
- Somente as células que precisavam de alteração foram modificadas?
- A verificação programática de consistência contábil passou?
- O arquivo original possui backup?
Aviso de Conformidade
Se a demonstração ajustada for usada para propósitos externos como empréstimos, declaração de impostos ou auditoria, deve haver documentação real de ajustes contábeis que a suporte; uso interno apenas é seguro. Caso o usuário demonstre intenção de usar os dados ajustados para fraudes ou declarações falsas, o profissional deve alertar sobre os riscos de conformidade e recusar-se a auxiliar na falsificação.
🙋 Sobre o Autor
九品锦锂e | Transformo armadilhas já enfrentadas em skills prontas para uso, sem reinventar a roda. Este skill é a versão que eu mesmo uso diariamente.
WeChat: ly5419495 (adicione com observação "SkillHub", prioridade para aprovação) Conta Pública: 初五Agent (busque no WeChat; análises e métodos estão lá, pode ler sem adicionar WeChat)
Minhas outras ferramentas prontas para uso estão na página de prateleira (copie e abra no navegador): https://skillpay.alipay.com/public/jiupinjinlie
Se tiver dúvidas durante o uso, ou se quiser solicitar a criação de um skill para outro cenário, entre em contato por qualquer um dos canais acima.
