br_boleto 2.0.1 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (137) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -1
  3. data/.travis.yml +1 -1
  4. data/Gemfile.lock +2 -2
  5. data/br_boleto.gemspec +2 -3
  6. data/lib/br_boleto/association/have_conta.rb +27 -25
  7. data/lib/br_boleto/association/have_pagador.rb +2 -0
  8. data/lib/br_boleto/boleto/base.rb +0 -4
  9. data/lib/br_boleto/boleto/bradesco.rb +80 -0
  10. data/lib/br_boleto/boleto/caixa.rb +10 -12
  11. data/lib/br_boleto/boleto/cecred.rb +76 -0
  12. data/lib/br_boleto/boleto/itau.rb +114 -0
  13. data/lib/br_boleto/boleto/sicredi.rb +101 -0
  14. data/lib/br_boleto/boleto/unicred.rb +21 -0
  15. data/lib/br_boleto/conta/base.rb +28 -3
  16. data/lib/br_boleto/conta/bradesco.rb +120 -0
  17. data/lib/br_boleto/conta/caixa.rb +22 -12
  18. data/lib/br_boleto/conta/cecred.rb +67 -0
  19. data/lib/br_boleto/conta/itau.rb +199 -0
  20. data/lib/br_boleto/conta/sicoob.rb +40 -11
  21. data/lib/br_boleto/conta/sicredi.rb +171 -0
  22. data/lib/br_boleto/conta/unicred.rb +38 -0
  23. data/lib/br_boleto/helper/default_codes.rb +535 -26
  24. data/lib/br_boleto/pagador.rb +4 -0
  25. data/lib/br_boleto/remessa/base.rb +2 -0
  26. data/lib/br_boleto/remessa/cnab240/base.rb +21 -6
  27. data/lib/br_boleto/remessa/cnab240/bradesco.rb +141 -0
  28. data/lib/br_boleto/remessa/cnab240/caixa.rb +8 -1
  29. data/lib/br_boleto/remessa/cnab240/cecred.rb +169 -0
  30. data/lib/br_boleto/remessa/cnab240/helper/segmento_p.rb +29 -21
  31. data/lib/br_boleto/remessa/cnab240/helper/segmento_q.rb +4 -3
  32. data/lib/br_boleto/remessa/cnab240/helper/segmento_r.rb +5 -5
  33. data/lib/br_boleto/remessa/cnab240/helper/segmento_s.rb +4 -3
  34. data/lib/br_boleto/remessa/cnab240/itau.rb +186 -0
  35. data/lib/br_boleto/remessa/cnab240/sicoob.rb +4 -16
  36. data/lib/br_boleto/remessa/cnab240/sicredi.rb +205 -0
  37. data/lib/br_boleto/remessa/cnab240/unicred.rb +40 -0
  38. data/lib/br_boleto/remessa/cnab400/bradesco.rb +235 -0
  39. data/lib/br_boleto/remessa/cnab400/helper/detalhe.rb +6 -5
  40. data/lib/br_boleto/remessa/cnab400/itau.rb +190 -0
  41. data/lib/br_boleto/remessa/cnab400/sicoob.rb +3 -3
  42. data/lib/br_boleto/remessa/cnab400/sicredi.rb +276 -0
  43. data/lib/br_boleto/remessa/cnab400/unicred.rb +62 -0
  44. data/lib/br_boleto/remessa/pagamento.rb +93 -43
  45. data/lib/br_boleto/retorno/cnab240/base.rb +13 -12
  46. data/lib/br_boleto/retorno/cnab240/bradesco.rb +10 -0
  47. data/lib/br_boleto/retorno/cnab240/caixa.rb +2 -3
  48. data/lib/br_boleto/retorno/cnab240/cecred.rb +10 -0
  49. data/lib/br_boleto/retorno/cnab240/itau.rb +24 -0
  50. data/lib/br_boleto/retorno/cnab240/sicredi.rb +10 -0
  51. data/lib/br_boleto/retorno/cnab240/unicred.rb +10 -0
  52. data/lib/br_boleto/retorno/cnab400/bradesco.rb +42 -0
  53. data/lib/br_boleto/retorno/cnab400/itau.rb +43 -0
  54. data/lib/br_boleto/retorno/cnab400/sicoob.rb +2 -2
  55. data/lib/br_boleto/retorno/cnab400/sicredi.rb +43 -0
  56. data/lib/br_boleto/retorno/cnab400/unicred.rb +10 -0
  57. data/lib/br_boleto/retorno/pagamento.rb +18 -4
  58. data/lib/br_boleto/version.rb +2 -2
  59. data/lib/br_boleto.rb +28 -0
  60. data/lib/config/locales/br-boleto-en.yml +1 -0
  61. data/lib/config/locales/br-boleto-pt-BR.yml +1 -0
  62. data/test/br_boleto/association/have_pagador_test.rb +24 -0
  63. data/test/br_boleto/boleto/bradesco_test.rb +125 -0
  64. data/test/br_boleto/boleto/caixa_test.rb +18 -18
  65. data/test/br_boleto/boleto/cecred_test.rb +115 -0
  66. data/test/br_boleto/boleto/itau_test.rb +160 -0
  67. data/test/br_boleto/boleto/sicredi_test.rb +136 -0
  68. data/test/br_boleto/boleto/unicred_test.rb +128 -0
  69. data/test/br_boleto/conta/base_test.rb +298 -3
  70. data/test/br_boleto/conta/bradesco_test.rb +142 -0
  71. data/test/br_boleto/conta/caixa_test.rb +7 -6
  72. data/test/br_boleto/conta/cecred_test.rb +119 -0
  73. data/test/br_boleto/conta/itau_test.rb +189 -0
  74. data/test/br_boleto/conta/sicoob_test.rb +32 -2
  75. data/test/br_boleto/conta/sicredi_test.rb +180 -0
  76. data/test/br_boleto/conta/unicred_test.rb +154 -0
  77. data/test/br_boleto/pagador_test.rb +22 -2
  78. data/test/br_boleto/remessa/cnab240/base_test.rb +24 -12
  79. data/test/br_boleto/remessa/cnab240/bradesco_test.rb +196 -0
  80. data/test/br_boleto/remessa/cnab240/caixa_test.rb +51 -0
  81. data/test/br_boleto/remessa/cnab240/cecred_test.rb +242 -0
  82. data/test/br_boleto/remessa/cnab240/helper/segmento_p_test.rb +78 -71
  83. data/test/br_boleto/remessa/cnab240/helper/segmento_q_test.rb +4 -3
  84. data/test/br_boleto/remessa/cnab240/helper/segmento_r_test.rb +10 -18
  85. data/test/br_boleto/remessa/cnab240/helper/segmento_s_test.rb +6 -5
  86. data/test/br_boleto/remessa/cnab240/itau_test.rb +201 -0
  87. data/test/br_boleto/remessa/cnab240/sicoob_test.rb +1 -58
  88. data/test/br_boleto/remessa/cnab240/sicredi_test.rb +207 -0
  89. data/test/br_boleto/remessa/cnab240/unicred_test.rb +250 -0
  90. data/test/br_boleto/remessa/cnab400/base_test.rb +4 -4
  91. data/test/br_boleto/remessa/cnab400/bradesco_test.rb +164 -0
  92. data/test/br_boleto/remessa/cnab400/itau_test.rb +173 -0
  93. data/test/br_boleto/remessa/cnab400/sicoob_test.rb +2 -2
  94. data/test/br_boleto/remessa/cnab400/sicredi_test.rb +241 -0
  95. data/test/br_boleto/remessa/cnab400/unicred_test.rb +169 -0
  96. data/test/br_boleto/retorno/cnab240/base_test.rb +20 -10
  97. data/test/br_boleto/retorno/cnab240/bradesco_test.rb +228 -0
  98. data/test/br_boleto/retorno/cnab240/caixa_test.rb +20 -10
  99. data/test/br_boleto/retorno/cnab240/cecred_test.rb +228 -0
  100. data/test/br_boleto/retorno/cnab240/itau_test.rb +228 -0
  101. data/test/br_boleto/retorno/cnab240/sicoob_test.rb +20 -10
  102. data/test/br_boleto/retorno/cnab240/sicredi_test.rb +228 -0
  103. data/test/br_boleto/retorno/cnab240/unicred_test.rb +228 -0
  104. data/test/br_boleto/retorno/cnab400/bradesco_test.rb +255 -0
  105. data/test/br_boleto/retorno/cnab400/itau_test.rb +96 -0
  106. data/test/br_boleto/retorno/cnab400/sicoob_test.rb +10 -5
  107. data/test/br_boleto/retorno/cnab400/sicredi_test.rb +7 -0
  108. data/test/br_boleto/retorno/cnab400/unicred.rb +255 -0
  109. data/test/br_boleto/retorno/pagamento_test.rb +7 -0
  110. data/test/factories/boleto/boleto_bradesco.rb +18 -0
  111. data/test/factories/boleto/boleto_cecred.rb +18 -0
  112. data/test/factories/boleto/boleto_itau.rb +18 -0
  113. data/test/factories/boleto/boleto_sicredi.rb +18 -0
  114. data/test/factories/boleto/boleto_unicred.rb +18 -0
  115. data/test/factories/conta/bradesco.rb +16 -0
  116. data/test/factories/conta/caixa.rb +2 -1
  117. data/test/factories/conta/cecred.rb +15 -0
  118. data/test/factories/conta/itau.rb +15 -0
  119. data/test/factories/conta/sicoob.rb +2 -1
  120. data/test/factories/conta/sicredi.rb +15 -0
  121. data/test/factories/conta/unicred.rb +15 -0
  122. data/test/factories/remessa/cnab240/bradesco.rb +9 -0
  123. data/test/factories/remessa/cnab240/cecred.rb +9 -0
  124. data/test/factories/remessa/cnab240/itau.rb +9 -0
  125. data/test/factories/remessa/cnab240/sicredi.rb +9 -0
  126. data/test/factories/remessa/cnab240/unicred.rb +9 -0
  127. data/test/factories/remessa/cnab400/bradesco.rb +8 -0
  128. data/test/factories/remessa/cnab400/itau.rb +8 -0
  129. data/test/factories/remessa/cnab400/sicredi.rb +8 -0
  130. data/test/factories/remessa/cnab400/unicred.rb +8 -0
  131. data/test/fixtures/remessa/cnab240/caixa.rem +8 -0
  132. data/test/fixtures/remessa/cnab240/cecred.rem +8 -0
  133. data/test/fixtures/remessa/cnab240/sicoob.rem +8 -8
  134. data/test/fixtures/remessa/cnab240/unicred.rem +7 -0
  135. data/test/fixtures/retorno/cnab400/bradesco.ret +8 -0
  136. data/test/fixtures/retorno/cnab400/itau.ret +54 -0
  137. metadata +138 -3
