brcobranca 8.0.0 → 9.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (167) hide show
  1. checksums.yaml +4 -4
  2. data/.ruby-gemset +1 -1
  3. data/.ruby-version +1 -1
  4. data/.travis.yml +5 -3
  5. data/CHANGELOG.md +9 -0
  6. data/Gemfile +2 -2
  7. data/README.md +24 -12
  8. data/brcobranca.gemspec +0 -2
  9. data/lib/brcobranca.rb +43 -26
  10. data/lib/brcobranca/arquivos/logos/bancobrasilia.eps +0 -0
  11. data/lib/brcobranca/arquivos/logos/bancobrasilia_carne.eps +0 -0
  12. data/lib/brcobranca/arquivos/logos/cecred.eps +427 -0
  13. data/lib/brcobranca/arquivos/logos/cecred_carne.eps +427 -0
  14. data/lib/brcobranca/arquivos/logos/credisis.eps +5402 -0
  15. data/lib/brcobranca/arquivos/logos/credisis_carne.eps +5410 -0
  16. data/lib/brcobranca/arquivos/templates/modelo_generico.eps +0 -0
  17. data/lib/brcobranca/boleto/banco_brasil.rb +21 -21
  18. data/lib/brcobranca/boleto/banco_brasilia.rb +96 -0
  19. data/lib/brcobranca/boleto/banco_nordeste.rb +4 -6
  20. data/lib/brcobranca/boleto/banestes.rb +7 -7
  21. data/lib/brcobranca/boleto/banrisul.rb +5 -5
  22. data/lib/brcobranca/boleto/base.rb +28 -22
  23. data/lib/brcobranca/boleto/bradesco.rb +6 -6
  24. data/lib/brcobranca/boleto/caixa.rb +11 -18
  25. data/lib/brcobranca/boleto/cecred.rb +86 -0
  26. data/lib/brcobranca/boleto/credisis.rb +124 -0
  27. data/lib/brcobranca/boleto/hsbc.rb +10 -27
  28. data/lib/brcobranca/boleto/itau.rb +9 -10
  29. data/lib/brcobranca/boleto/santander.rb +5 -6
  30. data/lib/brcobranca/boleto/sicoob.rb +5 -5
  31. data/lib/brcobranca/boleto/sicredi.rb +7 -7
  32. data/lib/brcobranca/boleto/template/rghost.rb +127 -80
  33. data/lib/brcobranca/boleto/template/rghost_carne.rb +9 -9
  34. data/lib/brcobranca/boleto/unicred.rb +126 -4
  35. data/lib/brcobranca/calculo_data.rb +3 -0
  36. data/lib/brcobranca/formatacao_string.rb +15 -5
  37. data/lib/brcobranca/remessa/base.rb +16 -9
  38. data/lib/brcobranca/remessa/cnab240/banco_brasil.rb +14 -13
  39. data/lib/brcobranca/remessa/cnab240/base.rb +252 -119
  40. data/lib/brcobranca/remessa/cnab240/base_correspondente.rb +299 -0
  41. data/lib/brcobranca/remessa/cnab240/caixa.rb +61 -7
  42. data/lib/brcobranca/remessa/cnab240/cecred.rb +151 -0
  43. data/lib/brcobranca/remessa/cnab240/sicoob.rb +109 -123
  44. data/lib/brcobranca/remessa/cnab240/sicoob_banco_brasil.rb +94 -0
  45. data/lib/brcobranca/remessa/cnab240/sicredi.rb +177 -0
  46. data/lib/brcobranca/remessa/cnab240/unicred.rb +9 -0
  47. data/lib/brcobranca/remessa/cnab400/banco_brasil.rb +14 -0
  48. data/lib/brcobranca/remessa/cnab400/banco_brasilia.rb +166 -0
  49. data/lib/brcobranca/remessa/cnab400/banco_nordeste.rb +4 -6
  50. data/lib/brcobranca/remessa/cnab400/banrisul.rb +155 -0
  51. data/lib/brcobranca/remessa/cnab400/base.rb +4 -4
  52. data/lib/brcobranca/remessa/cnab400/bradesco.rb +7 -8
  53. data/lib/brcobranca/remessa/cnab400/citibank.rb +3 -4
  54. data/lib/brcobranca/remessa/cnab400/credisis.rb +128 -0
  55. data/lib/brcobranca/remessa/cnab400/itau.rb +23 -6
  56. data/lib/brcobranca/remessa/cnab400/santander.rb +80 -65
  57. data/lib/brcobranca/remessa/cnab400/sicoob.rb +2 -2
  58. data/lib/brcobranca/remessa/cnab400/unicred.rb +143 -0
  59. data/lib/brcobranca/remessa/pagamento.rb +50 -14
  60. data/lib/brcobranca/retorno/base.rb +4 -4
  61. data/lib/brcobranca/retorno/cnab240/base.rb +11 -8
  62. data/lib/brcobranca/retorno/cnab240/caixa.rb +4 -0
  63. data/lib/brcobranca/retorno/cnab240/cecred.rb +102 -0
  64. data/lib/brcobranca/retorno/cnab240/santander.rb +35 -12
  65. data/lib/brcobranca/retorno/cnab240/sicoob.rb +8 -4
  66. data/lib/brcobranca/retorno/cnab240/sicredi.rb +79 -0
  67. data/lib/brcobranca/retorno/cnab400/banco_brasil.rb +127 -0
  68. data/lib/brcobranca/retorno/cnab400/banco_brasilia.rb +89 -0
  69. data/lib/brcobranca/retorno/cnab400/banco_nordeste.rb +112 -0
  70. data/lib/brcobranca/retorno/cnab400/banrisul.rb +42 -0
  71. data/lib/brcobranca/retorno/cnab400/base.rb +18 -7
  72. data/lib/brcobranca/retorno/cnab400/bradesco.rb +9 -3
  73. data/lib/brcobranca/retorno/cnab400/credisis.rb +115 -0
  74. data/lib/brcobranca/retorno/cnab400/itau.rb +10 -4
  75. data/lib/brcobranca/retorno/cnab400/santander.rb +57 -0
  76. data/lib/brcobranca/retorno/cnab400/unicred.rb +118 -0
  77. data/lib/brcobranca/retorno/retorno_cnab240.rb +7 -3
  78. data/lib/brcobranca/retorno/retorno_cnab400.rb +6 -77
  79. data/lib/brcobranca/util/date.rb +20 -0
  80. data/lib/brcobranca/util/errors.rb +76 -0
  81. data/lib/brcobranca/validations.rb +232 -0
  82. data/lib/brcobranca/version.rb +1 -1
  83. data/spec/arquivos/CNAB240CECRED.RET +10 -0
  84. data/spec/arquivos/CNAB240SANTANDER.RET +8 -26
  85. data/spec/arquivos/CNAB240SICREDI.CRT +8 -0
  86. data/spec/arquivos/CNAB400BANCOBRASILIA.RET +3 -0
  87. data/spec/arquivos/CNAB400BANCONORDESTE.RET +3 -0
  88. data/spec/arquivos/CNAB400BANRISUL.RET +3 -0
  89. data/spec/arquivos/CNAB400CREDISIS.RET +3 -0
  90. data/spec/arquivos/CNAB400SANTANDER.RET +54 -0
  91. data/spec/arquivos/CNAB400UNICRED.RET +3 -0
  92. data/spec/brcobranca/base_spec.rb +6 -4
  93. data/spec/brcobranca/boleto/banco_brasil_spec.rb +22 -22
  94. data/spec/brcobranca/boleto/banco_brasilia_spec.rb +134 -0
  95. data/spec/brcobranca/boleto/banco_nordeste_spec.rb +19 -19
  96. data/spec/brcobranca/boleto/banestes_spec.rb +19 -19
  97. data/spec/brcobranca/boleto/banrisul_spec.rb +14 -14
  98. data/spec/brcobranca/boleto/bradesco_spec.rb +13 -13
  99. data/spec/brcobranca/boleto/caixa_spec.rb +7 -7
  100. data/spec/brcobranca/boleto/cecred_spec.rb +147 -0
  101. data/spec/brcobranca/boleto/credisis_spec.rb +155 -0
  102. data/spec/brcobranca/boleto/hsbc_spec.rb +17 -37
  103. data/spec/brcobranca/boleto/itau_spec.rb +16 -16
  104. data/spec/brcobranca/boleto/santander_spec.rb +11 -11
  105. data/spec/brcobranca/boleto/sicoob_spec.rb +17 -17
  106. data/spec/brcobranca/boleto/sicredi_spec.rb +13 -13
  107. data/spec/brcobranca/boleto/unicred_spec.rb +10 -10
  108. data/spec/brcobranca/boletos_em_lote_spec.rb +1 -1
  109. data/spec/brcobranca/formatacao_string_spec.rb +1 -1
  110. data/spec/brcobranca/remessa/cnab240/banco_brasil_spec.rb +10 -18
  111. data/spec/brcobranca/remessa/cnab240/caixa_spec.rb +39 -38
  112. data/spec/brcobranca/remessa/cnab240/cecred_spec.rb +164 -0
  113. data/spec/brcobranca/remessa/cnab240/sicoob_banco_brasil_spec.rb +268 -0
  114. data/spec/brcobranca/remessa/cnab240/sicoob_spec.rb +58 -39
  115. data/spec/brcobranca/remessa/cnab240/sicredi_spec.rb +201 -0
  116. data/spec/brcobranca/remessa/cnab240/unicred_spec.rb +193 -0
  117. data/spec/brcobranca/remessa/cnab400/banco_brasilia_spec.rb +183 -0
  118. data/spec/brcobranca/remessa/cnab400/banco_nordeste_spec.rb +4 -2
  119. data/spec/brcobranca/remessa/cnab400/banrisul_spec.rb +190 -0
  120. data/spec/brcobranca/remessa/cnab400/base_spec.rb +1 -1
  121. data/spec/brcobranca/remessa/cnab400/bradesco_spec.rb +16 -11
  122. data/spec/brcobranca/remessa/cnab400/citibank_spec.rb +11 -11
  123. data/spec/brcobranca/remessa/cnab400/credisis_spec.rb +188 -0
  124. data/spec/brcobranca/remessa/cnab400/itau_spec.rb +25 -12
  125. data/spec/brcobranca/remessa/cnab400/santander_spec.rb +35 -36
  126. data/spec/brcobranca/remessa/cnab400/sicoob_spec.rb +37 -0
  127. data/spec/brcobranca/remessa/cnab400/unicred_spec.rb +185 -0
  128. data/spec/brcobranca/remessa/pagamento_spec.rb +45 -27
  129. data/spec/brcobranca/retorno/cnab240/base_spec.rb +7 -8
  130. data/spec/brcobranca/retorno/cnab240/cecred_spec.rb +50 -0
  131. data/spec/brcobranca/retorno/cnab240/santander_spec.rb +35 -18
  132. data/spec/brcobranca/retorno/cnab240/sicoob_spec.rb +20 -19
  133. data/spec/brcobranca/retorno/cnab240/sicredi_spec.rb +31 -0
  134. data/spec/brcobranca/retorno/cnab400/banco_brasilia_spec.rb +36 -0
  135. data/spec/brcobranca/retorno/cnab400/banco_nordeste_spec.rb +39 -0
  136. data/spec/brcobranca/retorno/cnab400/banrisul_spec.rb +41 -0
  137. data/spec/brcobranca/retorno/cnab400/base_spec.rb +34 -13
  138. data/spec/brcobranca/retorno/cnab400/bradesco_spec.rb +4 -4
  139. data/spec/brcobranca/retorno/cnab400/credisis_spec.rb +25 -0
  140. data/spec/brcobranca/retorno/cnab400/itau_spec.rb +4 -4
  141. data/spec/brcobranca/retorno/cnab400/santander_spec.rb +39 -0
  142. data/spec/brcobranca/retorno/cnab400/unicred_spec.rb +42 -0
  143. data/spec/brcobranca/retorno/retorno_cnab400_spec.rb +1 -1
  144. data/spec/brcobranca/retorno/retorno_cnab_240_spec.rb +1 -1
  145. data/spec/brcobranca/rghost_spec.rb +1 -1
  146. data/spec/fixtures/remessa/remessa-banco-brasil-cnab400.rem +1 -1
  147. data/spec/fixtures/remessa/remessa-banco-brasilia-cnab400.rem +3 -0
  148. data/spec/fixtures/remessa/remessa-banco-nordeste-cnab400.rem +1 -1
  149. data/spec/fixtures/remessa/remessa-banco_brasil-cnab240.rem +5 -4
  150. data/spec/fixtures/remessa/remessa-bancoob-cnab240.rem +5 -4
  151. data/spec/fixtures/remessa/remessa-banrisul-cnab400.rem +3 -0
  152. data/spec/fixtures/remessa/remessa-bradesco-cnab400.rem +1 -1
  153. data/spec/fixtures/remessa/remessa-caixa-cnab240.rem +6 -5
  154. data/spec/fixtures/remessa/remessa-cecred-cnab240.rem +7 -0
  155. data/spec/fixtures/remessa/remessa-citibank-cnab400.rem +1 -1
  156. data/spec/fixtures/remessa/remessa-credisis-cnab400.rem +3 -0
  157. data/spec/fixtures/remessa/remessa-itau-cnab400.rem +3 -2
  158. data/spec/fixtures/remessa/remessa-santander-cnab400.rem +2 -2
  159. data/spec/fixtures/remessa/remessa-sicoob-correspondente-bb-cnab240.rem +4 -0
  160. data/spec/fixtures/remessa/remessa-sicredi-cnab240.rem +7 -0
  161. data/spec/fixtures/remessa/remessa-unicred-cnab240.rem +7 -0
  162. data/spec/fixtures/remessa/remessa-unicred-cnab400.rem +3 -0
  163. data/spec/support/shared_examples/busca_logotipo.rb +0 -2
  164. data/spec/support/shared_examples/cnab240.rb +92 -28
  165. data/spec/support/shared_examples/cnab400.rb +60 -14
  166. data/spec/support/shared_examples/formatos_validos.rb +6 -6
  167. metadata +103 -31
