Closed RenatoGuarilhaCMCorp closed 1 year ago
@RenatoGuarilhaCMCorp primeiramente obrigado pela contribuição.
Analisei e não notei nenhuma breaking change na leitura. Caso o dev não informe a versão do layout (ficando 0) não será alterado nada. Mas caso queira a leitura retroativa deverá informar uma versão, correto?
Notei que você não criou nenhum teste para validar a leitura, pode providenciar?
Vou aprovar o PR e deixar disponível para quem quiser usar a feature.
EDIT: @RenatoGuarilhaCMCorp o build de teste do Github falhou. Vou segurar esse merge até que a leitura esteja passando.
Vida longa e próspera 🖖
Obrigado, eu que agradeço bastante trabalho poupado. Ainda estou ajustando algumas coisas que deixo para um próximo pull request.
Na verdade na leitura, pelo menos o método que eu usei, não tinha onde passar a versão, e dai eu pego do próprio bloco 0, e uso nos demais blocos.
Att.,
Obrigado, eu que agradeço bastante trabalho poupado. Ainda estou ajustando algumas coisas que deixo para um próximo pull request.
Na verdade na leitura, pelo menos o método que eu usei, não tinha onde passar a versão, e dai eu pego do próprio bloco 0, e uso nos demais blocos.
Att.,
Entendi. É uma abordagem inteligente pegar diretamente do 000, isso mitiga a necessidade de criar um parâmetro ou mudar a assinatura do método.
@RenatoGuarilhaCMCorp mais uma vez, obrigado pela contribuição.
Resolvi aproveitar o que você havia feito e fiz algumas pequenas modificações, todas estão no commit https://github.com/orochasamuel/fiscalbr-net/commit/2b414aab49e7f2dc2bde11ef7292271459654a0a.
Agora na classe ArquivoSped
existe um método chamado ObterVersaoLayout()
para identificar a Versão do Layout do arquivo que será lido, pode ser usado na EFDFiscal
, bem como na EFDContribuições
e em outros arquivos.
Caso seja um arquivo "parcial", sem o Registro 0000, será adotada versão da assinatura do método.
Caso não tenha sido informada a versão na assinatura do método, será adotada a última versão do layout (até o presente momento é a versão 17 para a EFD Fiscal).
Corrigi um erro na leitura do arquivo quando não existiam linhas de assinaturas no final do arquivo, a lib "entendia" que sim. Agora funciona perfeitamente para fazer a leitura parcial do arquivo, exemplo, só os Registros C100, só os D100, etc.
BREAKING CHANGES
Alterei algumas tipagens de long
, int
, decimal
, double
para string
, alguns campos de número de documento estavam com tipagens de valores numéricos, alterei para string
.
E criei alguns testes para garantir que a quantidade de propriedades é a correta para a versão requerida.
[Fact]
public void Teste_Leitura_Quantidade_Propriedades_EFDFiscal_C500_V2()
{
var line = "|C500|1|0|CLIENTE 1 (USAR CPF/CNPJ PREFERENCIALMENTE)|66|00|9999|000|06|123456789|01012009|01012009|99,99|9,99|0,00|0,00|0,00|0,00|90,00|22,50|0,00|0,00|CODINF|1,49|6,84|{Environment.NewLine}";
// ...
var propriedades = FiscalBr.Common.Sped.LerCamposSped.ObtemListaComPropriedadesOrdenadas(objectType, 2);
Assert.Equal(25, propriedades.Count);
}
[Fact]
public void Teste_Leitura_Quantidade_Propriedades_EFDFiscal_C500_V3()
{
var line = "|C500|1|0|CLIENTE 1 (USAR CPF/CNPJ PREFERENCIALMENTE)|66|00|9999|000|06|123456789|01012009|01012009|99,99|9,99|0,00|0,00|0,00|0,00|90,00|22,50|0,00|0,00|CODINF|1,49|6,84|1|01|{Environment.NewLine}";
// ...
var propriedades = FiscalBr.Common.Sped.LerCamposSped.ObtemListaComPropriedadesOrdenadas(objectType, 3);
Assert.Equal(27, propriedades.Count);
}
[Fact]
public void Teste_Leitura_Quantidade_Propriedades_EFDFiscal_C500_V10()
{
var line = "|C500|1|0|CLIENTE 1 (USAR CPF/CNPJ PREFERENCIALMENTE)|66|00|9999|000|06|123456789|01012009|01012009|99,99|9,99|0,00|0,00|0,00|0,00|90,00|22,50|0,00|0,00|CODINF|1,49|6,84|1|01|{Environment.NewLine}";
// ...
var propriedades = FiscalBr.Common.Sped.LerCamposSped.ObtemListaComPropriedadesOrdenadas(objectType, 10);
Assert.Equal(27, propriedades.Count);
}
[Fact]
public void Teste_Leitura_Quantidade_Propriedades_EFDFiscal_C500_V14()
{
var line = "|C500|1|0|CLIENTE 1 (USAR CPF/CNPJ PREFERENCIALMENTE)|66|00|9999|000|06|123456789|01012009|01012009|99,99|9,99|0,00|0,00|0,00|0,00|90,00|22,50|0,00|0,00|CODINF|1,49|6,84|1|01|01234567890123456789012345678901234567890123|1||9|1234|3.1.01.01.001|{Environment.NewLine}";
// ...
var propriedades = FiscalBr.Common.Sped.LerCamposSped.ObtemListaComPropriedadesOrdenadas(objectType, 14);
Assert.Equal(33, propriedades.Count);
}
[Fact]
public void Teste_Leitura_Quantidade_Propriedades_EFDFiscal_C500_V16()
{
var line = @"|C500|1|0|CLIENTE 1 (USAR CPF/CNPJ PREFERENCIALMENTE)|66|00|9999|000|06|123456789|01012009|01012009|99,99|9,99|0,00|0,00|0,00|0,00|90,00|22,50|0,00|0,00|CODINF|1,49|6,84|1|01|01234567890123456789012345678901234567890123|1||9|1234|3.1.01.01.001|06|1234|1111|123456789|01012009|1,00|1,00|";
// ...
var propriedades = FiscalBr.Common.Sped.LerCamposSped.ObtemListaComPropriedadesOrdenadas(objectType, 16);
Assert.Equal(40, propriedades.Count);
}
[Fact]
public void Teste_Leitura_Quantidade_Propriedades_EFDFiscal_C500_V17()
{
var line = @"|C500|1|0|CLIENTE 1 (USAR CPF/CNPJ PREFERENCIALMENTE)|66|00|9999|000|06|123456789|01012009|01012009|99,99|9,99|0,00|0,00|0,00|0,00|90,00|22,50|0,00|0,00|CODINF|1,49|6,84|1|01|01234567890123456789012345678901234567890123|1||9|1234|3.1.01.01.001|06|1234|1111|123456789|01012009|1,00|1,00|";
// ...
var propriedades = FiscalBr.Common.Sped.LerCamposSped.ObtemListaComPropriedadesOrdenadas(objectType, 17);
Assert.Equal(40, propriedades.Count);
}
EDIT
Resolvi incluir as alterações direto na branch master pois eram poucas linhas e se o PR tivesse entrado na branch iria quebrar os testes já existentes.
Mais uma vez, obrigado pela contribuição.
Vida longa e próspera 🖖
Boa noite, segue minha contribuição para análise, referente ao tratamento de leitura de arquivos antigos (fiz somente no EFD, mas é fácil de replicar no SPED Contribuições.
A solução leva em consideração a versão do registro 000 na leitura dos outros registros,