br_boleto 2.0.1 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (137) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -1
  3. data/.travis.yml +1 -1
  4. data/Gemfile.lock +2 -2
  5. data/br_boleto.gemspec +2 -3
  6. data/lib/br_boleto/association/have_conta.rb +27 -25
  7. data/lib/br_boleto/association/have_pagador.rb +2 -0
  8. data/lib/br_boleto/boleto/base.rb +0 -4
  9. data/lib/br_boleto/boleto/bradesco.rb +80 -0
  10. data/lib/br_boleto/boleto/caixa.rb +10 -12
  11. data/lib/br_boleto/boleto/cecred.rb +76 -0
  12. data/lib/br_boleto/boleto/itau.rb +114 -0
  13. data/lib/br_boleto/boleto/sicredi.rb +101 -0
  14. data/lib/br_boleto/boleto/unicred.rb +21 -0
  15. data/lib/br_boleto/conta/base.rb +28 -3
  16. data/lib/br_boleto/conta/bradesco.rb +120 -0
  17. data/lib/br_boleto/conta/caixa.rb +22 -12
  18. data/lib/br_boleto/conta/cecred.rb +67 -0
  19. data/lib/br_boleto/conta/itau.rb +199 -0
  20. data/lib/br_boleto/conta/sicoob.rb +40 -11
  21. data/lib/br_boleto/conta/sicredi.rb +171 -0
  22. data/lib/br_boleto/conta/unicred.rb +38 -0
  23. data/lib/br_boleto/helper/default_codes.rb +535 -26
  24. data/lib/br_boleto/pagador.rb +4 -0
  25. data/lib/br_boleto/remessa/base.rb +2 -0
  26. data/lib/br_boleto/remessa/cnab240/base.rb +21 -6
  27. data/lib/br_boleto/remessa/cnab240/bradesco.rb +141 -0
  28. data/lib/br_boleto/remessa/cnab240/caixa.rb +8 -1
  29. data/lib/br_boleto/remessa/cnab240/cecred.rb +169 -0
  30. data/lib/br_boleto/remessa/cnab240/helper/segmento_p.rb +29 -21
  31. data/lib/br_boleto/remessa/cnab240/helper/segmento_q.rb +4 -3
  32. data/lib/br_boleto/remessa/cnab240/helper/segmento_r.rb +5 -5
  33. data/lib/br_boleto/remessa/cnab240/helper/segmento_s.rb +4 -3
  34. data/lib/br_boleto/remessa/cnab240/itau.rb +186 -0
  35. data/lib/br_boleto/remessa/cnab240/sicoob.rb +4 -16
  36. data/lib/br_boleto/remessa/cnab240/sicredi.rb +205 -0
  37. data/lib/br_boleto/remessa/cnab240/unicred.rb +40 -0
  38. data/lib/br_boleto/remessa/cnab400/bradesco.rb +235 -0
  39. data/lib/br_boleto/remessa/cnab400/helper/detalhe.rb +6 -5
  40. data/lib/br_boleto/remessa/cnab400/itau.rb +190 -0
  41. data/lib/br_boleto/remessa/cnab400/sicoob.rb +3 -3
  42. data/lib/br_boleto/remessa/cnab400/sicredi.rb +276 -0
  43. data/lib/br_boleto/remessa/cnab400/unicred.rb +62 -0
  44. data/lib/br_boleto/remessa/pagamento.rb +93 -43
  45. data/lib/br_boleto/retorno/cnab240/base.rb +13 -12
  46. data/lib/br_boleto/retorno/cnab240/bradesco.rb +10 -0
  47. data/lib/br_boleto/retorno/cnab240/caixa.rb +2 -3
  48. data/lib/br_boleto/retorno/cnab240/cecred.rb +10 -0
  49. data/lib/br_boleto/retorno/cnab240/itau.rb +24 -0
  50. data/lib/br_boleto/retorno/cnab240/sicredi.rb +10 -0
  51. data/lib/br_boleto/retorno/cnab240/unicred.rb +10 -0
  52. data/lib/br_boleto/retorno/cnab400/bradesco.rb +42 -0
  53. data/lib/br_boleto/retorno/cnab400/itau.rb +43 -0
  54. data/lib/br_boleto/retorno/cnab400/sicoob.rb +2 -2
  55. data/lib/br_boleto/retorno/cnab400/sicredi.rb +43 -0
  56. data/lib/br_boleto/retorno/cnab400/unicred.rb +10 -0
  57. data/lib/br_boleto/retorno/pagamento.rb +18 -4
  58. data/lib/br_boleto/version.rb +2 -2
  59. data/lib/br_boleto.rb +28 -0
  60. data/lib/config/locales/br-boleto-en.yml +1 -0
  61. data/lib/config/locales/br-boleto-pt-BR.yml +1 -0
  62. data/test/br_boleto/association/have_pagador_test.rb +24 -0
  63. data/test/br_boleto/boleto/bradesco_test.rb +125 -0
  64. data/test/br_boleto/boleto/caixa_test.rb +18 -18
  65. data/test/br_boleto/boleto/cecred_test.rb +115 -0
  66. data/test/br_boleto/boleto/itau_test.rb +160 -0
  67. data/test/br_boleto/boleto/sicredi_test.rb +136 -0
  68. data/test/br_boleto/boleto/unicred_test.rb +128 -0
  69. data/test/br_boleto/conta/base_test.rb +298 -3
  70. data/test/br_boleto/conta/bradesco_test.rb +142 -0
  71. data/test/br_boleto/conta/caixa_test.rb +7 -6
  72. data/test/br_boleto/conta/cecred_test.rb +119 -0
  73. data/test/br_boleto/conta/itau_test.rb +189 -0
  74. data/test/br_boleto/conta/sicoob_test.rb +32 -2
  75. data/test/br_boleto/conta/sicredi_test.rb +180 -0
  76. data/test/br_boleto/conta/unicred_test.rb +154 -0
  77. data/test/br_boleto/pagador_test.rb +22 -2
  78. data/test/br_boleto/remessa/cnab240/base_test.rb +24 -12
  79. data/test/br_boleto/remessa/cnab240/bradesco_test.rb +196 -0
  80. data/test/br_boleto/remessa/cnab240/caixa_test.rb +51 -0
  81. data/test/br_boleto/remessa/cnab240/cecred_test.rb +242 -0
  82. data/test/br_boleto/remessa/cnab240/helper/segmento_p_test.rb +78 -71
  83. data/test/br_boleto/remessa/cnab240/helper/segmento_q_test.rb +4 -3
  84. data/test/br_boleto/remessa/cnab240/helper/segmento_r_test.rb +10 -18
  85. data/test/br_boleto/remessa/cnab240/helper/segmento_s_test.rb +6 -5
  86. data/test/br_boleto/remessa/cnab240/itau_test.rb +201 -0
  87. data/test/br_boleto/remessa/cnab240/sicoob_test.rb +1 -58
  88. data/test/br_boleto/remessa/cnab240/sicredi_test.rb +207 -0
  89. data/test/br_boleto/remessa/cnab240/unicred_test.rb +250 -0
  90. data/test/br_boleto/remessa/cnab400/base_test.rb +4 -4
  91. data/test/br_boleto/remessa/cnab400/bradesco_test.rb +164 -0
  92. data/test/br_boleto/remessa/cnab400/itau_test.rb +173 -0
  93. data/test/br_boleto/remessa/cnab400/sicoob_test.rb +2 -2
  94. data/test/br_boleto/remessa/cnab400/sicredi_test.rb +241 -0
  95. data/test/br_boleto/remessa/cnab400/unicred_test.rb +169 -0
  96. data/test/br_boleto/retorno/cnab240/base_test.rb +20 -10
  97. data/test/br_boleto/retorno/cnab240/bradesco_test.rb +228 -0
  98. data/test/br_boleto/retorno/cnab240/caixa_test.rb +20 -10
  99. data/test/br_boleto/retorno/cnab240/cecred_test.rb +228 -0
  100. data/test/br_boleto/retorno/cnab240/itau_test.rb +228 -0
  101. data/test/br_boleto/retorno/cnab240/sicoob_test.rb +20 -10
  102. data/test/br_boleto/retorno/cnab240/sicredi_test.rb +228 -0
  103. data/test/br_boleto/retorno/cnab240/unicred_test.rb +228 -0
  104. data/test/br_boleto/retorno/cnab400/bradesco_test.rb +255 -0
  105. data/test/br_boleto/retorno/cnab400/itau_test.rb +96 -0
  106. data/test/br_boleto/retorno/cnab400/sicoob_test.rb +10 -5
  107. data/test/br_boleto/retorno/cnab400/sicredi_test.rb +7 -0
  108. data/test/br_boleto/retorno/cnab400/unicred.rb +255 -0
  109. data/test/br_boleto/retorno/pagamento_test.rb +7 -0
  110. data/test/factories/boleto/boleto_bradesco.rb +18 -0
  111. data/test/factories/boleto/boleto_cecred.rb +18 -0
  112. data/test/factories/boleto/boleto_itau.rb +18 -0
  113. data/test/factories/boleto/boleto_sicredi.rb +18 -0
  114. data/test/factories/boleto/boleto_unicred.rb +18 -0
  115. data/test/factories/conta/bradesco.rb +16 -0
  116. data/test/factories/conta/caixa.rb +2 -1
  117. data/test/factories/conta/cecred.rb +15 -0
  118. data/test/factories/conta/itau.rb +15 -0
  119. data/test/factories/conta/sicoob.rb +2 -1
  120. data/test/factories/conta/sicredi.rb +15 -0
  121. data/test/factories/conta/unicred.rb +15 -0
  122. data/test/factories/remessa/cnab240/bradesco.rb +9 -0
  123. data/test/factories/remessa/cnab240/cecred.rb +9 -0
  124. data/test/factories/remessa/cnab240/itau.rb +9 -0
  125. data/test/factories/remessa/cnab240/sicredi.rb +9 -0
  126. data/test/factories/remessa/cnab240/unicred.rb +9 -0
  127. data/test/factories/remessa/cnab400/bradesco.rb +8 -0
  128. data/test/factories/remessa/cnab400/itau.rb +8 -0
  129. data/test/factories/remessa/cnab400/sicredi.rb +8 -0
  130. data/test/factories/remessa/cnab400/unicred.rb +8 -0
  131. data/test/fixtures/remessa/cnab240/caixa.rem +8 -0
  132. data/test/fixtures/remessa/cnab240/cecred.rem +8 -0
  133. data/test/fixtures/remessa/cnab240/sicoob.rem +8 -8
  134. data/test/fixtures/remessa/cnab240/unicred.rem +7 -0
  135. data/test/fixtures/retorno/cnab400/bradesco.ret +8 -0
  136. data/test/fixtures/retorno/cnab400/itau.ret +54 -0
  137. metadata +138 -3
