Git Product home page Git Product logo

eficaz-sistemas / eficazframework.sped Goto Github PK

View Code? Open in Web Editor NEW
11.0 5.0 2.0 4.15 MB

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).

Home Page: https://eficazcs.com.br

License: MIT License

C# 99.98% PowerShell 0.02%
ecf efd efd-contribuicoes ecd sped sped-fiscal nfe cte xml

eficazframework.sped's Introduction

EficazFramework.SPED

EficazFramework.SPED

DotNet Versions Nuget Azure DevOps builds Azure DevOps tests (compact) Azure DevOps coverage Licence Discord Twitter Follow EFD ICMS/IPI EFD Contribuições EFD-Reinf ECD ECF LCDPR

Bem vindo ao projeto EficazFramework.SPED.

Este projeto tem por finalidade facilitar as tarefas de leitura, auditoria e escrita das mais diversas escriturações e arquivos eletrônicos governamentais.

Desenvolvida para seguir a versão recente do .NET, pretende-se atender a todas as plataformas por ele antendidas, evitando instruções específicas que possam limitar seu uso apenas em Windows Desktop, como nas versões anteriores.

Esta versão conta atualmente com uma quantidade maior de instruções sem plataforma específica, e foi estruturada para utilização dos recursos de Implantação e Entrega Contínua de aplicações (Azure DevOps).

docs

Schema Serviços Uso em Produção WebServices
CT-e e CT-eOS ⚠️
DAPI (MG) N/A
e-CredAc, portarias CAT 83/09 e 207/09 N/A
e-Ressarcimento portaria CAT 42/18 N/A
ECD N/A
ECF N/A
EFD ICMS / IPI Static Badge N/A
EFD Contribuições N/A
EFD Reinf Static Badge
e-Social Static Badge ⚠️ ⚠️
GIA (SP) N/A
GNRE ⚠️
GIA (SP) N/A
NF-e / NFC-e
NFS-e ⚠️ ⚠️
Livro Caixa Digital do Produtor Rural Static Badge N/A
Classes complementares Static Badge
Static Badge
N/A N/A

Exemplos de Uso

Layouts baseados em arquivos de Texto (txt):

Leitura

System.IO.Stream stream = System.IO.File.OpenRead(@"C:\SPED\SPED-EFD-ICMS-IPI.txt");  
EficazFramework.SPED.Schemas.EFD_ICMS_IPI.Escrituracao escrituracao = new();  
escrituracao.Encoding = System.Text.Encoding.Default; //opcional  
await escrituracao.LeArquivo(stream);  

Escrita

EficazFramework.SPED.Schemas.EFD_ICMS_IPI.Escrituracao escrituracao = new();  
escrituracao.Encoding = System.Text.Encoding.Default; //opcional  
escrituracao.Versao = "017"; //opcional  

var reg0000 = new Registro0000(null, escrituracao.Versao)  
{  
    Finalidade = Primitives.Finalidade.Original,  
    DataInicial = new System.DateTime(2022, 7, 1),  
    DataFinal = new System.DateTime(2022, 7, 31),  
    RazaoSocial = "Empresa Exemplo S/A",  
    CNPJ = "00123456000100",  
    UF = "MG",  
    InscricaoEstadual = "00112345600001",  
    MunicipioCodigo = "3129707",  
    Perfil = Perfil.B,  
    Atividade = Primitives.TipoAtividade.Outros  
};  
escrituracao.Blocos["0"].Registros.Add(reg0000);  

// TODO: Adicionar demais registros em seus respectivos blocos...  

await escrituracao.EscreveArquivo(System.IO.File.Create(@"C:\SPED\SPED-EFD-ICMS-IPI.txt"));  

Layouts baseados em arquivos xml:

Leitura

using EficazFramework.SPED.Schemas.EFD_Reinf;

System.IO.Stream stream = System.IO.File.OpenRead(@"C:\SPED\SPED-EFD-REINF-EVT-R1000.xml");
var evento = new R1000()
{
    Versao = Versao.v2_01_02
};
evento.Read(stream);
stream.Dispose();

Escrita

using EficazFramework.SPED.Schemas.EFD_Reinf;

