orochasamuel / fiscalbr-net

Para facilitar seu dia a dia como desenvolvedor \o/
MIT License
91 stars 48 forks source link

[FEATURE] Detectar versão do layout automaticamente na leitura #109

Closed orochasamuel closed 12 months ago

orochasamuel commented 1 year ago

Usar C500 como exemplo

orochasamuel commented 12 months ago

Feature exclusiva do ArquivoEFDFiscalV2.

Agora é feita a detecção da versão ao ler um arquivo/linha.


private int DetectarVersaoLeiauteParaLeitura(Type tipo, int versaoDesejada, int qtdCampos)
{
    // TODO: Refatorar e melhorar
    var versaoAtual = versaoDesejada;
    var props = ObterListaComPropriedadesDoTipo(tipo, versaoAtual);
    while (props.Count > qtdCampos)
    {
        if (versaoAtual == 2) break;

        versaoAtual--;

        props = ObterListaComPropriedadesDoTipo(tipo, versaoAtual);
    }
    return versaoAtual;
}

PS: A versão de retorno SEMPRE será a versão mais próxima com a quantidade de campos, exemplo, o Registro C500 da EFD Fiscal sofreu muitas alterações, há campos na versão 2, 3, 14 e 16, se a quantidade de campos do registro lido for menor do que a quantidade de campos na versão desejada do layout será usada a versão imediatamente anterior que corresponda a essa quantidade.


 // Estou criando o arquivo da EFD Fiscal na versão 14 (essa versão será usada na escrita)
var c500daEfdFiscal = new FiscalBr.EFDFiscal.ArquivoEFDFiscalV2(VersaoLeiauteSped.V14);

// Todavia, estou lendo um arquivo com informações na versão 10 do layout
c500daEfdFiscal.LerArquivo("SpedTestC500v10.txt");

// A versão final usada será a 13, pois da versão 3 até a 13 os campos deste registro não foram alterados

Alterações feitas no commit https://github.com/orochasamuel/fiscalbr-net/commit/6ab7a0f29bef2d9701076b3b2b98e8f1c28a3726.