Giter VIP home page Giter VIP logo

sped2sql's Introduction

SPED2SQL

Code Climate Build Status Test Coverage

** SPED2SQL is a RubyGem to convert SPED tax data files into SQL. SPED2SQL reads the SPED file and matches it against a template in order to convert the data into its corresponding SQL format. You can also make it extensible by creating as many custom parsers as you want and attach it to the reading process **

SPED2SQL é uma RubyGem que converte arquivos SPED para arquivos SQL prontos para serem inseridos no banco de dados (caso precise criar as tabelas do SPED, de uma olhada nesse outro repositório: SPED Schema).

Atualmente apenas o template para a EFD ICMS IPI está disponibilizado, porém você pode implementar e customizar o seu próprio template (e se possível enviar de volta como contribuição).

Instalação

gem install sped2sql

Uso

Convertendo um arquivo EFD ICMS IPI para SQL

require 'sped2sql'

conversor = SPED2SQL::Conversor.new(caminho_arquivo_sped, :efd_icms_ipi)
conversor.converter!

# Salva o SQL em um arquivo texto
IO.write('caminho_destino_sql.sql', conversor.to_sql)

Verifique os SPECS para outros exemplos e o retorno SQL

Convertendo um arquivo SPED utilizando um template próprio

require 'sped2sql'

conversor = SPED2SQL::Conversor.new(caminho_arquivo_sped, caminho_template_txt)
conversor.converter!

# Salva o SQL em um arquivo texto
IO.write('caminho_destino_sql.sql', conversor.to_sql)

Veja um exemplo de template

Parsers

Por padrão duas operações (tasks) são executas durante a leitura de cada linha do SPED. São elas:

  • NormalizaSQL: Converte cada campo para o respectivo tipo de dado informado no template
  • AddHash: Adiciona um identificador único para cada registro

Para não utiliza-las, basta apenas instanciar o conversor explicitando as tasks vazias:

conversor = SPED2SQL::Conversor.new(arquivo_sped, arquivo_mapa, {tasks: :vazio})

Parsers customizados

É possível utilizar seus próprios parsers para serem executados como tasks a cada leitura de linha. Basta apenas que ele responda ao metodo call recebendo como argumento um hash contendo:

  • :original => linha original que está sendo lida no momento
  • :final => linha com as modificações feitas por outros parsers até o momento
  • :mapa => template mapeando o tipo de dado para cada registro do sped
  • :memoria => último registro lido de cada tabela
  • :saida => acumulador das leituras feitas até momento
  • :options => Opções enviadas na instaciação do conversor

E retorne o mesmo hash como a key final modificada com suas alterações (apenas modificações nessa key serão levadas em conta).

Neste exemplo, um simples parser que adiciona a hora atual na última coluna da linha lida:

module MyParser
  def self.call(env)
    env[:final].push(Time.now)
    env
  end
end

Para utilizar apenas este parser na leitura do seu arquivo:

conversor = SPED2SQL::Conversor.new(arquivo_sped, arquivo_mapa, {tasks: [MyParser]})

Para utilizar os parsers default e acrescentar o seu ao final:

conversor = SPED2SQL::Conversor.new(arquivo_sped, arquivo_mapa)
conversor << MyParser

Contribuindo

Contribuições são bem vindas. Você pode contribuir de diversas maneiras:

  • Procurando e reportando erros (faça isso aqui)
  • Corrigindo erros e enviando as correções (Fork o projeto e envie um Pull Request)
  • Criando novos templates
  • Criando parsers úteis de propósito geral

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.