br_boleto 2.0.1 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (137) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -1
  3. data/.travis.yml +1 -1
  4. data/Gemfile.lock +2 -2
  5. data/br_boleto.gemspec +2 -3
  6. data/lib/br_boleto/association/have_conta.rb +27 -25
  7. data/lib/br_boleto/association/have_pagador.rb +2 -0
  8. data/lib/br_boleto/boleto/base.rb +0 -4
  9. data/lib/br_boleto/boleto/bradesco.rb +80 -0
  10. data/lib/br_boleto/boleto/caixa.rb +10 -12
  11. data/lib/br_boleto/boleto/cecred.rb +76 -0
  12. data/lib/br_boleto/boleto/itau.rb +114 -0
  13. data/lib/br_boleto/boleto/sicredi.rb +101 -0
  14. data/lib/br_boleto/boleto/unicred.rb +21 -0
  15. data/lib/br_boleto/conta/base.rb +28 -3
  16. data/lib/br_boleto/conta/bradesco.rb +120 -0
  17. data/lib/br_boleto/conta/caixa.rb +22 -12
  18. data/lib/br_boleto/conta/cecred.rb +67 -0
  19. data/lib/br_boleto/conta/itau.rb +199 -0
  20. data/lib/br_boleto/conta/sicoob.rb +40 -11
  21. data/lib/br_boleto/conta/sicredi.rb +171 -0
  22. data/lib/br_boleto/conta/unicred.rb +38 -0
  23. data/lib/br_boleto/helper/default_codes.rb +535 -26
  24. data/lib/br_boleto/pagador.rb +4 -0
  25. data/lib/br_boleto/remessa/base.rb +2 -0
  26. data/lib/br_boleto/remessa/cnab240/base.rb +21 -6
  27. data/lib/br_boleto/remessa/cnab240/bradesco.rb +141 -0
  28. data/lib/br_boleto/remessa/cnab240/caixa.rb +8 -1
  29. data/lib/br_boleto/remessa/cnab240/cecred.rb +169 -0
  30. data/lib/br_boleto/remessa/cnab240/helper/segmento_p.rb +29 -21
  31. data/lib/br_boleto/remessa/cnab240/helper/segmento_q.rb +4 -3
  32. data/lib/br_boleto/remessa/cnab240/helper/segmento_r.rb +5 -5
  33. data/lib/br_boleto/remessa/cnab240/helper/segmento_s.rb +4 -3
  34. data/lib/br_boleto/remessa/cnab240/itau.rb +186 -0
  35. data/lib/br_boleto/remessa/cnab240/sicoob.rb +4 -16
  36. data/lib/br_boleto/remessa/cnab240/sicredi.rb +205 -0
  37. data/lib/br_boleto/remessa/cnab240/unicred.rb +40 -0
  38. data/lib/br_boleto/remessa/cnab400/bradesco.rb +235 -0
  39. data/lib/br_boleto/remessa/cnab400/helper/detalhe.rb +6 -5
  40. data/lib/br_boleto/remessa/cnab400/itau.rb +190 -0
  41. data/lib/br_boleto/remessa/cnab400/sicoob.rb +3 -3
  42. data/lib/br_boleto/remessa/cnab400/sicredi.rb +276 -0
  43. data/lib/br_boleto/remessa/cnab400/unicred.rb +62 -0
  44. data/lib/br_boleto/remessa/pagamento.rb +93 -43
  45. data/lib/br_boleto/retorno/cnab240/base.rb +13 -12
  46. data/lib/br_boleto/retorno/cnab240/bradesco.rb +10 -0
  47. data/lib/br_boleto/retorno/cnab240/caixa.rb +2 -3
  48. data/lib/br_boleto/retorno/cnab240/cecred.rb +10 -0
  49. data/lib/br_boleto/retorno/cnab240/itau.rb +24 -0
  50. data/lib/br_boleto/retorno/cnab240/sicredi.rb +10 -0
  51. data/lib/br_boleto/retorno/cnab240/unicred.rb +10 -0
  52. data/lib/br_boleto/retorno/cnab400/bradesco.rb +42 -0
  53. data/lib/br_boleto/retorno/cnab400/itau.rb +43 -0
  54. data/lib/br_boleto/retorno/cnab400/sicoob.rb +2 -2
  55. data/lib/br_boleto/retorno/cnab400/sicredi.rb +43 -0
  56. data/lib/br_boleto/retorno/cnab400/unicred.rb +10 -0
  57. data/lib/br_boleto/retorno/pagamento.rb +18 -4
  58. data/lib/br_boleto/version.rb +2 -2
  59. data/lib/br_boleto.rb +28 -0
  60. data/lib/config/locales/br-boleto-en.yml +1 -0
  61. data/lib/config/locales/br-boleto-pt-BR.yml +1 -0
  62. data/test/br_boleto/association/have_pagador_test.rb +24 -0
  63. data/test/br_boleto/boleto/bradesco_test.rb +125 -0
  64. data/test/br_boleto/boleto/caixa_test.rb +18 -18
  65. data/test/br_boleto/boleto/cecred_test.rb +115 -0
  66. data/test/br_boleto/boleto/itau_test.rb +160 -0
  67. data/test/br_boleto/boleto/sicredi_test.rb +136 -0
  68. data/test/br_boleto/boleto/unicred_test.rb +128 -0
  69. data/test/br_boleto/conta/base_test.rb +298 -3
  70. data/test/br_boleto/conta/bradesco_test.rb +142 -0
  71. data/test/br_boleto/conta/caixa_test.rb +7 -6
  72. data/test/br_boleto/conta/cecred_test.rb +119 -0
  73. data/test/br_boleto/conta/itau_test.rb +189 -0
  74. data/test/br_boleto/conta/sicoob_test.rb +32 -2
  75. data/test/br_boleto/conta/sicredi_test.rb +180 -0
  76. data/test/br_boleto/conta/unicred_test.rb +154 -0
  77. data/test/br_boleto/pagador_test.rb +22 -2
  78. data/test/br_boleto/remessa/cnab240/base_test.rb +24 -12
  79. data/test/br_boleto/remessa/cnab240/bradesco_test.rb +196 -0
  80. data/test/br_boleto/remessa/cnab240/caixa_test.rb +51 -0
  81. data/test/br_boleto/remessa/cnab240/cecred_test.rb +242 -0
  82. data/test/br_boleto/remessa/cnab240/helper/segmento_p_test.rb +78 -71
  83. data/test/br_boleto/remessa/cnab240/helper/segmento_q_test.rb +4 -3
  84. data/test/br_boleto/remessa/cnab240/helper/segmento_r_test.rb +10 -18
  85. data/test/br_boleto/remessa/cnab240/helper/segmento_s_test.rb +6 -5
  86. data/test/br_boleto/remessa/cnab240/itau_test.rb +201 -0
  87. data/test/br_boleto/remessa/cnab240/sicoob_test.rb +1 -58
  88. data/test/br_boleto/remessa/cnab240/sicredi_test.rb +207 -0
  89. data/test/br_boleto/remessa/cnab240/unicred_test.rb +250 -0
  90. data/test/br_boleto/remessa/cnab400/base_test.rb +4 -4
  91. data/test/br_boleto/remessa/cnab400/bradesco_test.rb +164 -0
  92. data/test/br_boleto/remessa/cnab400/itau_test.rb +173 -0
  93. data/test/br_boleto/remessa/cnab400/sicoob_test.rb +2 -2
  94. data/test/br_boleto/remessa/cnab400/sicredi_test.rb +241 -0
  95. data/test/br_boleto/remessa/cnab400/unicred_test.rb +169 -0
  96. data/test/br_boleto/retorno/cnab240/base_test.rb +20 -10
  97. data/test/br_boleto/retorno/cnab240/bradesco_test.rb +228 -0
  98. data/test/br_boleto/retorno/cnab240/caixa_test.rb +20 -10
  99. data/test/br_boleto/retorno/cnab240/cecred_test.rb +228 -0
  100. data/test/br_boleto/retorno/cnab240/itau_test.rb +228 -0
  101. data/test/br_boleto/retorno/cnab240/sicoob_test.rb +20 -10
  102. data/test/br_boleto/retorno/cnab240/sicredi_test.rb +228 -0
  103. data/test/br_boleto/retorno/cnab240/unicred_test.rb +228 -0
  104. data/test/br_boleto/retorno/cnab400/bradesco_test.rb +255 -0
  105. data/test/br_boleto/retorno/cnab400/itau_test.rb +96 -0
  106. data/test/br_boleto/retorno/cnab400/sicoob_test.rb +10 -5
  107. data/test/br_boleto/retorno/cnab400/sicredi_test.rb +7 -0
  108. data/test/br_boleto/retorno/cnab400/unicred.rb +255 -0
  109. data/test/br_boleto/retorno/pagamento_test.rb +7 -0
  110. data/test/factories/boleto/boleto_bradesco.rb +18 -0
  111. data/test/factories/boleto/boleto_cecred.rb +18 -0
  112. data/test/factories/boleto/boleto_itau.rb +18 -0
  113. data/test/factories/boleto/boleto_sicredi.rb +18 -0
  114. data/test/factories/boleto/boleto_unicred.rb +18 -0
  115. data/test/factories/conta/bradesco.rb +16 -0
  116. data/test/factories/conta/caixa.rb +2 -1
  117. data/test/factories/conta/cecred.rb +15 -0
  118. data/test/factories/conta/itau.rb +15 -0
  119. data/test/factories/conta/sicoob.rb +2 -1
  120. data/test/factories/conta/sicredi.rb +15 -0
  121. data/test/factories/conta/unicred.rb +15 -0
  122. data/test/factories/remessa/cnab240/bradesco.rb +9 -0
  123. data/test/factories/remessa/cnab240/cecred.rb +9 -0
  124. data/test/factories/remessa/cnab240/itau.rb +9 -0
  125. data/test/factories/remessa/cnab240/sicredi.rb +9 -0
  126. data/test/factories/remessa/cnab240/unicred.rb +9 -0
  127. data/test/factories/remessa/cnab400/bradesco.rb +8 -0
  128. data/test/factories/remessa/cnab400/itau.rb +8 -0
  129. data/test/factories/remessa/cnab400/sicredi.rb +8 -0
  130. data/test/factories/remessa/cnab400/unicred.rb +8 -0
  131. data/test/fixtures/remessa/cnab240/caixa.rem +8 -0
  132. data/test/fixtures/remessa/cnab240/cecred.rem +8 -0
  133. data/test/fixtures/remessa/cnab240/sicoob.rem +8 -8
  134. data/test/fixtures/remessa/cnab240/unicred.rem +7 -0
  135. data/test/fixtures/retorno/cnab400/bradesco.ret +8 -0
  136. data/test/fixtures/retorno/cnab400/itau.ret +54 -0
  137. metadata +138 -3
