bbrcobranca 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (220) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +1 -0
  3. data/LICENSE +20 -0
  4. data/README.md +12 -0
  5. data/Rakefile +13 -0
  6. data/lib/bbrcobranca.rb +196 -0
  7. data/lib/bbrcobranca/arquivos/logos/bancobrasil.eps +5402 -0
  8. data/lib/bbrcobranca/arquivos/logos/bancobrasil_carne.eps +5410 -0
  9. data/lib/bbrcobranca/arquivos/logos/bancobrasilia.eps +0 -0
  10. data/lib/bbrcobranca/arquivos/logos/bancobrasilia_carne.eps +0 -0
  11. data/lib/bbrcobranca/arquivos/logos/banconordeste.eps +0 -0
  12. data/lib/bbrcobranca/arquivos/logos/banconordeste_carne.eps +0 -0
  13. data/lib/bbrcobranca/arquivos/logos/banestes.eps +5198 -0
  14. data/lib/bbrcobranca/arquivos/logos/banestes_carne.eps +5206 -0
  15. data/lib/bbrcobranca/arquivos/logos/banrisul.eps +121 -0
  16. data/lib/bbrcobranca/arquivos/logos/banrisul_carne.eps +121 -0
  17. data/lib/bbrcobranca/arquivos/logos/bradesco.eps +5210 -0
  18. data/lib/bbrcobranca/arquivos/logos/bradesco_carne.eps +5214 -0
  19. data/lib/bbrcobranca/arquivos/logos/caixa.eps +5111 -0
  20. data/lib/bbrcobranca/arquivos/logos/caixa_carne.eps +5115 -0
  21. data/lib/bbrcobranca/arquivos/logos/cecred.eps +0 -0
  22. data/lib/bbrcobranca/arquivos/logos/cecred_carne.eps +0 -0
  23. data/lib/bbrcobranca/arquivos/logos/credisis.eps +0 -0
  24. data/lib/bbrcobranca/arquivos/logos/credisis_carne.eps +0 -0
  25. data/lib/bbrcobranca/arquivos/logos/hsbc.eps +5124 -0
  26. data/lib/bbrcobranca/arquivos/logos/hsbc_carne.eps +5128 -0
  27. data/lib/bbrcobranca/arquivos/logos/itau.eps +5318 -0
  28. data/lib/bbrcobranca/arquivos/logos/itau_carne.eps +5322 -0
  29. data/lib/bbrcobranca/arquivos/logos/santander.eps +5305 -0
  30. data/lib/bbrcobranca/arquivos/logos/santander_carne.eps +5313 -0
  31. data/lib/bbrcobranca/arquivos/logos/sicoob.eps +5375 -0
  32. data/lib/bbrcobranca/arquivos/logos/sicoob_carne.eps +5379 -0
  33. data/lib/bbrcobranca/arquivos/logos/sicredi.eps +5379 -0
  34. data/lib/bbrcobranca/arquivos/logos/sicredi_carne.eps +5383 -0
  35. data/lib/bbrcobranca/arquivos/logos/unicred.eps +0 -0
  36. data/lib/bbrcobranca/arquivos/logos/unicred_carne.eps +0 -0
  37. data/lib/bbrcobranca/arquivos/templates/modelo_carne.eps +1112 -0
  38. data/lib/bbrcobranca/arquivos/templates/modelo_generico.eps +0 -0
  39. data/lib/bbrcobranca/boleto/banco_brasil.rb +157 -0
  40. data/lib/bbrcobranca/boleto/banco_brasilia.rb +102 -0
  41. data/lib/bbrcobranca/boleto/banco_nordeste.rb +79 -0
  42. data/lib/bbrcobranca/boleto/banestes.rb +85 -0
  43. data/lib/bbrcobranca/boleto/banrisul.rb +94 -0
  44. data/lib/bbrcobranca/boleto/base.rb +256 -0
  45. data/lib/bbrcobranca/boleto/bradesco.rb +99 -0
  46. data/lib/bbrcobranca/boleto/bradesco_grb.rb +85 -0
  47. data/lib/bbrcobranca/boleto/caixa.rb +121 -0
  48. data/lib/bbrcobranca/boleto/cecred.rb +86 -0
  49. data/lib/bbrcobranca/boleto/credisis.rb +116 -0
  50. data/lib/bbrcobranca/boleto/hsbc.rb +94 -0
  51. data/lib/bbrcobranca/boleto/itau.rb +138 -0
  52. data/lib/bbrcobranca/boleto/itau_adimplere.rb +159 -0
  53. data/lib/bbrcobranca/boleto/santander.rb +84 -0
  54. data/lib/bbrcobranca/boleto/santander_adimplere.rb +73 -0
  55. data/lib/bbrcobranca/boleto/sicoob.rb +119 -0
  56. data/lib/bbrcobranca/boleto/sicredi.rb +142 -0
  57. data/lib/bbrcobranca/boleto/template/base.rb +25 -0
  58. data/lib/bbrcobranca/boleto/template/rghost.rb +315 -0
  59. data/lib/bbrcobranca/boleto/template/rghost_carne.rb +317 -0
  60. data/lib/bbrcobranca/boleto/unicred.rb +141 -0
  61. data/lib/bbrcobranca/calculo.rb +115 -0
  62. data/lib/bbrcobranca/calculo_data.rb +62 -0
  63. data/lib/bbrcobranca/currency.rb +69 -0
  64. data/lib/bbrcobranca/formatacao.rb +103 -0
  65. data/lib/bbrcobranca/formatacao_string.rb +35 -0
  66. data/lib/bbrcobranca/limpeza.rb +20 -0
  67. data/lib/bbrcobranca/remessa/base.rb +76 -0
  68. data/lib/bbrcobranca/remessa/cnab240/banco_brasil.rb +246 -0
  69. data/lib/bbrcobranca/remessa/cnab240/base.rb +512 -0
  70. data/lib/bbrcobranca/remessa/cnab240/base_correspondente.rb +299 -0
  71. data/lib/bbrcobranca/remessa/cnab240/caixa.rb +163 -0
  72. data/lib/bbrcobranca/remessa/cnab240/cecred.rb +151 -0
  73. data/lib/bbrcobranca/remessa/cnab240/sicoob.rb +226 -0
  74. data/lib/bbrcobranca/remessa/cnab240/sicoob_banco_brasil.rb +94 -0
  75. data/lib/bbrcobranca/remessa/cnab240/sicredi.rb +177 -0
  76. data/lib/bbrcobranca/remessa/cnab240/unicred.rb +9 -0
  77. data/lib/bbrcobranca/remessa/cnab400/banco_brasil.rb +169 -0
  78. data/lib/bbrcobranca/remessa/cnab400/banco_brasilia.rb +166 -0
  79. data/lib/bbrcobranca/remessa/cnab400/banco_nordeste.rb +160 -0
  80. data/lib/bbrcobranca/remessa/cnab400/banrisul.rb +155 -0
  81. data/lib/bbrcobranca/remessa/cnab400/base.rb +119 -0
  82. data/lib/bbrcobranca/remessa/cnab400/bradesco.rb +130 -0
  83. data/lib/bbrcobranca/remessa/cnab400/citibank.rb +138 -0
  84. data/lib/bbrcobranca/remessa/cnab400/credisis.rb +128 -0
  85. data/lib/bbrcobranca/remessa/cnab400/itau.rb +157 -0
  86. data/lib/bbrcobranca/remessa/cnab400/santander.rb +231 -0
  87. data/lib/bbrcobranca/remessa/cnab400/sicoob.rb +308 -0
  88. data/lib/bbrcobranca/remessa/cnab400/unicred.rb +143 -0
  89. data/lib/bbrcobranca/remessa/pagamento.rb +288 -0
  90. data/lib/bbrcobranca/retorno/base.rb +49 -0
  91. data/lib/bbrcobranca/retorno/cnab240/base.rb +42 -0
  92. data/lib/bbrcobranca/retorno/cnab240/caixa.rb +48 -0
  93. data/lib/bbrcobranca/retorno/cnab240/cecred.rb +102 -0
  94. data/lib/bbrcobranca/retorno/cnab240/santander.rb +95 -0
  95. data/lib/bbrcobranca/retorno/cnab240/sicoob.rb +99 -0
  96. data/lib/bbrcobranca/retorno/cnab240/sicredi.rb +79 -0
  97. data/lib/bbrcobranca/retorno/cnab400/banco_brasil.rb +127 -0
  98. data/lib/bbrcobranca/retorno/cnab400/banco_brasilia.rb +89 -0
  99. data/lib/bbrcobranca/retorno/cnab400/banco_nordeste.rb +112 -0
  100. data/lib/bbrcobranca/retorno/cnab400/banrisul.rb +42 -0
  101. data/lib/bbrcobranca/retorno/cnab400/base.rb +50 -0
  102. data/lib/bbrcobranca/retorno/cnab400/bradesco.rb +124 -0
  103. data/lib/bbrcobranca/retorno/cnab400/credisis.rb +115 -0
  104. data/lib/bbrcobranca/retorno/cnab400/itau.rb +143 -0
  105. data/lib/bbrcobranca/retorno/cnab400/santander.rb +57 -0
  106. data/lib/bbrcobranca/retorno/cnab400/unicred.rb +118 -0
  107. data/lib/bbrcobranca/retorno/retorno_cbr643.rb +49 -0
  108. data/lib/bbrcobranca/retorno/retorno_cnab240.rb +97 -0
  109. data/lib/bbrcobranca/retorno/retorno_cnab400.rb +70 -0
  110. data/lib/bbrcobranca/util/date.rb +20 -0
  111. data/lib/bbrcobranca/util/empresa.rb +28 -0
  112. data/lib/bbrcobranca/util/errors.rb +76 -0
  113. data/lib/bbrcobranca/validations.rb +232 -0
  114. data/lib/bbrcobranca/version.rb +6 -0
  115. data/spec/arquivos/CBR64310.RET +28 -0
  116. data/spec/arquivos/CNAB240.RET +74 -0
  117. data/spec/arquivos/CNAB240CECRED.RET +10 -0
  118. data/spec/arquivos/CNAB240SANTANDER.RET +8 -0
  119. data/spec/arquivos/CNAB240SICOOB.RET +10 -0
  120. data/spec/arquivos/CNAB240SICREDI.CRT +8 -0
  121. data/spec/arquivos/CNAB400.RET +54 -0
  122. data/spec/arquivos/CNAB400BANCOBRASILIA.RET +3 -0
  123. data/spec/arquivos/CNAB400BANCONORDESTE.RET +3 -0
  124. data/spec/arquivos/CNAB400BANRISUL.RET +3 -0
  125. data/spec/arquivos/CNAB400BRADESCO.RET +8 -0
  126. data/spec/arquivos/CNAB400CREDISIS.RET +3 -0
  127. data/spec/arquivos/CNAB400ITAU.RET +54 -0
  128. data/spec/arquivos/CNAB400SANTANDER.RET +54 -0
  129. data/spec/arquivos/CNAB400UNICRED.RET +3 -0
  130. data/spec/bbrcobranca_spec.rb +34 -0
  131. data/spec/brcobranca/base_spec.rb +170 -0
  132. data/spec/brcobranca/boleto/banco_brasil_spec.rb +334 -0
  133. data/spec/brcobranca/boleto/banco_brasilia_spec.rb +152 -0
  134. data/spec/brcobranca/boleto/banco_nordeste_spec.rb +161 -0
  135. data/spec/brcobranca/boleto/banestes_spec.rb +194 -0
  136. data/spec/brcobranca/boleto/banrisul_spec.rb +182 -0
  137. data/spec/brcobranca/boleto/bradesco_spec.rb +211 -0
  138. data/spec/brcobranca/boleto/caixa_spec.rb +161 -0
  139. data/spec/brcobranca/boleto/cecred_spec.rb +147 -0
  140. data/spec/brcobranca/boleto/credisis_spec.rb +159 -0
  141. data/spec/brcobranca/boleto/hsbc_spec.rb +172 -0
  142. data/spec/brcobranca/boleto/itau_spec.rb +262 -0
  143. data/spec/brcobranca/boleto/santander_spec.rb +143 -0
  144. data/spec/brcobranca/boleto/sicoob_spec.rb +193 -0
  145. data/spec/brcobranca/boleto/sicredi_spec.rb +190 -0
  146. data/spec/brcobranca/boleto/unicred_spec.rb +149 -0
  147. data/spec/brcobranca/boletos_em_lote_spec.rb +38 -0
  148. data/spec/brcobranca/calculo_data_spec.rb +33 -0
  149. data/spec/brcobranca/calculo_spec.rb +185 -0
  150. data/spec/brcobranca/currency_spec.rb +79 -0
  151. data/spec/brcobranca/formatacao_spec.rb +46 -0
  152. data/spec/brcobranca/formatacao_string_spec.rb +24 -0
  153. data/spec/brcobranca/limpeza_spec.rb +10 -0
  154. data/spec/brcobranca/remessa/base_spec.rb +67 -0
  155. data/spec/brcobranca/remessa/cnab240/banco_brasil_spec.rb +217 -0
  156. data/spec/brcobranca/remessa/cnab240/base_spec.rb +91 -0
  157. data/spec/brcobranca/remessa/cnab240/caixa_spec.rb +163 -0
  158. data/spec/brcobranca/remessa/cnab240/cecred_spec.rb +164 -0
  159. data/spec/brcobranca/remessa/cnab240/sicoob_banco_brasil_spec.rb +268 -0
  160. data/spec/brcobranca/remessa/cnab240/sicoob_spec.rb +198 -0
  161. data/spec/brcobranca/remessa/cnab240/sicredi_spec.rb +201 -0
  162. data/spec/brcobranca/remessa/cnab240/unicred_spec.rb +193 -0
  163. data/spec/brcobranca/remessa/cnab400/banco_brasil_spec.rb +187 -0
  164. data/spec/brcobranca/remessa/cnab400/banco_brasilia_spec.rb +183 -0
  165. data/spec/brcobranca/remessa/cnab400/banco_nordeste_spec.rb +187 -0
  166. data/spec/brcobranca/remessa/cnab400/banrisul_spec.rb +190 -0
  167. data/spec/brcobranca/remessa/cnab400/base_spec.rb +53 -0
  168. data/spec/brcobranca/remessa/cnab400/bradesco_spec.rb +201 -0
  169. data/spec/brcobranca/remessa/cnab400/citibank_spec.rb +126 -0
  170. data/spec/brcobranca/remessa/cnab400/credisis_spec.rb +188 -0
  171. data/spec/brcobranca/remessa/cnab400/itau_spec.rb +190 -0
  172. data/spec/brcobranca/remessa/cnab400/santander_spec.rb +152 -0
  173. data/spec/brcobranca/remessa/cnab400/sicoob_spec.rb +217 -0
  174. data/spec/brcobranca/remessa/cnab400/unicred_spec.rb +185 -0
  175. data/spec/brcobranca/remessa/pagamento_spec.rb +227 -0
  176. data/spec/brcobranca/retorno/cnab240/base_spec.rb +23 -0
  177. data/spec/brcobranca/retorno/cnab240/cecred_spec.rb +50 -0
  178. data/spec/brcobranca/retorno/cnab240/santander_spec.rb +50 -0
  179. data/spec/brcobranca/retorno/cnab240/sicoob_spec.rb +50 -0
  180. data/spec/brcobranca/retorno/cnab240/sicredi_spec.rb +31 -0
  181. data/spec/brcobranca/retorno/cnab400/banco_brasilia_spec.rb +36 -0
  182. data/spec/brcobranca/retorno/cnab400/banco_nordeste_spec.rb +39 -0
  183. data/spec/brcobranca/retorno/cnab400/banrisul_spec.rb +41 -0
  184. data/spec/brcobranca/retorno/cnab400/base_spec.rb +57 -0
  185. data/spec/brcobranca/retorno/cnab400/bradesco_spec.rb +58 -0
  186. data/spec/brcobranca/retorno/cnab400/credisis_spec.rb +25 -0
  187. data/spec/brcobranca/retorno/cnab400/itau_spec.rb +58 -0
  188. data/spec/brcobranca/retorno/cnab400/santander_spec.rb +39 -0
  189. data/spec/brcobranca/retorno/cnab400/unicred_spec.rb +42 -0
  190. data/spec/brcobranca/retorno/retorno_cbr643_spec.rb +69 -0
  191. data/spec/brcobranca/retorno/retorno_cnab400_spec.rb +57 -0
  192. data/spec/brcobranca/retorno/retorno_cnab_240_spec.rb +52 -0
  193. data/spec/brcobranca/rghost_spec.rb +29 -0
  194. data/spec/brcobranca/util/empresa_spec.rb +36 -0
  195. data/spec/fixtures/remessa/remessa-banco-brasil-cnab400.rem +3 -0
  196. data/spec/fixtures/remessa/remessa-banco-brasilia-cnab400.rem +3 -0
  197. data/spec/fixtures/remessa/remessa-banco-nordeste-cnab400.rem +3 -0
  198. data/spec/fixtures/remessa/remessa-banco_brasil-cnab240.rem +7 -0
  199. data/spec/fixtures/remessa/remessa-bancoob-cnab240.rem +7 -0
  200. data/spec/fixtures/remessa/remessa-banrisul-cnab400.rem +3 -0
  201. data/spec/fixtures/remessa/remessa-bradesco-cnab400.rem +3 -0
  202. data/spec/fixtures/remessa/remessa-caixa-cnab240.rem +7 -0
  203. data/spec/fixtures/remessa/remessa-cecred-cnab240.rem +7 -0
  204. data/spec/fixtures/remessa/remessa-citibank-cnab400.rem +3 -0
  205. data/spec/fixtures/remessa/remessa-credisis-cnab400.rem +3 -0
  206. data/spec/fixtures/remessa/remessa-itau-cnab400.rem +4 -0
  207. data/spec/fixtures/remessa/remessa-santander-cnab400.rem +3 -0
  208. data/spec/fixtures/remessa/remessa-sicoob-cnab400.rem +3 -0
  209. data/spec/fixtures/remessa/remessa-sicoob-correspondente-bb-cnab240.rem +4 -0
  210. data/spec/fixtures/remessa/remessa-sicredi-cnab240.rem +7 -0
  211. data/spec/fixtures/remessa/remessa-unicred-cnab240.rem +7 -0
  212. data/spec/fixtures/remessa/remessa-unicred-cnab400.rem +3 -0
  213. data/spec/spec.opts +8 -0
  214. data/spec/spec_helper.rb +38 -0
  215. data/spec/support/remessa_helpers.rb +13 -0
  216. data/spec/support/shared_examples/busca_logotipo.rb +15 -0
  217. data/spec/support/shared_examples/cnab240.rb +259 -0
  218. data/spec/support/shared_examples/cnab400.rb +180 -0
  219. data/spec/support/shared_examples/formatos_validos.rb +36 -0
  220. metadata +422 -0
