Eficaz-Sistemas / EficazFramework.SPED

Biblioteca para leitura, auditoria e escrita das obrigações acessórias, documentos e escriturações do projeto SPED (Federal, B2G), Operações Financeiras (B2B) e documentos fiscais eletrônicos (NFe, CTe, NFSe).
https://eficazcs.com.br
MIT License
12 stars 3 forks source link

[EFD Reinf] Versionamento dos eventos #26

Closed HClausing closed 1 year ago

HClausing commented 2 years ago

Devemos implementar melhor versionamento desta obrigação assessória, uma vez que toda vez que uma nova versão é lançada pelo Governo, faz-se necessária clonar as classes para um novo namespace, uma vez que utiliza-se atributos XmlType e XmlRoot para definir o namespace do arquivo XML a ser gerado, conforme exemplo abaixo:

[System.CodeDom.Compiler.GeneratedCode("xsd", "4.6.1055.0")]
[Serializable()]
[DebuggerStepThrough()]
[DesignerCategory("code")]
[XmlType(AnonymousType = true, Namespace = "http://www.reinf.esocial.gov.br/schemas/evtInfoContribuinte/v2_01_01")]
[XmlRoot("Reinf", Namespace = "http://www.reinf.esocial.gov.br/schemas/evtInfoContribuinte/v2_01_01", IsNullable = false)]
public partial class R1000 : IEfdReinfEvt, INotifyPropertyChanged

Conforme citado na introdução, a proposta desta Issue consiste em remover tais atributos, definindo o namespace nos métodos IEfdReinfEvt.Serialize() e IEfdReinfEvt.Deserialize().

Partindo desta implementação, a definição do evento em classes ficaria totalmente limpa de atributos:

public partial class R1000 : IEfdReinfEvt, INotifyPropertyChanged

A escrita (serialização) do arquivo XML deverá passar o namespace (ou a verão em algum Enum ?) para que seja adicionado o namespace no ato da escrita:

        /// <summary>
        /// Serializa o evento da EFD-Reinf para a representação em string do conteúdo do XML.
        /// </summary>
        /// <returns>string XML value</returns>
        public string Serialize()
        {
            System.IO.StreamReader streamReader = null;
            System.IO.MemoryStream memoryStream = null;
            try
            {
                memoryStream = new System.IO.MemoryStream();
                sSerializer = DefineSerializer();
                using (var xmlwriter = XmlWriter.Create(memoryStream, new XmlWriterSettings()
                {
                    Indent = true,

                }))
                {
                    sSerializer.Serialize(xmlwriter, this, --> namespaceAQUI <--);
                }
                memoryStream.Seek(0L, System.IO.SeekOrigin.Begin);
                streamReader = new System.IO.StreamReader(memoryStream);
                return streamReader.ReadToEnd();
            }
            finally
            {
                if (streamReader != null)
                {
                    streamReader.Dispose();
                }

                if (memoryStream != null)
                {
                    memoryStream.Dispose();
                }
            }
        }
HClausing commented 1 year ago

Esta issue foi resolvida em #3 e #33