@@ -0,0 +1,241 @@
1
+ require 'test_helper'
2
+
3
+ describe BrBoleto::Remessa::Cnab400::Sicredi do
4
+ subject { FactoryGirl.build(:remessa_cnab400_sicredi, pagamentos: pagamento, conta: conta) }
5
+ let(:pagamento) { FactoryGirl.build(:remessa_pagamento, pagador: pagador) }
6
+ let(:conta) { FactoryGirl.build(:conta_sicredi) }
7
+ let(:pagador) { FactoryGirl.build(:pagador) }
8
+
9
+
10
+ context "HEADER" do
11
+ describe "#header_posicao_002_a_002" do
12
+ it { subject.header_posicao_002_a_002.size.must_equal 1 }
13
+ it "deve conter as informações nas posições corretas" do
14
+ result = subject.header_posicao_002_a_002
15
+ result.must_equal '1'
16
+ end
17
+
18
+ end
19
+
20
+ describe '#informacoes_da_conta' do
21
+ it "deve retornar com 20 caracteres" do
22
+ subject.informacoes_da_conta(:header).size.must_equal 20
23
+ end
24
+ it "deve trazer as informações em suas posições quando o parametro for :header" do
25
+ conta.conta_corrente = 89755
26
+ conta.cpf_cnpj = '12345678901'
27
+ result = subject.informacoes_da_conta(:header)
28
+
29
+ result[0..4].must_equal '89755' # Conta Corrente
30
+ result[5..18].must_equal '00012345678901' # CPF/CNPJ
31
+ result[19].must_equal ''.rjust(1) # Branco
32
+
33
+ result.size.must_equal 20
34
+ end
35
+ it "deve retornar com 21 caracteres" do
36
+ subject.informacoes_da_conta(:detalhe).size.must_equal 21
37
+ end
38
+ it "deve trazer as informações em suas posições quando o parametro for :detalhe" do
39
+ result = subject.informacoes_da_conta(:detalhe)
40
+
41
+ result[0].must_equal 'A' # Tipo de moeda
42
+ result[1].must_equal 'B' # Tipo de desconto
43
+ result[2].must_equal 'B' # Tipo de juros
44
+ result[3..20].must_equal ''.rjust(18) # Brancos
45
+
46
+ result.size.must_equal 21
47
+ end
48
+ end
49
+
50
+ describe "#header_posicao_047_a_076" do
51
+ it { subject.header_posicao_047_a_076.size.must_equal 30 }
52
+ it "deve conter as informações nas posições corretas" do
53
+ result = subject.header_posicao_047_a_076
54
+ result.must_equal ''.rjust(30) # Brancos
55
+ result.size.must_equal 30
56
+ end
57
+ end
58
+
59
+ describe '#header_posicao_095_a_102' do
60
+ it { subject.header_posicao_095_a_102.size.must_equal 8 }
61
+ it "deve conter as informações nas posições corretas" do
62
+ subject.stubs(:data_hora_arquivo).returns('2016-10-21')
63
+ subject.header_posicao_095_a_102.must_equal '20161021'
64
+ subject.header_posicao_095_a_102.size.must_equal 8
65
+ end
66
+ end
67
+
68
+ describe '#header_posicao_103_a_394' do
69
+ it { subject.header_posicao_103_a_394.size.must_equal 292 }
70
+ it "deve conter as informações nas posições corretas" do
71
+ subject.sequencial_remessa = 4758
72
+
73
+ subject.header_posicao_103_a_394[0..7].must_equal ''.rjust(8)
74
+ subject.header_posicao_103_a_394[8..14].must_equal '0004758'
75
+ subject.header_posicao_103_a_394[15..287].must_equal ''.rjust(273)
76
+ subject.header_posicao_103_a_394[288..291].must_equal '2.00'
77
+
78
+ subject.header_posicao_103_a_394.size.must_equal 292
79
+ end
80
+ end
81
+ end
82
+
83
+ context "DETALHE" do
84
+ describe "#detalhe_posicao_002_004(pagamento)" do
85
+ it { subject.detalhe_posicao_002_004(pagamento).size.must_equal 3 }
86
+ it "deve conter as informações nas posições corretas" do
87
+ result = subject.detalhe_posicao_002_004(pagamento)
88
+ result[0].must_equal 'A' # Tipo de cobrança
89
+ result[1].must_equal 'A' # Tipo de carteira
90
+ result[2].must_equal 'A' # Tipo de Impressão
91
+
92
+ result.size.must_equal 3
93
+ end
94
+ end
95
+
96
+ describe "#detalhe_posicao_005_016" do
97
+ it { subject.detalhe_posicao_005_016.size.must_equal 12 }
98
+ it "deve conter as informações nas posições corretas" do
99
+ result = subject.detalhe_posicao_005_016
100
+ result.must_equal ''.rjust(12) # Brancos
101
+ result.size.must_equal 12
102
+ end
103
+ end
104
+
105
+ describe "#detalhe_posicao_038_062(pagamento)" do
106
+ it "deve ter o tamanho de 25 digitos" do
107
+ subject.detalhe_posicao_038_062(pagamento).size.must_equal 25
108
+ end
109
+ it "deve conter as informações nas posições corretas" do
110
+ pagamento.assign_attributes(nosso_numero: '132')
111
+ result = subject.detalhe_posicao_038_062(pagamento)
112
+ result[0..9].must_equal ''.rjust(10) # Brancos
113
+ result[10..18].must_equal '000000132' # Nosso Numero
114
+ result[19..24].must_equal ''.rjust(6) # Brancos
115
+ result.size.must_equal 25
116
+ end
117
+ end
118
+
119
+ describe "#detalhe_posicao_063_108(pagamento)" do
120
+ it "deve ter o tamanho de 46 digitos" do
121
+ subject.detalhe_posicao_063_108(pagamento).size.must_equal 46
122
+ end
123
+ it "deve conter as informações nas posições corretas" do
124
+ pagamento.assign_attributes(tipo_emissao: 2)
125
+ pagamento.data_emissao = Date.parse('05/08/2029')
126
+ result = subject.detalhe_posicao_063_108(pagamento)
127
+ result[0..7].must_equal '20290805' # Data da Instrução
128
+ result[8].must_equal ''.rjust(1) # Campo alterado ( Branco )
129
+ result[9].must_equal 'N' # Postagem do título
130
+ result[10].must_equal ''.rjust(1) # Branco
131
+ result[11].must_equal 'B' # Condição para Emissão da Papeleta de Cobrança
132
+ result[12..13].must_equal ''.rjust(2) # Número da parcela do carnê ( Brancos )
133
+ result[14..15].must_equal ''.rjust(2) # Número Total de parcelas do carnê ( Brancos )
134
+ result[16..19].must_equal ''.rjust(4) # Brancos
135
+ result[20..29].must_equal '0000000000' # Valor Desconto por dia de antecipação (Preencher com Zeros)
136
+ result[30..33].must_equal '0000' # % multa por pagamento em atraso (Preencher com Zeros)
137
+ result[34..45].must_equal ''.rjust(12) # Preencher com Branco
138
+ result.size.must_equal 46
139
+ end
140
+ end
141
+
142
+ describe '#informacoes_do_pagamento' do
143
+ it "deve ter o tamanho de 40 digitos" do
144
+ subject.informacoes_do_pagamento(pagamento, 1).size.must_equal 40
145
+ end
146
+ it "deve conter as informações nas posições corretas" do
147
+ conta.agencia = 4587
148
+ conta.agencia_dv = 45 # Vai retornar apenas o 4
149
+ pagamento.data_vencimento = Date.parse('05/08/2029')
150
+ pagamento.valor_documento = 47.56
151
+ pagamento.especie_titulo = "12"
152
+ pagamento.aceite = true
153
+ pagamento.data_emissao = Date.parse('15/09/2017')
154
+ result = subject.informacoes_do_pagamento(pagamento, 4)
155
+ result[00..05].must_equal '050829' # "Data Vencimento: Formato DDMMAA Normal ""DDMMAA"" A vista = ""888888"" Contra Apresentação = ""999999"""
156
+ result[06..18].must_equal '0000000004756' # Valor do Titulo
157
+ result[19..27].must_equal ' ' # Brancos
158
+ result[28..28].must_equal "C" # Espécie do Título
159
+ result[ 29 ].must_equal "N" # dentificação (Sempre 'N')
160
+ result[30..35].must_equal '150917' # Data de Emissão do Título: formato ddmmaa
161
+ result[36..37].must_equal '00' # Primeira instrução codificada
162
+ result[38..39].must_equal '00' # Segunda instrução
163
+
164
+ result.size.must_equal 40
165
+ end
166
+ end
167
+
168
+ describe '#detalhe_multas_e_juros_do_pagamento' do
169
+ it "deve ter o tamanho de 58 digitos" do
170
+ subject.detalhe_multas_e_juros_do_pagamento(pagamento, 2).size.must_equal 58
171
+ end
172
+ it "deve conter as informações nas posições corretas" do
173
+ pagamento.valor_mora = '0.39'
174
+ pagamento.data_desconto = Date.parse('21/03/2018')
175
+ pagamento.valor_desconto = 4.3
176
+ pagamento.valor_abatimento = 56.47
177
+
178
+ result = subject.detalhe_multas_e_juros_do_pagamento(pagamento, 4)
179
+ result.size.must_equal 58
180
+
181
+ result[00..12].must_equal '0000000000039'
182
+ result[13..18].must_equal "210318"
183
+ result[19..31].must_equal '0000000000430'
184
+ result[32..44].must_equal '0000000000000'
185
+ result[45..57].must_equal '0000000005647'
186
+ end
187
+ end
188
+
189
+ describe '#informacoes_do_sacado' do
190
+ it "deve ter o tamanho de 176 digitos" do
191
+ subject.informacoes_do_sacado(pagamento, 2).size.must_equal 176
192
+ end
193
+ it "deve conter as informações nas posições corretas" do
194
+ # pagador.tipo_cpf_cnpj = '1'
195
+ pagador.cpf_cnpj = '12345678901'
196
+ pagador.nome = 'nome pagador'
197
+ pagador.endereco = 'rua do pagador'
198
+ pagador.bairro = 'bairro do pagador'
199
+ pagador.cidade = 'Chapecó'
200
+ pagador.uf = 'SC'
201
+ pagador.cep = '89885-001'
202
+ pagador.nome_avalista = 'Avalista'
203
+ pagador.documento_avalista = '840.106.990-43'
204
+
205
+ result = subject.informacoes_do_sacado(pagamento, 2)
206
+ result.size.must_equal 176
207
+
208
+ result[00..01].must_equal "10" # Tipo de Inscrição do Pagador: "01" = CPF / "02" = CNPJ
209
+ result[02..15].must_equal '00012345678901' # Número do CNPJ ou CPF do Pagador
210
+ result[16..55].must_equal 'nome pagador'.adjust_size_to(40) # Nome do Pagador
211
+
212
+ result[56..73].must_equal 'rua do pagador'.adjust_size_to(18) # Endereço do Pagador
213
+ result[74..83].must_equal 'bairro do pagador'.adjust_size_to(10) # Endereço do Pagador
214
+ result[84..93].must_equal 'Chapecó'.adjust_size_to(10) # Endereço do Pagador
215
+ result[94..95].must_equal 'SC'.adjust_size_to(2) # Endereço do Pagador
216
+ result[108..115].must_equal '89885001' # CEP do Pagador
217
+
218
+ result[121..134].must_equal '84010699043'.rjust(14, '0') # Observações/Mensagem ou Sacador/Avalista
219
+ result[135..175].must_equal 'Avalista'.adjust_size_to(41) # Observações/Mensagem ou Sacador/Avalista
220
+ end
221
+ end
222
+ end
223
+
224
+ context "TRAILER" do
225
+ describe "#trailer_arquivo_posicao_002_a_394(sequencial)" do
226
+ it { subject.trailer_arquivo_posicao_002_a_394(1).size.must_equal 393 }
227
+ it "deve conter as informações nas posições corretas" do
228
+ conta.conta_corrente = 89755
229
+ result = subject.trailer_arquivo_posicao_002_a_394(1)
230
+
231
+ result[0].must_equal '1' # Identificação do arquivo remessa
232
+ result[1..3].must_equal '748' # Número do Sicredi
233
+ result[4..8].must_equal '89755' # Código do beneficiário
234
+ result[9..392].must_equal ''.rjust(384) # Brancos
235
+
236
+ result.size.must_equal 393
237
+ end
238
+ end
239
+ end
240
+
241
+ end
@@ -0,0 +1,169 @@
1
+ require 'test_helper'
2
+
3
+ describe BrBoleto::Remessa::Cnab400::Unicred do
4
+ subject { FactoryGirl.build(:remessa_cnab400_unicred, pagamentos: pagamento, conta: conta) }
5
+ let(:pagamento) { FactoryGirl.build(:remessa_pagamento, pagador: pagador) }
6
+ let(:conta) { FactoryGirl.build(:conta_unicred) }
7
+ let(:pagador) { FactoryGirl.build(:pagador) }
8
+
9
+ it "deve ter a class para a conta do unicred" do
10
+ BrBoleto::Remessa::Cnab400::Unicred.new.conta_class.must_equal BrBoleto::Conta::Unicred
11
+ end
12
+
13
+ it "deve herdar de Cnab400::Bradesco" do
14
+ subject.class.superclass.must_equal BrBoleto::Remessa::Cnab400::Bradesco
15
+ end
16
+
17
+ describe '#informacoes_da_conta' do
18
+ it "deve retornar com 20 caracteres" do
19
+ subject.informacoes_da_conta(:header).size.must_equal 20
20
+ end
21
+ it "deve trazer as informações em suas posições quando o parametro for :header" do
22
+ conta.codigo_empresa = 39321235
23
+ result = subject.informacoes_da_conta(:header)
24
+
25
+ result[0..20].must_equal '00000000000039321235' # Codigo Empresa
26
+ end
27
+ it "deve retornar com 20 caracteres" do
28
+ subject.informacoes_da_conta(:detalhe).size.must_equal 20
29
+ end
30
+ it "deve trazer as informações em suas posições quando o parametro for :detalhe" do
31
+ conta.agencia = 1234
32
+ conta.agencia_dv = 1
33
+ conta.conta_corrente = 89755
34
+ conta.conta_corrente_dv = 7
35
+ conta.carteira = 21
36
+ result = subject.informacoes_da_conta(:detalhe)
37
+
38
+ result[0..2].must_equal ' '
39
+ result[3].must_equal '0'
40
+ result[4..6].must_equal '021'
41
+ result[7..11].must_equal '01234' # Agencia
42
+ result[12..18].must_equal '0089755' # Conta Corrente
43
+ result[19].must_equal '7' # Conta Corrente DV
44
+ end
45
+ end
46
+
47
+ describe '#complemento_registro' do
48
+ it "deve retornar o sequencial da remessa com 12 posições e mais 277 brancos" do
49
+ subject.sequencial_remessa = 4758
50
+
51
+ subject.complemento_registro[0..7].must_equal ' '
52
+ subject.complemento_registro[8..9].must_equal 'MX'
53
+ subject.complemento_registro[10..16].must_equal '0004758'
54
+ subject.complemento_registro[17..293].must_equal ''.rjust(277)
55
+
56
+ subject.complemento_registro.size.must_equal 294
57
+ end
58
+ end
59
+
60
+ describe '#detalhe_posicao_038_062' do
61
+ it "deve ter o tamanho de 25 digitos" do
62
+ subject.detalhe_posicao_038_062(pagamento).size.must_equal 25
63
+ end
64
+ it "deve conter numero de controle do participante nas posições corretas" do
65
+ pagamento.expects(:numero_documento).returns('534423')
66
+ result = subject.detalhe_posicao_038_062(pagamento)
67
+
68
+ result[00..13].must_equal ''.rjust(14) # Preencher com Branco
69
+ result[14..24].must_equal '534423'.rjust(11, '0') # Numero documento
70
+ result.size.must_equal 25
71
+ end
72
+ end
73
+
74
+ describe '#detalhe_posicao_063_108' do
75
+ it "deve ter o tamanho de 46 digitos" do
76
+ subject.detalhe_posicao_063_108(pagamento).size.must_equal 46
77
+ end
78
+ it "deve conter as informações nas posições corretas" do
79
+ pagamento.assign_attributes(tipo_emissao: 2)
80
+ result = subject.detalhe_posicao_063_108(pagamento)
81
+
82
+ result[0..2].must_equal '000'
83
+ result[3].must_equal '0' # Identificativos de Multa
84
+ result[4..7].must_equal '0000' # Percentual de Multa por Atraso
85
+ result[8..18].must_equal '00000977897' # Identificação do Título no Banco
86
+ result[19].must_equal '6' # Nosso numero DV
87
+ result[20..29].must_equal '0000000000' # Desconto Bonificação por dia
88
+ result[30].must_equal '2' # Condição para Emissão da Papeleta de Cobrança
89
+ result[31..45].must_equal ''.rjust(15) # Preencher com Branco
90
+
91
+ result.size.must_equal 46
92
+ end
93
+ end
94
+
95
+ describe '#informacoes_do_pagamento' do
96
+ it "deve ter o tamanho de 40 digitos" do
97
+ subject.informacoes_do_pagamento(pagamento, 1).size.must_equal 40
98
+ end
99
+ it "deve conter as informações nas posições corretas" do
100
+ conta.agencia = 4587
101
+ conta.agencia_dv = 45 # Vai retornar apenas o 4
102
+ pagamento.data_vencimento = Date.parse('05/08/2029')
103
+ pagamento.valor_documento = 47.56
104
+ pagamento.especie_titulo = "12"
105
+ pagamento.aceite = true
106
+ pagamento.data_emissao = Date.parse('15/09/2017')
107
+ result = subject.informacoes_do_pagamento(pagamento, 4)
108
+ result.size.must_equal 40
109
+
110
+ result[00..05].must_equal '050829' # "Data Vencimento: Formato DDMMAA Normal ""DDMMAA"" A vista = ""888888"" Contra Apresentação = ""999999"""
111
+ result[06..18].must_equal '0000000004756' # Valor do Titulo
112
+ result[19..21].must_equal '000' # 000 ou Número Banco
113
+ result[22..26].must_equal "00000" # 000000 ou Agencia
114
+ result[27..28].must_equal "02" # Espécie do Título
115
+ result[ 29 ].must_equal "N" # dentificação (Sempre 'N')
116
+ result[30..35].must_equal '150917' # Data de Emissão do Título: formato ddmmaa
117
+ result[36..37].must_equal '00' # Primeira instrução codificada
118
+ result[38..39].must_equal '00' # Segunda instrução
119
+ end
120
+ end
121
+
122
+ describe '#detalhe_multas_e_juros_do_pagamento' do
123
+ it "deve ter o tamanho de 58 digitos" do
124
+ subject.detalhe_multas_e_juros_do_pagamento(pagamento, 2).size.must_equal 58
125
+ end
126
+ it "deve conter as informações nas posições corretas" do
127
+ pagamento.valor_mora = '0.39'
128
+ pagamento.valor_iof = '2.7'
129
+ pagamento.data_desconto = Date.parse('21/03/2018')
130
+ pagamento.valor_desconto = 4.3
131
+ pagamento.valor_abatimento = 56.47
132
+
133
+ result = subject.detalhe_multas_e_juros_do_pagamento(pagamento, 4)
134
+ result.size.must_equal 58
135
+
136
+ result[00..12].must_equal '0000000000039'
137
+ result[13..18].must_equal "210318"
138
+ result[19..31].must_equal '0000000000430'
139
+ result[32..44].must_equal '0000000000270'
140
+ result[45..57].must_equal '0000000005647'
141
+ end
142
+ end
143
+
144
+ describe '#informacoes_do_sacado' do
145
+ it "deve ter o tamanho de 176 digitos" do
146
+ subject.informacoes_do_sacado(pagamento, 2).size.must_equal 176
147
+ end
148
+ it "deve conter as informações nas posições corretas" do
149
+ # pagador.tipo_cpf_cnpj = '1'
150
+ pagador.cpf_cnpj = '12345678901'
151
+ pagador.nome = 'nome pagador'
152
+ pagador.endereco = 'rua do pagador'
153
+ pagador.cep = '89885-001'
154
+ pagador.nome_avalista = 'Avalista'
155
+ pagador.documento_avalista = '840.106.990-43'
156
+
157
+ result = subject.informacoes_do_sacado(pagamento, 2)
158
+ result.size.must_equal 176
159
+
160
+ result[00..01].must_equal "01" # Tipo de Inscrição do Pagador: "01" = CPF / "02" = CNPJ
161
+ result[02..15].must_equal '00012345678901' # Número do CNPJ ou CPF do Pagador
162
+ result[16..55].must_equal 'nome pagador'.adjust_size_to(40) # Nome do Pagador
163
+ result[56..95].must_equal 'rua do pagador'.adjust_size_to(40) # Endereço do Pagador
164
+ result[108..115].must_equal '89885001' # CEP do Pagador
165
+ result[116..130].must_equal '84010699043'.rjust(15) # Observações/Mensagem ou Sacador/Avalista
166
+ result[133..175].must_equal 'Avalista'.adjust_size_to(43) # Observações/Mensagem ou Sacador/Avalista
167
+ end
168
+ end
169
+ end
@@ -21,7 +21,8 @@ describe BrBoleto::Retorno::Cnab240::Base do
21
21
  pagamento.agencia_com_dv.must_equal "030690"