var evento = new R1000()
{
    Versao = Versao.v2_01_02,
    evtInfoContri = new R1000_EventoInfoContribuinte()
    {
        ideEvento = new IdentificacaoEvento()
        {
            tpAmb = Ambiente.ProducaoRestrita_DadosReais,
            procEmi = EmissorEvento.AppContribuinte,
            verProc = "2.2"
        },
        ideContri = new IdentificacaoContribuinte()
        {
            tpInsc = PersonalidadeJuridica.CNPJ,
            nrInsc = "12345678"
        },
        infoContri = new R1000EventoInfoContribuinte()
        {
            Item = new R1000Inclusao() // R1000Alteracao() ou R1000Exclusao()
            {
                idePeriodo = new IdentificacaoPeriodo()
                {
                    iniValid = $"{DateTime.Now.AddMonths(-1):yyyy-MM}"
                },
                infoCadastro = new R1000InfoCadastro()
                {
                    classTrib = "99",
                    indEscrituracao = ObrigatoriedadeECD.EntregaECD,
                    indDesoneracao = DesoneracaoCPRB.NaoAplicavel,
                    indAcordoIsenMulta = AcordoInternacionalIsencaoMulta.SemAcordo,
                    indSitPJ = SituacaoPessoaJuridica.Normal,
                    indSitPJSpecified = true,
                    contato = new R1000InfoCadastroContato()
                    {
                        nmCtt = "Pierre de Fermat",
                        cpfCtt = "47363361886",
                        foneFixo = "3535441234",
                        email = "[email protected]"
                    },
                    softHouse = new R1000InfoCadastroSoftwareHouse()
                }
            }
        }
    }
};

var xmlString = evento.ToString();
System.IO.Stream stream = System.IO.File.Create(@"C:\SPED\SPED-EFD-REINF-EVT-R1000.xml");

// Escrita, opção 1:
System.Xml.XmlDocument doc = new();
doc.LoadXml(xmlString);
doc.Save(stream);

// Outra forma de escrita:
using (var writer = new System.IO.StreamWriter(stream, System.Text.Encoding.UTF8))
{
    await writer.WriteAsync(xmlString);
    await writer.FlushAsync();
    writer.Dispose();
}

Pré-Requisitos

Versão Versão do .NET Suporte
6.2.x .NET 7; .NET 8
6.1.x .NET 6; .NET 7
6.0.x .NET 6

Contribuições

  • Ficaremos felizes por receber contribuições visando enriquecer a qualidade do projeto, além de manter os schemas das escriturações sempre atualizado com os layouts definidos pelos agentes reguladores.
  • Por gentileza solicitamos a leitura das Diretrizes de Contribuição antes de iniciar.

eficazframework.sped's People

Contributors

danielucindo avatar hclausing avatar otaviovb avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

Forkers

gcscript ernanicl

eficazframework.sped's Issues

[CT-e] WebServices - Consulta Protocolo

Implementar WebService 'CteConsulta' do CT-e que retorna a situação atual do documento, quanto a autorização, cancelamento, inexistência, etc.

Etapas:

  • Classes de payload,
  • Classes de contrato (request e response),
  • Soap Client,
  • Consumo do serviço,
  • Testes

[NF-e] WebServices - Consulta Cadastro

Implementar WebService 'ConsultaCadastro' da NF-e que retorna informações cadastrais cadastrados como emissores de NF-e.
Etapas:

  • Classes de payload,
  • Classes de contrato (request e response),
  • Soap Client,
  • Consumo do serviço,
  • Testes

[EFD-Reinf] Documentação

Incluir a documentação nas classes (Registros) e properties (Campos) do layout, para geração autotizada do manual utilizando a biblioteca DefaultDocumentation.

  • Preenchimento dos Eventos
  • Envio e parsing dos Retornos

[NF-e] WebServices - Autorização

Implementar WebService 'NFeAutorizacao' da NF-e que permite anexar enviar documentos fiscais modelo 55 e 65 para autorização de uso.

Classes de payload,
Classes de contrato (request e response),
Soap Client,
Consumo do serviço,
Testes

[CT-e] Refatoração das classes

  • Remover Attributes desnecessários, principalmente de subclasses;
  • Converter propriedades completas para Auto-Properties nas classes de contratos com WS;
  • Remover métodos de serialização/desserialização de subclasses.

[EFD-Reinf] Layout 2.1.1 (2023)

Tabelas: http://sped.rfb.gov.br/arquivo/show/5943

  • R-4010 - Pagamentos/créditos a beneficiário pessoa física
  • R-4020 - Pagamentos/créditos a beneficiário pessoa jurídica
  • R-4040 - Pagamentos/créditos a beneficiários não identificados
  • R-4080 - Retenção no recebimento
  • R-4099 - Fechamento/reabertura dos eventos da série R-4000

Estrutura do projeto

Atualmente, o projeto consiste na distribuição de uma única DLL e Pacote Nuget, contendo todas as escriturações que já possuem ou irão oferecer suporte, além de oferecer os serviços de consumo de API's e/ou WebServices, que é o caso da EFD-REINF.

