== IRPF-Livre 2014 r11952
Este é um projeto que usa o código publicado em 2007 pela Receita
Federal para criar uma versão Livre do programa para preenchimento de
declarações de Imposto de Renda de Pessoa Física, IRPF.
Com ele, você vai poder preparar sua declaração de imposto de renda em
liberdade, podendo gravá-la em disquete para entrega em agências do
Banco do Brasil ou da Caixa Econômica Federal.
Agradeço à Receita Federal por publicar o código da versão de 2007 sob
a GNU LGPL versão 2 (licença mais visível no IRPF.jar), ainda que
tenham "esquecido" de publicar os fontes correspondentes, inclusive
das outras bibliotecas LGPL que usaram. De toda forma, publicaram
código Java não ofuscado e com informação de debugging, o que permitiu
a descompilação quase que completa.
Para a versão de 2008, o trabalho foi um pouco maior, pois IRPF2008 é
claramente não-Livre, ainda que esteja repleto de ilegalidades.
Apesar do ofuscamento e da remoção da informação simbólica, foi
possível fazer engenharia reversa suficiente para perceber algumas
modificações necessárias para a versão nova, mas a maior parte das
atualizações para 2008 pode ser feita meramente comparando os arquivos
gerados pelo IRPF-Livre com os gerados pelo IRPF2008. Somente para
questões de compatibilidade, como códigos e disposição de informações
nos arquivos, foi necessário consultar os arquivos do IRPF2008.
O mesmo procedimento vem sendo seguido para as versões dos anos
seguintes. Dada a dificuldade de reproduzir exatamente as alterações
efetuadas desde a versão de 2007 sem contaminar o IRPF-Livre com os
termos de licenciamento não-Livres das versões mais novas, há algum
risco de que alguma atualização tenha faltado. O que é certo é que
nem todas as funcionalidades adicionadas desde a versão de 2008 foram
adicionadas ao IRPF-Livre: ganhos de capital, renda variável, opção de
tributação alternativa para rendimentos acumulados, declarações de
espólio e de saída definitiva e doações dedutíveis são casos ainda não
tratados no IRPF-Livre.
Para localizar limitações e completar a versão Livre, sugiro que se
use a versão privativa para o único propósito moralmente legítimo de
um software privativo: para o desenvolvimento de um substituto Livre.
Isto é, prepare sua declaração utilizando a versão Livre, gere a cópia
de segurança e o arquivo para envio, e depois, na versão privativa,
restaure a cópia de segurança, modifique alguns valores de modo a
forçar um recálculo dos resultados, modifique de volta e finalmente
gere os arquivos novamente. Verifique que os arquivos gerados sejam
idênticos.
Se não forem, há algo errado na versão Livre. Por favor tente criar
uma declaração fictícia que reproduza a diferença e envie para
softwares-impostos@fsfla.org.
Se forem idênticos, você terá certeza de que sua declaração é
perfeitamente indistinguível de uma preparada pela versão privativa, e
poderá entregá-la com toda a confiança.
== Como usar
Não há interface gráfica, somente uma interface "linha de comando",
introduzida já em 2007. Sabe o quê? Eu a adorei! Pude fazer tudo
que sempre quis e o programa não permitia, tipo copiar e ajustar
contas bancárias quando um banco compra o outro, substituição global
ou parcial de CNPJs, alteração da ordem dos itens para seguir a dos
documentos recebidos, etc.
Então... Rodando algo tipo
gij -jar irpf-livre-cl.jar
(pode trocar gij pelo interpretador Java de sua preferência; funciona
bem com o IcedTea também), você vai receber uma mensagem de ajuda que
indica os comandos disponíveis. Como a gente vai usar bastante esse
comando, sugiro criar uma função shell, um alias, um script, seja o
que for:
irpf () { gij -jar irpf-livre-cl.jar $1 @CPF@; }
Por exemplo, o comando shell acima vai permitir que você execute
comandos como 'irpf comando', e ele já vai passar seu CPF
implicitamente (supondo que você substituiu @CPF@ acima pelo seu CPF,
né? :-) Vou supor daqui pra frente que você fez algo nessa linha.
A idéia é usar comandos para criar uma declaração nova:
irpf nova
ou importar uma declaração do ano passado:
irpf importa
Se você criar uma declaração do zero e depois resolver importar uma
com o mesmo cpf, ou vice-versa, ele vai dar erro. Use:
irpf remove
antes que a importação ou a criação funcione.
Nos dois casos, ele vai criar um arquivo que representa a declaração
em aplicacao/dados/@CPF@/@CPF@.xml. Naturalmente, pro segundo você
vai precisar do arquivo de declaração (backup ou gravada para
transmissão) e, se quiser, o recibo correspondente, ambos no diretório
corrente. O do recibo é em tese desnecessário, pois o número do
recibo já está presente no arquivo gerado para envio (sério!) mas,
para evitar acidentes, a interface de linha de comando só vai
registrar o número de recibo se o arquivo de recibo estiver presente.
Note que o número do recibo não era importado na versão 2007 do
IRPF-Livre.
Atente para o fato de que aplicacao/dados/iddeclaracoes.xml contém
informação de identificação (nome, cpf, recibo do ano anterior, etc).
Para preservar uma declaração, não basta preservar o arquivo de nome
@CPF@.xml.
Antes de fazer qualquer coisa, sugiro fazer um backup dessa
declaração, até pra poder acompanhar as alterações que você vá fazer:
irpf grava
Aí, só de farra, tire uma cópia do arquivo xml e vê se o backup volta
do mesmo jeito:
cp aplicacao/dados/@CPF@/@CPF@.xml copia.xml
irpf restaura
diff copia.xml aplicacao/dados/@CPF@/@CPF@.xml
Tá ganhando confiança, né? Então vamos em frente...
=== Preenchendo a declaração
Então, agora que você já tem um arquivo xml pronto pra preencher,
talvez já com dados de uma declaração anterior, mãos à obra. É um
arquivinho texto.
O chato é a linha longa: não tem quebra de linha alguma no xml gerado.
Recomendo passar os arquivos xml através de um filtro pra deixá-los
mais bonitinhos antes de sair editando. Pro programa, não faz
diferença nenhuma, mas pra nós, humanos, é a diferença entre sair
correndo em desespero ou tudo fazer sentido.
O que usei pra deixar o xml bonitinho foi xmllint, do libxml2. Tipo
assim:
xmllint --format aplicacao/dados/@CPF@/@CPF@.xml > decl.xml
aí edita o decl.xml. Não precisa se preocupar em fazer as contas,
basta ir preenchendo o que está lá. Se você estiver usando versões
antigas do gij, não ligue para os "0.,00" (ponto e vírgula um do lado
do outro no lugar só da vírgula); não sei por que os dois pontos
decimais estão aparecendo, mas eu deixei eles lá e tudo funcionou
normal. Melhor não mexer, né? :-) Com o IcedTea, aparece só a
vírgula.
Quando você tiver editado um pouco e quiser ver no que dá:
cp decl.xml aplicacao/dados/@CPF@/@CPF@.xml
irpf recalcula
mv decl.xml diff.xbk
xmllint --format aplicacao/dados/@CPF@/@CPF@.xml > decl.xml
diff -U0 decl.xbk decl.xml
Viu só?, ele já atualiza os valores calculados a partir de outros.
Legal, né? (*) Pode também verificar que as coisas que você editou
entraram no arquivo de declaração:
diff -U0 @CPF@-IRPF-A-2014-2013-ORIGI.{BAK,DBK}
Se for declaração retificadora, substitua ORIGI por RETIF.
(*) Desde a versão de 2013, os totais dos quadros auxiliares SÃO
transportados automaticamente para os respectivos campos, assim como
totais de 13º recebidos de Pessoas Jurídicas, resultado do cônjuge,
além de vários outros campos derivados que já eram transportados ou
calculados automaticamente antes. Isso quer dizer que, ao contrário
do programa da Receita Federal, se eles forem preenchidos diretamente,
o valor preenchido será perdido quando do recálculo. Então, use os
quadros auxiliares; veja como logo a seguir.
==== Códigos e listas
Então... Editar o xml é relativamente fácil quando você sabe o que
está fazendo. O duro é quando você não sabe. Tipo, no caso de campos
em que entram códigos, ou listas cujos componentes você nem tem idéia.
Sobre os códigos, a dica é procurar dentro do .jar (use o Emacs para
abri-lo como zip, ou expanda o conteúdo) algum arquivo .xml
relacionado, como tipoBens.xml ou tipoPagamentos.xml. São neles que
as tabelas de códigos estão descritas. Pode haver descrições mais
legíveis em help/html. Veja help/index.xml (como arquivo texto) para
uma lista dos tópicos e os respectivos arquivos html (target=), ou
abuse do grep help/html.
Quanto aos quadros auxiliares, sempre que houver alguma entrada do
tipo:
para preencher, troque por:
(atente para o fato de que a barra antes do primeiro sinal de maior
foi removida)
Aí use o recalcula e você vai ver que ele expandiu o item pra você com
todos os campos necessários. Bacana, né? :-)
Agora, se preferir economizar um ciclo de recálculo, parece que todos
os quadros auxiliares, com exceção do de lucroRecebido, têm os
seguintes campos:
=== Identificação da Máquina, ou do IRPF-Livre
A versão final do IRPF2010 passou a preencher o campo ENDERECO_MAC com
o endereço físico (MAC) de rede de uma interface de rede externa e
operante no momento da gravação da declaração. Somente máquinas
virtuais Java superiores a 1.6 oferecem a funcionalidade necessária
para determinar esse endereço.
Ao invés de exigir que usuários do GNU Interpreter for Java (como eu)
abandonem essa plataforma, decidi deixar que o usuário escolha o
endereço a informar.
Você DEVE preencher o campo enderecoMAC na identificação da
declaração, no arquivo aplicacao/dados/iddeclaracoes.xml, se quiser
obter arquivos idênticos aos do IRPF privativo. Ouvi relatórios de
que deixá-lo em branco faz com que o arquivo seja rejeitado pelo
programa de envio, apesar de não fazer sentido exigir que a máquina
usada para preencher a declaração esteja conectada à Internet, ou
mesmo tenha interfaces de rede.
O divertido é que dá pra usar esse campo enderecoMAC para mandar uma
mensagem à Receita Federal, usando 12 caracteres hexadecimais
maiúsculos quaisquer, por exemplo, "C0DECAFEBABE", "00171BE0DADE",
"001F8EED0300", ou "0E13370E1337". Em 2011, mandei por engano com
"001F8EEDO300" (note a letra O, em vez de zero) e funcionou, então
pode ser que continue aceitando outros caracteres! Desde 2013, tenho
identificado as declarações com "ARECEITAFEDE" no enderecoMAC.
=== Finalizando
Então, depois de vários ciclos de edição, você acha que tá tudo
pronto, né? Não custa dar uma verificadinha:
irpf verifica
Se houver pendências, fatais ou não, ele vai avisar. Se você por
acaso extraiu manualmente um arquivo de recibo com apenas 10 dígitos,
o sistema vai acusar que o número é inválido. Há um comando para
calcular os dígitos verificadores:
irpf calculaDV
Se você estiver preparando declarações para cônjuges que declaram
separadamente, para concluir o preenchimendo das duas, transportando
os valores de uma declaração para a ficha Conjuge da outra, preencha o
campo cpfConjuge e execute:
irpf conjuges
Aí, pode ser hora de ver se é melhor fazer declaração completa ou
simplificada. Há um comando que diz quanto tem a pagar ou a receber
como restituição, com a opção de modelo escolhida, mas avisa se a
opção não for a mais vantajosa:
irpf resumo
Feitas correções e alterações finais (ou não), pode gravar cópias de
segurança, restaurá-las, ou preparar a declaração para entrega, com os
seguintes comandos:
irpf grava
irpf restaura
irpf prepara
Para transmitir o @CPF@-IRPF-A-2014-2013-ORIGI.DEC para a Receita
Federal, recomenda-se o uso do programa rnetclient (*), um Software
Livre desenvolvido pelo nosso amigo Thadeu Cascardo para cumprir a
função do programa de envio privativo recomendado pela Receita
Federal. Infelizmente, não existe mais a opção de entregar em
disquete ou pendrive nas agências da Receita Federal, do Banco do
Brasil ou da Caixa Econômica Federal.
(*) http://wiki.libreplanetbr.org/rnetclient/
Tanto o IRPF-Livre quanto o rnetclient foram desenvolvidos e são
mantidos com grandes esforços de engenharia reversa. Isso não deveria
ser necessário. Não há razão para que os formatos de arquivo sejam
documentados de forma insuficiente para a implementação de programas
equivalentes, nem para que os protocolos de envio sejam secretos.
Todas as funcionalidades necessárias para cumprir essas funções estão
hoje disponíveis em implementações Livres.
Mesmo assim, a Receita Federal continua criminosamente sustentando, em
diversos pedidos de acesso à informação, que o código fonte dos
programas que ela oferece contém informação que poderia comprometer a
segurança dos dados fiscais sob sua custódia.
O SERPRO, que desenvolve os programas e mantém as bases de dados, não
só desmentiu, como afirmou que não há razão para que contenham tal
informação, que seria uma falha se contivesse, e que, mesmo que
contivesse algo nessa linha, não permitiria acesso às informações,
pois os mecanismos de guarda são bastante mais elaborados do que essa
simplificação presume.
Cabe a nós, cidadãos, pressionar a Receita Federal e os órgãos de
fiscalização para que cumpram sua obrigação de transparência, ao invés
de se valer de mentiras para evitá-las.
Então, protocole em http://acessoainformacao.gov.br/ um pedido ao
Ministério da Fazenda do código fonte do IRPF, do ReceitaNet e dos
demais programas da Receita Federal, para ajudar a pressionar.
São também bem-vindas contribuições para a FSFLA, para ajudar a manter
nossos esforços, inclusive a manutenção deste programa. Nesta linha,
seriam particularmente valiosas ofertas de aconselhamento jurídico ou
de fundos para custear ações judiciais para que se dê transparência
ativa à informação relativa a esses programas, de modo a facilitar o
desenvolvimento de equivalentes Livres, ou, ainda melhor, que os
programas sejam oferecidos pelo próprio governo como Software Livre.
Entre em contato com membros do conselho da FSFLA através do endereço
de email info@fsfla.org.
=== Imprimindo
Em tese, tem código que poderia permitir a impressão da declaração e
do recibo, mas não consegui fazer funcionar :-(
Creio que o problema seja causado por diferenças de versão entre as
bibliotecas utilizadas no programa original e as que baixei para
substituí-las. Infelizmente a Receita Federal se recusa a informar
sequer quais versões dessas bibliotecas Livres foram utilizadas, e
ainda não consegui tempo para descobrir por conta própria.
Se alguma boa alma se animar a arrumar isso (quem sabe eu mesmo),
vamos poder imprimir as declarações e os recibos, se bem que uma
porção de coisas terá de ser atualizada, pois o código de impressão
ainda é de 2007! Se não, quando alguém pedir a declaração ou o
recibo, a gente imprime o xml ou o par .DEC/.REC mesmo. Certo?
Afinal, os formatos são (parcialmente) públicos :-)
Se você quiser ajudar, rode:
svn co https://www.fsfla.org/svn/fsfla/software/irpf-livre-2014
ou
git svn clone https://www.fsfla.org/svn/fsfla/software/irpf-livre-2014
e mande patches, sugestões, comentários ou relatórios de problemas
para softwares-impostos@fsfla.org. É preciso se inscrever antes em
http://www.fsfla.org/mailman/listinfo/softwares-impostos/
Para outras notícias, consulte meu microblog, blog e/ou página:
https://identi.ca/lxoliva
http://www.fsfla.org/blogs/lxo/
http://www.fsfla.org/~lxoliva/
Pode haver versões mais novas, ou versões atualizadas para retificar
declarações antigas, em:
https://www.fsfla.org/~lxoliva/snapshots/irpf-livre
Faça bom uso!
--
Alexandre Oliva
== Histórico
Os números após o "r" abaixo são o identificador da versão dentro no
nosso repositório Subversion. Tipo, svn co -r3330 vai baixar os
fontes da versão r3330. Versões anteriores estão em outro local do
repositório.
=== r11952
Corrigido preenchimento do campo IN_PREPREENCHIDA, na ficha 16, usando
"0" ao invés do "N".
=== r11815
Implementado o detalhamento de rendimentos não tributáveis e
tributáveis exclusivamente na fonte, lançados como "Outros", auferidos
somente pelo titular. Atualizada versão para IRPF2014v1.4.
=== r11242
Atualizado para 2014, conforme IRPF2014v1.0. Adicionada referência ao
rnetclient para transmissão via Internet.
=== r10308
Reintroduzidos alguns recálculos removidos com a introdução do
transporte automático de totais.
=== r10298
Atualizado conforme IRPF2013v1.1.
=== r10236
Atualizado para 2013, conforme IRPF2013v1.0. Importação de declaração
anterior agora preserva fontes pagadoras e beneficiários de
pagamentos. Adicionado campo para declarar rendimento isento
proveniente de restituição de IRPF; outros tipos novos de rendimentos
isentos não foram adicionados. Tampouco foi implementada a nova
infraestrutura para declarar doações dedutíveis. Por outro lado, o
transporte de vários totais, inclusive os dos quadros auxiliares,
agora é automático.
=== r10209
Corrigido erro na geração de declarações simplificadas: havia faltado
preencher um novo campo. Atualizados os comentários.
=== r8561
Atualizado para 2012, conforme IRPF2012v1.0.
Implementado o comando resumo.
=== r7853
Atualizado conforme IRPF2011v1.0. Não foram adicionadas
funcionalidades para rendimentos recebidos acumuladamente, nem para
declarações de saída definitiva do país. A novidade positiva é que,
na importação de declarações do ano anterior, bens cujos valores não
mudaram de um ano para o outro terão o valor transportado
automaticamente.
Integrada primeira contribuição externa, para aceitar pontuação em
CPFs dados na linha de comando.
=== r6675
Novos comandos recalcula e conjuges. Faz recálculo automático do
resultado do cônjuge, dos totais de rendimentos isentos e tributados
exclusivamente na fonte.
=== r6674
Atualizado conforme versão final do IRPF2010. Adiciona preenchimento
opcional, com conteúdo à escolha do usuário, do campo ENDERECO_MAC.
=== r6622
Atualizado para 2010.
=== r4952
Atualizado para 2009.
=== r4871
Rejeita número de recibo inadequado para a declaração, seja
retificadora ou não.
=== r4715
Adiciona facilidades para obtenção de número de recibo no momento da
gravação da declaração e para cálculo dos dígitos verificadores de
recibos do ano anterior e de declaração a retificar.
=== r3397
O programa não capota mais ao ser executado sem argumentos. Reportado
por Claudio "Patola" Sampaio.
Menção implícita à versão 2007-r3373, para retificar declarações de
2007.
=== r3330
Primeira versão experimental para 2008. Já funciona com a minha
declaração, gerando um arquivo igualzinho ao do IRPF2008 da Receita
Federal. A declaração gerada com esta versão foi entregue com sucesso
dia 2008-04-28, na Agência 4259-5 do Banco do Brasil.
=== r1003
Corrige um erro na geração de declaração para envio. A única
diferença entre a versão que eu usei pra preparar minha declaração e
esta que publiquei é que eu atualizei este arquivo com o histórico.
=== r987
Todas as funcionalidades exceto impressão estão contempladas.
=== r976
Primeira versão com interface de linha de comando, ainda com muitas
limitações.
=== r952
Primeira versão livre publicada empacotada, com binário que talvez
rodasse com interface gráfica em máquinas virtuais Java privativas.
Aparentemente, nem isso :-(
== Legalidades
Copyright 2007-2015 FSFLA
Alexandre Oliva
IRPF-Livre é Software Livre; você pode redistribuir e/ou modificar a
maior parte dele de acordo com os termos da GNU Lesser General Public
License publicada pela Free Software Foundation; tanto a versão 2.1
dessa licença, quanto (à sua escolha) qualquer versão posterior.
Alguns componentes podem ser distribuídos e/ou modificados de acordo
com outras licenças, incluídas no executável e consolidadas no arquivo
list/licenses nos fontes.
IRPF-Livre é distribuído na esperança de que ele seja útil, mas SEM
QUALQUER GARANTIA; até mesmo sem qualquer garantia implícita de
COMERCIABILIDADE OU ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a
GNU Lesser General Public License para mais detalhes.
Você deve ter recebido uma cópia da GNU Lesser General Public License
junto com IRPF-Livre; se não, escreva para a Free Software Foundation,
Inc., no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307
USA.
Veja uma tradução não oficial da licença em
http://creativecommons.org/licenses/LGPL/2.1/legalcode.pt
IRPF-Livre is free software; you can redistribute and/or modify most
of it under the terms of the GNU Lesser General Public License as
published by the Free Software Foundation; either version 2.1 of the
License, or (at your option) any later version.
Some components can be distributed and/or modified under different
licenses, included in the executable and consolidated in the file
list/licenses in the source tree.
IRPF-Livre is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with IRPF-Livre; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
USA.