Project

sped2sql

0.0
No commit activity in last 3 years
No release in over 3 years
Transforma um arquivo SPED em um arquivo SQL pronto para ser importado para MySQL
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
 Dependencies

Development

~> 3.0

Runtime

~> 10.3
 Project Readme

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