Por meio desta Issue, propõe-se discutir se esta estrutura oferece o melhor caminho para distribuição/consumo da biblioteca.

Inicialmente, podemos enumerar três possibilidades:

A: Modelo Atual, separado apenas por namespaces

\Schemas\Escrituracao\Classes
\Services\Escrituracao\Classes

Prós: O pacote é autossuficiente e de fácil implantação nos mais diversos projetos.

Contras: Tamanho maior do assembly final para o pacote. Em soluções usando .NET 7+, com assembly trimming, ao menos em teoria, não se aplicaria este revés.

B: Separação em Schemas e Services em pacotes separados

Schemas.dll:
\Escrituracao\Classes
Services.dll:
\Escrituracao\Classes

Prós: Reduz a carga de dependências em aplicações que teoricamente não precisariam consumir os serviços, com por exemplo soluções de compliance tributário, análise e validação dos dados de arquivos/eventos já gerados.

Contras: Bem semelhante ao item A, uma vez que a grande maioria das classes ainda persistiria no assembly Schema.

C: Separação por Obrigação Acessória (schema) em múltiplos pacotes, contendo também a implementação de seus serviços, quando aplicáveis

Core.dll: (utilitários em geral)
Ecd.dll
EfdIcmsIpi.dll
Nfe.dll
(e muitas outras...)

Prós: Talvez seja o modelo mais democrático possível. Soluções mais voltadas ao varejo poderiam referenciar apenas as dependências relativas à emissão de documentos fiscais, enquanto soluções de compliance tributário poderiam ignorar schemas que não estão voltados ao projeto SPED.

Contras: Uma solução contábil/fiscal completa faria referência a praticamente todas os pacotes, causando um grande número de pacotes instalados.

[LCDPR] Testes

Escriturar testes de unidade para escritura e leitura de todos os registros.

  • Bloco 0
  • Bloco Q

[NF-e] WebServices - Distribuição DF-e

Implementar WebService 'NFeDistribuicaoDFe' da NF-e que permite obter os documentos fiscais emitidos contra um CNPJ ou CPF dos últimos 90 dias.

Etapas:

  • Classes de payload,
  • Classes de contrato (request e response),
  • Soap Client,
  • Consumo do serviço,
  • Testes

[NF-e] WebServices - Inutilização

Implementar WebService 'NfeInutilizacao' da NF-e que solicita a inutilização de uma faixa de numeração de documentos.

Etapas:

  • Classes de payload,
  • Classes de contrato (request e response),
  • Soap Client,
  • Consumo do serviço,
  • Testes

[e-Social] Refatoração das classes

  • Remover Attributes desnecessários, principalmente de subclasses;
  • Converter propriedades completas para Auto-Properties nas classes de contratos com WS;
  • Remover métodos de serialização/desserialização de subclasses.

[EFD Reinf] Versionamento dos eventos

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();
                }
            }
        }

[ECF] Testes

Escriturar testes de unidade para escritura e leitura de todos os registros.

  • Bloco 0
  • Bloco C
  • Bloco E
  • Bloco J
  • Bloco K
  • Bloco L
  • Bloco M
  • Bloco N
  • Bloco P
  • Bloco U
  • Bloco X
  • Bloco Y

[NF-e] WebServices - Download NF

Implementar WebService 'DownloadNF' da NF-e que permite efetuar o download do arquivo XML da NF-e, desde que autorizada.

Etapas:

  • Classes de payload,
  • Classes de contrato (request e response),
  • Soap Client,
  • Consumo do serviço,
  • Testes

[EFD ICMS / IPI] Testes

Escriturar testes de unidade para escritura e leitura de todos os registros.

  • Bloco 0
  • Bloco B
  • Bloco C
  • Bloco D
  • Bloco E
  • Bloco G
  • Bloco H
  • Bloco I
  • Bloco K

[EFD Contribuições] Testes

Escriturar testes de unidade para escritura e leitura de todos os registros.

  • Bloco 0
  • Bloco 1
  • Bloco A
  • Bloco C
  • Bloco D
  • Bloco F
  • Bloco G
  • Bloco I
  • Bloco M
  • Bloco P

[NF-e] WebServices - Status dos Serviços

Implementar WebService 'NfeStatusServico' da NF-e que retorna o estado de funcionamento dos serviços da NF-e.

Etapas:

  • Classes de payload,
  • Classes de contrato (request e response),
  • Soap Client,
  • Consumo do serviço,
  • Testes

Exemplos