@@ -0,0 +1,235 @@
1
+ # -*- encoding: utf-8 -*-
2
+ module BrBoleto
3
+ module Remessa
4
+ module Cnab400
5
+ class Bradesco < BrBoleto::Remessa::Cnab400::Base
6
+ def conta_class
7
+ BrBoleto::Conta::Bradesco
8
+ end
9
+
10
+ validate :validation_codigo_empresa_is_required
11
+
12
+ ############################## HEADER #########################################################
13
+
14
+ # Código da remessa
15
+ # Tipo: Numérico
16
+ # Tamanho: 001
17
+ def header_posicao_002_a_002
18
+ '1'
19
+ end
20
+
21
+ # Complemento do registro
22
+ # Posição: 101 até 394
23
+ # POSIÇÂO TAM. Descrição
24
+ # 101 a 108 008 Branco
25
+ # 109 a 110 002 Identificação do sistema (MX)
26
+ # 111 a 117 007 No Seqüencial de Remessa (deve iniciar de 0000001 e incrementado de + 1 a cada NOVO Arquivo Remessa)
27
+ # 118 a 394 277 Branco
28
+ # Tamanho total: 294
29
+ def complemento_registro
30
+ info = ''.adjust_size_to(8)
31
+ info << 'MX'
32
+ info << "#{sequencial_remessa}".adjust_size_to(7, '0', :right)
33
+ info << ''.adjust_size_to(277)
34
+ info
35
+ end
36
+ ###############################################################################################
37
+
38
+ ############################## DETALHE #########################################################
39
+
40
+ # Informações Opcionais no Bradesco.
41
+ # Somente deverão ser preenchidos, caso o cliente Beneficiário esteja previamente
42
+ # cadastrado para operar com a modalidade de cobrança com débito automático
43
+ def detalhe_posicao_002_003
44
+ ''.adjust_size_to(2)
45
+ end
46
+ def detalhe_posicao_004_017
47
+ ''.adjust_size_to(14)
48
+ end
49
+
50
+ # Informações da conta <- Específico para cada banco
51
+ # Posição: 018 até 037
52
+ # Tipo: Numérico
53
+ # Tamanho: 020
54
+ def informacoes_da_conta(local)
55
+
56
+ # POSIÇÂO TAM. Descrição
57
+ # 018 a 020 003 Branco
58
+ # 021 a 021 001 Zero
59
+ # 022 a 024 003 Códigos da carteira
60
+ # 025 a 029 005 Códigos da Agência Beneficiários (sem o dígito)
61
+ # 030 a 036 007 Contas Corrente
62
+ # 037 a 037 001 Dígito da Conta
63
+ if local == :detalhe
64
+ info = ''.adjust_size_to(3)
65
+ info << '0'
66
+ info << "#{conta.carteira}".adjust_size_to(3, '0', :right)
67
+ info << "#{conta.agencia}".adjust_size_to(5, '0', :right)
68
+ info << "#{conta.conta_corrente}".adjust_size_to(7, '0', :right)
69
+ info << "#{conta.conta_corrente_dv}".adjust_size_to(1, '0', :right)
70
+ info
71
+
72
+ # POSIÇÂO TAM. Descrição
73
+ # 027 a 046 020 Codigo da Empresa
74
+ elsif local == :header
75
+ info = "#{conta.codigo_empresa}".adjust_size_to(20, '0', :right) # Será informado pelo Bradesco, quando do cadastramento da Conta beneficiário na sua Agência.
76
+ end
77
+ end
78
+
79
+ # Nosso numero do pagamento e outras informações
80
+ # Posição: 063 até 108
81
+ # POSIÇÂO TAM. Descrição
82
+ # 063 a 065 003 Códigos do Banco para Débito - preencher com Zeros (Se for débito automatico adicionar 237)
83
+ # 066 a 066 001 Identificativos de Multa
84
+ # 067 a 070 004 Percentual de Multa por Atraso
85
+ # 071 a 081 011 Identificação do Título no Banco
86
+ # 082 a 082 001 Digito de Auto Conferencia do Número Bancário
87
+ # 083 a 092 010 Desconto Bonificação por dia
88
+ # 093 a 093 001 Condição para Emissão da Papeleta de Cobrança
89
+ # 094 a 094 001 Ident. se emite Boleto Automático
90
+ # 095 a 104 010 Identificação da Operação do Banco (Preencher com Branco)
91
+ # 105 a 105 001 Indicador Rateio Crédito (Opcional)
92
+ # 106 a 106 001 Endereçamento para Aviso do Débito Automático em C.C. (opcional)
93
+ # 107 a 108 002 Branco
94
+ # Tamanho: 46
95
+ def detalhe_posicao_063_076(pagamento, sequencial)
96
+ detalhe_posicao_063_108(pagamento)
97
+ end
98
+ def detalhe_posicao_077_108(pagamento, sequencial)
99
+ ''
100
+ end
101
+ def detalhe_posicao_063_108(pagamento)
102
+ info = ''.adjust_size_to(3, '0')
103
+ if (pagamento.codigo_multa == 1 or pagamento.codigo_multa == 2)
104
+ info << '2'
105
+ info << (pagamento.percentual_multa_formatado(2)).adjust_size_to(4, '0') # tem multa: preencher com percentual da multa com 2 decimais
106
+ else
107
+ info << '0'
108
+ info << ''.adjust_size_to(4, '0', :right) # sem multa: preencher com zeros.
109
+ end
110
+ info << "#{pagamento.numero_documento}".adjust_size_to(11, '0', :right)
111
+ info << "#{pagamento.nosso_numero}".split('').last
112
+ info << "#{pagamento.valor_desconto_formatado}".adjust_size_to(10,'0', :right) # Valor do desconto bonif./dia
113
+ info << "#{conta.get_identificacao_emissao(pagamento.tipo_emissao, 400)}".adjust_size_to(1, '2') # '2' : o Cliente emitiu o Boleto e o Banco somente processa o registro
114
+ info << ' ' # Espaço em branco ou 'N' caso o boleto possui Condições de Registro para Débito Automático
115
+ info << ''.adjust_size_to(10)
116
+ info << ' ' # Somente deverá ser preenchido com a Letra “R”, se a Empresa contratou o serviço de rateio de crédito, caso não, informar Branco
117
+ info << ' ' # Espaço em branco ou '1' se possui Débito Automático (emite aviso e assume o endereço do Pagador constante do Arquivo-Remessa)
118
+ info << ''.adjust_size_to(2)
119
+ info
120
+ end
121
+
122
+
123
+ # Informações referente ao pagamento
124
+ # Posição 121 até 160
125
+ # POSIÇÂO TAM. Descrição
126
+ # 121 a 126 006 Data do Vencimento do Título
127
+ # 127 a 139 013 Valor do Título
128
+ # 140 a 142 003 Banco Encarregado da Cobrança (Preencher com zeros)
129
+ # 143 a 147 005 Agência Depositária (Preencher com zeros)
130
+ # 148 a 149 002 Espécie de Título
131
+ # 150 a 150 001 Identificação (Sempre 'N')
132
+ # 151 a 156 006 Data da emissão do Título
133
+ # 157 a 158 002 1a instrução
134
+ # 159 a 160 002 2a instrução
135
+ # Tamanho: 40
136
+ def informacoes_do_pagamento(pagamento, sequencial)
137
+ dados = ''
138
+ dados << pagamento.data_vencimento_formatado('%d%m%y')
139
+ dados << pagamento.valor_documento_formatado(13)
140
+ dados << ''.adjust_size_to(3,'0', :right)
141
+ dados << ''.adjust_size_to(5,'0', :right)
142
+ dados << "#{conta.get_especie_titulo(pagamento.especie_titulo, 400)}".adjust_size_to(2, '0', :right)
143
+ dados << 'N'
144
+ dados << pagamento.data_emissao_formatado('%d%m%y')
145
+ # 1a / 2a Instrução:
146
+ # Campo destinado para pré-determinar o protesto do Título ou a baixa por decurso de prazo, quandodo registro.
147
+ # Não havendo interesse, preencher com Zeros.
148
+ # Porém, caso a Empresa deseje se utilizar da instrução automática de protesto ou da baixa pordecurso de prazo, abaixo os procedimentos:
149
+
150
+ # Protesto/Negativação:
151
+ # - posição 157 a 158 = Indicar o código “06” - (Protestar).
152
+ # - posição 157 a 158 = Indicar o código “07” - (Negativar) (NOVO)
153
+ # - posição 159 a 160 = Indicar o número de dias a protestar (mínimo 5 dias).
154
+ # Protesto Falimentar:
155
+ # - posição 157 a 158 = Indicar o código “05” – (Protesto Falimentar)
156
+ # - posição 159 a 160 = Indicar o número de dias a protestar (mínimo 5 dias).
157
+ # Decurso de Prazo:
158
+ # - posição 157 a 158 = Indicar o código “18” – (Decurso de prazo).
159
+ # - posição 159 a 160 = Indicar o número de dias para baixa por decurso de prazo.
160
+
161
+ # Nota: A posição 157 a 158, também poderá ser utilizada para definir as seguintes mensagens, a serem impressas nos Boletos de cobrança, emitidas pelo Banco:
162
+ # 08 Não cobrar juros de mora
163
+ # 09 Não receber após o vencimento
164
+ # 20/5710 Multas de 10% após o 4o dia do Vencimento.
165
+ # 11 Não receber após o 8o dia do vencimento.
166
+ # 12 Cobrar encargos após o 5o dia do vencimento.
167
+ # 13 Cobrar encargos após o 10o dia do vencimento.
168
+ # 14 Cobrar encargos após o 15o dia do vencimento
169
+ # 15 Conceder desconto mesmo se pago após o vencimento.
170
+ dados << ''.adjust_size_to(2,'0', :right) # 1a Instrução
171
+ dados << ''.adjust_size_to(2,'0', :right) # 2a Instrução
172
+ dados
173
+
174
+ end
175
+
176
+ # Informações referente aos juros e multas do pagamento
177
+ # Posição: 161 a 218
178
+ # POSIÇÂO TAM. Descrição
179
+ # 161 a 173 013 Valor a ser cobrado por Dia de Atraso
180
+ # 174 a 179 006 Data Limite P/Concessão de Desconto
181
+ # 180 a 192 013 Valor do Desconto
182
+ # 193 a 205 013 Valor do IOF
183
+ # 206 a 218 013 Valor do Abatimento a ser concedido ou cancelado
184
+ # Tamanho: 58
185
+ def detalhe_multas_e_juros_do_pagamento(pagamento, sequencial)
186
+ detalhe = ''
187
+ detalhe << "#{pagamento.valor_mora_formatado}".adjust_size_to(13,'0', :right )
188
+ detalhe << "#{pagamento.data_desconto_formatado('%d%m%y')}".adjust_size_to(6,'0', :right )
189
+ detalhe << "#{pagamento.valor_desconto_formatado}".adjust_size_to(13,'0', :right )
190
+ detalhe << "#{pagamento.valor_iof_formatado}".adjust_size_to(13,'0', :right )
191
+ detalhe << "#{pagamento.valor_abatimento_formatado}".adjust_size_to(13,'0', :right )
192
+ detalhe
193
+ end
194
+
195
+ # Informações referente aos dados do sacado/pagador
196
+ # Posição: 219 a 394
197
+ # POSIÇÂO TAM. Descrição
198
+ # 219 a 220 002 Identificação do Tipo de Inscrição do Pagador
199
+ # 221 a 234 014 No Inscrição do Pagador
200
+ # 235 a 274 040 Nome do Pagador
201
+ # 275 a 314 040 Endereço Completo
202
+ # 315 a 326 012 1a Mensagem
203
+ # 327 a 331 005 CEP
204
+ # 332 a 334 003 Sufixo do CEP
205
+ # 335 a 394 060 Sacador/Avalista ou 2a Mensagem
206
+ # Tamanho: 176
207
+ def informacoes_do_sacado(pagamento, sequencial)
208
+ info = ''
209
+ # Tipo de Inscrição do Pagador: "01" = CPF , "02" = CNPJ , "03" = PIS/PASEP , "98" = Não tem , "99" = Outros
210
+ info << "#{pagamento.pagador.tipo_cpf_cnpj}".adjust_size_to(2, '0', :right)
211
+ info << "#{pagamento.pagador.cpf_cnpj}".adjust_size_to(14, '0', :right)
212
+ info << "#{pagamento.pagador.nome}".adjust_size_to(40)
213
+
214
+ info << "#{pagamento.pagador.endereco}".adjust_size_to(18) # Endereço Completo
215
+ info << "#{pagamento.pagador.bairro}".adjust_size_to(10) # Endereço Completo
216
+ info << "#{pagamento.pagador.cidade}".adjust_size_to(10) # Endereço Completo
217
+ info << "#{pagamento.pagador.uf}".adjust_size_to(2) # Endereço Completo
218
+ info << ''.adjust_size_to(12) # 1a Mensagem
219
+ info << "#{pagamento.pagador.cep}".adjust_size_to(8, '0', :right) # CEP + Sufixo do CEP
220
+ info << "#{pagamento.pagador.documento_avalista}".adjust_size_to(14) # Sacador/Avalista (CPF/CNPJ)
221
+ info << "#{pagamento.pagador.nome_avalista}".adjust_size_to(46) # Sacador/Avalista (Nome)
222
+ info
223
+ end
224
+ ################################################################################################
225
+
226
+ private
227
+
228
+ def validation_codigo_empresa_is_required
229
+ errors.add(:base, :column_is_required, column: conta_class.human_attribute_name(:codigo_empresa)) if conta.codigo_empresa.blank?
230
+ end
231
+
232
+ end
233
+ end
234
+ end
235
+ end
@@ -20,10 +20,10 @@ module BrBoleto
20
20
  detalhe = ''
