Estrutura de Classes
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 para representar 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 a SPEDRegister
, como explicado a seguir no capítulo #SPEDFiscalXXX e SPEDContribXXX.
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 uma dessas classes 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.
Padrão de Nomes dos Atributos
Dentro das classes de registros, os atributos devem seguir o seguinte padrão de nome:
rXX_NNNNN[_AUITO]
Onde:
- r - Prefixo 'r' fixo, para indicar que trata-se de um atributo de registro do SPED;
- XX - Número do atributo na documentação do SPED, sempre com dois dígitos. Utilizado para organizar o código e indicar a ordem de escrita dos atributos (número da coluna) no arquivo do SPED;
- _ - Separador do número e o nome do atributo.
- NNNNNN - Nome do atributo como definido no próprio arquivo do SPED.
- [_AUTO] - O sufixo _AUTO é adicionado aos atributos que não são definidos diretamente quando o registro é criado/atualizado, mas sim pelo método
calculateFields()
, conforme explicado com mais detalhes em #calculateFields().
Exemplos de atributos da classe SPEDFiscal0000
, que representa o registro 0000 do arquivo SPED Fiscal:
r02_COD_VER
r03_COD_FIN
r04_DT_INI
r05_DT_FIN
r06_NOME
r07_CNPJ
Annotation SPEDField
TODO Explicar a utilização da Annotation SPEDField sobre como identificar atirbutos e realizar validações.
Métodos Internos da SPEDRegister
A classe pai de todos os registros já inclui alguns métodos com código padrão, ou simplesmente para definir a assinatura que permite o tratamento uniforme de todos os registros. São eles:
writeFileRegister()
Este método tem uma implementação padrão com a finalidade de escrever o conteúdo do registro no formato do arquivo SPED esperado. Escreve tanto o registro atual, como chama recursivamente os registros filhos encontrados recursivamente.
![]() |
|
countRegister()
Este método tem uma implementação padrão que retorna o total de registros (linhas) que é gerado por este registro e seus registros filhos. Útil para criar os registros de contadores de registros 9900 exigidos pelos SPED Fiscal e Contribuições.
get01_Register()
Como em todos os registros o primeiro atributo é sempre o código que identifica o registro, a classe SPEDRegister
já mantém a assinatura do método get01_Register
como padrão na classe pai para facilitar o manuseio, diminuindo casts.
No entanto, esse método é abstrato e deve sempre ser implementado pela classe filha, e 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, isto é, cuja definição de valor esteja definida no manual do SPED com uma regra de preenchimento baseado em outros campos. Um exemplo comum são os registros acumuladores de valores totais de registros filhos.
O objetivo desse método é permitir que campos que são calculados com base nos valores de outros registros possam ser calculados só ao final, ao invés de a cada vez que um novo registro é criado ou alterado.
![]() |
|
![]() |
|
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.
![]() |
|
- updateCloseRegistersLineCount() este método cria/atualiza os registros finals (?990) que deve conter a quantidade de registros de cada bloco.