@@ -4,8 +4,9 @@ require 'spec_helper'
4
4
  RSpec.describe Brcobranca::Remessa::Cnab400::BancoNordeste do
5
5
  let(:pagamento) do
6
6
  Brcobranca::Remessa::Pagamento.new(valor: 199.9,
7
- data_vencimento: Date.today,
7
+ data_vencimento: Date.current,
8
8
  nosso_numero: 123,
9
+ documento: 6969,
9
10
  documento_sacado: '12345678901',
10
11
  nome_sacado: 'PABLO DIEGO JOSÉ FRANCISCO DE PAULA JUAN NEPOMUCENO MARÍA DE LOS REMEDIOS CIPRIANO DE LA SANTÍSSIMA TRINIDAD RUIZ Y PICASSO',
11
12
  endereco_sacado: 'RUA RIO GRANDE DO SUL São paulo Minas caçapa da silva junior',
@@ -164,9 +165,10 @@ RSpec.describe Brcobranca::Remessa::Cnab400::BancoNordeste do
164
165
  context 'detalhe' do
165
166
  it 'informacoes devem estar posicionadas corretamente no detalhe' do
166
167
  detalhe = banco_nordeste.monta_detalhe pagamento, 1
168
+ expect(detalhe[37..61]).to eq "6969".ljust(25) # documento
167
169
  expect(detalhe[62..68]).to eq '0000123' # nosso numero
168
170
  expect(detalhe[69]).to eq '6' # digito verificador
169
- expect(detalhe[120..125]).to eq Date.today.strftime('%d%m%y') # data de vencimento
171
+ expect(detalhe[120..125]).to eq Date.current.strftime('%d%m%y') # data de vencimento
170
172
  expect(detalhe[126..138]).to eq '0000000019990' # valor do titulo
171
173
  expect(detalhe[142..145]).to eq '0000' # agência cobradora
172
174
  expect(detalhe[156..159]).to eq '0000' # instrução
@@ -0,0 +1,190 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'spec_helper'
3
+
4
+ RSpec.describe Brcobranca::Remessa::Cnab400::Banrisul do
5
+ let(:pagamento) do
6
+ Brcobranca::Remessa::Pagamento.new(valor: 199.9,
7
+ data_vencimento: Date.current,
8
+ nosso_numero: 22832563,
9
+ documento: '1',
10
+ documento_sacado: '12345678901',
11
+ nome_sacado: 'PABLO DIEGO JOSÉ FRANCISCO DE PAULA JUAN NEPOMUCENO MARÍA DE LOS REMEDIOS CIPRIANO DE LA SANTÍSSIMA TRINIDAD RUIZ Y PICASSO',
12
+ endereco_sacado: 'RUA RIO GRANDE DO SUL São paulo Minas caçapa da silva junior',
13
+ bairro_sacado: 'São josé dos quatro apostolos magros',
14
+ cep_sacado: '12345678',
15
+ cidade_sacado: 'Santa rita de cássia maria da silva',
16
+ percentual_multa: 2.0,
17
+ uf_sacado: 'SP')
18
+ end
19
+ let(:params) do
20
+ {
21
+ carteira: '1',
22
+ agencia: '1102',
23
+ convenio: '1102900015046',
24
+ empresa_mae: 'SOCIEDADE BRASILEIRA DE ZOOLOGIA LTDA',
25
+ sequencial_remessa: '1',
26
+ pagamentos: [pagamento]
27
+ }
28
+ end
29
+
30
+ let(:banrisul) { subject.class.new(params) }
31
+
32
+ context 'validacoes dos campos' do
33
+ context '@agencia' do
34
+ it 'deve ser inválido se não possuir uma agência' do
35
+ objeto = subject.class.new(params.merge!(agencia: nil))
36
+ expect(objeto.invalid?).to be true
37
+ expect(objeto.errors.full_messages).to include('Agencia não pode estar em branco.')
38
+ end
39
+
40
+ it 'deve ser inválido se a agência tiver mais de 4 dígitos' do
41
+ banrisul.agencia = '12345'
42
+ expect(banrisul.invalid?).to be true
43
+ expect(banrisul.errors.full_messages).to include('Agencia deve ter 4 dígitos.')
44
+ end
45
+ end
46
+
47
+ context '@convenio' do
48
+ it 'deve ser inválido se não possuir um convênio' do
49
+ objeto = subject.class.new(params.merge!(convenio: nil))
50
+ expect(objeto.invalid?).to be true
51
+ expect(objeto.errors.full_messages).to include('Convenio não pode estar em branco.')
52
+ end
53
+
54
+ it 'deve ser inválido se o convenio tiver mais de 7 dígitos' do
55
+ banrisul.convenio = '12345678901234'
56
+ expect(banrisul.invalid?).to be true
57
+ expect(banrisul.errors.full_messages).to include('Convenio deve ter 13 dígitos.')
58
+ end
59
+ end
60
+
61
+ context '@carteira' do
62
+ it 'deve ser inválido se não possuir uma carteira' do
63
+ objeto = subject.class.new(params.merge!(carteira: nil))
64
+ expect(objeto.invalid?).to be true
65
+ expect(objeto.errors.full_messages).to include('Carteira não pode estar em branco.')
66
+ end
67
+
68
+ it 'deve ser inválido se a carteira tiver mais de 1 dígito' do
69
+ banrisul.carteira = '123'
70
+ expect(banrisul.invalid?).to be true
71
+ expect(banrisul.errors.full_messages).to include('Carteira deve ter 1 dígito.')
72
+ end
73
+ end
74
+
75
+ context '@sequencial_remessa' do
76
+ it 'deve ser inválido se não possuir um num. sequencial de remessa' do
77
+ objeto = subject.class.new(params.merge!(sequencial_remessa: nil))
78
+ expect(objeto.invalid?).to be true
79
+ expect(objeto.errors.full_messages).to include('Sequencial remessa não pode estar em branco.')
80
+ end
81
+
82
+ it 'deve ser inválido se sequencial de remessa tiver mais de 8 dígitos' do
83
+ banrisul.sequencial_remessa = '12345678'
84
+ expect(banrisul.invalid?).to be true
85
+ expect(banrisul.errors.full_messages).to include('Sequencial remessa deve ter 7 dígitos.')
86
+ end
87
+ end
88
+ end
89
+
90
+ context 'formatacoes dos valores' do
91
+ it 'código do banco deve ser 041' do
92
+ expect(banrisul.cod_banco).to eq '041'
93
+ end
94
+
95
+ it 'nome do banco deve ser BANRISUL com 15 posicoes' do
96
+ nome_banco = banrisul.nome_banco
97
+ expect(nome_banco.size).to eq 15
98
+ expect(nome_banco.strip).to eq 'BANRISUL'
99
+ end
100
+
101
+ it 'complemento deve ter 294 caracteres com as informações nas posições corretas' do
102
+ complemento = banrisul.complemento
103
+ expect(complemento.size).to eq 294
104
+ end
105
+
106
+ it 'info_conta deve ter 20 posicoes' do
107
+ expect(banrisul.info_conta.size).to eq 20
108
+ end
109
+
110
+ it 'código do cedente deve ter as informações nas posicoes corretas' do
111
+ id_empresa = banrisul.codigo_cedente
112
+ expect(id_empresa[0..3]).to eq '1102' # agência
113
+ expect(id_empresa[4..10]).to eq '9000150' # convênio
114
+ expect(id_empresa[11..12]).to eq '46' # dígitos do convênio
115
+ end
116
+
117
+ it 'calcula o dígito verificador do nosso número' do
118
+ expect(banrisul.digito_nosso_numero(22832563)).to eq("51")
119
+ end
120
+ end
121
+
122
+ context 'monta remessa' do
123
+ it_behaves_like 'cnab400'
124
+
125
+ context 'header' do
126
+ it 'informações devem estar posicionadas corretamente no header' do
127
+ header = banrisul.monta_header
128
+ expect(header[1]).to eq '1' # tipo operação (1 = remessa)
129
+ expect(header[2..8]).to eq 'REMESSA' # literal da operação
130
+ expect(header[26..45]).to eq banrisul.info_conta # informações da conta
131
+ expect(header[76..78]).to eq '041' # código do banco
132
+ end
133
+ end
134
+
135
+ context 'detalhe' do
136
+ it 'informações devem estar posicionadas corretamente no detalhe' do
137
+ detalhe = banrisul.monta_detalhe pagamento, 1
138
+ expect(detalhe[0]).to eq '1' # tipo do registro
139
+ expect(detalhe[1..16]).to eq ''.rjust(16, ' ') # brancos
140
+ expect(detalhe[17..29]).to eq '1102900015046' # código do cedente
141
+ expect(detalhe[30..36]).to eq ''.rjust(7, ' ') # brancos
142
+ expect(detalhe[37..61]).to eq '1'.ljust(25, ' ') # num. controle
143
+ expect(detalhe[62..69]).to eq '22832563' # nosso número
144
+ expect(detalhe[70..71]).to eq '51' # dígitos nosso número
145
+ expect(detalhe[72..103]).to eq ''.rjust(32, ' ') # mensagem bloqueto
146
+ expect(detalhe[104..106]).to eq ''.rjust(3, ' ') # branco
147
+ expect(detalhe[107]).to eq '1' # carteira
148
+ expect(detalhe[108..109]).to eq '01' # código da ocorrência
149
+ expect(detalhe[110..119]).to eq '1'.ljust(10, ' ') # seu número
150
+ expect(detalhe[120..125]).to eq Date.current.strftime('%d%m%y') # data de vencimento
151
+ expect(detalhe[126..138]).to eq '0000000019990' # valor do documento
152
+ expect(detalhe[139..141]).to eq '041' # banco cobrador
153
+ expect(detalhe[142..146]).to eq ''.rjust(5, ' ') # brancos
154
+ expect(detalhe[147..148]).to eq '08' # tipo de documento (08 - Cobrança Credenciada Banrisul - CCB)
155
+ expect(detalhe[149]).to eq 'N' # código de aceite
156
+ expect(detalhe[150..155]).to eq Date.current.strftime('%d%m%y') # data de emissão
157
+ expect(detalhe[156..157]).to eq '18' # código da 1a instrução
158
+ expect(detalhe[158..159]).to eq '00' # código da 2a instrução
159
+ expect(detalhe[160]).to eq ' ' # código da mora
160
+ expect(detalhe[161..172]).to eq ''.rjust(12, ' ') # valor ao dia ou mensal de juros
161
+ expect(detalhe[173..178]).to eq ''.rjust(6, '0') # data para concessão do desconto
162
+ expect(detalhe[179..191]).to eq ''.rjust(13, '0') # valor do desconto a ser concedido
163
+ expect(detalhe[192..204]).to eq ''.rjust(13, '0') # valor do iof
164
+ expect(detalhe[205..217]).to eq ''.rjust(13, '0') # valor do abatimento
165
+ expect(detalhe[218..219]).to eq '01' # tipo de insc. do pagador
166
+ expect(detalhe[220..233]).to eq '00012345678901' # num. da insc. do pagador
167
+ expect(detalhe[234..268]).to eq 'PABLO DIEGO JOSE FRANCISCO DE PAULA' # nome do pagador
168
+ expect(detalhe[274..313]).to eq 'RUA RIO GRANDE DO SUL Sao paulo Minas ca' # endereço do pagador
169
+ expect(detalhe[314..320]).to eq ''.rjust(7, ' ') # brancos
170
+ expect(detalhe[321..323]).to eq '020' # multa
171
+ expect(detalhe[324..325]).to eq '00' # num. dias para a multa após o vencimento
172
+ expect(detalhe[326..333]).to eq '12345678' # cep do pagador
173
+ expect(detalhe[334..348]).to eq 'Santa rita de c' # cidade do pagador
174
+ expect(detalhe[349..350]).to eq 'SP' # uf do pagador
175
+ expect(detalhe[351..354]).to eq '0000' # taxa ao dia para pag. antecipado
176
+ expect(detalhe[355]).to eq ' ' # branco
177
+ expect(detalhe[356..368]).to eq ''.rjust(13, '0') # valor para cálc. do desconto
178
+ expect(detalhe[369..370]).to eq '00' # dias para protesto
179
+ expect(detalhe[371..393]).to eq ''.rjust(23, ' ') # brancos
180
+ end
181
+ end
182
+
183
+ context 'arquivo' do
184
+ before { Timecop.freeze(Time.local(2015, 7, 14, 16, 15, 15)) }
185
+ after { Timecop.return }
186
+
187
+ it { expect(banrisul.gera_arquivo).to eq(read_remessa('remessa-banrisul-cnab400.rem', banrisul.gera_arquivo)) }
188
+ end
189
+ end
190
+ end
@@ -48,6 +48,6 @@ RSpec.describe Brcobranca::Remessa::Cnab400::Base do
48
48
  end
49
49
 
50
50
  context '#valor_total_titulos' do
51
- it { expect(cnab400.valor_total_titulos(13)).to eq('0000000039980') }
51
+ it { expect(cnab400.valor_titulos_carteira(13)).to eq('0000000039980') }
52
52
  end
53
53
  end
@@ -1,20 +1,22 @@
1
1
  # -*- encoding: utf-8 -*-
2
- #
3
-
4
2
  require 'spec_helper'
5
3
 
6
4
  RSpec.describe Brcobranca::Remessa::Cnab400::Bradesco do
7
5
  let(:pagamento) do
8
6
  Brcobranca::Remessa::Pagamento.new(valor: 199.9,
9
- data_vencimento: Date.current,
10
- nosso_numero: 123,
11
- documento_sacado: '12345678901',
12
- nome_sacado: 'PABLO DIEGO JOSÉ FRANCISCO DE PAULA JUAN NEPOMUCENO MARÍA DE LOS REMEDIOS CIPRIANO DE LA SANTÍSSIMA TRINIDAD RUIZ Y PICASSO',
13
- endereco_sacado: 'RUA RIO GRANDE DO SUL São paulo Minas caçapa da silva junior',
14
- bairro_sacado: 'São josé dos quatro apostolos magros',
15
- cep_sacado: '12345678',
16
- cidade_sacado: 'Santa rita de cássia maria da silva',
17
- uf_sacado: 'SP')
7
+ data_vencimento: Date.current,
8
+ codigo_multa: '2',
9
+ percentual_multa: '2.00',
10
+ numero: 1,
11
+ nosso_numero: 123,
12
+ documento: 6969,
13
+ documento_sacado: '12345678901',
14
+ nome_sacado: 'PABLO DIEGO JOSÉ FRANCISCO DE PAULA JUAN NEPOMUCENO MARÍA DE LOS REMEDIOS CIPRIANO DE LA SANTÍSSIMA TRINIDAD RUIZ Y PICASSO',
15
+ endereco_sacado: 'RUA RIO GRANDE DO SUL São paulo Minas caçapa da silva junior',
16
+ bairro_sacado: 'São josé dos quatro apostolos magros',
17
+ cep_sacado: '12345678',
18
+ cidade_sacado: 'Santa rita de cássia maria da silva',
19
+ uf_sacado: 'SP')
18
20
  end