21
21
 
22
22
  detalhe << detalhe_posicao_001_001 # Identificação do Registro Detalhe
23
- detalhe << detalhe_posicao_002_003 # Tipo de inscrição do beneficiario
23
+ detalhe << detalhe_posicao_002_003(pagamento) # Tipo de inscrição do beneficiario
24
24
  detalhe << detalhe_posicao_004_017 # CNPJ do beneficiario
25
25
  detalhe << detalhe_posicao_018_037 # Informações da conta
26
- detalhe << detalhe_posicao_038_062 # Numero de controle do participante
26
+ detalhe << detalhe_posicao_038_062(pagamento) # Numero de controle do participante
27
27
  detalhe << detalhe_posicao_063_076(pagamento, sequencial) # Nosso número com DV
28
28
  detalhe << detalhe_posicao_077_108(pagamento, sequencial) # Diferente para cada banco
29
29
  detalhe << detalhe_posicao_109_110(pagamento, sequencial) # Comando/Movimento
@@ -48,7 +48,7 @@ module BrBoleto
48
48
  # 02 = CNPJ
49
49
  # Tipo: Numero
50
50
  # Tamanho: 002
51
- def detalhe_posicao_002_003
51
+ def detalhe_posicao_002_003(pagamento)
52
52
  conta.tipo_cpf_cnpj