Adicionar uma página MD para cada obrigação assessória coberta neste projeto contento uma breve introdução e exemplo de uso.

  • CNAB240
  • CT-e / CTe-OS
  • ECD
  • ECF
  • EFD Contribuições
  • EFD ICMS / IPI
  • EFD-Reinf
  • [MG] DAPI
  • [SP] GIA
  • [SP] e-CredAC (Portaria CAT 207/09)
  • [SP] e-CredAC (Portaria CAT 83/09)
  • [SP] e-Ressarcimento (Portaria CAT 42/2018)
  • GNRE
  • LCDPR
  • NFS-e
  • NF-e / NFC-e
  • SAT CF-e
  • Sintegra
  • e-Social

`Dúvida` Criação de registro para escrituração do LCPDR

Na documentação do projeto possui um exemplo para criação do registro dessa forma:

image

No entanto, por que existe a criação do registro como nulo, sendo que no método override do construtor, não cai dentro do If:
image

Por qual motivo está havendo o override dessa classe base registro?

[ECD] Testes

Escriturar testes de unidade para escritura e leitura de todos os registros.

  • Bloco 0
  • Bloco I
  • Bloco J
  • Bloco K

`Dúvida` Decisão a ser tomada

Boa tarde @HClausing, tudo bem?

public static XmlDocument NFeToXmlDocument(object instance)
    {
        if (instance is null) return null;

        string tmp = ((XmlElement)((XmlNode[])instance)[1]).OuterXml;
        var xml = CreateXmlDocument();
        xml.LoadXml(tmp);
        return xml;
    }

Como pode-se perceber no trecho destacado, a conversão de uma instância de um objeto para elemento XML, no entanto, gostaria de saber, se há algum motivo em especial para utilizar uma instância de object?

Pois caso seja a necessidade de receber vários tipos de parâmetros é possível utilizar a sobreescrição de métodos.

[CT-e] WebServices - Distribuição DF-e

Implementar WebService 'CTeDistribuicaoDFe' do CT-e que permite obter os documentos fiscais emitidos contra um CNPJ ou CPF dos últimos 90 dias.

Etapas:

  • Classes de payload,
  • Classes de contrato (request e response),
  • Soap Client,
  • Consumo do serviço,
  • Testes

[NF-e] WebServices - Consulta Protocolo

Implementar WebService 'NfeConsulta' da NF-e que retorna a situação atual do documento, quanto a autorização, cancelamento, inexistência, etc.

Etapas:

Classes de payload,
Classes de contrato (request e response),
Soap Client,
Consumo do serviço,
Testes

[EFD ICMS / IPI] Layout 017 (2023)

Guia Prático: http://sped.rfb.gov.br/arquivo/download/6032

Novos Registros:

  • 0221 Correlação entre códigos de itens comercializados;
  • C855 Observações do lançamento fiscal (Código 59);
  • C857 Outras obrigações tributárias, ajustes e informações de valores provenientes de documento fiscal;
  • C895 Observações do lançamento fiscal (Código 59);
  • C897 Outras obrigações tributárias, ajustes e informações de valores provenientes de documento fiscal;
  • D700 Nota Fiscal Fatura Eletrônica de Serviços de Comunicação – NFCom (Código 62);
  • D730 Registro analítico Nota Fiscal Fatura Eletrônica de Serviços de Comunicação – NFCom (Código 62) ;
  • D731 Informações do fundo de combate à pobreza – FCP – (Código 62);
  • D735 Observações do lançamento fiscal (Código 62);
  • D737 Outras obrigações tributárias, ajustes e informações de valores proveniente de documento fiscal;
  • D750 Escrituração consolidada da Nota Fiscal Fatura Eletrônica de Serviços de Comunicação – NFCom (Código 62);
  • D760 Registro analítico da escrituração consolidada da Nota Fiscal Fatura Eletrônica de Serviços de Comunicação – NFCom (Código 62);
  • D761 Informações do fundo de combate à pobreza FCP – (Código 62).

NOTA:
Testes, cobertura de código e demais práticas de compliance serão adotadas em milestones futuras.

[NF-e] WebServices - Envio de Eventos

Implementar WebService 'RecepcaoEvento' da NF-e que permite anexar eventos a uma Nota Fiscal Eletrônica já autorizada anteriormente.

Estes eventos, estão inclusos, por exemplo:

  • Cancelamento,
  • Carta de Correção Eletrônica,
  • Manifesto de Ciência da Operação,
  • Manifesto de Operação Não Realizada,
  • Manifesto de Desconhecimento da Operação,
  • Manifesto de Operação Confirmada,
  • etc.

Etapas:

  • Classes de payload,
  • Classes de contrato (request e response),
  • Soap Client,
  • Consumo do serviço,
  • Testes

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.