@@ -0,0 +1,217 @@
1
+ # -*- encoding: utf-8 -*-
2
+ #
3
+
4
+ require 'spec_helper'
5
+
6
+ RSpec.describe Bbrcobranca::Remessa::Cnab400::Sicoob do
7
+ let(:pagamento) do
8
+ Bbrcobranca::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')
18
+ end
19
+ let(:params) do
20
+ { carteira: '01',
21
+ agencia: '4327',
22
+ conta_corrente: '12345678',
23
+ digito_conta: '1',
24
+ convenio: '123456789',
25
+ empresa_mae: 'SOCIEDADE BRASILEIRA DE ZOOLOGIA LTDA',
26
+ documento_cedente: '12345678910',
27
+ pagamentos: [pagamento] }
28
+ end
29
+ let(:sicoob) { subject.class.new(params) }
30
+
31
+ context 'validacoes dos campos' do
32
+ context '@agencia' do
33
+ it 'deve ser invalido se nao possuir uma agencia' do
34
+ objeto = subject.class.new(params.merge!(agencia: nil))
35
+ expect(objeto.invalid?).to be true
36
+ expect(objeto.errors.full_messages).to include('Agencia não pode estar em branco.')
37
+ end
38
+
39
+ it 'deve ser invalido se a agencia tiver mais de 4 digitos' do
40
+ sicoob.agencia = '12345'
41
+ expect(sicoob.invalid?).to be true
42
+ expect(sicoob.errors.full_messages).to include('Agencia deve ter 4 dígitos.')
43
+ end
44
+ end
45
+
46
+ context '@digito_conta' do
47
+ it 'deve ser invalido se nao possuir um digito da conta corrente' do
48
+ objeto = subject.class.new(params.merge!(digito_conta: nil))
49
+ expect(objeto.invalid?).to be true
50
+ expect(objeto.errors.full_messages).to include('Digito conta não pode estar em branco.')
51
+ end
52
+
53
+ it 'deve ser invalido se a carteira tiver mais de 1 digito' do
54
+ sicoob.digito_conta = '12'
55
+ expect(sicoob.invalid?).to be true
56
+ expect(sicoob.errors.full_messages).to include('Digito conta deve ter 1 dígito.')
57
+ end
58
+ end
59
+
60
+ context '@conta_corrente' do
61
+ it 'deve ser invalido se nao possuir uma conta corrente' do
62
+ objeto = subject.class.new(params.merge!(conta_corrente: nil))
63
+ expect(objeto.invalid?).to be true
64
+ expect(objeto.errors.full_messages).to include('Conta corrente não pode estar em branco.')
65
+ end
66
+
67
+ it 'deve ser invalido se a conta corrente tiver mais de 8 digitos' do
68
+ sicoob.conta_corrente = '123456789'
69
+ expect(sicoob.invalid?).to be true
70
+ expect(sicoob.errors.full_messages).to include('Conta corrente deve ter 8 dígitos.')
71
+ end
72
+ end
73
+
74
+ context '@carteira' do
75
+ it 'deve ser invalido se nao possuir uma carteira' do
76
+ objeto = subject.class.new(params.merge!(carteira: nil))
77
+ expect(objeto.invalid?).to be true
78
+ expect(objeto.errors.full_messages).to include('Carteira não pode estar em branco.')
79
+ end
80
+
81
+ it 'deve ser invalido se a carteira tiver mais de 2 digitos' do
82
+ sicoob.carteira = '123'
83
+ expect(sicoob.invalid?).to be true
84
+ expect(sicoob.errors.full_messages).to include('Carteira deve ter 2 dígitos.')
85
+ end
86
+ end
87
+
88
+ context '@sequencial_remessa' do
89
+ it 'deve ser invalido se nao possuir um num. sequencial de remessa' do
90
+ objeto = subject.class.new(params.merge!(sequencial_remessa: nil))
91
+ expect(objeto.invalid?).to be true
92
+ expect(objeto.errors.full_messages).to include('Sequencial remessa não pode estar em branco.')
93
+ end
94
+
95
+ it 'deve ser invalido se sequencial de remessa tiver mais de 8 digitos' do
96
+ sicoob.sequencial_remessa = '12345678'
97
+ expect(sicoob.invalid?).to be true
98
+ expect(sicoob.errors.full_messages).to include('Sequencial remessa deve ter 7 dígitos.')
99
+ end
100
+ end
101
+
102
+ context '@convenio' do
103
+ it 'deve ser invalido se nao possuir um convenio' do
104
+ objeto = subject.class.new(params.merge!(convenio: nil))
105
+ expect(objeto.invalid?).to be true
106
+ expect(objeto.errors.full_messages).to include('Convenio não pode estar em branco.')
107
+ end
108
+
109
+ it 'deve ser invalido se convenio tiver mais de 9 digitos' do
110
+ sicoob.convenio = '1234567890'
111
+ expect(sicoob.invalid?).to be true
112
+ expect(sicoob.errors.full_messages).to include('Convenio deve ter 9 dígitos.')
113
+ end
114
+ end
115
+ end
116
+
117
+ context 'formatacoes dos valores' do
118
+ it 'cod_banco deve ser 756' do
119
+ expect(sicoob.cod_banco).to eq '756'
120
+ end
121
+
122
+ it 'nome_banco deve ser SICOOB com 15 posicoes' do
123
+ nome_banco = sicoob.nome_banco
124
+ expect(nome_banco.size).to eq 15
125
+ expect(nome_banco.strip).to eq 'BANCOOBCED'
126
+ end
127
+
128
+ it 'complemento deve ter 287 brancos' do
129
+ complemento = sicoob.complemento
130
+ expect(complemento.size).to eq 287
131
+ end
132
+
133
+ it 'info_conta deve ter 20 posicoes' do
134
+ expect(sicoob.info_conta.size).to eq 20
135
+ end
136
+
137
+ it 'identificacao da empresa deve ter as informacoes nas posicoes corretas' do
138
+ id_empresa = sicoob.info_conta
139
+ expect(id_empresa[0..3]).to eq '4327' # agencia
140
+ expect(id_empresa[4]).to eq '3' # digito_agencia
141
+ expect(id_empresa[5..13]).to eq '123456789' # convenio
142
+ expect(id_empresa[14..19]).to eq ' ' # brancos
143
+ end
144
+
145
+ it 'deve calcular o digito da agencia' do
146
+ # digito calculado a partir do modulo 11 com base 9
147
+ #
148
+ # agencia = 1 2 3 4
149
+ #
150
+ # 4 3 2 1
151
+ # x 9 8 7 6
152
+ # = 36 24 14 6 = 80
153
+ # 80 / 11 = 7 com resto 3
154
+ expected_digito_agencia_list = [
155
+ { agencia: "3214", dv: "0" },
156
+ { agencia: "2006", dv: "0" },
157
+ { agencia: "5651", dv: "0" },
158
+ { agencia: "5691", dv: "0" },
159
+ { agencia: "5741", dv: "0" },
160
+ { agencia: "1008", dv: "1" },
161
+ { agencia: "5681", dv: "2" },
162
+ { agencia: "5731", dv: "2" },
163
+ { agencia: "4327", dv: "3" },
164
+ { agencia: "1001", dv: "4" },
165
+ { agencia: "5761", dv: "4" },
166
+ { agencia: "3032", dv: "5" },
167
+ { agencia: "5671", dv: "5" },
168
+ { agencia: "5631", dv: "6" },
169
+ { agencia: "1005", dv: "7" },
170
+ { agencia: "5661", dv: "8" },
171
+ { agencia: "0001", dv: "9" },
172
+ { agencia: "5621", dv: "9" },
173
+ ]
174
+
175
+ expected_digito_agencia_list.each do |expected_dv_agencia|
176
+ remessa_params = params.merge!(agencia: expected_dv_agencia[:agencia])
177
+ remessa = subject.class.new(remessa_params)
178
+ expect(remessa.digito_agencia).to eq expected_dv_agencia[:dv]
179
+ end
180
+ end
181
+ end
182
+
183
+ context 'monta remessa' do
184
+ it_behaves_like 'cnab400'
185
+
186
+ context 'header' do
187
+ it 'informacoes devem estar posicionadas corretamente no header' do
188
+ header = sicoob.monta_header
189
+ expect(header[1]).to eq '1' # tipo operacao (1 = remessa)
190
+ expect(header[2..8]).to eq 'REMESSA' # literal da operacao
191
+ expect(header[26..45]).to eq sicoob.info_conta # informacoes da conta
192
+ expect(header[76..78]).to eq '756' # codigo do banco
193
+ end
194
+ end
195
+
196
+ context 'detalhe' do
197
+ it 'informacoes devem estar posicionadas corretamente no detalhe' do
198
+ detalhe = sicoob.monta_detalhe pagamento, 1
199
+ expect(detalhe[62..72]).to eq '00000000012' # nosso numero
200
+ expect(detalhe[73]).to eq '3' # digito nosso numero
201
+ expect(detalhe[74..75]).to eq '01' # parcela
202
+ expect(detalhe[120..125]).to eq Date.current.strftime('%d%m%y') # data de vencimento
203
+ expect(detalhe[126..138]).to eq '0000000019990' # valor do documento
204
+ expect(detalhe[220..233]).to eq '00012345678901' # documento do pagador
205
+ expect(detalhe[234..273]).to eq 'PABLO DIEGO JOSE FRANCISCO DE PAULA JUAN' # nome do pagador
206
+ expect(detalhe[274..310]).to eq 'RUA RIO GRANDE DO SUL Sao paulo Minas' # endereco do pagador
207
+ end
208
+ end
209
+
210
+ context 'arquivo' do
211
+ before { Timecop.freeze(Time.local(2015, 7, 14, 16, 15, 15)) }
212
+ after { Timecop.return }
213
+
214
+ it { expect(sicoob.gera_arquivo).to eq(read_remessa('remessa-sicoob-cnab400.rem', sicoob.gera_arquivo)) }
215
+ end
216
+ end
217
+ end
@@ -0,0 +1,185 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'spec_helper'
3
+
4
+ RSpec.describe Bbrcobranca::Remessa::Cnab400::Unicred do
5
+ let(:pagamento) do
6
+ Bbrcobranca::Remessa::Pagamento.new(valor: 199.9,
7
+ data_vencimento: Date.current,
8
+ nosso_numero: '072000031',
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')
17
+ end
18
+ let(:params) do
19
+ {
20
+ carteira: '03',
21
+ agencia: '1234',
22
+ conta_corrente: '12345',
23
+ digito_conta: '1',
24
+ empresa_mae: 'SOCIEDADE BRASILEIRA DE ZOOLOGIA LTDA',
25
+ documento_cedente: '12345678910',
26
+ codigo_transmissao: '12345678901234567890',
27
+ byte_idt: '2',
28
+ pagamentos: [pagamento]
29
+ }
30
+ end
31
+ let(:unicred) { subject.class.new(params) }
32
+
33
+ context 'validacoes dos campos' do
34
+ context '@agencia' do
35
+ it 'deve ser invalido se nao possuir uma agencia' do
36
+ object = subject.class.new(params.merge!(agencia: nil))
37
+ expect(object.invalid?).to be true
38
+ expect(object.errors.full_messages).to include('Agencia não pode estar em branco.')
39
+ end
40
+
41
+ it 'deve ser invalido se a agencia tiver mais de 4 digitos' do
42
+ unicred.agencia = '12345'
43
+ expect(unicred.invalid?).to be true
44
+ expect(unicred.errors.full_messages).to include('Agencia deve ter 4 dígitos.')
45
+ end
46
+ end
47
+
48
+ context '@digito_conta' do
49
+ it 'deve ser invalido se nao possuir um digito da conta corrente' do
50
+ objeto = subject.class.new(params.merge!(digito_conta: nil))
51
+ expect(objeto.invalid?).to be true
52
+ expect(objeto.errors.full_messages).to include('Digito conta não pode estar em branco.')
53
+ end
54
+
55
+ it 'deve ser inválido se o dígito da conta tiver mais de 1 dígito' do
56
+ unicred.digito_conta = '12'
57
+ expect(unicred.invalid?).to be true
58
+ expect(unicred.errors.full_messages).to include('Digito conta deve ter 1 dígito.')
59
+ end
60
+ end
61
+
62
+ context '@conta_corrente' do
63
+ it 'deve ser invalido se nao possuir uma conta corrente' do
64
+ object = subject.class.new(params.merge!(conta_corrente: nil))
65
+ expect(object.invalid?).to be true
66
+ expect(object.errors.full_messages).to include('Conta corrente não pode estar em branco.')
67
+ end
68
+
69
+ it 'deve ser invalido se a conta corrente tiver mais de 5 digitos' do
70
+ unicred.conta_corrente = '123456'
71
+
72
+ expect(unicred.invalid?).to be true
73
+ expect(unicred.errors.full_messages).to include('Conta corrente deve ter 5 dígitos.')
74
+ end
75
+ end
76
+
77
+ context '@carteira' do
78
+ it 'deve ser inválido se não possuir uma carteira' do
79
+ object = subject.class.new(params.merge!(carteira: nil))
80
+ expect(object.invalid?).to be true
81
+ expect(object.errors.full_messages).to include('Carteira não pode estar em branco.')
82
+ end
83
+
84
+ it 'deve ser inválido se a carteira tiver mais de 2 dígitos' do
85
+ unicred.carteira = '123'
86
+ expect(unicred.invalid?).to be true
87
+ expect(unicred.errors.full_messages).to include('Carteira deve ter 2 dígitos.')
88
+ end
89
+ end
90
+
91
+ context '@documento_cedente' do
92
+ it 'deve ser inválido se não possuir o documento cedente' do
93
+ object = subject.class.new(params.merge!(documento_cedente: nil))
94
+ expect(object.invalid?).to be true
95
+ expect(object.errors.full_messages).to include('Documento cedente não pode estar em branco.')
96
+ end
97
+
98
+ it 'deve ser invalido se o documento do cedente nao tiver entre 11 e 14 digitos' do
99
+ unicred.documento_cedente = '123'
100
+ expect(unicred.invalid?).to be true
101
+ expect(unicred.errors.full_messages).to include('Documento cedente deve ter entre 11 e 14 dígitos.')
102
+ end
103
+ end
104
+
105
+ context '@codigo_transmissao' do
106
+ it 'deve ser inválido se não existir' do
107
+ object = subject.class.new(params.merge!(codigo_transmissao: nil))
108
+ expect(object.invalid?).to be true
109
+ expect(object.errors.full_messages).to include('Codigo transmissao não pode estar em branco.')
110
+ end
111
+
112
+ it 'deve ser inválido quando não possuir até 20 dígitos' do
113
+ object = subject.class.new(params.merge!(codigo_transmissao: '123456789012345678901'))
114
+ expect(object.invalid?).to be true
115
+ expect(object.errors.full_messages).to include('Codigo transmissao deve ter 20 dígitos.')
116
+ end
117
+ end
118
+ end
119
+
120
+ context 'formatacoes dos valores' do
121
+ it 'cod_banco deve ser 748' do
122
+ expect(unicred.cod_banco).to eq '748'
123
+ end
124
+
125
+ it 'nome_banco deve ser UNICRED com 15 posicoes' do
126
+ nome_banco = unicred.nome_banco
127
+ expect(nome_banco.size).to eq 15
128
+ expect(nome_banco.strip).to eq 'UNICRED'
129
+ end
130
+
131
+ it 'complemento deve retornar 294 caracteres' do
132
+ expect(unicred.complemento.size).to eq 294
133
+ end
134
+
135
+ it 'info_conta deve retornar com 20 posicoes as informacoes da conta' do
136
+ info_conta = unicred.info_conta
137
+ expect(info_conta.size).to eq 20
138
+ expect(info_conta[0..19]).to eq '12345678901234567890'
139
+ end
140
+
141
+ it 'deve retornar o codigo da carteira de acordo com o tipo de emissão' do
142
+ unicred.carteira = '03'
143
+ expect(unicred.codigo_carteira).to eq '3'
144
+
145
+ unicred.carteira = '09'
146
+ expect(unicred.invalid?).to be true
147
+ expect(unicred.errors.full_messages).to include('Carteira não existente para este banco.')
148
+ end
149
+ end
150
+
151
+ context 'monta remessa' do
152
+ it_behaves_like 'cnab400'
153
+
154
+ context 'header' do
155
+ it 'informacoes devem estar posicionadas corretamente no header' do
156
+ header = unicred.monta_header
157
+ expect(header[1]).to eq '1' # tipo operacao (1 = remessa)
158
+ expect(header[2..8]).to eq 'REMESSA' # literal da operacao
159
+ expect(header[26..45]).to eq unicred.info_conta # informacoes da conta
160
+ expect(header[76..78]).to eq '748' # codigo do banco
161
+ end
162
+ end
163
+
164
+ context 'detalhe' do
165
+ it 'informacoes devem estar posicionadas corretamente no detalhe' do
166
+ detalhe = unicred.monta_detalhe pagamento, 1
167
+ expect(detalhe[37..61]).to eq "6969".ljust(25) # documento
168
+ expect(detalhe[62..81]).to eq '072000031'.rjust(20, ' ') # nosso numero
169
+ expect(detalhe[120..125]).to eq Date.current.strftime('%d%m%y') # data de vencimento
170
+ expect(detalhe[126..138]).to eq '0000000019990' # valor do titulo
171
+ expect(detalhe[142..145]).to eq '0000' # agência cobradora
172
+ expect(detalhe[156..159]).to eq '0000' # instrução
173
+ expect(detalhe[220..233]).to eq '00012345678901' # documento do pagador
174
+ expect(detalhe[234..263]).to eq 'PABLO DIEGO JOSE FRANCISCO DE ' # nome do pagador
175
+ end
176
+ end
177
+
178
+ context 'arquivo' do
179
+ before { Timecop.freeze(Time.local(2015, 7, 14, 16, 15, 15)) }
180
+ after { Timecop.return }
181
+
182
+ it { expect(unicred.gera_arquivo).to eq(read_remessa('remessa-unicred-cnab400.rem', unicred.gera_arquivo)) }
183
+ end
184
+ end
185
+ end
@@ -0,0 +1,227 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'spec_helper'
3
+
4
+ RSpec.describe Bbrcobranca::Remessa::Pagamento do
5
+ let(:pagamento) do
6
+ subject.class.new(valor: 199.9,
7
+ data_vencimento: Date.parse('2015-06-25'),
8
+ nosso_numero: 123,
9
+ documento_sacado: '12345678901',
10
+ 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
+ endereco_sacado: 'RUA RIO GRANDE DO SUL São paulo Minas caçapa da silva junior',
12
+ bairro_sacado: 'São josé dos quatro apostolos magros',
13
+ cep_sacado: '12345678',
14
+ cidade_sacado: 'Santa rita de cássia maria da silva',
15
+ uf_sacado: 'SP')
16
+ end
17
+
18
+ context 'validacoes' do
19
+ it 'deve ser invalido se nao possuir nosso numero' do
20
+ pagamento.nosso_numero = nil
21
+ expect(pagamento.invalid?).to be true
22
+ expect(pagamento.errors.full_messages).to include('Nosso numero não pode estar em branco.')
23
+ end
24
+
25
+ it 'deve ser invalido se nao possuir data de vencimento' do
26
+ pagamento.data_vencimento = nil
27
+ expect(pagamento.invalid?).to be true
28
+ expect(pagamento.errors.full_messages).to include('Data vencimento não pode estar em branco.')
29
+ end
30
+
31
+ it 'deve ser invalido se nao possuir valor do documento' do
32
+ pagamento.valor = nil
33
+ expect(pagamento.invalid?).to be true
34
+ expect(pagamento.errors.full_messages).to include('Valor não pode estar em branco.')
35
+ end
36
+
37
+ it 'deve ser invalido se nao possuir documento do sacado' do
38
+ pagamento.documento_sacado = nil
39
+ expect(pagamento.invalid?).to be true
40
+ expect(pagamento.errors.full_messages).to include('Documento sacado não pode estar em branco.')
41
+ end
42
+
43
+ it 'deve ser invalido se nao possuir nome do sacado' do
44
+ pagamento.nome_sacado = nil
45
+ expect(pagamento.invalid?).to be true
46
+ expect(pagamento.errors.full_messages).to include('Nome sacado não pode estar em branco.')
47
+ end
48
+
49
+ it 'deve ser invalido se nao possuir endereco do sacado' do
50
+ pagamento.endereco_sacado = nil
51
+ expect(pagamento.invalid?).to be true
52
+ expect(pagamento.errors.full_messages).to include('Endereco sacado não pode estar em branco.')
53
+ end
54
+
55
+ it 'deve ser invalido se nao possuir cidade do sacado' do
56
+ pagamento.cidade_sacado = nil
57
+ expect(pagamento.invalid?).to be true
58
+ expect(pagamento.errors.full_messages).to include('Cidade sacado não pode estar em branco.')
59
+ end
60
+
61
+ it 'deve ser invalido se nao possuir UF do sacado' do
62
+ pagamento.uf_sacado = nil
63
+ expect(pagamento.invalid?).to be true
64
+ expect(pagamento.errors.full_messages).to include('Uf sacado não pode estar em branco.')
65
+ end
66
+
67
+ context '@cep' do
68
+ it 'deve ser invalido se nao possuir CEP' do
69
+ pagamento.cep_sacado = nil
70
+ expect(pagamento.invalid?).to be true
71
+ expect(pagamento.errors.full_messages).to include('Cep sacado não pode estar em branco.')
72
+ end
73
+
74
+ it 'deve ser invalido se CEP nao tiver 8 digitos' do
75
+ pagamento.cep_sacado = '123456789'
76
+ expect(pagamento.invalid?).to be true
77
+ expect(pagamento.errors.full_messages).to include('Cep sacado deve ter 8 dígitos.')
78
+ end
79
+ end
80
+
81
+ it 'deve ser invalido se codigo do desconto tiver mais de 1 digito' do
82
+ pagamento.cod_desconto = '123'
83
+ expect(pagamento.invalid?).to be true
84
+ expect(pagamento.errors.full_messages).to include('Cod desconto deve ter 1 dígito.')
85
+ end
86
+ end
87
+
88
+ context 'informacoes padrao' do
89
+ it 'data de emissao padrao deve ser o dia corrente' do
90
+ expect(pagamento.data_emissao).to eq Date.current
91
+ end
92
+
93
+ it 'nome do avalista padrao deve ser vazio' do
94
+ expect(pagamento.nome_avalista).to eq ''
95
+ end
96
+
97
+ it 'valor da mora padrao deve ser zero' do
98
+ expect(pagamento.valor_mora).to eq 0.0
99
+ end
100
+
101
+ it 'valor do desconto padrao deve ser zero' do
102
+ expect(pagamento.valor_desconto).to eq 0.0
103
+ end
104
+
105
+ it 'valor do IOF padrao deve ser zero' do
106
+ expect(pagamento.valor_iof).to eq 0.0
107
+ end
108
+
109
+ it 'valor do abatimento padrao deve ser zero' do
110
+ expect(pagamento.valor_abatimento).to eq 0.0
111
+ end
112
+ end
113
+
114
+ context 'formatacoes dos valores' do
115
+ context 'formata data do desconto' do
116
+ it 'formata data limite do desconto de acordo com o formato passado' do
117
+ pagamento.data_desconto = Date.parse('2015-06-25')
118
+ # formato padrao: DDMMAA
119
+ expect(pagamento.formata_data_desconto).to eq '250615'
120
+ # outro formato
121
+ expect(pagamento.formata_data_desconto('%d%m%Y')).to eq '25062015'
122
+ end
123
+
124
+ it 'retorna zeros se a data estiver vazia' do
125
+ pagamento.data_desconto = nil
126
+ expect(pagamento.formata_data_desconto).to eq '000000'
127
+ end
128
+ end
129
+
130
+ it 'formata valor com o numero de posicoes passadas' do
131
+ # padrao com 13 posicoes
132
+ expect(pagamento.formata_valor).to eq '0000000019990'
133
+ # formata com o numero passado
134
+ expect(pagamento.formata_valor(8)).to eq '00019990'
135
+ end
136
+
137
+ it 'formata valor de mora com o numero de posicoes passadas' do
138
+ # padrao com 13 posicoes
139
+ pagamento.valor_mora = 9.0
140
+ expect(pagamento.formata_valor_mora).to eq '0000000000900'
141
+ end
142
+
143
+ it 'formata valor de desconto com o numero de posicoes passadas' do
144
+ # padrao com 13 posicoes
145
+ pagamento.valor_desconto = 129.0
146
+ expect(pagamento.formata_valor_desconto).to eq '0000000012900'
147
+ # formata com o numero passado
148
+ expect(pagamento.formata_valor_desconto(5)).to eq '12900'
149
+ end
150
+
151
+ it 'formata valor do IOF com o numero de posicoes passadas' do
152
+ # padrao com 13 posicoes
153
+ pagamento.valor_iof = 1.84
154
+ expect(pagamento.formata_valor_iof).to eq '0000000000184'
155
+ # formata com o numero passado
156
+ expect(pagamento.formata_valor_iof(15)).to eq '000000000000184'
157
+ end
158
+
159
+ it 'formata valor do abatimento com o numero de posicoes passadas' do
160
+ # padrao com 13 posicoes
161
+ pagamento.valor_abatimento = 34.9
162
+ expect(pagamento.formata_valor_abatimento).to eq '0000000003490'
163
+ # formata com o numero passado
164
+ expect(pagamento.formata_valor_abatimento(10)).to eq '0000003490'
165
+ end
166
+
167
+ it 'formata valor dos juros com o numero de posicoes passadas' do
168
+ # padrao com 13 posicoes
169
+ pagamento.valor_mora = 49.2
170
+ expect(pagamento.formata_valor_mora).to eq '0000000004920'
171
+ # formata com o tamanho passado
172
+ expect(pagamento.formata_valor_mora(15)).to eq '000000000004920'
173
+ end
174
+
175
+ context 'formata valor do campo documento' do
176
+ before { pagamento.documento = '2345' }
177
+
178
+ it "deve formatar assumindo os valores padrao para os parametros tamanho e caracter" do
179
+ expect(pagamento.formata_documento_ou_numero).to eql '2345'.rjust(25, ' ')
180
+ end
181
+
182
+ it "deve formatar com os parametros tamanho e caracter" do
183
+ expect(pagamento.formata_documento_ou_numero(15, '0')).to eql '2345'.rjust(15, '0')
184
+ end
185
+
186
+ it "deve extrair somente o valor do campo no tamanho informado" do
187
+ pagamento.documento = '12345678901234567890'
188
+ expect(pagamento.formata_documento_ou_numero(15, '0')).to eql '123456789012345'
189
+ expect(pagamento.formata_documento_ou_numero(15, '0').length).to eql 15
190
+ end
191
+
192
+ it 'deve remover caracteres especiais ou acentuação' do
193
+ pagamento.documento = 'JOÃO DEve R$ 900.00'
194
+ expect(pagamento.formata_documento_ou_numero).to eql ' JOO DEve R 90000'
195
+ expect(pagamento.formata_documento_ou_numero.length).to eql 25
196
+ end
197
+ end
198
+
199
+ context 'identificacao sacado' do
200
+ it 'verifica a identificacao do sacado (pessoa fisica ou juridica)' do
201
+ # pessoa fisica
202
+ expect(pagamento.identificacao_sacado).to eq '01'
203
+ # pessoa juridica
204
+ pagamento.documento_sacado = '123456789101112'
205
+ expect(pagamento.identificacao_sacado).to eq '02'
206
+ pagamento.documento_sacado = '123456789101112'
207
+ expect(pagamento.identificacao_sacado(false)).to eq '2'
208
+ end
209
+ end
210
+
211
+ context 'identificacao avalista' do
212
+ it 'verifica a identificacao do avalista (pessoa fisica ou juridica)' do
213
+ # pessoa fisica
214
+ pagamento.documento_avalista = '12345678901'
215
+ expect(pagamento.identificacao_avalista).to eq '01'
216
+ # pessoa juridica
217
+ pagamento.documento_avalista = '123456789101112'
218
+ expect(pagamento.identificacao_avalista).to eq '02'
219
+ end
220
+
221
+ it 'formata a identificacao com o numero de caracteres informados' do
222
+ pagamento.documento_avalista = '12345678901'
223
+ expect(pagamento.identificacao_avalista(false)).to eq '1'
224
+ end
225
+ end
226
+ end
227
+ end