53
53
  end
54
54
 
@@ -70,7 +70,7 @@ module BrBoleto
70
70
  # Padrão: " " Brancos
71
71
  # Tipo: String
72
72
  # Tamanho: 25
73
- def detalhe_posicao_038_062
73
+ def detalhe_posicao_038_062(pagamento)
74
74
  ''.adjust_size_to(25)
75
75
  end
76
76
 
@@ -92,7 +92,8 @@ module BrBoleto
92
92
  # Padrão: '01' = Registro de títulos
93
93
  # Tamanho: 2
94
94
  def detalhe_posicao_109_110(pagamento, sequencial)
95
- "#{pagamento.identificacao_ocorrencia}".adjust_size_to(2, '0', :right)
95
+ code = "#{pagamento.identificacao_ocorrencia}".rjust(2, '0')
96
+ "#{conta.get_codigo_movimento_remessa(code, 400)}".adjust_size_to(2, '0')
96
97
  end
97
98
 
98
99
  # Seu número
@@ -0,0 +1,190 @@
1
+ # -*- encoding: utf-8 -*-
2
+ module BrBoleto
3
+ module Remessa
4
+ module Cnab400
5
+ class Itau < BrBoleto::Remessa::Cnab400::Base
6
+ def conta_class
7
+ BrBoleto::Conta::Itau
8
+ end
9
+
10
+ ############################## HEADER ######################################
11
+
12
+ # Código da remessa
13
+ # Tipo: Numérico
14
+ # Tamanho: 001
15
+ def header_posicao_002_a_002
16
+ '1'
17
+ end
18
+
19
+ # Complemento do registro
20
+ # POSIÇÂO TAM. Descrição
21
+ #--------------------------------
22
+ # 101 a 394 294 Brancos
23
+ # Tamanho total: 294
24
+ def complemento_registro
25
+ ''.adjust_size_to(294)
26
+ end
27
+
28
+ ############################# DETALHE #################################
29
+
30
+ # Informações da conta <- Específico para cada banco
31
+ # Posição: 018 até 037 (Detalhe)
32
+ # Posição: 027 até 046 (Header)
33
+ # Tamanho: 020
34
+ def informacoes_da_conta(local)
35
+
36
+ # POSIÇÂO:
37
+ # Detalhe | Header TAM. Descrição
38
+ # 18 a 21 27 a 30 004 Agência
39
+ # 22 a 23 31 a 32 002 Zeros
40
+ # 24 a 28 33 a 37 005 Conta Corrente
41
+ # 29 a 29 38 a 38 001 Conta Corrente DV
42
+
43
+ info = "#{conta.agencia}".adjust_size_to(4, '0', :right)
44
+ info << '00'
45
+ info << "#{conta.conta_corrente}".adjust_size_to(5, '0', :right)
46
+ info << "#{conta.conta_corrente_dv}".adjust_size_to(1, '0', :right)
47
+
48
+ if local == :detalhe
49
+ # POSIÇÂO TAM. Descrição
50
+ # -------------------------------
51
+ # 030 a 033 004 Brancos
52
+ # 034 a 037 004 Cod. Instrução
53
+
54
+ info << ''.adjust_size_to(4)
55
+ info << ''.adjust_size_to(4, "0")
56
+
57
+ elsif local == :header
58
+ # POSIÇÂO TAM. Descrição
59
+ # -------------------------------
60
+ # 039 a 046 008 Brancos
61
+
62
+ info << ''.adjust_size_to(8)
63
+ end
64
+
65
+ info
66
+ end
67
+
68
+ # Nosso numero do pagamento e outras informações
69
+ # Posição: 063 até 108
70
+ # POSIÇÂO TAM. Descrição
71
+ # -----------------------------------------------------
72
+ # 063 a 070 008 Numero Documento
73
+ # 071 a 083 013 QUANTIDADE DE MOEDA VARIÁVEL
74
+ # 084 a 086 003 Carteira
75
+ # 087 a 107 021 Uso do banco
76
+ # 108 a 108 001 Cod. Carteira
77
+ #
78
+ # Tamanho: 46
79
+ def detalhe_posicao_063_076(pagamento, sequencial)
80
+ detalhe_posicao_063_108(pagamento)
81
+ end
82
+ def detalhe_posicao_077_108(pagamento, sequencial)
83
+ ''
84
+ end
85
+ def detalhe_posicao_063_108(pagamento)
86
+ info = ''
87
+ info << "#{pagamento.numero_documento}".adjust_size_to(8, '0', :right)
88
+ info << ''.adjust_size_to(13, '0', :right) # Este campo deverá ser preenchido com zeros caso a moeda seja o Real
89
+ info << "#{conta.carteira}".adjust_size_to(3, '0', :right)
90
+ info << ''.adjust_size_to(21)
91
+ info << "#{conta.get_codigo_carteira}".adjust_size_to(1, 'I')
92
+ info
93
+ end
94
+
95
+
96
+ # Informações referente ao pagamento
97
+ # Posição 121 até 160
98
+ # POSIÇÂO TAM. Descrição
99
+ # 121 a 126 006 Data do Vencimento do Título
100
+ # 127 a 139 013 Valor do Título
101
+ # 140 a 142 003 Banco Encarregado da Cobrança
102
+ # 143 a 147 005 Agência Depositária (preencher com zeros)
103
+ # 148 a 149 002 Espécie de Título
104
+ # 150 a 150 001 Identificação (Sempre 'N')
105
+ # 151 a 156 006 Data da emissão do Título
106
+ # 157 a 158 002 1a instrução
107
+ # 159 a 160 002 2a instrução
108
+ # Tamanho: 40
109
+ def informacoes_do_pagamento(pagamento, sequencial)
110
+ dados = ''
111
+ dados << pagamento.data_vencimento_formatado('%d%m%y')
112
+ dados << pagamento.valor_documento_formatado(13)
113
+ dados << "#{conta.codigo_banco}".adjust_size_to(3,'0', :right)
114
+ dados << ''.adjust_size_to(5,'0', :right)
115
+ dados << "#{conta.get_especie_titulo(pagamento.especie_titulo, 400)}".adjust_size_to(2, '0', :right)
116
+ dados << 'N'
117
+ dados << pagamento.data_emissao_formatado('%d%m%y')
118
+
119
+ # 1a / 2a Instrução, conforme documentação (pag. 20, Nota 11):
120
+ dados << ''.adjust_size_to(2,'0', :right) # 1a Instrução
121
+ dados << ''.adjust_size_to(2,'0', :right) # 2a Instrução
122
+ dados
123
+
124
+ end
125
+
126
+ # Informações referente aos juros e multas do pagamento
127
+ # Posição: 161 a 218
128
+ # POSIÇÂO TAM. Descrição
129
+ # 161 a 173 013 Valor a ser cobrado por Dia de Atraso
130
+ # 174 a 179 006 Data Limite P/Concessão de Desconto
131
+ # 180 a 192 013 Valor do Desconto
132
+ # 193 a 205 013 Valor do IOF
133
+ # 206 a 218 013 Valor do Abatimento a ser concedido ou cancelado
134
+ # Tamanho: 58
135
+ def detalhe_multas_e_juros_do_pagamento(pagamento, sequencial)
136
+ detalhe = ''
137
+ detalhe << "#{pagamento.valor_mora_formatado}".adjust_size_to(13,'0', :right )
138
+ detalhe << "#{pagamento.data_desconto_formatado('%d%m%y')}".adjust_size_to(6,'0', :right )
139
+ detalhe << "#{pagamento.valor_desconto_formatado}".adjust_size_to(13,'0', :right )
140
+ detalhe << "#{pagamento.valor_iof_formatado}".adjust_size_to(13,'0', :right )
141
+ detalhe << "#{pagamento.valor_abatimento_formatado}".adjust_size_to(13,'0', :right )
142
+ detalhe
143
+ end
144
+
145
+ # Informações referente aos dados do sacado/pagador
146
+ # Posição: 219 a 394
147
+ # POSIÇÂO TAM. Descrição
148
+ # 219 a 220 002 Identificação do Tipo de Inscrição do Pagador
149
+ # 221 a 234 014 No Inscrição do Pagador
150
+ # 235 a 264 030 Nome do Pagador
151
+ # 265 a 274 010 Complemento Registro (Brancos)
152
+ # 275 a 314 040 Endereço Pagador
153
+ # 315 a 326 012 Bairro Pagador
154
+ # 327 a 331 005 CEP
155
+ # 332 a 334 003 Sufixo do CEP
156
+ # 335 a 349 015 Cidade Pagador
157
+ # 350 a 351 002 UF Pagador
158
+ # 352 a 381 030 Nome Sacador/Avalista
159
+
160
+ # 282 a 285 004 Complemento Registro (Brancos)
161
+ # 286 a 291 006 Data de mora
162
+ # 292 a 293 002 Quantidade de dias
163
+ # 294 a 294 001 Complemento Registro (Branco)
164
+
165
+ # Tamanho: 176
166
+ def informacoes_do_sacado(pagamento, sequencial)
167
+ info = ''
168
+ # Tipo de Inscrição do Pagador: "01" = CPF , "02" = CNPJ , "03" = PIS/PASEP , "98" = Não tem , "99" = Outros
169
+ info << "#{pagamento.pagador.tipo_cpf_cnpj}".adjust_size_to(2, '0', :right)
170
+ info << "#{pagamento.pagador.cpf_cnpj}".adjust_size_to(14, '0', :right)
171
+ info << "#{pagamento.pagador.nome}".adjust_size_to(30)
172
+ info << ''.adjust_size_to(10) # Complemento Registro (Brancos)
173
+ info << "#{pagamento.pagador.endereco}".adjust_size_to(40)
174
+ info << "#{pagamento.pagador.bairro}".adjust_size_to(12)
175
+ info << "#{pagamento.pagador.cep}".adjust_size_to(8, '0', :right) # CEP + Sufixo do CEP
176
+ info << "#{pagamento.pagador.cidade}".adjust_size_to(15)
177
+ info << "#{pagamento.pagador.uf}".adjust_size_to(2)
178
+ info << "#{pagamento.pagador.nome_avalista}".adjust_size_to(30) # Sacador/Avalista (Nome)
179
+ info << ''.adjust_size_to(4) # Complemento Registro (Brancos)
180
+
181
+ info << ''.adjust_size_to(6, '0') # Data de mora
182
+ info << '03' # Quantidade de dias
183
+ info << ''.adjust_size_to(1) # Complemento Registro (Brancos)
184
+ info
185
+ end
186
+
187
+ end
188
+ end
189
+ end
190
+ end
@@ -80,7 +80,7 @@ module BrBoleto
80
80
  dados << ''.rjust(6, '0') # 096 101 006 9(06) Numero do borderô: preencher em caso de carteira 3