19
21
  let(:params) do
20
22
  { carteira: '01',
@@ -176,6 +178,9 @@ RSpec.describe Brcobranca::Remessa::Cnab400::Bradesco do
176
178
  context 'detalhe' do
177
179
  it 'informacoes devem estar posicionadas corretamente no detalhe' do
178
180
  detalhe = bradesco.monta_detalhe pagamento, 1
181
+ expect(detalhe[37..61]).to eq "6969".ljust(25)
182
+ expect(detalhe[65]).to eq "2"
183
+ expect(detalhe[66..69]).to eq "0200"
179
184
  expect(detalhe[70..80]).to eq '00000000123' # nosso numero
180
185
  expect(detalhe[81]).to eq 'P' # digito nosso numero (para nosso numero 123 o digito e P)
181
186
  expect(detalhe[120..125]).to eq Date.current.strftime('%d%m%y') # data de vencimento
@@ -1,20 +1,19 @@
1
1
  # -*- encoding: utf-8 -*-
2
- #
3
-
4
2
  require 'spec_helper'
5
3
 
6
4
  RSpec.describe Brcobranca::Remessa::Cnab400::Citibank do
7
5
  let(:pagamento) do
8
6
  Brcobranca::Remessa::Pagamento.new(valor: 199.9,
9
- data_vencimento: Date.current,
10
- nosso_numero: 123,
11
- documento_sacado: '12345678901',
12
- nome_sacado: 'PABLO DIEGO JOSÉ FRANCISCO DE PAULA JUAN NEPOMUCENO MARÍA DE LOS REMEDIOS CIPRIANO DE LA SANTÍSSIMA TRINIDAD RUIZ Y PICASSO',
13
- endereco_sacado: 'RUA RIO GRANDE DO SUL São paulo Minas caçapa da silva junior',
14
- bairro_sacado: 'São josé dos quatro apostolos magros',
15
- cep_sacado: '12345678',
16
- cidade_sacado: 'Santa rita de cássia maria da silva',
17
- uf_sacado: 'SP')
7
+ data_vencimento: Date.current,
8
+ nosso_numero: 123,
9
+ documento: 6969,
10
+ documento_sacado: '12345678901',
11
+ nome_sacado: 'PABLO DIEGO JOSÉ FRANCISCO DE PAULA JUAN NEPOMUCENO MARÍA DE LOS REMEDIOS CIPRIANO DE LA SANTÍSSIMA TRINIDAD RUIZ Y PICASSO',
12
+ endereco_sacado: 'RUA RIO GRANDE DO SUL São paulo Minas caçapa da silva junior',
13
+ bairro_sacado: 'São josé dos quatro apostolos magros',
14
+ cep_sacado: '12345678',
15
+ cidade_sacado: 'Santa rita de cássia maria da silva',
16
+ uf_sacado: 'SP')
18
17
  end
