br_boleto 2.0.1 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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