Giter VIP home page Giter VIP logo

cnab240's Introduction

CNAB 240

Build Status

Esta é uma implementação do Layout Padrão Febraban 240 posições, e algumas variações. Provavelmente vou adicionar o CNAB 400 na mesma gem. Talvez adicione também um puxadinho para voce poder usar o ActiveRecord.

Os padrões da febraban são fruto de incompêtencia que ultrapassa os limites do patético. Espero que essa implementação lhe poupe algumas horas de sofrimento.

Cada banco tem uma visão particular sobre o padrão, os bancos:

  • Subdividem os campos em outros menores;
  • Trocam o nome e utilidade de campos;

Tudo isso para que eu sumisse do Rio de Janeiro e não fizesse a descoberta de ser King Size.

Dê um git clone no master do repositório para que voce tenha acesso aos modelos (sem RDoc ainda).

Adicionar mais implementações é simples. Leia os testes. Aos poucos vou adicionando alguma documentação.

Variações suportadas:

Somente pagamentos. Veja pasta docs/

  • Layout Padrão FEBRABAN 240 posições V8.6
  • Layout FEBRABAN 240 posições V80 (Itaú - SISPAG)

Instalação

Adicione ao Gemfile:

gem 'cnab240'

execute:

$ bundle

Ou adicione no seu chiqueiro:

$ gem install cnab240

Como usar

Por enquanto sem muita documentação (veja os testes). Você vai precisar ler os documentos da pasta docs para se situar, são muitos campos com nomes bem parecidos. Utilize a documentação dos bancos/febraban como referência.

Em algum lugar voce pode criar um arquivo de inicialização (não é obrigatório):

A única configuração suportada até o momento é a de valores-padrão para campos:

	Cnab240.setup do |config|
		# configuracoes aqui
		config.defaults[:empresa_tipo] = "1"
	end

Voce pode criar arquivos, e adicionar lotes. A versão é automaticamente a 8.6, se preferir voce pode escolher outra versão. Utilize o operador << do arquivo para adicionar lotes.

	arquivo = Arquivo::Arquivo.new
	lote = Lote.new(:operacao => :pagamento, :tipo => :remessa)
	# preencha os zilhoes de campos
	arquivo << lote
	arquivo.save_to_file("arquivo.test")

Para adicionar segmentos utilize o operador << do lote.

	arquivo = Arquivo::Arquivo.new('V86')
	lote = Lote.new(:operacao => :pagamento, :tipo => :remessa)
	lote << :a
	# preencha os zilhoes de campos
	lote.segmentos[0].favorecido_banco = '1'
	arquivo << lote
	arquivo.save_to_file("arquivo.test")

Ler do arquivo:

	arquivos = Arquivo::Arquivo.load_from_file("spec/tmp/arquivo.test") # array de objetos Arquivo
	puts arquivos[0].header

Usando Helpers

Voce pode usar os helpers que vao preencher os campos automaticamente, se possivel:

	pagamento = PagamentoItau.new({ 
		:empresa_tipo => '2',
		:empresa_numero => '07946982000133',
		:empresa_nome => 'LOJA DO BRASIL LTDA',
		:empresa_agencia_codigo => '663',
		:empresa_conta_numero => '01540',
		:empresa_agencia_conta_dv => '0',
		:arquivo_sequencia => '1',

		:endereco_logradouro => 'RUA GETULIO VARGAS',
		:endereco_numero => '3646',
		:endereco_cidade => 'PORTO VELHO',
		:endereco_cep => '76000000',
		:endereco_estado => 'RO',
		:servico_tipo => '98', # pagamentos - diversos
		:servico_forma => '41', # doc, ted, etc
	})

	pagamento << { 
		:favorecido_banco => '001',
		:favorecido_agencia => '2280',
		:favorecido_conta => '335959',
		:favorecido_agencia_conta_dv => '9',
		:credito_seu_numero => '1',
		:credito_data_pagamento => '03082012',
		:credito_valor_pagamento => '500000',
		:numero_inscricao => '19375208168',
		:favorecido_nome => 'EDUARDO MOURAO'
	}

	pagamento.string

Considerações

  • Tudo string. O arquivo é de strings, a implementação também;
  • Padding é automático.

Contribuindo

Adicione testes, abra o pull request. Sem bikeshedding, wizardry ou craftismos pro meu lado!!! O código aqui deve ser de simples entendimento.

cnab240's People

Contributors

eduardordm avatar

Watchers

Sandro Duarte avatar Luiz Claudio Garcia avatar Lênio Ferretto avatar James Cloos avatar Mauricio Menegaz avatar

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.