19
18
  let(:params) do
20
19
  {
@@ -108,6 +107,7 @@ RSpec.describe Brcobranca::Remessa::Cnab400::Citibank do
108
107
  context 'detalhe' do
109
108
  it 'informacoes devem estar posicionadas corretamente no detalhe' do
110
109
  detalhe = citibank.monta_detalhe pagamento, 1
110
+ expect(detalhe[37..61]).to eq "6969".ljust(25) # nosso numero
111
111
  expect(detalhe[64..75]).to eq '000000000123' # nosso numero
112
112
  expect(detalhe[120..125]).to eq Date.current.strftime('%d%m%y') # data de vencimento
113
113
  expect(detalhe[126..138]).to eq '0000000019990' # valor do titulo
@@ -0,0 +1,188 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'spec_helper'
3
+
4
+ RSpec.describe Brcobranca::Remessa::Cnab400::Credisis do
5
+ let(:pagamento) do
6
+ Brcobranca::Remessa::Pagamento.new(valor: 199.9,
7
+ data_vencimento: Date.current,
8
+ nosso_numero: 123,
9
+ documento: 6969,
10
+ dias_protesto: '6',
11
+ valor_mora: "8.00",
12
+ percentual_multa: "2.00",
13
+ documento_sacado: '12345678901',
14
+ nome_sacado: 'PABLO DIEGO JOSÉ FRANCISCO DE PAULA JUAN NEPOMUCENO MARÍA DE LOS REMEDIOS CIPRIANO DE LA SANTÍSSIMA TRINIDAD RUIZ Y PICASSO',
15
+ endereco_sacado: 'RUA RIO GRANDE DO SUL São paulo Minas caçapa da silva junior',
16
+ bairro_sacado: 'São josé dos quatro apostolos magros',
17
+ cep_sacado: '12345678',
18
+ cidade_sacado: 'Santa rita de cássia maria da silva',
19
+ uf_sacado: 'SP')
20
+ end
21
+ let(:params) do
22
+ {
23
+ carteira: '18',
24
+ agencia: '1',
25
+ conta_corrente: '2',
26
+ codigo_cedente: '0027',
27
+ documento_cedente: '12345678901234',
28
+ digito_conta: '7',
29
+ sequencial_remessa: '3',
30
+ empresa_mae: 'SOCIEDADE BRASILEIRA DE ZOOLOGIA LTDA',
31
+ pagamentos: [pagamento]
32
+ }
33
+ end
34
+ let(:credisis) { subject.class.new(params) }
35
+
36
+ context 'validações dos campos' do
37
+ context '@agencia' do
38
+ it 'deve ser inválido se não possuir uma agência' do
39
+ object = subject.class.new(params.merge!(agencia: nil))
40
+ expect(object.invalid?).to be true
41
+ expect(object.errors.full_messages).to include('Agencia não pode estar em branco.')
42
+ end
43
+
44
+ it 'deve ser invalido se a agencia tiver mais de 4 dígitos' do
45
+ credisis.agencia = '12345'
46
+ expect(credisis.invalid?).to be true
47
+ expect(credisis.errors.full_messages).to include('Agencia deve ter 4 dígitos.')
48
+ end
49
+ end
50
+
51
+ context '@digito_conta' do
52
+ it 'deve ser inválido se não possuir um dígito da conta corrente' do
53
+ objeto = subject.class.new(params.merge!(digito_conta: nil))
54
+ expect(objeto.invalid?).to be true
55
+ expect(objeto.errors.full_messages).to include('Digito conta não pode estar em branco.')
56
+ end
57
+
58
+ it 'deve ser inválido se o dígito da conta tiver mais de 1 dígito' do
59
+ credisis.digito_conta = '12'
60
+ expect(credisis.invalid?).to be true
61
+ expect(credisis.errors.full_messages).to include('Digito conta deve ter 1 dígito.')
62
+ end
63
+ end
64
+
65
+ context '@conta_corrente' do
66
+ it 'deve ser inválido se não possuir uma conta corrente' do
67
+ object = subject.class.new(params.merge!(conta_corrente: nil))
68
+ expect(object.invalid?).to be true
69
+ expect(object.errors.full_messages).to include('Conta corrente não pode estar em branco.')
70
+ end
71
+
72
+ it 'deve ser inválido se a conta corrente tiver mais de 8 dígitos' do
73
+ credisis.conta_corrente = '123456789'
74
+ expect(credisis.invalid?).to be true
75
+ expect(credisis.errors.full_messages).to include('Conta corrente deve ter 8 dígitos.')
76
+ end
77
+ end
78
+
79
+ context '@codigo_cedente' do
80
+ it 'deve ser inválido se não possuir código do cedente' do
81
+ object = subject.class.new(params.merge!(codigo_cedente: nil))
82
+ expect(object.invalid?).to be true
83
+ expect(object.errors.full_messages).to include('Codigo cedente não pode estar em branco.')
84
+ end
85
+
86
+ it 'deve ser inválido se o código do cedente tiver mais de 4 dígitos' do
87
+ credisis.codigo_cedente = '12345333'
88
+ expect(credisis.invalid?).to be true
89
+ expect(credisis.errors.full_messages).to include('Codigo cedente deve ter 4 dígitos.')
90
+ end
91
+ end
92
+
93
+ context '@carteira' do
94
+ it 'deve ser inválido se não possuir uma carteira' do
95
+ object = subject.class.new(params.merge!(carteira: nil))
96
+ expect(object.invalid?).to be true
97
+ expect(object.errors.full_messages).to include('Carteira não pode estar em branco.')
98
+ end
99
+
100
+ it 'deve ser inválido se a carteira tiver mais de 2 dígitos' do
101
+ credisis.carteira = '123'
102
+ expect(credisis.invalid?).to be true
103
+ expect(credisis.errors.full_messages).to include('Carteira deve ter 2 dígitos.')
104
+ end
105
+ end
106
+
107
+ context '@sequencial_remessa' do
108
+ it 'deve ser inválido se a sequencial remessa tiver mais de 7 dígitos' do
109
+ credisis.sequencial_remessa = '12345678'
110
+ expect(credisis.invalid?).to be true
111
+ expect(credisis.errors.full_messages).to include('Sequencial remessa deve ter 7 dígitos.')
112
+ end
113
+ end
114
+ end
115
+
116
+ context 'formatacoes dos valores' do
117
+ it 'cod_banco deve ser 097' do
118
+ expect(credisis.cod_banco).to eq '097'
119
+ expect(credisis.nome_banco.strip).to eq 'CENTRALCRED'
120
+ end
121
+
122
+ it 'info_conta deve retornar com 20 posicoes as informacoes da conta' do
123
+ info_conta = credisis.info_conta
124
+ expect(info_conta.size).to eq 20
125
+ expect(info_conta[0..3]).to eq '0001' # num. da agencia
126
+ expect(info_conta[5..12]).to eq '00000002' # num. da conta
127
+ expect(info_conta[13]).to eq '7' # dígito da conta
128
+ end
129
+ end
130
+
131
+ context 'monta remessa' do
132
+ it_behaves_like 'cnab400'
133
+
134
+ context 'header' do
135
+ it 'informacoes devem estar posicionadas corretamente no header' do
136
+ header = credisis.monta_header
137
+ expect(header[1]).to eq '1' # tipo operacao (1 = remessa)
138
+ expect(header[2..8]).to eq 'REMESSA' # literal da operacao
139
+ expect(header[26..45]).to eq credisis.info_conta # informacoes da conta
140
+ expect(header[76..78]).to eq '097' # codigo do banco
141
+ expect(header[100..106]).to eq '0000003' # sequencial da remessa
142
+ end
143
+ end
144
+
145
+ context 'detalhe' do
146
+ it 'informacoes devem estar posicionadas corretamente no detalhe' do
147
+ detalhe = credisis.monta_detalhe pagamento, 1
148
+ expect(detalhe[0]).to eq '1' # registro detalhe
149
+ expect(detalhe[1..2]).to eq '02' # tipo do documento do cedente
150
+ expect(detalhe[3..16]).to eq '12345678901234' # documento do cedente
151
+ expect(detalhe[17..20]).to eq '0001' # agência
152
+ expect(detalhe[22..29]).to eq '00000002' # conta corrente
153
+ expect(detalhe[30]).to eq '7' # dígito da conta corrente
154
+ expect(detalhe[37..61]).to eq "6969".ljust(25) # número controle cliente
155
+ expect(detalhe[62..72]).to eq '00027000123' # nosso numero
156
+ expect(detalhe[73..109]).to eq ''.rjust(37, ' ') # brancos
157
+ expect(detalhe[110..119]).to eq '0000000000' # número documento
158
+ expect(detalhe[120..125]).to eq Date.current.strftime('%d%m%y') # data de vencimento
159
+ expect(detalhe[126..138]).to eq '0000000019990' # valor do titulo
160
+ expect(detalhe[139..149]).to eq ''.rjust(11, ' ') # brancos
161
+ expect(detalhe[150..155]).to eq Date.current.strftime('%d%m%y') # data emissão título
162
+ expect(detalhe[156..159]).to eq ''.rjust(4, ' ') # brancos
163
+ expect(detalhe[160..165]).to eq '080000' # mora
164
+ expect(detalhe[166..171]).to eq '020000' # multa
165
+ expect(detalhe[172..204]).to eq ''.rjust(33, ' ') # brancos
166
+ expect(detalhe[205..217]).to eq ''.rjust(13, '0') # desconto
167
+ expect(detalhe[218..219]).to eq '01' # tipo documento sacado
168
+ expect(detalhe[220..233]).to eq '00012345678901' # documento sacado
169
+ expect(detalhe[234..273]).to eq 'PABLO DIEGO JOSE FRANCISCO DE PAULA JUAN' # nome sacado
170
+ expect(detalhe[274..310]).to eq 'RUA RIO GRANDE DO SUL Sao paulo Minas' # endereco sacado
171
+ expect(detalhe[311..325]).to eq 'Sao jose dos qu' # bairro sacado
172
+ expect(detalhe[326..333]).to eq '12345678' # cep sacado
173
+ expect(detalhe[334..348]).to eq 'Santa rita de c' # cidade sacado
174
+ expect(detalhe[349..350]).to eq 'SP' # uf sacado
175
+ expect(detalhe[351..375]).to eq ''.rjust(25, " ") # nome avalista
176
+ expect(detalhe[377..390]).to eq ''.rjust(14, " ") # documento avalista
177
+ expect(detalhe[391..392]).to eq '06' # dias para envio a protesto
178
+ end
179
+ end
180
+
181
+ context 'arquivo' do
182
+ before { Timecop.freeze(Time.local(2015, 7, 14, 16, 15, 15)) }
183
+ after { Timecop.return }
184
+
185
+ it { expect(credisis.gera_arquivo).to eq(read_remessa('remessa-credisis-cnab400.rem', credisis.gera_arquivo)) }
186
+ end
187
+ end
188
+ end