22
22
  pagamento.agencia_sem_dv.must_equal "03069"
23
23
  pagamento.numero_conta_com_dv.must_equal "0000000777778"
24
- pagamento.numero_conta_sem_dv.must_equal "000000077777"
24
+ pagamento.numero_conta.must_equal "000000077777"
25
+ pagamento.numero_conta_dv.must_equal "8"
25
26
  pagamento.dv_conta_e_agencia.must_equal "0"
26
27
  pagamento.nosso_numero.must_equal "000000033001014"
27
28
  pagamento.carteira.must_equal "1"
@@ -53,7 +54,8 @@ describe BrBoleto::Retorno::Cnab240::Base do
53
54
  pagamento.valor_ocorrencia_sacado.must_equal 0.0
54
55
  pagamento.complemento_ocorrencia_sacado.must_equal ""
55
56
  pagamento.codigo_ocorrencia_banco_correspondente.must_equal "756"
56
- pagamento.nosso_numero_banco_correspondente.must_equal ""
57
+ pagamento.nosso_numero_banco_correspondente.must_equal "00000000000000000000"
58
+ pagamento.codigo_movimento_retorno.must_equal "06"
57
59
  end
58
60
  it "valores para o pagamento 2" do
59
61
  pagamento = subject.pagamentos[1]
