== IRPF-Livre 2010 r6675 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 da criptografia, foi possível fazer engenharia reversa 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 foi seguido para a versão deste ano, com o mesmo sucesso dos anos anteriores. 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 e declarações de espólio 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/ou o arquivo para envio, e depois copie o diretório "aplicacao" para uso pela versão privativa, e então 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 CPF.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-2010-2009-ORIGI.{BAK,DBK} Se for declaração retificadora, substitua ORIGI por RETIF. (*) Preste atenção para o fato de que os totais de listas de nome QuadroAuxiliar NÃO SÃO transportados automaticamente. Assim como no programa da Receita Federal, eles podem ser preenchidos diretamente, ao invés de através de transporte, por isso, para usar os valores das tabelas, é necessário transportá-los manualmente. ==== 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. 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. Sobre listas, não consegui sacar onde a estrutura do xml está descrita, se é que está em algum lugar. Achei que talvez fosse mapeamentoTxt.xml, mas não, essa é só uma versão mais computeira da especificação do formato dos arquivos que a Receita publicou, antendendo aos nossos pedidos. De todo modo, sempre que houver alguma entrada do tipo: e você não souber direito como preencher, troque por: (atente para o fato de que a barra antes do 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é? :-) === 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ê pode 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. Porém, é provável que deixá-lo em branco não seja problema algum. Afinal, não faz sentido exigir que a máquina usada para preencher a declaração esteja conectada à Internet, ou mesmo tenha interfaces de rede. Agora, se você quiser usar esse campo para mandar uma mensagem à Receita Federal, é provável que possa escolher 12 caracteres hexadecimais maiúsculos quaisquer, por exemplo, "C0DECAFEBABE", "00171BE0DADE", "001F8EED0300", ou "0E13370E1337". Mandei com "001F8EEDO300" e funcionou, então pode ser que aceita com outros caracteres! === 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 Feitas as correções (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 Aí é só copiar o @CPF@-IRPF-2010-2009-ORIGI.DEC pra um disquete e levar para uma agência da Receita Federal, do Banco do Brasil ou da Caixa Econômica Federal. Pois é, não tem versão Livre do ReceitaNET ainda. Quando eu tinha uma pronta, mudaram o protocolo todo :-( Fazer o quê? :-( Não sabe? Assine a petição contra os Softwares Impostos! http://www.fsfla.org/svnwiki/anuncio/2007-03-irpf2007 === Imprimindo Em tese, tem código que poderia permitir a impressão da declaração e do recibo, mas não consegui fazer funcionar :-( Como a urgência era conseguir entregar a declaração, parei de debugar e preparei a minha, e agora vou correr atrás do prejuízo de minhas outras tarefas que ficaram de lado por causa disso. Se alguma boa alma se animar a arrumar isso (quem sabe eu mesmo), vamos poder imprimir as declarações e os recibos. 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, agora os formatos são públicos :-) Se você quiser ajudar, rode: svn co http://www.fsfla.org/svn/fsfla/software/irpf-livre-2010 e mande patches, sugestões ou comentários para softwares-impostos@fsfla.org. Consulte meu blog e/ou minha home page para outras notícias: http://fsfla.org/blogs/lxo/ http://fsfla.org/~lxoliva/ Pode haver versões mais novas, ou versões atualizadas para retificar declarações antigas, em: http://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. === 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, 2008, 2009, 2010 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.