@@ -1,33 +1,542 @@
1
1
  module BrBoleto
2
2
  module Helper
3
3
  module DefaultCodes
4
+ ########################################################################################
5
+ ############################## ESPÉCIE DO TÍTULO #####################################
6
+ # Espécie do Título :
7
+ # Código adotado pela FEBRABAN para identificar o tipo de título de cobrança
8
+ # Códigos padrões da GEM
9
+ # 01 = CH – Cheque
10
+ # 02 = DM – Duplicata Mercantil
11
+ # 03 = DMI – Duplicata Mercantil p/ Indicação
12
+ # 04 = DS – Duplicata de Serviço
13
+ # 05 = DSI – Duplicata de Serviço p/ Indicação
14
+ # 06 = DR – Duplicata Rural
15
+ # 07 = LC – Letra de Câmbio
16
+ # 08 = NCC – Nota de Crédito Comercial
17
+ # 09 = NCE – Nota de Crédito a Exportação
18
+ # 10 = NCI – Nota de Crédito Industrial
19
+ # 11 = NCR – Nota de Crédito Rural
20
+ # 12 = NP – Nota Promissória
21
+ # 13 = NPR – Nota Promissória Rural
22
+ # 14 = TM – Triplicata Mercantil
23
+ # 15 = TS – Triplicata de Serviço
24
+ # 16 = NS – Nota de Seguro
25
+ # 17 = RC – Recibo
26
+ # 18 = FAT – Fatura
27
+ # 19 = ND – Nota de Débito
28
+ # 20 = AP – Apólice de Seguro
29
+ # 21 = ME – Mensalidade Escolar
30
+ # 22 = PC – Parcela de Consórcio
31
+ # 23 = NF – Nota Fiscal
32
+ # 24 = DD – Documento de Dívida
33
+ # 25 = Cédula de Produto Rural
34
+ # 26 = Warrant
35
+ # 27 = Dívida Ativa de Estado
36
+ # 28 = Dívida Ativa de Município
37
+ # 29 = Dívida Ativa da União
38
+ # 30 = Encargos condominiais
39
+ # 31 = CC – Cartão de Crédito
40
+ # 32 = BDP – Boleto de Proposta
41
+ # 99 = Outros
42
+ #
43
+ def get_especie_titulo(code, cnab)
44
+ "#{code}".adjust_size_to(2, '0', :right)
45
+ send("equivalent_especie_titulo_#{cnab}")[code] || '99'
46
+ end
47
+ def equivalent_especie_titulo_240
48
+ {
49
+ '01' => '01', # CH – Cheque
50
+ '02' => '02', # DM – Duplicata Mercantil
51
+ '03' => '03', # DMI – Duplicata Mercantil p/ Indicação
52
+ '04' => '04', # DS – Duplicata de Serviço
53
+ '05' => '05', # DSI – Duplicata de Serviço p/ Indicação
54
+ '06' => '06', # DR – Duplicata Rural
55
+ '07' => '07', # LC – Letra de Câmbio
56
+ '08' => '08', # NCC – Nota de Crédito Comercial
57
+ '09' => '09', # NCE – Nota de Crédito a Exportação
58
+ '10' => '10', # NCI – Nota de Crédito Industrial
59
+ '11' => '11', # NCR – Nota de Crédito Rural
60
+ '12' => '12', # NP – Nota Promissória
61
+ '13' => '13', # NPR – Nota Promissória Rural
62
+ '14' => '14', # TM – Triplicata Mercantil
63
+ '15' => '15', # TS – Triplicata de Serviço
64
+ '16' => '16', # NS – Nota de Seguro
65
+ '17' => '17', # RC – Recibo
66
+ '18' => '18', # FAT – Fatura
67
+ '19' => '19', # ND – Nota de Débito
68
+ '20' => '20', # AP – Apólice de Seguro
69
+ '21' => '21', # ME – Mensalidade Escolar
70
+ '22' => '22', # PC – Parcela de Consórcio
71
+ '23' => '23', # NF – Nota Fiscal
72
+ '24' => '24', # DD – Documento de Dívida
73
+ '25' => '25', # Cédula de Produto Rural
74
+ '26' => '26', # Warrant
75
+ '27' => '27', # Dívida Ativa de Estado
76
+ '28' => '28', # Dívida Ativa de Município
77
+ '29' => '29', # Dívida Ativa da União
78
+ '30' => '30', # Encargos condominiais
79
+ '31' => '31', # CC – Cartão de Crédito
80
+ '32' => '32', # BDP – Boleto de Proposta
81
+ '99' => '99', # Outros
82
+ }
83
+ end
84
+ def equivalent_especie_titulo_400
85
+ # Padrão Código para
86
+ {# da GEM o Banco
87
+ '01' => '10' , # Cheque
88
+ '02' => '01' , # Duplicata Mercantil
89
+ '04' => '12' , # Duplicata de Serviço
90
+ '06' => '06' , # Duplicata Rural
91
+ '07' => '08' , # Letra de Câmbio
92
+ '12' => '02' , # Nota Promissória
93
+ '14' => '14' , # Triplicata Mercantil
94
+ '15' => '15' , # Triplicata de Serviço
95
+ '16' => '03' , # Nota de Seguro
96
+ '17' => '05' , # Recibo
97
+ '18' => '18' , # Fatura
98
+ '19' => '13' , # Nota de Débito
99
+ '20' => '20' , # Apólice de Seguro
100
+ '21' => '21' , # Mensalidade Escolar
101
+ '22' => '22' , # Parcela de Consórcio
102
+ '26' => '09' , # Warrant
103
+ '99' => '99' , # Outros"
104
+ }
105
+ end
106
+
107
+ ########################################################################################
108
+ ########################### CÓDIGO DA MOVIMENTAÇÃO ###################################
109
+ # Código de Movimento Remessa / Identificacao Ocorrência:
110
+ # Código adotado pela FEBRABAN, para identificar o tipo de movimentação enviado nos registros do arquivo de remessa.
111
+ # Default: 01
112
+ # Códigos padrões da GEM
113
+ # 01 = Entrada de Títulos
114
+ # 02 = Pedido de Baixa
115
+ # 03 = Protesto para Fins Falimentares
116
+ # 04 = Concessão de Abatimento
117
+ # 05 = Cancelamento de Abatimento
118
+ # 06 = Alteração de Vencimento
119
+ # 07 = Concessão de Desconto
120
+ # 08 = Cancelamento de Desconto
121
+ # 09 = Pedido de protesto (Protestar)
122
+ # 10 = Sustar Protesto e Baixar Título
123
+ # 11 = Sustar Protesto e Manter em Carteira
124
+ # 12 = Alteração de Juros de Mora
125
+ # 13 = Dispensar Cobrança de Juros de Mora
126
+ # 14 = Alteração de Valor/Percentual de Multa
127
+ # 15 = Dispensar Cobrança de Multa
128
+ # 16 = Alteração do Valor de Desconto
129
+ # 17 = Não conceder Desconto
130
+ # 18 = Alteração do Valor de Abatimento
131
+ # 19 = Prazo Limite de Recebimento – Alterar
132
+ # 20 = Prazo Limite de Recebimento – Dispensar
133
+ # 21 = Alterar número do título dado pelo beneficiario (nosso número)
134
+ # 22 = Alterar número controle do Participante (seu número / número documento)
135
+ # 23 = Alterar dados do Pagador
136
+ # 24 = Alterar dados do Sacador/Avalista
137
+ # 30 = Recusa da Alegação do Pagador
138
+ # 31 = Alteração de Outros Dados
139
+ # 33 = Alteração dos Dados do Rateio de Crédito
140
+ # 34 = Pedido de Cancelamento dos Dados do Rateio de Crédito
141
+ # 35 = Pedido de Desagendamento do Débito Automático
142
+ # 40 = Alteração de Carteira
143
+ # 41 = Cancelar protesto
144
+ # 42 = Alteração de Espécie de Título
145
+ # 43 = Transferência de carteira/modalidade de cobrança
146
+ # 44 = Alteração de contrato de cobrança
147
+ # 45 = Negativação Sem Protesto
148
+ # 46 = Solicitação de Baixa de Título Negativado Sem Protesto
149
+ # 47 = Alteração do Valor Nominal do Título
150
+ # 48 = Alteração do Valor Mínimo/ Percentual
151
+ # 49 = Alteração do Valor Máximo/Percentua
152
+
153
+ def get_codigo_movimento_remessa(code, cnab)
154
+ "#{code}".adjust_size_to(2, '0', :right)
155
+ send("equivalent_codigo_movimento_remessa_#{cnab}")[code] || '31'
156
+ end
157
+ def equivalent_codigo_movimento_remessa_240
158
+ # Padrão Código para Descrição
159
+ {# da GEM o Banco
160
+ '01' => '01' , # Entrada de Títulos
161
+ '02' => '02' , # Pedido de Baixa
162
+ '03' => '03' , # Protesto para Fins Falimentares
163
+ '04' => '04' , # Concessão de Abatimento
164
+ '05' => '05' , # Cancelamento de Abatimento
165
+ '06' => '06' , # Alteração de Vencimento
166
+ '07' => '07' , # Concessão de Desconto
167
+ '08' => '08' , # Cancelamento de Desconto
168
+ '09' => '09' , # Pedido de protesto (Protestar)
169
+ '10' => '10' , # Sustar Protesto e Baixar Título
170
+ '11' => '11' , # Sustar Protesto e Manter em Carteira
171
+ '12' => '12' , # Alteração de Juros de Mora
172
+ '13' => '13' , # Dispensar Cobrança de Juros de Mora
173
+ '14' => '14' , # Alteração de Valor/Percentual de Multa
174
+ '15' => '15' , # Dispensar Cobrança de Multa
175
+ '16' => '16' , # Alteração do Valor de Desconto
176
+ '17' => '17' , # Não conceder Desconto
177
+ '18' => '18' , # Alteração do Valor de Abatimento
178
+ '19' => '19' , # Prazo Limite de Recebimento – Alterar
179
+ '20' => '20' , # Prazo Limite de Recebimento – Dispensar
180
+ '21' => '21' , # Alterar número do título dado pelo beneficiario (nosso número)
181
+ '22' => '22' , # Alterar número controle do Participante (seu número / número documento)
182
+ '23' => '23' , # Alterar dados do Pagador
183
+ '24' => '24' , # Alterar dados do Sacador/Avalista
184
+ '30' => '30' , # Recusa da Alegação do Pagador
185
+ '31' => '31' , # Alteração de Outros Dados
186
+ '33' => '33' , # Alteração dos Dados do Rateio de Crédito
187
+ '34' => '34' , # Pedido de Cancelamento dos Dados do Rateio de Crédito
188
+ '35' => '35' , # Pedido de Desagendamento do Débito Automático
189
+ '40' => '40' , # Alteração de Carteira
190
+ '41' => '41' , # Cancelar protesto
191
+ '42' => '42' , # Alteração de Espécie de Título
192
+ '43' => '43' , # Transferência de carteira/modalidade de cobrança
193
+ '44' => '44' , # Alteração de contrato de cobrança
194
+ '45' => '45' , # Negativação Sem Protesto
195
+ '46' => '46' , # Solicitação de Baixa de Título Negativado Sem Protesto
196
+ '47' => '47' , # Alteração do Valor Nominal do Título
197
+ '48' => '48' , # Alteração do Valor Mínimo/ Percentual
198
+ '49' => '49' , # Alteração do Valor Máximo/Percentua
199
+ }
200
+ end
201
+ def equivalent_codigo_movimento_remessa_400
202
+ # Padrão Código para Descrição
203
+ {# da GEM o Banco
204
+ '01' => '01' , # Registro de títulos / Remessa
205
+ '02' => '02' , # Pedido de Baixa
206
+ '03' => '03' , # Pedido de Protesto Falimentar
207
+ '04' => '04' , # Concessão de abatimento
208
+ '05' => '05' , # Cancelamento de abatimento concedido
209
+ '06' => '06' , # Alteração de vencimento
210
+ '09' => '09' , # Pedido de protesto (Protestar)
211
+ '21' => '07' , # Alterar número do título dado pelo beneficiario (nosso número)
212
+ '22' => '08' , # Alterar número controle do Participante (seu número / número documento)
213
+ '31' => '31' , # Alteração de outros dados
214
+ }
215
+ end
216
+
217
+ ########################################################################################
218
+ ############################### CÓDIGO DA CARTEIRA ###################################
219
+ # Código da Carteira :
220
+ # Default: 1
221
+ # Códigos padrões da GEM
222
+ # 1 = Cobrança Simples
223
+ # 2 = Cobrança Vinculada
224
+ # 3 = Cobrança Caucionada
225
+ # 4 = Cobrança Descontada
226
+ # 5 = Cobrança Vendor
227
+ #
228
+ def get_tipo_cobranca(code, cnab)
229
+ "#{code}".adjust_size_to(1, '0', :right)
230
+ send("equivalent_tipo_cobranca_#{cnab}")[code] || code
231
+ end
232
+ # Código adotado pela FEBRABAN, para identificar a característica dos títulos
233
+ # dentro das modalidades de cobrança existentes no banco.
234
+ def equivalent_tipo_cobranca_240
235
+ {
236
+ '1' => '1', # Cobrança Simples
237
+ '2' => '2', # Cobrança Vinculada
238
+ '3' => '3', # Cobrança Caucionada
239
+ '4' => '4', # Cobrança Descontada
240
+ '5' => '5', # Cobrança Vendor
241
+ }
242
+ end
243
+ def equivalent_tipo_cobranca_400
244
+ {
245
+ '1' => '1', # Cobrança Simples
246
+ '2' => '2', # Cobrança Vinculada
247
+ '3' => '3', # Cobrança Caucionada
248
+ '4' => '4', # Cobrança Descontada
249
+ '5' => '5', # Cobrança Vendor
250
+ }
251
+ end
252
+
253
+ #######################################################################################
254
+ ##################### CÓDIGO DO TIPO DE IMPRESSÃO DO BLOQUETO ######################
255
+ # Identificação do Tipo de Impressão :
256
+ # Default: 2
257
+ # Códigos padrões da GEM
258
+ # 1 = Frente do Bloqueto
259
+ # 2 = Verso do Bloqueto
260
+ # 3 = Corpo de Instruções da Ficha de Compensação do Bloqueto
261
+ #
262
+ def get_tipo_impressao(code, cnab)
263
+ "#{code}".adjust_size_to(1, '0', :right)
264
+ send("equivalent_tipo_impressao_#{cnab}")[code] || code
265
+ end
266
+ # Código adotado pela FEBRABAN para identificar o responsável e a forma de emissão do Boleto de Pagamento.
267
+ # Os códigos '4' e '5' só serão aceitos para código de movimento para remessa '31'
268
+ def equivalent_tipo_impressao_240
269
+ {
270
+ '1' => '1', # Frente do Bloqueto
271
+ '2' => '2', # Verso do Bloqueto
272
+ '3' => '3', # Corpo de Instruções da Ficha de Compensação do Bloqueto
273
+ }
274
+ end
275
+ def equivalent_tipo_impressao_400
276
+ {
277
+ '1' => '1', # Frente do Bloqueto
278
+ '2' => '2', # Verso do Bloqueto
279
+ '3' => '3', # Corpo de Instruções da Ficha de Compensação do Bloqueto
280
+ }
281
+ end
282
+
283
+ #######################################################################################
284
+ ##################### CÓDIGO DA IDENTIFICAÇÃO EMISSÃO DO BOLETO #####################
285
+ # Identificação da Emissão do Boleto de Pagamento :
286
+ # Default: 2
287
+ # Códigos padrões da GEM
288
+ # 1 = Banco Emite
289
+ # 2 = Cliente Emite
290
+ # 3 = Banco Pré-emite e Cliente Complementa
291
+ # 4 = Banco Reemite
292
+ # 5 = Banco Não Reemite
293
+ # 7 = Banco Emitente - Aberta
294
+ # 8 = Banco Emitente - Auto-envelopável
295
+ #
296
+ def get_identificacao_emissao(code, cnab)
297
+ "#{code}".adjust_size_to(1, '0', :right)
298
+ send("equivalent_identificacao_emissao_#{cnab}")[code] || code
299
+ end
300
+ # Código adotado pela FEBRABAN para identificar o responsável e a forma de emissão do Boleto de Pagamento.
301
+ # Os códigos '4' e '5' só serão aceitos para código de movimento para remessa '31'
302
+ def equivalent_identificacao_emissao_240
303
+ {
304
+ '1' => '1', # Banco Emite
305
+ '2' => '2', # Cliente Emite
306
+ '3' => '3', # Banco Pré-emite e Cliente Complementa
307
+ '4' => '4', # Banco Reemite
308
+ '5' => '5', # Banco Não Reemite
309
+ '7' => '7', # Banco Emitente - Aberta
310
+ '8' => '8', # Banco Emitente - Auto-envelopável
311
+ }
312
+ end
313
+ def equivalent_identificacao_emissao_400
314
+ {
315
+ '1' => '1', # Banco Emite
316
+ '2' => '2', # Cliente Emite
317
+ '3' => '3', # Banco Pré-emite e Cliente Complementa
318
+ '4' => '4', # Banco Reemite
319
+ '5' => '5', # Banco Não Reemite
320
+ '7' => '7', # Banco Emitente - Aberta
321
+ '8' => '8', # Banco Emitente - Auto-envelopável
322
+ }
323
+ end
324
+
325
+ ########################################################################################
326
+ ##################### CÓDIGO IDENTIFICAÇÃO DA DISTRIBUIÇÃO ###########################
327
+ # Identificação da Distribuição :
328
+ # Default: 2
329
+ # Códigos padrões da GEM
330
+ # 1 = Banco Distribui
331
+ # 2 = Cliente Distribui
332
+ # 3 = Banco envia e-mail
333
+ # 4 = Banco envia SMS
334
+ #
335
+ def get_distribuicao_boleto(code)
336
+ "#{code}".rjust(1, '0')
337
+ equivalent_distribuicao_boleto[code] || code
338
+ end
339
+ # Código adotado pela FEBRABAN para identificar o responsável pela distribuição do bloqueto.
340
+ def equivalent_distribuicao_boleto
341
+ {
342
+ '1' => '1', # Banco Distribui
343
+ '2' => '2', # Cliente Distribui
344
+ '3' => '3', # Banco envia e-mail
345
+ '4' => '4', # Banco envia SMS
346
+ }
347
+ end
348
+
349
+ ########################################################################################
350
+ ################################## CÓDIGO JUROS ######################################
351
+ # Código dos Juros de Mora :
352
+ # O cálculo de juros para cada código funciona da seguinte maneira:
353
+ # Valor do boleto = R$ 100,00
354
+ # Vencimento = dia 10
355
+ # 1 - Valor por Dia
356
+ # juros = R$ 1,00
357
+ # Valor no dia 10 = R$ 100,00 (Sem juros)
358
+ # Valor no dia 11 = R$ 101,00 (Juros de R$ 1,00)
359
+ # Valor no dia 12 = R$ 102,00 (Juros de R$ 2,00)
360
+ # 2 = Taxa Mensal
361
+ # juros = 5,00 %
362
+ # calculo juros/dia = (R$ 100,00*5%) / 30 dias(1 mês)
363
+ # juros ao dia = R$ 5,00
364
+ # Valor no dia 10 = R$ 100,00 (Sem juros)
365
+ # Valor no dia 11 = R$ 105,00 (Juros de R$ 5,00)
366
+ # Valor no dia 12 = R$ 110,00 (Juros de R$ 10,00)
367
+ #
368
+ # Default: 3
369
+ # Códigos padrões da GEM
370
+ # 1 = Valor por Dia (R$/dia)
371
+ # 2 = Taxa Mensal (%/mês)
372
+ # 3 = Isento
373
+ #
374
+ def get_codigo_juros(code)
375
+ "#{code}".adjust_size_to(1, '0', :right)
376
+ equivalent_codigo_juros[code] || default_codigo_juros
377
+ end
378
+ # Código adotado pela FEBRABAN para identificação do tipo de pagamento de juros de mora.
379
+ def equivalent_codigo_juros
380
+ {
381
+ '1' => '1', # Valor por Dia
382
+ '2' => '2', # Taxa Mensal
383
+ '3' => '3', # Isento
384
+ }
385
+ end
386
+ def default_codigo_juros
387
+ '3'
388
+ end
389
+
390
+ ########################################################################################
391
+ ################################## CÓDIGO MULTA ######################################
392
+ # Código de Multa :
393
+ # Default: 3
394
+ # Códigos padrões da GEM
395
+ # 1 = Valor fixo
396
+ # 2 = Percentual
397
+ # 3 = Isento
398
+ #
399
+ def get_codigo_multa(code)
400
+ "#{code}".adjust_size_to(1, '0', :right)
401
+ equivalent_codigo_multa[code] || default_codigo_multa
402
+ end
403
+ # Código adotado pela FEBRABAN para identificação do tipo de pagamento de multa.
404
+ def equivalent_codigo_multa
405
+ {
406
+ '1' => '1', # Valor fixo
407
+ '2' => '2', # Percentual
408
+ '3' => '3', # Isento
409
+ }
410
+ end
411
+ def default_codigo_multa
412
+ '3'
413
+ end
414
+
415
+ ########################################################################################
416
+ ################################ CÓDIGO DESCONTO #####################################
417
+ # Código do Desconto 1 / 2 / 3 :
418
+ # Default: 0
419
+ # Códigos padrões da GEM
420
+ # 0 = Sem Desconto
421
+ # 1 = Valor Fixo Até a Data Informada
422
+ # 2 = Percentual Até a Data Informada
423
+ # 3 = Valor por Antecipação Dia Corrido
424
+ # 4 = Valor por Antecipação Dia Úti
425
+ # 5 = Percentual Sobre o Valor Nominal Dia Corrido
426
+ # 6 = Percentual Sobre o Valor Nominal Dia Útil
427
+ # 7 = Cancelamento de Desconto
428
+ #
429
+ def get_codigo_desconto(code)
430
+ "#{code}".adjust_size_to(1, '0', :right)
431
+ equivalent_codigo_desconto[code] || code
432
+ end
433
+ # Código adotado pela FEBRABAN para identificação do tipo de desconto que deverá ser concedido.
434
+ def equivalent_codigo_desconto
435
+ {
436
+ '0' => '0', # Sem Desconto
437
+ '1' => '1', # Valor Fixo Até a Data Informada
438
+ '2' => '2', # Percentual Até a Data Informada
439
+ '3' => '3', # Valor por Antecipação Dia Corrido
440
+ '4' => '4', # Valor por Antecipação Dia Úti
441
+ '5' => '5', # Percentual Sobre o Valor Nominal Dia Corrido
442
+ '6' => '6', # Percentual Sobre o Valor Nominal Dia Útil
443
+ '7' => '7', # Cancelamento de Desconto
444
+ }
445
+ end
446
+
447
+ ########################################################################################
448
+ ################################# CÓDIGO PROTESTO ####################################
449
+ # Código para Protesto :
450
+ # Default: 1
451
+ # Códigos padrões da GEM
452
+ # 1 = Protestar Dias Corridos
453
+ # 2 = Protestar Dias Úteis
454
+ # 3 = Não Protesta
455
+ # 4 = Protestar Fim Falimentar - Dias Úteis
456
+ # 5 = Protestar Fim Falimentar - Dias Corridos
457
+ # 8 = Negativação sem Protesto
458
+ # 9 = Cancelamento Protesto Automático
459
+ #
460
+ def get_codigo_protesto(code)
461
+ "#{code}".adjust_size_to(1, '0', :right)
462
+ equivalent_codigo_protesto[code] || code
463
+ end
464
+ # Código adotado pela FEBRABAN para identificar o tipo de prazo a ser considerado para o protesto.
465
+ # O código '9' só sera aceito para código de movimento para remessa '31'
466
+ def equivalent_codigo_protesto
467
+ {
468
+ '1' => '1', # Protestar Dias Corridos
469
+ '2' => '2', # Protestar Dias Úteis
470
+ '3' => '3', # Não Protesta
471
+ '4' => '4', # Protestar Fim Falimentar - Dias Úteis
472
+ '5' => '5', # Protestar Fim Falimentar - Dias Corridos
473
+ '8' => '8', # Negativação sem Protesto
474
+ '9' => '9', # Cancelamento Protesto Automático
475
+ }
476
+ end
477
+
478
+ ########################################################################################
479
+ #################################### CÓDIGO MOEDA ####################################
480
+ # Código da Moeda :
481
+ # Default: 09
482
+ # Códigos padrões da GEM
483
+ # 01 = Reservado para Uso Futuro
484
+ # 02 = Dólar Americano Comercial (Venda)
485
+ # 03 = Dólar Americano Turismo (Venda)
486
+ # 04 = ITRD
487
+ # 05 = IDTR
488
+ # 06 = UFIR Diária
489
+ # 07 = UFIR Mensal
490
+ # 08 = FAJ - TR
491
+ # 09 = Real
492
+ # 10 = TR
493
+ # 11 = IGPM
494
+ # 12 = CDI
495
+ # 13 = Percentual do CDI
496
+ # 14 = Euro
497
+ #
498
+ def get_codigo_moeda(code, cnab)
499
+ "#{code}".adjust_size_to(2, '0', :right)
500
+ send("equivalent_codigo_moeda_#{cnab}")[code] || code
501
+ end
502
+ # Código adotado pela FEBRABAN para identificar a moeda referenciada no Título
503
+ def equivalent_codigo_moeda_240
504
+ {
505
+ '01' => '01', # Reservado para Uso Futuro
506
+ '02' => '02', # Dólar Americano Comercial (Venda)
507
+ '03' => '03', # Dólar Americano Turismo (Venda)
508
+ '04' => '04', # ITRD
509
+ '05' => '05', # IDTR
510
+ '06' => '06', # UFIR Diária
511
+ '07' => '07', # UFIR Mensal
512
+ '08' => '08', # FAJ - TR
513
+ '09' => '09', # Real
514
+ '10' => '10', # TR
515
+ '11' => '11', # IGPM
516
+ '12' => '12', # CDI
517
+ '13' => '13', # Percentual do CDI
518
+ '14' => '14', # Euro
519
+ }
520
+ end
521
+ def equivalent_codigo_moeda_400
522
+ {
523
+ '01' => '01', # Reservado para Uso Futuro
524
+ '02' => '02', # Dólar Americano Comercial (Venda)
525
+ '03' => '03', # Dólar Americano Turismo (Venda)
526
+ '04' => '04', # ITRD
527
+ '05' => '05', # IDTR
528
+ '06' => '06', # UFIR Diária
529
+ '07' => '07', # UFIR Mensal
530
+ '08' => '08', # FAJ - TR
531
+ '09' => '09', # Real
532
+ '10' => '10', # TR
533
+ '11' => '11', # IGPM
534
+ '12' => '12', # CDI
535
+ '13' => '13', # Percentual do CDI
536
+ '14' => '14', # Euro
537
+ }
538
+ end
4
539
 