@@ -61,7 +63,8 @@ describe BrBoleto::Retorno::Cnab240::Base do
61
63
  pagamento.agencia_com_dv.must_equal "030690"
62
64
  pagamento.agencia_sem_dv.must_equal "03069"
63
65
  pagamento.numero_conta_com_dv.must_equal "0000000777778"
64
- pagamento.numero_conta_sem_dv.must_equal "000000077777"
66
+ pagamento.numero_conta.must_equal "000000077777"
67
+ pagamento.numero_conta_dv.must_equal "8"
65
68
  pagamento.dv_conta_e_agencia.must_equal "0"
66
69
  pagamento.nosso_numero.must_equal "000000034801024"
67
70
  pagamento.carteira.must_equal "1"
@@ -93,7 +96,8 @@ describe BrBoleto::Retorno::Cnab240::Base do
93
96
  pagamento.valor_ocorrencia_sacado.must_equal 0.0
94
97
  pagamento.complemento_ocorrencia_sacado.must_equal ""
95
98
  pagamento.codigo_ocorrencia_banco_correspondente.must_equal "304"
96
- pagamento.nosso_numero_banco_correspondente.must_equal ""
99
+ pagamento.nosso_numero_banco_correspondente.must_equal "00000000000000000000"
100
+ pagamento.codigo_movimento_retorno.must_equal "06"
97
101
  end
