bbrcobranca 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/CHANGELOG.md +1 -0
- data/LICENSE +20 -0
- data/README.md +12 -0
- data/Rakefile +13 -0
- data/lib/bbrcobranca.rb +196 -0
- data/lib/bbrcobranca/arquivos/logos/bancobrasil.eps +5402 -0
- data/lib/bbrcobranca/arquivos/logos/bancobrasil_carne.eps +5410 -0
- data/lib/bbrcobranca/arquivos/logos/bancobrasilia.eps +0 -0
- data/lib/bbrcobranca/arquivos/logos/bancobrasilia_carne.eps +0 -0
- data/lib/bbrcobranca/arquivos/logos/banconordeste.eps +0 -0
- data/lib/bbrcobranca/arquivos/logos/banconordeste_carne.eps +0 -0
- data/lib/bbrcobranca/arquivos/logos/banestes.eps +5198 -0
- data/lib/bbrcobranca/arquivos/logos/banestes_carne.eps +5206 -0
- data/lib/bbrcobranca/arquivos/logos/banrisul.eps +121 -0
- data/lib/bbrcobranca/arquivos/logos/banrisul_carne.eps +121 -0
- data/lib/bbrcobranca/arquivos/logos/bradesco.eps +5210 -0
- data/lib/bbrcobranca/arquivos/logos/bradesco_carne.eps +5214 -0
- data/lib/bbrcobranca/arquivos/logos/caixa.eps +5111 -0
- data/lib/bbrcobranca/arquivos/logos/caixa_carne.eps +5115 -0
- data/lib/bbrcobranca/arquivos/logos/cecred.eps +0 -0
- data/lib/bbrcobranca/arquivos/logos/cecred_carne.eps +0 -0
- data/lib/bbrcobranca/arquivos/logos/credisis.eps +0 -0
- data/lib/bbrcobranca/arquivos/logos/credisis_carne.eps +0 -0
- data/lib/bbrcobranca/arquivos/logos/hsbc.eps +5124 -0
- data/lib/bbrcobranca/arquivos/logos/hsbc_carne.eps +5128 -0
- data/lib/bbrcobranca/arquivos/logos/itau.eps +5318 -0
- data/lib/bbrcobranca/arquivos/logos/itau_carne.eps +5322 -0
- data/lib/bbrcobranca/arquivos/logos/santander.eps +5305 -0
- data/lib/bbrcobranca/arquivos/logos/santander_carne.eps +5313 -0
- data/lib/bbrcobranca/arquivos/logos/sicoob.eps +5375 -0
- data/lib/bbrcobranca/arquivos/logos/sicoob_carne.eps +5379 -0
- data/lib/bbrcobranca/arquivos/logos/sicredi.eps +5379 -0
- data/lib/bbrcobranca/arquivos/logos/sicredi_carne.eps +5383 -0
- data/lib/bbrcobranca/arquivos/logos/unicred.eps +0 -0
- data/lib/bbrcobranca/arquivos/logos/unicred_carne.eps +0 -0
- data/lib/bbrcobranca/arquivos/templates/modelo_carne.eps +1112 -0
- data/lib/bbrcobranca/arquivos/templates/modelo_generico.eps +0 -0
- data/lib/bbrcobranca/boleto/banco_brasil.rb +157 -0
- data/lib/bbrcobranca/boleto/banco_brasilia.rb +102 -0
- data/lib/bbrcobranca/boleto/banco_nordeste.rb +79 -0
- data/lib/bbrcobranca/boleto/banestes.rb +85 -0
- data/lib/bbrcobranca/boleto/banrisul.rb +94 -0
- data/lib/bbrcobranca/boleto/base.rb +256 -0
- data/lib/bbrcobranca/boleto/bradesco.rb +99 -0
- data/lib/bbrcobranca/boleto/bradesco_grb.rb +85 -0
- data/lib/bbrcobranca/boleto/caixa.rb +121 -0
- data/lib/bbrcobranca/boleto/cecred.rb +86 -0
- data/lib/bbrcobranca/boleto/credisis.rb +116 -0
- data/lib/bbrcobranca/boleto/hsbc.rb +94 -0
- data/lib/bbrcobranca/boleto/itau.rb +138 -0
- data/lib/bbrcobranca/boleto/itau_adimplere.rb +159 -0
- data/lib/bbrcobranca/boleto/santander.rb +84 -0
- data/lib/bbrcobranca/boleto/santander_adimplere.rb +73 -0
- data/lib/bbrcobranca/boleto/sicoob.rb +119 -0
- data/lib/bbrcobranca/boleto/sicredi.rb +142 -0
- data/lib/bbrcobranca/boleto/template/base.rb +25 -0
- data/lib/bbrcobranca/boleto/template/rghost.rb +315 -0
- data/lib/bbrcobranca/boleto/template/rghost_carne.rb +317 -0
- data/lib/bbrcobranca/boleto/unicred.rb +141 -0
- data/lib/bbrcobranca/calculo.rb +115 -0
- data/lib/bbrcobranca/calculo_data.rb +62 -0
- data/lib/bbrcobranca/currency.rb +69 -0
- data/lib/bbrcobranca/formatacao.rb +103 -0
- data/lib/bbrcobranca/formatacao_string.rb +35 -0
- data/lib/bbrcobranca/limpeza.rb +20 -0
- data/lib/bbrcobranca/remessa/base.rb +76 -0
- data/lib/bbrcobranca/remessa/cnab240/banco_brasil.rb +246 -0
- data/lib/bbrcobranca/remessa/cnab240/base.rb +512 -0
- data/lib/bbrcobranca/remessa/cnab240/base_correspondente.rb +299 -0
- data/lib/bbrcobranca/remessa/cnab240/caixa.rb +163 -0
- data/lib/bbrcobranca/remessa/cnab240/cecred.rb +151 -0
- data/lib/bbrcobranca/remessa/cnab240/sicoob.rb +226 -0
- data/lib/bbrcobranca/remessa/cnab240/sicoob_banco_brasil.rb +94 -0
- data/lib/bbrcobranca/remessa/cnab240/sicredi.rb +177 -0
- data/lib/bbrcobranca/remessa/cnab240/unicred.rb +9 -0
- data/lib/bbrcobranca/remessa/cnab400/banco_brasil.rb +169 -0
- data/lib/bbrcobranca/remessa/cnab400/banco_brasilia.rb +166 -0
- data/lib/bbrcobranca/remessa/cnab400/banco_nordeste.rb +160 -0
- data/lib/bbrcobranca/remessa/cnab400/banrisul.rb +155 -0
- data/lib/bbrcobranca/remessa/cnab400/base.rb +119 -0
- data/lib/bbrcobranca/remessa/cnab400/bradesco.rb +130 -0
- data/lib/bbrcobranca/remessa/cnab400/citibank.rb +138 -0
- data/lib/bbrcobranca/remessa/cnab400/credisis.rb +128 -0
- data/lib/bbrcobranca/remessa/cnab400/itau.rb +157 -0
- data/lib/bbrcobranca/remessa/cnab400/santander.rb +231 -0
- data/lib/bbrcobranca/remessa/cnab400/sicoob.rb +308 -0
- data/lib/bbrcobranca/remessa/cnab400/unicred.rb +143 -0
- data/lib/bbrcobranca/remessa/pagamento.rb +288 -0
- data/lib/bbrcobranca/retorno/base.rb +49 -0
- data/lib/bbrcobranca/retorno/cnab240/base.rb +42 -0
- data/lib/bbrcobranca/retorno/cnab240/caixa.rb +48 -0
- data/lib/bbrcobranca/retorno/cnab240/cecred.rb +102 -0
- data/lib/bbrcobranca/retorno/cnab240/santander.rb +95 -0
- data/lib/bbrcobranca/retorno/cnab240/sicoob.rb +99 -0
- data/lib/bbrcobranca/retorno/cnab240/sicredi.rb +79 -0
- data/lib/bbrcobranca/retorno/cnab400/banco_brasil.rb +127 -0
- data/lib/bbrcobranca/retorno/cnab400/banco_brasilia.rb +89 -0
- data/lib/bbrcobranca/retorno/cnab400/banco_nordeste.rb +112 -0
- data/lib/bbrcobranca/retorno/cnab400/banrisul.rb +42 -0
- data/lib/bbrcobranca/retorno/cnab400/base.rb +50 -0
- data/lib/bbrcobranca/retorno/cnab400/bradesco.rb +124 -0
- data/lib/bbrcobranca/retorno/cnab400/credisis.rb +115 -0
- data/lib/bbrcobranca/retorno/cnab400/itau.rb +143 -0
- data/lib/bbrcobranca/retorno/cnab400/santander.rb +57 -0
- data/lib/bbrcobranca/retorno/cnab400/unicred.rb +118 -0
- data/lib/bbrcobranca/retorno/retorno_cbr643.rb +49 -0
- data/lib/bbrcobranca/retorno/retorno_cnab240.rb +97 -0
- data/lib/bbrcobranca/retorno/retorno_cnab400.rb +70 -0
- data/lib/bbrcobranca/util/date.rb +20 -0
- data/lib/bbrcobranca/util/empresa.rb +28 -0
- data/lib/bbrcobranca/util/errors.rb +76 -0
- data/lib/bbrcobranca/validations.rb +232 -0
- data/lib/bbrcobranca/version.rb +6 -0
- data/spec/arquivos/CBR64310.RET +28 -0
- data/spec/arquivos/CNAB240.RET +74 -0
- data/spec/arquivos/CNAB240CECRED.RET +10 -0
- data/spec/arquivos/CNAB240SANTANDER.RET +8 -0
- data/spec/arquivos/CNAB240SICOOB.RET +10 -0
- data/spec/arquivos/CNAB240SICREDI.CRT +8 -0
- data/spec/arquivos/CNAB400.RET +54 -0
- data/spec/arquivos/CNAB400BANCOBRASILIA.RET +3 -0
- data/spec/arquivos/CNAB400BANCONORDESTE.RET +3 -0
- data/spec/arquivos/CNAB400BANRISUL.RET +3 -0
- data/spec/arquivos/CNAB400BRADESCO.RET +8 -0
- data/spec/arquivos/CNAB400CREDISIS.RET +3 -0
- data/spec/arquivos/CNAB400ITAU.RET +54 -0
- data/spec/arquivos/CNAB400SANTANDER.RET +54 -0
- data/spec/arquivos/CNAB400UNICRED.RET +3 -0
- data/spec/bbrcobranca_spec.rb +34 -0
- data/spec/brcobranca/base_spec.rb +170 -0
- data/spec/brcobranca/boleto/banco_brasil_spec.rb +334 -0
- data/spec/brcobranca/boleto/banco_brasilia_spec.rb +152 -0
- data/spec/brcobranca/boleto/banco_nordeste_spec.rb +161 -0
- data/spec/brcobranca/boleto/banestes_spec.rb +194 -0
- data/spec/brcobranca/boleto/banrisul_spec.rb +182 -0
- data/spec/brcobranca/boleto/bradesco_spec.rb +211 -0
- data/spec/brcobranca/boleto/caixa_spec.rb +161 -0
- data/spec/brcobranca/boleto/cecred_spec.rb +147 -0
- data/spec/brcobranca/boleto/credisis_spec.rb +159 -0
- data/spec/brcobranca/boleto/hsbc_spec.rb +172 -0
- data/spec/brcobranca/boleto/itau_spec.rb +262 -0
- data/spec/brcobranca/boleto/santander_spec.rb +143 -0
- data/spec/brcobranca/boleto/sicoob_spec.rb +193 -0
- data/spec/brcobranca/boleto/sicredi_spec.rb +190 -0
- data/spec/brcobranca/boleto/unicred_spec.rb +149 -0
- data/spec/brcobranca/boletos_em_lote_spec.rb +38 -0
- data/spec/brcobranca/calculo_data_spec.rb +33 -0
- data/spec/brcobranca/calculo_spec.rb +185 -0
- data/spec/brcobranca/currency_spec.rb +79 -0
- data/spec/brcobranca/formatacao_spec.rb +46 -0
- data/spec/brcobranca/formatacao_string_spec.rb +24 -0
- data/spec/brcobranca/limpeza_spec.rb +10 -0
- data/spec/brcobranca/remessa/base_spec.rb +67 -0
- data/spec/brcobranca/remessa/cnab240/banco_brasil_spec.rb +217 -0
- data/spec/brcobranca/remessa/cnab240/base_spec.rb +91 -0
- data/spec/brcobranca/remessa/cnab240/caixa_spec.rb +163 -0
- data/spec/brcobranca/remessa/cnab240/cecred_spec.rb +164 -0
- data/spec/brcobranca/remessa/cnab240/sicoob_banco_brasil_spec.rb +268 -0
- data/spec/brcobranca/remessa/cnab240/sicoob_spec.rb +198 -0
- data/spec/brcobranca/remessa/cnab240/sicredi_spec.rb +201 -0
- data/spec/brcobranca/remessa/cnab240/unicred_spec.rb +193 -0
- data/spec/brcobranca/remessa/cnab400/banco_brasil_spec.rb +187 -0
- data/spec/brcobranca/remessa/cnab400/banco_brasilia_spec.rb +183 -0
- data/spec/brcobranca/remessa/cnab400/banco_nordeste_spec.rb +187 -0
- data/spec/brcobranca/remessa/cnab400/banrisul_spec.rb +190 -0
- data/spec/brcobranca/remessa/cnab400/base_spec.rb +53 -0
- data/spec/brcobranca/remessa/cnab400/bradesco_spec.rb +201 -0
- data/spec/brcobranca/remessa/cnab400/citibank_spec.rb +126 -0
- data/spec/brcobranca/remessa/cnab400/credisis_spec.rb +188 -0
- data/spec/brcobranca/remessa/cnab400/itau_spec.rb +190 -0
- data/spec/brcobranca/remessa/cnab400/santander_spec.rb +152 -0
- data/spec/brcobranca/remessa/cnab400/sicoob_spec.rb +217 -0
- data/spec/brcobranca/remessa/cnab400/unicred_spec.rb +185 -0
- data/spec/brcobranca/remessa/pagamento_spec.rb +227 -0
- data/spec/brcobranca/retorno/cnab240/base_spec.rb +23 -0
- data/spec/brcobranca/retorno/cnab240/cecred_spec.rb +50 -0
- data/spec/brcobranca/retorno/cnab240/santander_spec.rb +50 -0
- data/spec/brcobranca/retorno/cnab240/sicoob_spec.rb +50 -0
- data/spec/brcobranca/retorno/cnab240/sicredi_spec.rb +31 -0
- data/spec/brcobranca/retorno/cnab400/banco_brasilia_spec.rb +36 -0
- data/spec/brcobranca/retorno/cnab400/banco_nordeste_spec.rb +39 -0
- data/spec/brcobranca/retorno/cnab400/banrisul_spec.rb +41 -0
- data/spec/brcobranca/retorno/cnab400/base_spec.rb +57 -0
- data/spec/brcobranca/retorno/cnab400/bradesco_spec.rb +58 -0
- data/spec/brcobranca/retorno/cnab400/credisis_spec.rb +25 -0
- data/spec/brcobranca/retorno/cnab400/itau_spec.rb +58 -0
- data/spec/brcobranca/retorno/cnab400/santander_spec.rb +39 -0
- data/spec/brcobranca/retorno/cnab400/unicred_spec.rb +42 -0
- data/spec/brcobranca/retorno/retorno_cbr643_spec.rb +69 -0
- data/spec/brcobranca/retorno/retorno_cnab400_spec.rb +57 -0
- data/spec/brcobranca/retorno/retorno_cnab_240_spec.rb +52 -0
- data/spec/brcobranca/rghost_spec.rb +29 -0
- data/spec/brcobranca/util/empresa_spec.rb +36 -0
- data/spec/fixtures/remessa/remessa-banco-brasil-cnab400.rem +3 -0
- data/spec/fixtures/remessa/remessa-banco-brasilia-cnab400.rem +3 -0
- data/spec/fixtures/remessa/remessa-banco-nordeste-cnab400.rem +3 -0
- data/spec/fixtures/remessa/remessa-banco_brasil-cnab240.rem +7 -0
- data/spec/fixtures/remessa/remessa-bancoob-cnab240.rem +7 -0
- data/spec/fixtures/remessa/remessa-banrisul-cnab400.rem +3 -0
- data/spec/fixtures/remessa/remessa-bradesco-cnab400.rem +3 -0
- data/spec/fixtures/remessa/remessa-caixa-cnab240.rem +7 -0
- data/spec/fixtures/remessa/remessa-cecred-cnab240.rem +7 -0
- data/spec/fixtures/remessa/remessa-citibank-cnab400.rem +3 -0
- data/spec/fixtures/remessa/remessa-credisis-cnab400.rem +3 -0
- data/spec/fixtures/remessa/remessa-itau-cnab400.rem +4 -0
- data/spec/fixtures/remessa/remessa-santander-cnab400.rem +3 -0
- data/spec/fixtures/remessa/remessa-sicoob-cnab400.rem +3 -0
- data/spec/fixtures/remessa/remessa-sicoob-correspondente-bb-cnab240.rem +4 -0
- data/spec/fixtures/remessa/remessa-sicredi-cnab240.rem +7 -0
- data/spec/fixtures/remessa/remessa-unicred-cnab240.rem +7 -0
- data/spec/fixtures/remessa/remessa-unicred-cnab400.rem +3 -0
- data/spec/spec.opts +8 -0
- data/spec/spec_helper.rb +38 -0
- data/spec/support/remessa_helpers.rb +13 -0
- data/spec/support/shared_examples/busca_logotipo.rb +15 -0
- data/spec/support/shared_examples/cnab240.rb +259 -0
- data/spec/support/shared_examples/cnab400.rb +180 -0
- data/spec/support/shared_examples/formatos_validos.rb +36 -0
- metadata +422 -0
@@ -0,0 +1,288 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
module Bbrcobranca
|
3
|
+
module Remessa
|
4
|
+
class Pagamento
|
5
|
+
|
6
|
+
include Bbrcobranca::Validations
|
7
|
+
|
8
|
+
# <b>REQUERIDO</b>: nosso numero
|
9
|
+
attr_accessor :nosso_numero
|
10
|
+
# <b>REQUERIDO</b>: data do vencimento do boleto
|
11
|
+
attr_accessor :data_vencimento
|
12
|
+
# <b>REQUERIDO</b>: data de emissao do boleto
|
13
|
+
attr_accessor :data_emissao
|
14
|
+
# <b>REQUERIDO</b>: valor do boleto
|
15
|
+
attr_accessor :valor
|
16
|
+
# <b>REQUERIDO</b>: documento do sacado (cliente)
|
17
|
+
attr_accessor :documento_sacado
|
18
|
+
# <b>REQUERIDO</b>: nome do sacado (cliente)
|
19
|
+
attr_accessor :nome_sacado
|
20
|
+
# <b>REQUERIDO</b>: endereco do sacado (cliente)
|
21
|
+
attr_accessor :endereco_sacado
|
22
|
+
# <b>REQUERIDO</b>: bairro do sacado (cliente)
|
23
|
+
attr_accessor :bairro_sacado
|
24
|
+
# <b>REQUERIDO</b>: CEP do sacado (cliente)
|
25
|
+
attr_accessor :cep_sacado
|
26
|
+
# <b>REQUERIDO</b>: cidade do sacado (cliente)
|
27
|
+
attr_accessor :cidade_sacado
|
28
|
+
# <b>REQUERIDO</b>: UF do sacado (cliente)
|
29
|
+
attr_accessor :uf_sacado
|
30
|
+
# <b>REQUERIDO</b>: Código da ocorrência
|
31
|
+
attr_accessor :identificacao_ocorrencia
|
32
|
+
# <b>OPCIONAL</b>: nome do avalista
|
33
|
+
attr_accessor :nome_avalista
|
34
|
+
# <b>OPCIONAL</b>: documento do avalista
|
35
|
+
attr_accessor :documento_avalista
|
36
|
+
# <b>OPCIONAL</b>: codigo da 1a instrucao
|
37
|
+
attr_accessor :cod_primeira_instrucao
|
38
|
+
# <b>OPCIONAL</b>: codigo da 2a instrucao
|
39
|
+
attr_accessor :cod_segunda_instrucao
|
40
|
+
# <b>OPCIONAL</b>: valor da mora ao dia
|
41
|
+
attr_accessor :valor_mora
|
42
|
+
# <b>OPCIONAL</b>: data limite para o desconto
|
43
|
+
attr_accessor :data_desconto
|
44
|
+
# <b>OPCIONAL</b>: valor a ser concedido de desconto
|
45
|
+
attr_accessor :valor_desconto
|
46
|
+
# <b>OPCIONAL</b>: codigo do desconto (para CNAB240)
|
47
|
+
attr_accessor :cod_desconto
|
48
|
+
# <b>OPCIONAL</b>: valor do IOF
|
49
|
+
attr_accessor :valor_iof
|
50
|
+
# <b>OPCIONAL</b>: valor do abatimento
|
51
|
+
attr_accessor :valor_abatimento
|
52
|
+
# <b>OPCIONAL</b>: Número do Documento de Cobrança - Número adotado e controlado pelo Cliente,
|
53
|
+
# para identificar o título de cobrança.
|
54
|
+
# Informação utilizada para referenciar a identificação do documento objeto de cobrança.
|
55
|
+
# Poderá conter número de duplicata, no caso de cobrança de duplicatas; número da apólice,
|
56
|
+
# no caso de cobrança de seguros, etc
|
57
|
+
attr_accessor :numero
|
58
|
+
# <b>OPCIONAL</b>: Número utilizado para controle do beneficiário/cedente
|
59
|
+
attr_accessor :documento
|
60
|
+
# <b>OPCIONAL</b>: data limite para o desconto
|
61
|
+
attr_accessor :data_segundo_desconto
|
62
|
+
# <b>OPCIONAL</b>: valor a ser concedido de desconto
|
63
|
+
attr_accessor :valor_segundo_desconto
|
64
|
+
# <b>OPCIONAL</b>: espécie do título
|
65
|
+
attr_accessor :especie_titulo
|
66
|
+
# <b>OPCIONAL</b>: código da multa
|
67
|
+
attr_accessor :codigo_multa
|
68
|
+
# <b>OPCIONAL</b>: Percentual multa por atraso %
|
69
|
+
attr_accessor :percentual_multa
|
70
|
+
# <b>OPCIONAL</b>: Data para cobrança de multa
|
71
|
+
attr_accessor :data_multa
|
72
|
+
# <b>OPCIONAL</b>: tipo de mora (diário, mensal)
|
73
|
+
attr_accessor :tipo_mora
|
74
|
+
# <b>OPCIONAL</b>: Data para cobrança de mora
|
75
|
+
attr_accessor :data_mora
|
76
|
+
# <b>OPCIONAL</b>: codigo dos juros
|
77
|
+
attr_accessor :codigo_juros
|
78
|
+
# <b>OPCIONAL</b>: codigo do protesto
|
79
|
+
attr_accessor :codigo_protesto
|
80
|
+
# <b>OPCIONAL</b>: dias para protesto
|
81
|
+
attr_accessor :dias_protesto
|
82
|
+
# <b>OPCIONAL</b>: codigo baixa
|
83
|
+
attr_accessor :codigo_baixa
|
84
|
+
# <b>OPCIONAL</b>: dias para baixa
|
85
|
+
attr_accessor :dias_baixa
|
86
|
+
# <b>OPCIONAL</b>: Número da Parcela
|
87
|
+
attr_accessor :parcela
|
88
|
+
|
89
|
+
validates_presence_of :nosso_numero, :data_vencimento, :valor,
|
90
|
+
:documento_sacado, :nome_sacado, :endereco_sacado,
|
91
|
+
:cep_sacado, :cidade_sacado, :uf_sacado, message: 'não pode estar em branco.'
|
92
|
+
validates_length_of :uf_sacado, is: 2, message: 'deve ter 2 dígitos.'
|
93
|
+
validates_length_of :cep_sacado, is: 8, message: 'deve ter 8 dígitos.'
|
94
|
+
validates_length_of :cod_desconto, is: 1, message: 'deve ter 1 dígito.'
|
95
|
+
validates_length_of :especie_titulo, is: 2, message: 'deve ter 2 dígitos.', allow_blank: true
|
96
|
+
validates_length_of :identificacao_ocorrencia, is: 2, message: 'deve ter 2 dígitos.'
|
97
|
+
|
98
|
+
# Nova instancia da classe Pagamento
|
99
|
+
#
|
100
|
+
# @param campos [Hash]
|
101
|
+
#
|
102
|
+
def initialize(campos = {})
|
103
|
+
padrao = {
|
104
|
+
data_emissao: Date.current,
|
105
|
+
data_segundo_desconto:'00-00-00',
|
106
|
+
tipo_mora: "3",
|
107
|
+
valor_mora: 0.0,
|
108
|
+
valor_desconto: 0.0,
|
109
|
+
valor_segundo_desconto: 0.0,
|
110
|
+
valor_iof: 0.0,
|
111
|
+
valor_abatimento: 0.0,
|
112
|
+
nome_avalista: '',
|
113
|
+
cod_desconto: '0',
|
114
|
+
especie_titulo: '01',
|
115
|
+
identificacao_ocorrencia: '01',
|
116
|
+
codigo_multa: '0',
|
117
|
+
percentual_multa: 0.0,
|
118
|
+
parcela: '01',
|
119
|
+
codigo_protesto: '3',
|
120
|
+
dias_protesto: '00',
|
121
|
+
codigo_baixa: '0',
|
122
|
+
dias_baixa: '000',
|
123
|
+
cod_primeira_instrucao: '00',
|
124
|
+
cod_segunda_instrucao: '00'
|
125
|
+
}
|
126
|
+
|
127
|
+
campos = padrao.merge!(campos)
|
128
|
+
campos.each do |campo, valor|
|
129
|
+
send "#{campo}=", valor
|
130
|
+
end
|
131
|
+
|
132
|
+
yield self if block_given?
|
133
|
+
end
|
134
|
+
|
135
|
+
# Formata a data de desconto de acordo com o formato passado
|
136
|
+
#
|
137
|
+
# @return [String]
|
138
|
+
#
|
139
|
+
def formata_data_desconto(formato = '%d%m%y')
|
140
|
+
data_desconto.strftime(formato)
|
141
|
+
rescue
|
142
|
+
if formato == '%d%m%y'
|
143
|
+
'000000'
|
144
|
+
else
|
145
|
+
'00000000'
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
# Formata a data de segundo desconto de acordo com o formato passado
|
150
|
+
#
|
151
|
+
# @return [String]
|
152
|
+
#
|
153
|
+
def formata_data_segundo_desconto(formato = '%d%m%y')
|
154
|
+
data_segundo_desconto.strftime(formato)
|
155
|
+
rescue
|
156
|
+
if formato == '%d%m%y'
|
157
|
+
'000000'
|
158
|
+
else
|
159
|
+
'00000000'
|
160
|
+
end
|
161
|
+
end
|
162
|
+
|
163
|
+
# Formata a valor do percentual da multa
|
164
|
+
#
|
165
|
+
# @param tamanho [Integer]
|
166
|
+
# quantidade de caracteres a ser retornado
|
167
|
+
#
|
168
|
+
# @return [String]
|
169
|
+
#
|
170
|
+
def formata_percentual_multa(tamanho = 4)
|
171
|
+
format_value(percentual_multa, tamanho)
|
172
|
+
end
|
173
|
+
|
174
|
+
# Formata a data de cobrança da multa
|
175
|
+
#
|
176
|
+
# @return [String]
|
177
|
+
#
|
178
|
+
def formata_data_multa(formato = '%d%m%y')
|
179
|
+
data_multa.strftime(formato)
|
180
|
+
rescue
|
181
|
+
if formato == '%d%m%y'
|
182
|
+
'000000'
|
183
|
+
else
|
184
|
+
'00000000'
|
185
|
+
end
|
186
|
+
end
|
187
|
+
|
188
|
+
# Formata o campo valor
|
189
|
+
# referentes as casas decimais
|
190
|
+
# exe. R$199,90 => 0000000019990
|
191
|
+
#
|
192
|
+
# @param tamanho [Integer]
|
193
|
+
# quantidade de caracteres a ser retornado
|
194
|
+
#
|
195
|
+
def formata_valor(tamanho = 13)
|
196
|
+
format_value(valor, tamanho)
|
197
|
+
end
|
198
|
+
|
199
|
+
def documento_ou_numero
|
200
|
+
documento.present? ? documento : numero
|
201
|
+
end
|
202
|
+
|
203
|
+
def formata_documento_ou_numero(tamanho = 25, caracter = ' ')
|
204
|
+
doc = documento_ou_numero.to_s.gsub(/[^0-9A-Za-z ]/, '')
|
205
|
+
doc.rjust(tamanho, caracter)[0...tamanho]
|
206
|
+
end
|
207
|
+
|
208
|
+
# Formata o campo valor da mora
|
209
|
+
#
|
210
|
+
# @param tamanho [Integer]
|
211
|
+
# quantidade de caracteres a ser retornado
|
212
|
+
#
|
213
|
+
def formata_valor_mora(tamanho = 13)
|
214
|
+
format_value(valor_mora, tamanho)
|
215
|
+
end
|
216
|
+
|
217
|
+
# Formata o campo valor da multa
|
218
|
+
#
|
219
|
+
# @param tamanho [Integer]
|
220
|
+
# quantidade de caracteres a ser retornado
|
221
|
+
#
|
222
|
+
def formata_valor_multa(tamanho = 6)
|
223
|
+
format_value(percentual_multa, tamanho)
|
224
|
+
end
|
225
|
+
|
226
|
+
# Formata o campo valor do desconto
|
227
|
+
#
|
228
|
+
# @param tamanho [Integer]
|
229
|
+
# quantidade de caracteres a ser retornado
|
230
|
+
#
|
231
|
+
def formata_valor_desconto(tamanho = 13)
|
232
|
+
format_value(valor_desconto, tamanho)
|
233
|
+
end
|
234
|
+
|
235
|
+
# Formata o campo valor do segundo desconto
|
236
|
+
#
|
237
|
+
# @param tamanho [Integer]
|
238
|
+
# quantidade de caracteres a ser retornado
|
239
|
+
#
|
240
|
+
def formata_valor_segundo_desconto(tamanho = 13)
|
241
|
+
format_value(valor_segundo_desconto, tamanho)
|
242
|
+
end
|
243
|
+
|
244
|
+
# Formata o campo valor do IOF
|
245
|
+
#
|
246
|
+
# @param tamanho [Integer]
|
247
|
+
# quantidade de caracteres a ser retornado
|
248
|
+
#
|
249
|
+
def formata_valor_iof(tamanho = 13)
|
250
|
+
format_value(valor_iof, tamanho)
|
251
|
+
end
|
252
|
+
|
253
|
+
# Formata o campo valor do IOF
|
254
|
+
#
|
255
|
+
# @param tamanho [Integer]
|
256
|
+
# quantidade de caracteres a ser retornado
|
257
|
+
#
|
258
|
+
def formata_valor_abatimento(tamanho = 13)
|
259
|
+
format_value(valor_abatimento, tamanho)
|
260
|
+
end
|
261
|
+
|
262
|
+
# Retorna a identificacao do pagador
|
263
|
+
# Se for pessoa fisica (CPF com 11 digitos) é 1
|
264
|
+
# Se for juridica (CNPJ com 14 digitos) é 2
|
265
|
+
#
|
266
|
+
def identificacao_sacado(zero = true)
|
267
|
+
Bbrcobranca::Util::Empresa.new(documento_sacado, zero).tipo
|
268
|
+
end
|
269
|
+
|
270
|
+
# Retorna a identificacao do avalista
|
271
|
+
# Se for pessoa fisica (CPF com 11 digitos) é 1
|
272
|
+
# Se for juridica (CNPJ com 14 digitos) é 2
|
273
|
+
#
|
274
|
+
def identificacao_avalista(zero = true)
|
275
|
+
return '0' if documento_avalista.nil?
|
276
|
+
Bbrcobranca::Util::Empresa.new(documento_avalista, zero).tipo
|
277
|
+
end
|
278
|
+
|
279
|
+
private
|
280
|
+
|
281
|
+
def format_value(value, tamanho)
|
282
|
+
raise ValorInvalido, 'Deve ser um Float' unless value.to_s =~ /\./
|
283
|
+
|
284
|
+
sprintf('%.2f', value).delete('.').rjust(tamanho, '0')
|
285
|
+
end
|
286
|
+
end
|
287
|
+
end
|
288
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Bbrcobranca
|
4
|
+
module Retorno
|
5
|
+
class Base # Classe base para retornos bancários
|
6
|
+
attr_accessor :codigo_registro
|
7
|
+
attr_accessor :agencia_com_dv
|
8
|
+
attr_accessor :agencia_sem_dv
|
9
|
+
attr_accessor :cedente_com_dv
|
10
|
+
attr_accessor :convenio
|
11
|
+
attr_accessor :nosso_numero
|
12
|
+
attr_accessor :documento_numero
|
13
|
+
attr_accessor :tipo_cobranca
|
14
|
+
attr_accessor :tipo_cobranca_anterior
|
15
|
+
attr_accessor :natureza_recebimento
|
16
|
+
attr_accessor :carteira_variacao
|
17
|
+
attr_accessor :desconto
|
18
|
+
attr_accessor :iof
|
19
|
+
attr_accessor :carteira
|
20
|
+
attr_accessor :comando
|
21
|
+
attr_accessor :data_liquidacao
|
22
|
+
attr_accessor :data_vencimento
|
23
|
+
attr_accessor :valor_titulo
|
24
|
+
attr_accessor :banco_recebedor
|
25
|
+
attr_accessor :agencia_recebedora_com_dv
|
26
|
+
attr_accessor :especie_documento
|
27
|
+
attr_accessor :codigo_ocorrencia
|
28
|
+
attr_accessor :motivo_ocorrencia
|
29
|
+
attr_accessor :data_ocorrencia
|
30
|
+
attr_accessor :data_credito
|
31
|
+
attr_accessor :valor_tarifa
|
32
|
+
attr_accessor :outras_despesas
|
33
|
+
attr_accessor :juros_desconto
|
34
|
+
attr_accessor :iof_desconto
|
35
|
+
attr_accessor :valor_abatimento
|
36
|
+
attr_accessor :desconto_concedito
|
37
|
+
attr_accessor :valor_recebido
|
38
|
+
attr_accessor :juros_mora
|
39
|
+
attr_accessor :outros_recebimento
|
40
|
+
attr_accessor :abatimento_nao_aproveitado
|
41
|
+
attr_accessor :valor_lancamento
|
42
|
+
attr_accessor :indicativo_lancamento
|
43
|
+
attr_accessor :indicador_valor
|
44
|
+
attr_accessor :valor_ajuste
|
45
|
+
attr_accessor :sequencial
|
46
|
+
attr_accessor :arquivo
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require 'parseline'
|
3
|
+
|
4
|
+
module Bbrcobranca
|
5
|
+
module Retorno
|
6
|
+
module Cnab240
|
7
|
+
class Base < Bbrcobranca::Retorno::Base
|
8
|
+
|
9
|
+
# Load lines
|
10
|
+
def self.load_lines(file, options={})
|
11
|
+
return nil if file.blank?
|
12
|
+
|
13
|
+
codigo_banco = codigo_banco_do_arquivo(file)
|
14
|
+
|
15
|
+
case codigo_banco
|
16
|
+
when "033"
|
17
|
+
Bbrcobranca::Retorno::Cnab240::Santander.load_lines(file, options)
|
18
|
+
when "085"
|
19
|
+
Bbrcobranca::Retorno::Cnab240::Cecred.load_lines(file, options)
|
20
|
+
when "748"
|
21
|
+
Bbrcobranca::Retorno::Cnab240::Sicredi.load_lines(file, options)
|
22
|
+
when "756"
|
23
|
+
Bbrcobranca::Retorno::Cnab240::Sicoob.load_lines(file, options)
|
24
|
+
else
|
25
|
+
Bbrcobranca::Retorno::RetornoCnab240.load_lines(file, options)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
# Codigo do banco lido do arquivo.
|
30
|
+
# Registro Header [0..2]
|
31
|
+
def self.codigo_banco_do_arquivo(file)
|
32
|
+
arquivo = File.open(file)
|
33
|
+
header = arquivo.gets
|
34
|
+
codigo_banco = header.blank? ? nil : header[0..2]
|
35
|
+
arquivo.close
|
36
|
+
codigo_banco
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
#
|
3
|
+
|
4
|
+
module Bbrcobranca
|
5
|
+
module Retorno
|
6
|
+
module Cnab240
|
7
|
+
# Formato de Retorno CNAB 240
|
8
|
+
# Baseado em: http://www.caixa.gov.br/downloads/cobranca-caixa-manuais/LEIAUTE_CNAB_240_SIGCB_COBRANCA_CAIXA.pdf
|
9
|
+
class Caixa < Bbrcobranca::Retorno::RetornoCnab240
|
10
|
+
class Line < Bbrcobranca::Retorno::RetornoCnab240::Line
|
11
|
+
# Fixed width layout for Caixa
|
12
|
+
fixed_width_layout do |parse|
|
13
|
+
# REGISTRO_T_FIELDS
|
14
|
+
# Not applicable
|
15
|
+
# :cedente_com_dv
|
16
|
+
|
17
|
+
# Same inherited from parent
|
18
|
+
# parse.field :data_vencimento, 73..80
|
19
|
+
# parse.field :valor_titulo, 81..95
|
20
|
+
# parse.field :banco_recebedor, 96..98
|
21
|
+
# parse.field :sequencial, 8..12
|
22
|
+
# parse.field :valor_tarifa, 198..212
|
23
|
+
# parse.field :agencia_com_dv, 17..22
|
24
|
+
|
25
|
+
parse.field :codigo_ocorrencia, 15..16
|
26
|
+
parse.field :nosso_numero, 39..55
|
27
|
+
parse.field :agencia_recebedora_com_dv, 99..103
|
28
|
+
parse.field :motivo_ocorrencia, 213..222, ->(motivos) do
|
29
|
+
motivos.scan(/.{2}/).reject(&:blank?).reject{|motivo| motivo == '00'}
|
30
|
+
end
|
31
|
+
|
32
|
+
# REGISTRO_U_FIELDS
|
33
|
+
|
34
|
+
# Same inherited from parent
|
35
|
+
# parse.field :desconto_concedito, 32..46
|
36
|
+
# parse.field :valor_abatimento, 47..61
|
37
|
+
# parse.field :iof_desconto, 62..76
|
38
|
+
# parse.field :juros_mora, 17..31
|
39
|
+
# parse.field :valor_recebido, 77..91
|
40
|
+
# parse.field :outras_despesas, 107..121
|
41
|
+
# parse.field :outros_recebimento, 122..136
|
42
|
+
# parse.field :data_credito, 145..152
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,102 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
require 'parseline'
|
4
|
+
|
5
|
+
module Bbrcobranca
|
6
|
+
module Retorno
|
7
|
+
module Cnab240
|
8
|
+
class Cecred < Bbrcobranca::Retorno::Cnab240::Base
|
9
|
+
# Regex para remoção de headers e trailers além de registros diferentes de T ou U
|
10
|
+
REGEX_DE_EXCLUSAO_DE_REGISTROS_NAO_T_OU_U = /^((?!^.{7}3.{5}[T|U].*$).)*$/
|
11
|
+
|
12
|
+
def self.load_lines(file, options = {})
|
13
|
+
default_options = { except: REGEX_DE_EXCLUSAO_DE_REGISTROS_NAO_T_OU_U }
|
14
|
+
options = default_options.merge!(options)
|
15
|
+
|
16
|
+
Line.load_lines(file, options).each_slice(2).reduce([]) do |retornos, cnab_lines|
|
17
|
+
retornos << generate_retorno_based_on_cnab_lines(cnab_lines)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.generate_retorno_based_on_cnab_lines(cnab_lines)
|
22
|
+
retorno = new
|
23
|
+
cnab_lines.each do |line|
|
24
|
+
if line.tipo_registro == 'T'
|
25
|
+
Line::REGISTRO_T_FIELDS.each do |attr|
|
26
|
+
retorno.send(attr + '=', line.send(attr))
|
27
|
+
end
|
28
|
+
else
|
29
|
+
Line::REGISTRO_U_FIELDS.each do |attr|
|
30
|
+
retorno.send(attr + '=', line.send(attr))
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
retorno
|
35
|
+
end
|
36
|
+
|
37
|
+
# Linha de mapeamento do retorno do arquivo CNAB 240
|
38
|
+
# O registro CNAB 240 possui 2 tipos de registros que juntos geram um registro de retorno bancário
|
39
|
+
# O primeiro é do tipo T que retorna dados gerais sobre a transação
|
40
|
+
# O segundo é do tipo U que retorna os valores da transação
|
41
|
+
class Line < Base
|
42
|
+
extend ParseLine::FixedWidth # Extendendo parseline
|
43
|
+
|
44
|
+
REGISTRO_T_FIELDS = %w(codigo_registro codigo_ocorrencia agencia_com_dv cedente_com_dv nosso_numero carteira data_vencimento valor_titulo banco_recebedor agencia_recebedora_com_dv sequencial valor_tarifa motivo_ocorrencia)
|
45
|
+
REGISTRO_U_FIELDS = %w(desconto_concedito valor_abatimento iof_desconto juros_mora valor_recebido outras_despesas outros_recebimento data_credito data_ocorrencia)
|
46
|
+
|
47
|
+
attr_accessor :tipo_registro
|
48
|
+
|
49
|
+
fixed_width_layout do |parse|
|
50
|
+
# Segmento T
|
51
|
+
parse.field :codigo_registro, 7..7
|
52
|
+
parse.field :sequencial, 8..12
|
53
|
+
parse.field :tipo_registro, 13..13
|
54
|
+
parse.field :codigo_ocorrencia, 15..16
|
55
|
+
parse.field :agencia_com_dv, 17..22
|
56
|
+
parse.field :cedente_com_dv, 23..35
|
57
|
+
parse.field :nosso_numero, 37..56
|
58
|
+
parse.field :carteira, 57..57
|
59
|
+
parse.field :data_vencimento, 73..80
|
60
|
+
parse.field :valor_titulo, 81..95
|
61
|
+
parse.field :banco_recebedor, 96..98
|
62
|
+
parse.field :agencia_recebedora_com_dv, 99..104
|
63
|
+
parse.field :valor_tarifa, 198..212
|
64
|
+
parse.field :motivo_ocorrencia, 213..222, ->(motivos) do
|
65
|
+
motivos.scan(/.{2}/).reject(&:blank?).reject{|motivo| motivo == '00'}
|
66
|
+
end
|
67
|
+
|
68
|
+
# Segmento U
|
69
|
+
parse.field :data_ocorrencia, 137..144
|
70
|
+
parse.field :data_credito, 145..152
|
71
|
+
parse.field :outras_despesas, 107..121
|
72
|
+
parse.field :iof_desconto, 62..76
|
73
|
+
parse.field :valor_abatimento, 47..61
|
74
|
+
parse.field :desconto_concedito, 32..46
|
75
|
+
parse.field :valor_recebido, 77..91
|
76
|
+
parse.field :juros_mora, 17..31
|
77
|
+
parse.field :outros_recebimento, 122..136
|
78
|
+
|
79
|
+
# Dados que não consegui extrair dos registros T e U
|
80
|
+
# parse.field :convenio,31..37
|
81
|
+
# parse.field :tipo_cobranca,80..80
|
82
|
+
# parse.field :tipo_cobranca_anterior,81..81
|
83
|
+
# parse.field :natureza_recebimento,86..87
|
84
|
+
# parse.field :carteira_variacao,91..93
|
85
|
+
# parse.field :desconto,95..99
|
86
|
+
# parse.field :iof,100..104
|
87
|
+
# parse.field :comando,108..109
|
88
|
+
# parse.field :data_liquidacao,110..115
|
89
|
+
# parse.field :especie_documento,173..174
|
90
|
+
# parse.field :valor_tarifa,181..187
|
91
|
+
# parse.field :juros_desconto,201..213
|
92
|
+
# parse.field :abatimento_nao_aproveitado,292..304
|
93
|
+
# parse.field :valor_lancamento,305..317
|
94
|
+
# parse.field :indicativo_lancamento,318..318
|
95
|
+
# parse.field :indicador_valor,319..319
|
96
|
+
# parse.field :valor_ajuste,320..331
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|