5
- # "Espécie do Título :
6
- def get_especie_titulo(code)
7
- "#{code}".adjust_size_to(2, '0', :right)
8
- equivalent_especie_titulo[code] || '99'
9
- end
10
- def equivalent_especie_titulo
11
- {
12
- '01' => '01', # Duplicata Mercantil
13
- '02' => '02', # Nota Promissória
14
- '03' => '03', # Nota de Seguro
15
- '05' => '05', # Recibo
16
- '06' => '06', # Duplicata Rural
17
- '08' => '08', # Letra de Câmbio
18
- '09' => '09', # Warrant
19
- '10' => '10', # Cheque
20
- '12' => '12', # Duplicata de Serviço
21
- '13' => '13', # Nota de Débito
22
- '14' => '14', # Triplicata Mercantil
23
- '15' => '15', # Triplicata de Serviço
24
- '18' => '18', # Fatura
25
- '20' => '20', # Apólice de Seguro
26
- '21' => '21', # Mensalidade Escolar
27
- '22' => '22', # Parcela de Consórcio
28
- '99' => '99', # Outros"
29
- }
30
- end
31
540
  end
32
541
  end
33
542
  end
@@ -11,10 +11,14 @@ module BrBoleto
11
11
 
12
12
  attr_accessor :nome_avalista