98
102
  it "valores para o pagamento 3" do
99
103
  pagamento = subject.pagamentos[2]
@@ -101,7 +105,8 @@ describe BrBoleto::Retorno::Cnab240::Base do
101
105
  pagamento.agencia_com_dv.must_equal "030690"
102
106
  pagamento.agencia_sem_dv.must_equal "03069"
103
107
  pagamento.numero_conta_com_dv.must_equal "0000000777778"
104
- pagamento.numero_conta_sem_dv.must_equal "000000077777"
108
+ pagamento.numero_conta.must_equal "000000077777"
109
+ pagamento.numero_conta_dv.must_equal "8"
105
110
  pagamento.dv_conta_e_agencia.must_equal "0"
106
111
  pagamento.nosso_numero.must_equal "000000035501014"
107
112
  pagamento.carteira.must_equal "1"
@@ -133,7 +138,8 @@ describe BrBoleto::Retorno::Cnab240::Base do
133
138
  pagamento.valor_ocorrencia_sacado.must_equal 0.0
134
139
  pagamento.complemento_ocorrencia_sacado.must_equal ""
135
140
  pagamento.codigo_ocorrencia_banco_correspondente.must_equal "100"
136
- pagamento.nosso_numero_banco_correspondente.must_equal ""
141
+ pagamento.nosso_numero_banco_correspondente.must_equal "00000000000000000000"
142
+ pagamento.codigo_movimento_retorno.must_equal "06"
137
143
  end