81
81
  dados << ''.rjust(4, ' ') # 102 105 004 X(04) Complemento do Registro: Brancos
82
82
 
83
- dados << "#{pagamento.tipo_emissao}".adjust_size_to(1) # 106 106 001 9(01) "Tipo de Emissão: 1-Cooperativa 2-Cliente"
83
+ dados << "#{conta.get_identificacao_emissao(pagamento.tipo_emissao, 400)}".adjust_size_to(1, '2') # 106 106 001 9(01) "Tipo de Emissão: 1-Cooperativa 2-Cliente"
84
84
  dados << "#{conta.modalidade}".adjust_size_to(2, '0', :right) # 107 108 002 9(02) "Carteira/Modalidade: 01 = Simples Com Registro 02 = Simples Sem Registro 03 = Garantida Caucionada "
85
85
  dados
86
86
  end
@@ -125,7 +125,7 @@ module BrBoleto
125
125
  # 21 = Mensalidade Escolar
126
126
  # 22 = Parcela de Consórcio
127
127
  # 99 = Outros"
128
- dados << "#{pagamento.especie_titulo}".adjust_size_to(2, '0', :right)
128
+ dados << "#{conta.get_especie_titulo(pagamento.especie_titulo, 400)}".adjust_size_to(2, '0', :right)
129
129
 
130
130
  # 150 150 001 X(01) "Aceite do Título: "0" = Sem aceite "1" = Com aceite"
131
131
  dados << "#{pagamento.aceite ? '1' : '0'}".adjust_size_to(1, '0')
@@ -171,7 +171,7 @@ module BrBoleto
171
171
  detalhe << pagamento.percentual_multa_formatado(6)
172
172
 
173
173
  # 173 173 001 9(01) "Tipo Distribuição: 1 – Cooperativa 2 - Cliente"
174
- detalhe << "#{pagamento.tipo_emissao}".adjust_size_to(1)
174
+ detalhe << "#{conta.get_identificacao_emissao(pagamento.tipo_emissao, 400)}".adjust_size_to(1, '2')
175
175
 
176
176
  # 174 179 006 9(06) "Data primeiro desconto:
177
177
  # Informar a data limite a ser observada pelo cliente para o pagamento