13
13
  attr_accessor :documento_avalista
14
+ attr_accessor :endereco_avalista
14
15
 
15
16
  ###################### CUSTOM VALIDATIONS #################
16
17
  attr_accessor :valid_endereco_required
17
18
  validates :endereco, :bairro, :cep, :cidade, :uf, presence: true, if: :valid_endereco_required
19
+
20
+ attr_accessor :valid_avalista_required
21
+ validates :nome_avalista, :documento_avalista, presence: true, if: :valid_avalista_required
18
22
  ###########################################################
19
23
 
20
24
  validates :nome, :cpf_cnpj, presence: true
@@ -1,3 +1,5 @@
1
+ require "unidecoder"
2
+
1
3
  module BrBoleto
2
4
  module Remessa
3
5
  class Base < BrBoleto::ActiveModelBase
@@ -60,6 +60,14 @@ module BrBoleto
60
60
  1
61
61
  end
62
62
 
63
+ def usa_segmento_R?
64
+ true
65
+ end
66
+
67
+ def usa_segmento_S?
68
+ true
69
+ end
70
+
63
71
  validates_each :lotes do |record, attr, value|
64
72
  record.errors.add(attr, :blank) if value.empty?
65
73
  value.each do |lote|
@@ -108,12 +116,18 @@ module BrBoleto
108
116
  itens_lote << monta_segmento_q(pagamento, nro_lote, sequencial_do_lote)