138
144
  it "valores para o pagamento 4" do
139
145
  pagamento = subject.pagamentos[3]
@@ -141,7 +147,8 @@ describe BrBoleto::Retorno::Cnab240::Base do
141
147
  pagamento.agencia_com_dv.must_equal "030690"
142
148
  pagamento.agencia_sem_dv.must_equal "03069"
143
149
  pagamento.numero_conta_com_dv.must_equal "0000000777778"
144
- pagamento.numero_conta_sem_dv.must_equal "000000077777"
150
+ pagamento.numero_conta.must_equal "000000077777"
151
+ pagamento.numero_conta_dv.must_equal "8"
145
152
  pagamento.dv_conta_e_agencia.must_equal "0"
146
153
  pagamento.nosso_numero.must_equal "000000036201014"
147
154
  pagamento.carteira.must_equal "1"
@@ -173,14 +180,16 @@ describe BrBoleto::Retorno::Cnab240::Base do
173
180
  pagamento.valor_ocorrencia_sacado.must_equal 0.0
174
181
  pagamento.complemento_ocorrencia_sacado.must_equal ""
175
182
  pagamento.codigo_ocorrencia_banco_correspondente.must_equal "756"
176
- pagamento.nosso_numero_banco_correspondente.must_equal ""
183
+ pagamento.nosso_numero_banco_correspondente.must_equal "00000000000000000000"
184
+ pagamento.codigo_movimento_retorno.must_equal "06"
177
185
  end
