-
Notifications
You must be signed in to change notification settings - Fork 56
Arquitetura
A arquitetura do python-sped está sendo organizada de forma a diminuir o retrabalho e facilitar o reuso de componentes, para isso, estamos identificados partes comuns entre os diversos módulos do SPED para isola-los em um bloco comum. As peculiaridades de cada módulo serão tratadas de forma isolada.
Também é um dos objetivos da arquitetura do python-sped garantir com o menor esforço possível que os arquivos gerados sejam validados sem erros pelo prograda validador da receita (PVA).
A divisão do python-sped é feito com um módulo principal composto de diversos submódulos mais específicos. Quanto mais interno o módulo mais especifico ele é.
Módulo base contendo tudo que for de comum entre os diversos módulos do SPED.
Módulo que contem os registros, blocos e demais itens relativos ao ECD (SPED Contábil).
Módulo que contem os registros, blocos e demais itens relativos ao ECF.
Módulo que contem os registros, blocos e demais itens relativos ao EFD-ICMS/IPI (SPED Fiscal).
Módulo que contem os registros, blocos e demais itens relativos ao EFD-PIS/COFINS (EFD Contribuições).
Toda as funções, registros e operações que sejam iguais/semelhantes entre os módulos do SPED devem ficar no módulo sped. Assim está garantido o reuso entre os módulos inferiores estás similariedades.
Classe abstrata que contém toda a funcionalidade base para ler e salvar arquivos digitais do SPED.
No momento da leitura, está classe é responsável por ler do arquivo e instanciar as classes de registros correspondentes, colocando cada registro em seu bloco correspondente.
No momento da escrita, está classe é responsável por salvar os registros na ordem especifica, adicionando corretamente os registros de fechamento de arquivo.
Em implementações mais especificas, a classe ArquivoDigital contém os blocos daquele determinado módulo e se necessário lógica adicional.
Classe abstrata que contém toda a funcionalidade para ordenar os registros dentro de um bloco, criando ainda os registros de abertura e fechamento de bloco conforme quantidade de registros deste bloco, indicando a existência de movimento e a quantidade de registros daquele bloco.
Em implementações mais especificas, a classe Bloco contém a especificação de quais são os registros de abertura daquele bloco e se necessário lógica adicional.
Classe abstrata que contém toda a funcionalidade para transforma um linha do arquivo digital em seu correspondente registro, instanciando e validando os campos adequadamente.
Em implementações mais especificas, a classe Registro contém a especificação de quais são os campos daquele registro e se necessário lógica adicional.
Classe abstrata que contém a funcionalidade para ler e gravar determinado campo de um registro, bem como todas as informações necessárias para a validação do mesmo.
Para cada especificação de um campo (ex. campo numérico) deverá ser criada um subclasse da classe campo capaz de tratar tal tipo especifico bem como garantir sua consistência.
Exceto em casos muito específicos e ainda a serem identificados, todas as subclasses deverão estar no módulo sped.campos para garantir que serão reaproveitados por todos os módulos.