109
117
 
110
118
  # Metodo 'monta_segmento_r' implementado no module -> BrBoleto::Remessa::Cnab240::Helper::SegmentoR
111
- sequencial_do_lote += 1
112
- itens_lote << monta_segmento_r(pagamento, nro_lote, sequencial_do_lote)
119
+ # Segmento R é opcional e não é utilizados por alguns bancos
120
+ if usa_segmento_R?
121
+ sequencial_do_lote += 1
122
+ itens_lote << monta_segmento_r(pagamento, nro_lote, sequencial_do_lote)
123
+ end
113
124
 
114
125
  # Metodo 'monta_segmento_s' implementado no module -> BrBoleto::Remessa::Cnab240::Helper::SegmentoS
115
- sequencial_do_lote += 1
116
- itens_lote << monta_segmento_s(pagamento, nro_lote, sequencial_do_lote)
126
+ # Segmento S é opcional e não é utilizados por alguns bancos
127
+ if usa_segmento_S?
128
+ sequencial_do_lote += 1
129
+ itens_lote << monta_segmento_s(pagamento, nro_lote, sequencial_do_lote)
130
+ end
117
131
  end
118
132
 
119
133
  # total_de_registros_do_lote é a quantidade de registros(linhas) que constam em um lote
@@ -150,8 +164,9 @@ module BrBoleto
150
164
  # Metodo 'monta_trailer_arquivo' implementado no module -> BrBoleto::Remessa::Cnab240::Helper::TrailerArquivo
151
165
  arquivo << monta_trailer_arquivo(lotes.count, contador)
152
166
 
153
- retorno = arquivo.join("\n")
154
- ActiveSupport::Inflector.transliterate(retorno).upcase
167
+ retorno = ActiveSupport::Inflector.transliterate(arquivo.join("\n")).to_ascii.upcase
168
+ retorno << "\n"
169
+ retorno.encode(retorno.encoding, :universal_newline => true).encode(retorno.encoding, :crlf_newline => true)
155
170
  end
156
171
 
157
172
  # Número do Documento de Cobrança