Mudanças entre as edições de "Estrutura de Classes"

De Wiki do Leitão
Ir para: navegação, pesquisa
Linha 1: Linha 1:
= SPEDFiscalFile e SPEDContribFile =
= SPEDFiscalFile e SPEDContribFile =


As classes '''SPEDFiscalFile''' e '''SPEDContribFile''' são a base da escrutura do arquivo de '''SPED Fiscal''' e '''SPED Contribuições'''. Elas representam o próprio arquivo, e sua estrutura interna os dados dos arquivos.
As classes <code>SPEDFiscalFile</code> e <code>SPEDContribFile</code> são a base da escrutura do arquivo de <code>SPED Fiscal</code> e <code>SPED Contribuições</code>, respectivamente. Elas representam o próprio arquivo, e sua estrutura interna os dados dos arquivos.




Linha 9: Linha 9:
== SPEDRegister ==
== SPEDRegister ==


=== Organização da Classe ===
* <code>SPEDRegister</code> é uma classe '''abstrata''' utilizada representa de forma genérica um registro de qualquer um dos arquivos SPED.
* Para cada registro dos arquivos do SPED, uma nova classe deve ser implementada, extendendo esta classe, como explicado a seguir no capítulo [[SPEDFiscalXXX e SPEDContribXXX]]
 
 
=== Organização Interna da Classe ===
 
Internamente


=== Métodos ===
=== Métodos ===

Edição das 19h21min de 18 de março de 2025

SPEDFiscalFile e SPEDContribFile

As classes SPEDFiscalFile e SPEDContribFile são a base da escrutura do arquivo de SPED Fiscal e SPED Contribuições, respectivamente. Elas representam o próprio arquivo, e sua estrutura interna os dados dos arquivos.


Para começar a montar um arquivo de SPED é necessário instanciar um desses objetos.


SPEDRegister

  • SPEDRegister é uma classe abstrata utilizada representa de forma genérica um registro de qualquer um dos arquivos SPED.
  • Para cada registro dos arquivos do SPED, uma nova classe deve ser implementada, extendendo esta classe, como explicado a seguir no capítulo SPEDFiscalXXX e SPEDContribXXX


Organização Interna da Classe

Internamente

Métodos

Esta classe abstrata representa um registro de qualquer um dos SPED e tem métodos gerais comuns a todos os registros:

  • writeFileRegister() que é capaz de escrever o conteúdo do registro e de seus filhos recursivamente no formato do arquivo do SPED;
  • countRegister() que retorna o total de registros que é gerado por este registro e seus registros filhos;

Também têm os seguintes métodos abstratos que precisam ser implementados para cada registro individualmente:

  • get01_Register() que deve retornar o nome código do registro (que, por via de regra, deve ser o sufixo da classe), por exemplo: "C800", conforme definido para o campo 01 do registro no manual do SPED;
  • calculateFields() Este método tem a finalidade de calcular todos os campos que são "calculáveis" a partir de outros, e que, por consequência, não precisam ser completados ou informados manualmente na criação do registro. Por exmeplo, registros acumuladores de valores de registros filhos.



Note 64.png
Nomes dos Atributos terminados com o sufixo _AUTO
Para sinalizar ao desenvolvedor de que um atributo do registro está sendo calculado de forma automática pelo método calculateFields() utilizamos a convenção de acrescentar o sufixo _AUTO no seu nome.

Assim, fica sempre evidente que qualquer valor definido neste registro provavelmente será alterado durante os cálculos automáticos de finalização do arquivo do SPED.


Além disso, é importante entender as seguintes características dessa classe para entender seu funcionamento:

  • os atributos das classes filhas devem começar com o prefixo rXX_ onde XX é o número da ordem do atributo, pois esse prefixo é utilizado para ordernar os valores dos atributos no momento de escrever o arquivo final;
  • os atributos devem receber a annotation SPEDField que permite definir o tipo do dado que é esperado pelo campo do SPED, permitindo que os valores já sejam validados de forma genérica pelo módulo.


SPEDFiscalXXX e SPEDContribXXX

As classes SPEDFiscalFile e SPEDContribFile são compostas por uma estrutura de classes que extendem SPEDRegister. Essas classes mantêm os prefixos SPEDFiscal e SPEDContrib seguidos do nome do registro correpondente.

Por exemplo: SPEDFiscalC800 representa o registro C800 do arquivo do SPED Fiscal.

Dentro de cada casse que representa um registro existem atributos para receber os valores dos campos desse registro, além de uma lista, hash ou referência para eventuais registros filhos que o registro possa ter.

SPEDFiscalBuilder e SPEDContribBuilder

Essas classes são classes utilitárias de métodos estáticos para facilitar a tarefa de montar e manipular os arquivos de SPED e seus registros. Nesta classe são disponiblizados vários métodos utilitádios, alguns, são caracterizados pelos seus prefixos, veja:

  • add[Registro]() - os métodos add tem a finalidade de adicionar um determinado registro dentro da estrutura do SPED. Os argumentos solicitados dependem da necessidade de cada registro e podem haver mais de uma opção para a criação de um mesmo registro. Os detalhes de cada método estarão escritos no seu javadoc.
Note 64.png
Relacionamento e Acumuladores
Note que na especificação do SPED há registros que são únicos, outros tem um relacionamento 1:N (que podem ou não ser únicos de acordo com uma chave). O método add criará o registro na estrutura se ele ainda não existir, porém, se for único duas ações podem ocorrer: os dados do registro atual serem substituídos, ou para registros que tem valores que se acumulam (como totais de venda agrupados por CFOP) o método add poderá acumular os valores automaticamente (somando o valor recebido com o valor já existente no campo). Verifique o javadoc de cada método para mais detalhes sobre seu funcionamento.
  • updateCloseRegistersLineCount() este método cria/atualiza os registros finals (?990) que deve conter a quantidade de registros de cada bloco.