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,151 @@
1
+ # -*- encoding: utf-8 -*-
2
+ module Bbrcobranca
3
+ module Remessa
4
+ module Cnab240
5
+ class Cecred < Bbrcobranca::Remessa::Cnab240::Base
6
+ # digito da agencia
7
+ attr_accessor :digito_agencia
8
+
9
+ validates_presence_of :digito_agencia, :convenio, :conta_corrente, message: 'não pode estar em branco.'
10
+ validates_length_of :convenio, maximum: 6, message: 'deve ter 6 dígitos.'
11
+ validates_length_of :conta_corrente, maximum: 7, message: 'deve ter 7 dígitos.'
12
+ validates_length_of :digito_agencia, is: 1, message: 'deve ter 1 dígito.'
13
+
14
+ def initialize(campos = {})
15
+ campos = { emissao_boleto: '2',
16
+ forma_cadastramento: '0',
17
+ distribuicao_boleto: '2',
18
+ especie_titulo: '02' }.merge!(campos)
19
+ super(campos)
20
+ end
21
+
22
+ def convenio=(valor)
23
+ @convenio = valor.to_s.rjust(6, '0') if valor
24
+ end
25
+
26
+ def conta_corrente=(valor)
27
+ @conta_corrente = valor.to_s.rjust(7, '0') if valor
28
+ end
29
+
30
+ def cod_banco
31
+ '085'
32
+ end
33
+
34
+ def nome_banco
35
+ 'CECRED'.ljust(30, ' ')
36
+ end
37
+
38
+ def versao_layout_arquivo
39
+ '087'
40
+ end
41
+
42
+ def versao_layout_lote
43
+ '045'
44
+ end
45
+
46
+ def codigo_convenio
47
+ convenio.ljust(20, ' ')
48
+ end
49
+
50
+ def uso_exclusivo_banco
51
+ ''.rjust(20, ' ')
52
+ end
53
+
54
+ def uso_exclusivo_empresa
55
+ ''.ljust(20, ' ')
56
+ end
57
+
58
+ def convenio_lote
59
+ codigo_convenio
60
+ end
61
+
62
+ def info_conta
63
+ # CAMPO # TAMANHO
64
+ # agencia 5
65
+ # digito agencia 1
66
+ # conta corrente 12
67
+ # dv da conta 1
68
+ # dv agencia/conta 1
69
+ "#{agencia_conta_corrente}#{agencia_conta_corrente_dv}"
70
+ end
71
+
72
+ def agencia_conta_corrente
73
+ "#{agencia.to_s.rjust(5, '0')}#{digito_agencia}#{conta_corrente.rjust(12, '0')}#{conta_corrente_dv}"
74
+ end
75
+
76
+ def conta_corrente_dv
77
+ conta_corrente.modulo11(mapeamento: { 10 => 0 })
78
+ end
79
+
80
+ def agencia_conta_corrente_dv
81
+ " "
82
+ end
83
+
84
+ def complemento_header
85
+ "#{''.rjust(29, ' ')}"
86
+ end
87
+
88
+ def complemento_trailer
89
+ "#{''.rjust(69, '0')}#{''.rjust(148, ' ')}"
90
+ end
91
+
92
+ def tipo_documento
93
+ "1"
94
+ end
95
+
96
+ def complemento_p(pagamento)
97
+ # CAMPO TAMANHO
98
+ # conta_corrente 12
99
+ # dv conta corrente 1
100
+ # dv agencia/conta 1
101
+ # ident. titulo 20
102
+ "#{conta_corrente.rjust(12, '0')}#{conta_corrente_dv}#{agencia_conta_corrente_dv}#{ajusta_nosso_numero(pagamento)}"
103
+ end
104
+
105
+ def ajusta_nosso_numero(pagamento)
106
+ "#{conta_corrente}#{conta_corrente_dv}#{pagamento.nosso_numero.to_s.rjust(9, '0')}".ljust(20, ' ')
107
+ end
108
+
109
+ def identificacao_titulo_empresa(pagamento)
110
+ pagamento.documento_ou_numero.to_s.ljust(25, " ")
111
+ end
112
+
113
+ def complemento_trailer
114
+ # CAMPO TAMANHO
115
+ # Qt. Títulos em Cobrança Simples 6
116
+ # Vl. Títulos em Carteira Simples 15 + 2 decimais
117
+ # Qt. Títulos em Cobrança Vinculada 6
118
+ # Vl. Títulos em Carteira Vinculada 15 + 2 decimais
119
+ # Qt. Títulos em Cobrança Caucionada 6
120
+ # Vl. Títulos em Carteira Caucionada 15 + 2 decimais
121
+ # Qt. Títulos em Cobrança Descontada 6
122
+ # Vl. Títulos em Carteira Descontada 15 + 2 decimais
123
+ total_cobranca_simples = "#{quantidade_titulos_cobranca}#{valor_titulos_carteira}"
124
+ total_cobranca_vinculada = "".rjust(23, "0")
125
+ total_cobranca_caucionada = "".rjust(23, "0")
126
+ total_cobranca_descontada = "".rjust(23, "0")
127
+
128
+ "#{total_cobranca_simples}#{total_cobranca_vinculada}#{total_cobranca_caucionada}"\
129
+ "#{total_cobranca_descontada}".ljust(217, ' ')
130
+ end
131
+
132
+ def total_segmentos(pagamentos)
133
+ pagamentos.inject(0) { |total, pagamento| total += pagamento.codigo_multa != '0' ? 3 : 2 }
134
+ end
135
+
136
+ def monta_segmento_r(pagamento, nro_lote, contador)
137
+ return nil if pagamento.codigo_multa == '0'
138
+ super(pagamento, nro_lote, contador)
139
+ end
140
+
141
+ def codigo_baixa(pagamento)
142
+ '2'
143
+ end
144
+
145
+ def dias_baixa(pagamento)
146
+ ''.rjust(3, ' ')
147
+ end
148
+ end
149
+ end
150
+ end
151
+ end
@@ -0,0 +1,226 @@
1
+ # -*- encoding: utf-8 -*-
2
+ module Bbrcobranca
3
+ module Remessa
4
+ module Cnab240
5
+ class Sicoob < Bbrcobranca::Remessa::Cnab240::Base
6
+
7
+ attr_accessor :modalidade_carteira
8
+ # identificacao da emissao do boleto (attr na classe base)
9
+ # opcoes:
10
+ # ‘1’ = Banco Emite
11
+ # ‘2’ = Cliente Emite
12
+ #
13
+ # identificacao da distribuicao do boleto (attr na classe base)
14
+ # opcoes:
15
+ # ‘1’ = Banco distribui
16
+ # ‘2’ = Cliente distribui
17
+
18
+ attr_accessor :tipo_formulario
19
+ # Tipo Formulário - 01 posição (15 a 15):
20
+ # "1" -auto-copiativo
21
+ # "3" -auto-envelopável
22
+ # "4" -A4 sem envelopamento
23
+ # "6" -A4 sem envelopamento 3 vias
24
+
25
+ attr_accessor :parcela
26
+ # Parcela - 02 posições (11 a 12) - "01" se parcela única
27
+
28
+ attr_accessor :posto
29
+ # Mantém a informação do posto de atendimento dentro da agência.
30
+
31
+ validates_presence_of :modalidade_carteira, :tipo_formulario, :parcela, :convenio, message: 'não pode estar em branco.'
32
+ # Remessa 400 - 8 digitos
33
+ # Remessa 240 - 12 digitos
34
+ validates_length_of :conta_corrente, maximum: 8, message: 'deve ter 8 dígitos.'
35
+ validates_length_of :agencia, is: 4, message: 'deve ter 4 dígitos.'
36
+ validates_length_of :modalidade_carteira, is: 2, message: 'deve ter 2 dígitos.'
37
+
38
+ def initialize(campos = {})
39
+ campos = { emissao_boleto: '2',
40
+ distribuicao_boleto: '2',
41
+ especie_titulo: '02',
42
+ tipo_formulario: '4',
43
+ parcela: '01',
44
+ modalidade_carteira: '01',
45
+ forma_cadastramento: '0',
46
+ posto: '00'}.merge!(campos)
47
+ super(campos)
48
+ end
49
+
50
+ def cod_banco
51
+ '756'
52
+ end
53
+
54
+ def nome_banco
55
+ 'SICOOB'.ljust(30, ' ')
56
+ end
57
+
58
+ def versao_layout_arquivo
59
+ '081'
60
+ end
61
+
62
+ def versao_layout_lote
63
+ '040'
64
+ end
65
+
66
+ def uso_exclusivo_banco
67
+ ''.rjust(20, ' ')
68
+ end
69
+
70
+ def uso_exclusivo_empresa
71
+ ''.rjust(20, ' ')
72
+ end
73
+
74
+ def digito_agencia
75
+ # utilizando a agencia com 4 digitos
76
+ # para calcular o digito
77
+ agencia.modulo11(mapeamento: { 10 => '0' }).to_s
78
+ end
79
+
80
+ def digito_conta
81
+ # utilizando a conta corrente com 5 digitos
82
+ # para calcular o digito
83
+ conta_corrente.modulo11(mapeamento: { 10 => '0' }).to_s
84
+ end
85
+
86
+ def dv_agencia_cobradora
87
+ ' '
88
+ end
89
+
90
+ def codigo_convenio
91
+ # CAMPO TAMANHO
92
+ # num. convenio 20 BRANCOS
93
+ ''.rjust(20, ' ')
94
+ end
95
+
96
+ alias_method :convenio_lote, :codigo_convenio
97
+
98
+ def info_conta
99
+ # CAMPO TAMANHO
100
+ # agencia 5
101
+ # digito agencia 1
102
+ # conta corrente 12
103
+ # digito conta 1
104
+ # digito agencia/conta 1
105
+ "#{agencia.rjust(5, '0')}#{digito_agencia}#{conta_corrente.rjust(12, '0')}#{digito_conta} "
106
+ end
107
+
108
+ def complemento_header
109
+ ''.rjust(29, ' ')
110
+ end
111
+
112
+ def complemento_trailer
113
+ # CAMPO TAMANHO
114
+ # Qt. Títulos em Cobrança Simples 6
115
+ # Vl. Títulos em Carteira Simples 15 + 2 decimais
116
+ # Qt. Títulos em Cobrança Vinculada 6
117
+ # Vl. Títulos em Carteira Vinculada 15 + 2 decimais
118
+ # Qt. Títulos em Cobrança Caucionada 6
119
+ # Vl. Títulos em Carteira Caucionada 15 + 2 decimais
120
+ # Qt. Títulos em Cobrança Descontada 6
121
+ # Vl. Títulos em Carteira Descontada 15 + 2 decimais
122
+ total_cobranca_simples = "#{quantidade_titulos_cobranca}#{valor_titulos_carteira}"
123
+ total_cobranca_vinculada = "".rjust(23, "0")
124
+ total_cobranca_caucionada = "".rjust(23, "0")
125
+ total_cobranca_descontada = "".rjust(23, "0")
126
+
127
+ "#{total_cobranca_simples}#{total_cobranca_vinculada}#{total_cobranca_caucionada}"\
128
+ "#{total_cobranca_descontada}".ljust(217, ' ')
129
+ end
130
+
131
+ # Monta o registro trailer do arquivo
132
+ #
133
+ # @param nro_lotes [Integer]
134
+ # numero de lotes no arquivo
135
+ # @param sequencial [Integer]
136
+ # numero de registros(linhas) no arquivo
137
+ #
138
+ # @return [String]
139
+ #
140
+ def monta_trailer_arquivo(nro_lotes, sequencial)
141
+ # CAMPO TAMANHO
142
+ # codigo banco 3
143
+ # lote de servico 4
144
+ # tipo de registro 1
145
+ # uso FEBRABAN 9
146
+ # nro de lotes 6
147
+ # nro de registros(linhas) 6
148
+ # uso FEBRABAN 211
149
+ "#{cod_banco}99999#{''.rjust(9, ' ')}#{nro_lotes.to_s.rjust(6, '0')}#{sequencial.to_s.rjust(6, '0')}#{''.rjust(6, '0')}#{''.rjust(205, ' ')}"
150
+ end
151
+
152
+ def complemento_p(pagamento)
153
+ # CAMPO TAMANHO
154
+ # conta corrente 12
155
+ # digito conta 1
156
+ # digito agencia/conta 1
157
+ # ident. titulo no banco 20
158
+ "#{conta_corrente.rjust(12, '0')}#{digito_conta} #{formata_nosso_numero(pagamento.nosso_numero)}"
159
+ end
160
+
161
+
162
+ def monta_segmento_r(pagamento, nro_lote, sequencial)
163
+ segmento_r = '' # CAMPO TAMANHO
164
+ segmento_r << cod_banco # codigo banco 3
165
+ segmento_r << nro_lote.to_s.rjust(4, '0') # lote de servico 4
166
+ segmento_r << '3' # lote de servico 1
167
+ segmento_r << sequencial.to_s.rjust(5, '0') # num. sequencial do registro no lote 5
168
+ segmento_r << 'R' # cod. segmento 1
169
+ segmento_r << ' ' # uso exclusivo 1
170
+ segmento_r << '01' # cod. movimento remessa 2
171
+ segmento_r << "0" # cod. desconto 2 1
172
+ segmento_r << "".rjust(8, '0') # data desconto 2 8
173
+ segmento_r << "".rjust(15, '0') # valor desconto 2 15
174
+ segmento_r << "0" # cod. desconto 3 1
175
+ segmento_r << "".rjust(8, '0') # data desconto 3 8
176
+ segmento_r << "".rjust(15, '0') # valor desconto 3 15
177
+ segmento_r << pagamento.codigo_multa # codigo multa 1
178
+ segmento_r << data_multa(pagamento) # data multa 8
179
+ segmento_r << pagamento.formata_percentual_multa(15) # valor multa 15
180
+ segmento_r << ''.rjust(10, ' ') # info pagador 10
181
+ segmento_r << ''.rjust(40, ' ') # mensagem 3 40
182
+ segmento_r << ''.rjust(40, ' ') # mensagem 4 40
183
+ segmento_r << ''.rjust(20, ' ') # Exclusivo FEBRABAN 20
184
+ segmento_r << ''.rjust(8, '0') # Cod. Ocor do Pagador 8
185
+ segmento_r << ''.rjust(3, '0') # Cod. do Banco conta débito 3
186
+ segmento_r << ''.rjust(5, '0') # Cod. da Agencia do débito 5
187
+ segmento_r << ' ' # Cod. verificador da agencia 1
188
+ segmento_r << ''.rjust(12, '0') # Conta corrente para débito 12
189
+ segmento_r << ' ' # Cod. verificador da conta 1
190
+ segmento_r << ' ' # Cod. verificador da Ag/Conta 1
191
+ segmento_r << '0' # Aviso débito automático 1
192
+ segmento_r << ''.rjust(9, ' ') # Uso FEBRABAN 9
193
+ segmento_r
194
+ end
195
+
196
+ def data_multa(pagamento)
197
+ return ''.rjust(8, '0') if pagamento.codigo_multa == '0'
198
+ pagamento.data_vencimento.strftime('%d%m%Y')
199
+ end
200
+
201
+ # Retorna o nosso numero
202
+ #
203
+ # @return [String]
204
+ #
205
+ # Nosso Número:
206
+ # - Se emissão a cargo do Cedente (vide planilha "Capa" deste arquivo):
207
+ # NumTitulo - 10 posições (1 a 10)
208
+ # Parcela - 02 posições (11 a 12) - "01" se parcela única
209
+ # Modalidade - 02 posições (13 a 14) - vide planilha "Capa" deste arquivo
210
+ # Tipo Formulário - 01 posição (15 a 15):
211
+ # "1" -auto-copiativo
212
+ # "3" -auto-envelopável
213
+ # "4" -A4 sem envelopamento
214
+ # "6" -A4 sem envelopamento 3 vias
215
+ # Em branco - 05 posições (16 a 20)
216
+ def formata_nosso_numero(nosso_numero)
217
+ "#{nosso_numero.to_s.rjust(10, '0')}#{parcela}#{modalidade_carteira}#{tipo_formulario} "
218
+ end
219
+
220
+ def dias_baixa(pagamento)
221
+ ''.rjust(3, ' ')
222
+ end
223
+ end
224
+ end
225
+ end
226
+ end
@@ -0,0 +1,94 @@
1
+ # -*- encoding: utf-8 -*-
2
+ module Bbrcobranca
3
+ module Remessa
4
+ module Cnab240
5
+ class SicoobBancoBrasil < Bbrcobranca::Remessa::Cnab240::BaseCorrespondente
6
+ attr_accessor :codigo_cobranca
7
+
8
+ validates_length_of :agencia, is: 4, message: 'deve ter 4 dígitos.'
9
+ validates_length_of :convenio, maximum: 10, message: 'deve ter 10 dígitos.'
10
+ validates_length_of :conta_corrente, maximum: 10, message: 'deve ter 10 dígitos.'
11
+ validates_length_of :codigo_cobranca, maximum: 7, message: 'deve ter 7 dígitos.'
12
+ validates_length_of :sequencial_remessa, maximum: 8, message: 'deve ter 8 dígitos.'
13
+ validates_presence_of :sequencial_remessa, message: 'não pode estar em branco.'
14
+
15
+ def initialize(campos = {})
16
+ campos = {
17
+ emissao_boleto: '2',
18
+ distribuicao_boleto: '2',
19
+ codigo_carteira: '9',
20
+ tipo_documento: '02'
21
+ }.merge!(campos)
22
+ super(campos)
23
+ end
24
+
25
+ def cod_banco
26
+ '756'
27
+ end
28
+
29
+ def digito_conta
30
+ conta_corrente.modulo11(mapeamento: { 10 => 'X' }).to_s
31
+ end
32
+
33
+ def info_conta
34
+ # CAMPO TAMANHO
35
+ # agencia 4
36
+ # codigo cobranca 7
37
+ # conta corrente 11
38
+ "#{agencia.rjust(4, '0')}#{codigo_cobranca.rjust(7, '0')}#{conta_corrente.rjust(10, '0')}#{digito_conta}"
39
+ end
40
+
41
+ def complemento_header
42
+ "#{''.rjust(11, '0')}#{''.rjust(33, ' ')}"
43
+ end
44
+
45
+ def complemento_p(pagamento)
46
+ # CAMPO TAMANHO
47
+ # num. doc. de corbanca 15
48
+ "#{pagamento.nosso_numero.to_s.rjust(15, '0')}"
49
+ end
50
+
51
+ def codigo_convenio
52
+ # CAMPO TAMANHO
53
+ # num. convenio 20 BRANCOS
54
+ ''.rjust(20, ' ')
55
+ end
56
+
57
+ alias_method :convenio_lote, :codigo_convenio
58
+
59
+ def totaliza_valor_titulos
60
+ pagamentos.inject(0) { |sum, pag| sum += pag.valor.to_f }
61
+ end
62
+
63
+ def valor_titulos_carteira
64
+ total = sprintf "%.2f", totaliza_valor_titulos
65
+ total.somente_numeros.rjust(17, "0")
66
+ end
67
+
68
+ def complemento_trailer
69
+ ''.rjust(217, ' ')
70
+ end
71
+
72
+ # Monta o registro trailer do arquivo
73
+ #
74
+ # @param nro_lotes [Integer]
75
+ # numero de lotes no arquivo
76
+ # @param sequencial [Integer]
77
+ # numero de registros(linhas) no arquivo
78
+ #
79
+ # @return [String]
80
+ #
81
+ def monta_trailer_arquivo(nro_lotes, sequencial)
82
+ # CAMPO TAMANHO
83
+ # zeros 7
84
+ # registro trailer lote 1
85
+ # uso FEBRABAN 9
86
+ # nro de lotes 6
87
+ # nro de registros(linhas) 6
88
+ # uso FEBRABAN 211
89
+ "#{''.rjust(7, '0')}5#{''.rjust(9, ' ')}#{nro_lotes.to_s.rjust(6, '0')}#{valor_titulos_carteira}#{''.rjust(6, '0')}#{''.rjust(194, ' ')}"
90
+ end
91
+ end
92
+ end
93
+ end
94
+ end