178
186
  it "valores para o pagamento 4" do
179
187
  pagamento = subject.pagamentos[4]
180
188
  pagamento.agencia_com_dv.must_equal "030690"
181
189
  pagamento.agencia_sem_dv.must_equal "03069"
182
190
  pagamento.numero_conta_com_dv.must_equal "0000000777778"
183
- pagamento.numero_conta_sem_dv.must_equal "000000077777"
191
+ pagamento.numero_conta.must_equal "000000077777"
192
+ pagamento.numero_conta_dv.must_equal "8"
184
193
  pagamento.dv_conta_e_agencia.must_equal "0"
185
194
  pagamento.nosso_numero.must_equal "000000036201014"
186
195
  pagamento.carteira.must_equal "1"
@@ -212,7 +221,8 @@ describe BrBoleto::Retorno::Cnab240::Base do
212
221
  pagamento.valor_ocorrencia_sacado.must_equal 0.0
213
222
  pagamento.complemento_ocorrencia_sacado.must_equal ""
214
223
  pagamento.codigo_ocorrencia_banco_correspondente.must_equal "756"
215
- pagamento.nosso_numero_banco_correspondente.must_equal ""
224
+ pagamento.nosso_numero_banco_correspondente.must_equal "00000000000000000000"
225
+ pagamento.codigo_movimento_retorno.must_equal "06"
216
226
  end
217
227
  end
218
228
  end