Ola Sergio,
que beleza que temos vc o autor do python-sped na nossa lista!!
Entao irei explicar sobre todo isso nesses dias que vem. Venho trabalhando nisso faz uns 6 meses de forma ocasional. Para nos da Akretion a ideia era para mostrar pros ayatollahs do codigo manual que era inviavel para sustentar de forma open source que uma alternativa inteligente era possivel. Tb a ideia eh pegar mais projetos grandes no Odoo e poder falar o Odoo sabe fazer sabendo quanto vai custar e obtendo lucro no projeto ainda. Devo dizer que sempre foi usado essa estrategia para desestabilizar o projeto de falar que o projeto nao faz a funcionalidade X entao deixar que a empresa do fulano que acabou de chegar com varios $$$$ para perder vai liderar o projeto entao. Olho grande nunca faltou. Era preciso mostrar o ridiculo da solu;ao que os caras tava tentando enfiar a força no projeto.
Enfim logo me dei conta que a versao do python-sped nao esta completa: para gerir os objetos Odoo necessarios era preciso de:
- no minimo informaçao sobre a hierarchia dos registros por examplo para dizer que as a nota fiscal tem campo o2m para os itens (o nome quase dava a informaçao mas nao dava exactamente nao pelo jeito)
- era interessante saber se os campos eram obrigatorios
- era interessante saber a precisao decimal dos campos numericos
Para fazer isso comecei a mergulhar em extrair esses meta-dados dos pdfs de especificaçoes usando tabula-jar. Tive que criar VAAAARIIIAAAS heuristicas para ler correctamente os dados do pdfs, mas mesmo assim eh muito menos codigo de que escrever esses objetos manualmente e pelo menos eh possivel de verificar se o codigo final esta correcto ou ate que ponto.
Ai nisso me dei conta que o python-sped era desatualizado comparando com as especificaçoes do SPED de 2018. Tem mais ou menos 10% de campos errado.
Nisso fui de cara para extrair tudo que eu podia mesmo dos pdfs. Tive entao a tentaçao de gerir tudo a partir dos pdfs sem usar mais o python-sped. so que vi que tinha erros no pdf tb. As vezes o tabula nao conseguia extrair a informaçao ou as vezes realmente tinha um erro tipo o cara botou um espaço no nome do campo ou algo do tipo.
Entao a soluçao que eu adotei foi de começar a monitorar o diff entre os que tinha nos pdf e nao tinha no python-sped. A partir dai eh facil corrigir manualmente o que falta no python-sped para bater com a especifiçao atual sacou.
Ai acabei de te botar um issue com o log da aderência com as especificaçoes do SPED de 2018:
Entao a ideia eh que meu script permite de corrigir o python-sped. Ai depois vc assume que o python-sped esta ok para dar a lista dos registros e campos. Entao o script gera os objetos Odoo correspondante a partir do python-sped mas ainda completa com alguns meta-dados que vem dos pdfs como hierarchia, obrigatoriedade dos campos, precisao decimal etc...
Ou seja os dois se completam.
Depois a ideia eh que vc vai mapear os objetos operacional do Odoo para jogar a informaçao nesses novos objetos do SPED. Sendo assim, a informaçao fiscal dos documentos fiscais pode evoluir de forma independente da especificaçao do SPED, algo que infelizmente acontece na vida real e que era impossivel com aquilo que os caras queriam fazer no projeto que era de re-escrever tudo para enfiar a informçao do SPED no codigo operacional do ERP. Puta que pariu.
Enfim, entao isso eh um assunto um pouco secondario na Akretion, como sempre falamos, temos mais interesse em projetos mais simples que nem tem SPED dentro do ERP. Mas as vezes eh preciso de projeto maiores porque sao eles que geralmente bancam a P&D para fazer o restante. Enfim hoje nossa prioriadade eh mesmo finalizar a migraçao do codigo da OCA para a v10. O tempo de finalizar isso e vai sair a v12. Entao mesmo que iremos analisar os PRs na OCA se tiverem respeitando as regras da OCA, na Akretion nao iremos ter muito foco na v11 e provavelmente iremos dar mais foco na v12.
Mas como ja falei uns 6 meses atras aqui,da v11 para a v10, o codigo do modulo de stock (entao mrp etc...) mudou bastante. Para nos era inviavel migrar alguns clientes da v8 para a v11 direitamente pois ia custar demais de rever todas customizaçoes de stock/mrp. Mas tb ficar na v8 ia ficar logo inviavel tb. Entao a v10, que eh uma versao muito boa era uma boa versao para migrar esses clientes da v8 antes de migra-los para a v12 ou versoes superiores.
Quero ainda enfatisar que hoje o gerador dos objetos do SPED no Odoo pesa menos de 400 linhas de codigo. Os objetos geridos do SPED no Odoo pesam um pouco menos de 8000 linhas. Esses objetos sao indepedentes dos outros objetos da localizaçao, por isso eh facil usa-los para v8, v9, v10 ou v11 independemente da evoluiçao da localizaçao. Mas enfim, tb para dizer, que ao contrario de um fork por ai, nao se trata de uma localizaçao secreta gigantesca nao, mas apenas de um modulo razoavelmente pequeno.
Ainda falta o codigo para serializar os objetos Odoo em objetos python-sped para gerir os relatorios mas imagino que seria umas 200 linhas no maximo ja que os campos tem os mesmos nomes e que nao tem mapping manual necessario entao.
Ai depois claro precisa jogar os dados das notas fiscais Odoo e outros dados nesses objetos do SPED. A prioridade sera da NFe, importando os XMLs para preencher esses objetos Odoo. Sendo assim, sera possivel fazer os SPED de outras instancias Odoo ou ate de outros ERP a partir do modulo Odoo. Tb, com essa estrategia de ter objetos concretos do SPED, quando ainda nao existe mapping dos XML ou dados do Odoo, ainda eh possivel preencher na mao. Entao uma empresa que so tem umas linhas para detalhar digamos de amortização por examplo poderia preencher essa informaçao manualmente no modulo de SPED e depois poderia ser diretamente pego do Odoo qdo alguem implementar esse mapping especificamente, Dessa forma a gente sai do tudo o nada que nao eh muito amigo do open source.
Por fim, a Akretion sempre foi pioneira na questao da consolidaçao fiscal no Odoo, com as delcaraçoes de taxas e DEB/DES INTRASTAT na Europa que que foi trabalhando nisso para um cliente Europeo que Renato e mim bolamos os primeiros conceitos fiscais do Brasil como codigo de operaçao fiscal, regras de posiçao fiscal etc no Odoo la em 2010. E ai nesses dias vou migrar os modulos de DEB INTRASTAT da OCA da v10 para a v11 e isso eh bom para ter convergencia com a estrategia da OCA na Europa. Inclusive, a forma de tratar o INTRASTAT na Europa eh exactemente com modelos fiscais independente dos modulos operacionais do Odoo, pelos motivos que eu ja descrevi em cima.
Enfim em breve mais informaçoes sobre isso.