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,141 @@
1
+ # -*- encoding: utf-8 -*-
2
+ module BrBoleto
3
+ module Remessa
4
+ module Cnab240
5
+ class Bradesco < BrBoleto::Remessa::Cnab240::Base
6
+ def conta_class
7
+ BrBoleto::Conta::Bradesco
8
+ end
9
+
10
+ ########################### HEADER ARQUIVO #############################
11
+ #
12
+ # DESCRIÇÃO TAMANHO POSIÇÃO
13
+ # ---------------------------------------------------------
14
+ # Cód. Cedente (convênio) 20 33-52
15
+ # TOTAL = 20 posições
16
+ def codigo_convenio
17
+ "#{conta.convenio}".adjust_size_to(20, '0', :right)
18
+ end
19
+
20
+ # Posição 212 a 240 do Header do Arquivo
21
+ # Para o Bradesco esse espaço deve ter 'Brancos'
22
+ # TOTAL = 29 posições
23
+ def complemento_header_arquivo
24
+ ''.rjust(29, ' ')
25
+ end
26
+
27
+ # Informação da conta
28
+ # DESCRIÇÃO TAMANHO POSIÇÃO
29
+ # ---------------------------------------------------------
30
+ # agencia 05 54 - 58
31
+ # digito Verif. agencia 01 59 - 59
32
+ # Número da Conta Corrente 12 60 - 71
33
+ # DV da Conta 01 72 - 72
34
+ # DV da Ag/Conta 01 73 - 73
35
+ #
36
+ # TOTAL = 20 posições
37
+ def informacoes_da_conta
38
+ informacoes = "#{conta.agencia}".adjust_size_to(5, '0', :right)
39
+ informacoes << "#{conta.agencia_dv}"
40
+ informacoes << "#{conta.conta_corrente}".adjust_size_to(12, '0', :right)
41
+ if (conta.conta_corrente_dv.to_s).size == 2 # Para os Bancos que se utilizam de duas posições para o Dígito Verificador do Número da Conta Corrente.
42
+ informacoes << "#{(conta.conta_corrente_dv.to_s)[0]}" # Preencher este campo com a 1a posição deste dígito.
43
+ informacoes << "#{(conta.conta_corrente_dv.to_s)[1]}" # Preencher este campo com a 2a posição deste dígito.
44
+ else
45
+ informacoes << "#{conta.conta_corrente_dv}".adjust_size_to(2) # Caso contrário ajustar o conta_corrente_dv para 2 digitos adicionando espaço em branco no final
46
+ end
47
+ informacoes.adjust_size_to(20, '0')
48
+ end
49
+
50
+ ########################### HEADER LOTE #############################
51
+ #
52
+ # DESCRIÇÃO TAMANHO POSIÇÃO
53
+ # ---------------------------------------------------------
54
+ # Cód. Cedente (convênio) 20 34-53
55
+ # TOTAL = 20 posições
56
+ def convenio_lote(lote)
57
+ codigo_convenio
58
+ end
59
+
60
+ ######################### SEGMENTO P #############################
61
+ #
62
+ # segmento_p_posicao_024_a_057
63
+ # DESCRIÇÃO TAMANHO POSIÇÃO
64
+ # ---------------------------------------------------------
65
+ # Número da Conta Corrente 12 24 - 35
66
+ # DV da Conta 01 36 - 36
67
+ # DV da Ag/Conta 01 37 - 37
68
+ # Identificação do Produto 03 38 - 40
69
+ # Zeros 05 41 - 45
70
+ # Número Doc. 11 46 - 56
71
+ # DV Nosso Número 01 57 - 57
72
+ #
73
+ # TOTAL = 34 posições
74
+ def complemento_p(pagamento)
75
+ complemento = ''
76
+ complemento << "#{conta.conta_corrente}".adjust_size_to(12, '0', :right)
77
+ if (conta.conta_corrente_dv.to_s).size == 2 # Para os Bancos que se utilizam de duas posições para o Dígito Verificador do Número da Conta Corrente.
78
+ complemento << "#{(conta.conta_corrente_dv.to_s)[0]}" # Preencher este campo com a 1a posição deste dígito.
79
+ complemento << "#{(conta.conta_corrente_dv.to_s)[1]}" # Preencher este campo com a 2a posição deste dígito.
80
+ else
81
+ complemento << "#{conta.conta_corrente_dv}".adjust_size_to(2) # Caso contrário ajustar o conta_corrente_dv para 2 digitos adicionando espaço em branco no final
82
+ end
83
+ complemento << "#{conta.carteira}".adjust_size_to(3, '0', :right)
84
+ complemento << ''.rjust(5, '0')
85
+ complemento << "#{pagamento.numero_documento}".adjust_size_to(11, '0', :right)
86
+ complemento << "#{pagamento.nosso_numero}".split('').last
87
+ complemento.adjust_size_to(34, '0')
88
+ end
89
+
90
+ # segmento_p_posicao_059_a_059
91
+ # POSIÇÃO TAMANHO DESCRIÇÃO
92
+ # -------------------------------------------------------------------
93
+ # 59 - 59 01 Forma de Cadastramento do Título no Banco
94
+ #
95
+ # TOTAL = 1 posição
96
+ def segmento_p_posicao_059_a_059(pagamento)
97
+ '1'
98
+ end
99
+
100
+ # segmento_p_posicao_063_a_077
101
+ # DESCRIÇÃO TAMANHO POSIÇÃO
102
+ # ---------------------------------------------------------
103
+ # Número Doc. 10 63 - 72
104
+ # Zeros 05 73 - 77
105
+ # TOTAL = 15 posições
106
+ def segmento_p_numero_do_documento(pagamento)
107
+ segmento = ''
108
+ segmento << "#{pagamento.numero_documento}".adjust_size_to(15, '0', :right)
109
+ segmento
110
+ end
111
+
112
+ ######################### TRAILER LOTE #############################
113
+ #
114
+ # trailer_lote_posicao_024_a_240(lote, nr_lote)
115
+ # DESCRIÇÃO TAMANHO POSIÇÃO
116
+ # ----------------------------------------------------------------
117
+ # Qtd. Títulos em Cobrança 006 024 - 029
118
+ # Val. Tot. Títulos em Carteiras 017 030 - 046
119
+ # Qtd. Títulos em Cobrança 006 047 - 052
120
+ # Val. Tot. Títulos em Carteiras 017 053 - 069
121
+ # Qtd. Títulos em Cobrança 006 070 - 075
122
+ # Qtd. Títulos em Carteiras 017 076 - 092
123
+ # Qtd. de Títulos em Cobrança 006 093 - 098
124
+ # Val. Tot. dos Títulos em Carteiras 017 099 - 115
125
+ # N. Aviso de Lançamento 008 116 - 123
126
+ # Uso FEBRABAN 117 124 - 240
127
+ #
128
+ # TOTAL = 217 posições
129
+ #
130
+ def complemento_trailer_lote(lote, nr_lote)
131
+ complemento = ''
132
+ complemento << ''.rjust(92, '0') # VALORES UTILIZADOS APENAS PARA ARQUIVO DE RETORNO
133
+ complemento << ''.rjust(8, '0') # Número do aviso de lançamento do crédito referente a(os) título(s) de cobrança, que poderá ser utilizado no extrato de conta corrente.
134
+ complemento << ''.rjust(117, ' ') # USO EXCLUSIVO FEBRABAN
135
+ complemento
136
+ end
137
+
138
+ end
139
+ end
140
+ end
141
+ end
@@ -84,7 +84,7 @@ module BrBoleto
84
84
  def complemento_p(pagamento)
85
85
  complemento = "#{conta.convenio}".adjust_size_to(6, '0', :right)
86
86
  complemento << ''.rjust(11, '0')
87
- complemento << "#{conta.carteira}".adjust_size_to(conta.valid_carteira_length, '1', :right)
87
+ complemento << "#{conta.carteira}".adjust_size_to(conta.valid_carteira_length, '2', :right)
88
88
  complemento << pagamento.nosso_numero.adjust_size_to(15, '0', :right)
89
89
  complemento
90
90
  end
@@ -121,6 +121,13 @@ module BrBoleto
121
121
  def segmento_p_posicao_196_a_220(pagamento)
122
122
  "#{pagamento.numero_documento}".adjust_size_to(25, '0', :right)
123
123
  end
124
+
125
+ # Segmento Q Cód. Bco. Corresp. na Compensação
126
+ # Deve ser 3 espaços em branco
127
+ # 3 posições
128
+ def segmento_q_posicao_210_a_212
129
+ ''.rjust(3, ' ')
130
+ end
124
131
 
125
132
  def segmento_s_posicao_019_a_020_tipo_impressao_1_ou_2(pagamento)
126
133
  '00'
@@ -0,0 +1,169 @@
1
+ # -*- encoding: utf-8 -*-
2
+ module BrBoleto
3
+ module Remessa
4
+ module Cnab240
5
+ class Cecred < BrBoleto::Remessa::Cnab240::Base
6
+ def conta_class
7
+ BrBoleto::Conta::Cecred
8
+ end
9
+
10
+ ########################### HEADER ARQUIVO #############################
11
+ #
12
+ # DESCRIÇÃO TAMANHO POSIÇÃO
13
+ # ---------------------------------------------------------
14
+ # Cód. Cedente (convênio) 20 33-52
15
+ # TOTAL = 20 posições
16
+ def codigo_convenio
17
+ "#{conta.convenio}".adjust_size_to(20)
18
+ end
19
+
20
+ # Informação da conta
21
+ # DESCRIÇÃO TAMANHO POSIÇÃO
22
+ # ---------------------------------------------------------
23
+ # agencia 05 53 - 57
24
+ # digito Verif. agencia 01 58 - 58
25
+ # Número da Conta Corrente 12 59 - 70
26
+ # DV da Conta 01 71 - 71
27
+ # DV da Ag/Conta 01 72 - 72
28
+ #
29
+ # TOTAL = 20 posições
30
+ def informacoes_da_conta
31
+ informacoes = "#{conta.agencia}".adjust_size_to(5, '0', :right)
32
+ informacoes << "#{conta.agencia_dv}"
33
+ informacoes << "#{conta.conta_corrente}".adjust_size_to(12, '0', :right)
34
+ informacoes << "#{conta.conta_corrente_dv}".adjust_size_to(2)
35
+ informacoes
36
+ end
37
+
38
+ # Espaço reservado para o Banco
39
+ # TOTAL = 20 posições
40
+ def header_arquivo_posicao_172_a_191
41
+ ''.rjust(20, ' ')
42
+ end
43
+
44
+ # Espaço reservado para a Empresa
45
+ # TOTAL = 20 posições
46
+ def header_arquivo_posicao_192_a_211
47
+ ''.rjust(20, ' ')
48
+ end
49
+
50
+ # Para o Cecred esse espaço deve ter 'Brancos'
51
+ # TOTAL = 29 posições
52
+ def complemento_header_arquivo
53
+ ''.rjust(29, ' ')
54
+ end
55
+
56
+ ########################### HEADER LOTE #############################
57
+
58
+ # Forma de Lançamento
59
+ # Para o Cecred esse espaço deve ter 'Brancos'
60
+ def header_lote_posicao_012_a_013
61
+ ''.adjust_size_to(2)
62
+ end
63
+
64
+ # Convenio -> Código do Cedente no Banco
65
+ # Posicao 034 a 053
66
+ # TOTAL = 20 posições
67
+ def convenio_lote(lote)
68
+ codigo_convenio
69
+ end
70
+
71
+ ######################### SEGMENTO P #############################
72
+ #
73
+ # segmento_p_posicao_024_a_057
74
+ # DESCRIÇÃO TAMANHO POSIÇÃO
75
+ # -----------------------------------------------------------------------
76
+ # Número da Conta Corrente 12 24 - 35
77
+ # DV da Conta 01 36 - 36
78
+ # DV da Ag/Conta 01 37 - 37
79
+ # Identificação do Título na Cooperativa 20 38 - 57
80
+ #
81
+ # TOTAL = 34 posições
82
+ def complemento_p(pagamento)
83
+ complemento = ''
84
+ complemento << "#{conta.conta_corrente}".adjust_size_to(12, '0', :right)
85
+ complemento << "#{conta.conta_corrente_dv}".adjust_size_to(2)
86
+ complemento << "#{pagamento.nosso_numero}".adjust_size_to(20)
87
+ complemento
88
+ end
89
+
90
+ # Forma de Cadastr. do Título no Banco
91
+ def segmento_p_posicao_059_a_059(pagamento)
92
+ '1'
93
+ end
94
+
95
+ # Tipo de Documento
96
+ def segmento_p_posicao_060_a_060
97
+ '1'
98
+ end
99
+
100
+ # Número do Documento de Cobrança
101
+ # Posição 063 a 077
102
+ # TOTAL = 15 posições
103
+ def segmento_p_numero_do_documento(pagamento)
104
+ segmento = "#{pagamento.numero_documento}".adjust_size_to(15, '0', :right)
105
+ end
106
+
107
+ # Código para Baixa/Devolução ('1' = Baixar / Devolver , '2' = Não Baixar / Não Devolver)
108
+ def segmento_p_posicao_224_a_224
109
+ '2'
110
+ end
111
+
112
+ # Número de Dias para Baixa/Devolução
113
+ # Para o Cecred esse espaço deve ter 'Brancos'
114
+ # TOTAL = 3 posoções
115
+ def segmento_p_posicao_225_a_227
116
+ ''.adjust_size_to(3)
117
+ end
118
+
119
+ ######################### SEGMENTO R #############################
120
+ #
121
+ # Tipo de Inscrição
122
+ # TOTAL = 1 posição
123
+ def segmento_q_posicao_154_a_154(pagamento)
124
+ '0'
125
+ end
126
+
127
+ # CNPF/CNPJ Avalista
128
+ # Para o Cecred esse espaço deve ter 'Zeros'
129
+ # # TOTAL = 15 posições
130
+ def segmento_q_posicao_155_a_169(pagamento)
131
+ ''.adjust_size_to(15, '0', :right)
132
+ end
133
+
134
+ # Nome do avalista
135
+ # Para o Cecred esse espaço deve ter 'Brancos'
136
+ # # TOTAL = 40 posições
137
+ def segmento_q_posicao_170_a_209(pagamento)
138
+ ''.adjust_size_to(40)
139
+ end
140
+
141
+ ######################### TRAILER LOTE #############################
142
+ # trailer_lote_posicao_024_a_240(lote, nr_lote)
143
+ # DESCRIÇÃO TAMANHO POSIÇÃO
144
+ # ----------------------------------------------------------------
145
+ # Qtd. Títulos em Cobrança 006 024 - 029
146
+ # Val. Tot. Títulos em Carteiras 017 030 - 046
147
+ # Qtd. Títulos em Cobrança 006 047 - 052
148
+ # Val. Tot. Títulos em Carteiras 017 053 - 069
149
+ # Qtd. Títulos em Cobrança 006 070 - 075
150
+ # Qtd. Títulos em Carteiras 017 076 - 092
151
+ # Qtd. de Títulos em Cobrança 006 093 - 098
152
+ # Val. Tot. dos Títulos em Carteiras 017 099 - 115
153
+ # N. Aviso de Lançamento 008 116 - 123
154
+ # Uso FEBRABAN 117 124 - 240
155
+ #
156
+ # TOTAL = 217 posições
157
+ #
158
+ def complemento_trailer_lote(lote, nr_lote)
159
+ complemento = ''
160
+ complemento << ''.rjust(92, '0') # VALORES UTILIZADOS APENAS PARA ARQUIVO DE RETORNO
161
+ complemento << ''.rjust(8, '0') # Número do aviso de lançamento do crédito referente a(os) título(s) de cobrança, que poderá ser utilizado no extrato de conta corrente.
162
+ complemento << ''.rjust(117, ' ') # USO EXCLUSIVO FEBRABAN
163
+ complemento
164
+ end
165
+
166
+ end
167
+ end
168
+ end
169
+ end
@@ -3,6 +3,7 @@ module BrBoleto
3
3
  module Cnab240
4
4
  module Helper
5
5
  module SegmentoP
6
+
6
7
  # Monta o registro segmento P do arquivo
7
8
  #
8
9
  # @param pagamento [BrBoleto::Remessa::Pagamento]
@@ -24,7 +25,7 @@ module BrBoleto
24
25
  segmento_p << segmento_p_posicao_009_a_013(sequencial) # num. sequencial do registro no lote 5
25
26
  segmento_p << segmento_p_posicao_014_a_014 # cod. segmento 1
26
27
  segmento_p << segmento_p_posicao_015_a_015 # uso exclusivo 1
27
- segmento_p << segmento_p_posicao_016_a_017 # cod. movimento remessa 2
28
+ segmento_p << segmento_p_posicao_016_a_017(pagamento) # cod. movimento remessa 2
28
29
  segmento_p << segmento_p_posicao_018_a_022 # agencia 5
29
30
  segmento_p << segmento_p_posicao_023_a_023 # dv agencia 1
30
31
  segmento_p << segmento_p_posicao_024_a_057(pagamento) # informacoes da conta 34
@@ -50,11 +51,11 @@ module BrBoleto
50
51
  segmento_p << segmento_p_posicao_166_a_180(pagamento) # valor IOF 15
51
52
  segmento_p << segmento_p_posicao_181_a_195(pagamento) # valor abatimento 15
52
53
  segmento_p << segmento_p_posicao_196_a_220(pagamento) # identificacao titulo empresa 25 *
53
- segmento_p << segmento_p_posicao_221_a_221 # cod. para protesto 1 *
54
- segmento_p << segmento_p_posicao_222_a_223 # dias para protesto 2 *
54
+ segmento_p << segmento_p_posicao_221_a_221(pagamento) # cod. para protesto 1 *
55
+ segmento_p << segmento_p_posicao_222_a_223(pagamento) # dias para protesto 2 *
55
56
  segmento_p << segmento_p_posicao_224_a_224 # cod. para baixa 1 *
56
57
  segmento_p << segmento_p_posicao_225_a_227 # dias para baixa 2 *
57
- segmento_p << segmento_p_posicao_228_a_229 # cod. da moeda 2
58
+ segmento_p << segmento_p_posicao_228_a_229(pagamento) # cod. da moeda 2
58
59
  segmento_p << segmento_p_posicao_230_a_239 # uso exclusivo 10
59
60
  segmento_p << segmento_p_posicao_240_a_240 # uso exclusivo 1
60
61
  segmento_p.upcase
@@ -108,8 +109,9 @@ module BrBoleto
108
109
  # cod. movimento remessa -> Padrão 01 = Entrada de Titulos
109
110
  # 2 posições
110
111
  #
111
- def segmento_p_posicao_016_a_017
112
- '01'
112
+ def segmento_p_posicao_016_a_017(pagamento)
113
+ code = "#{pagamento.identificacao_ocorrencia}".rjust(2, '0')
114
+ "#{conta.get_codigo_movimento_remessa(code, 240)}".adjust_size_to(2, '0')
113
115
  end
114
116
 
115
117
  # Agência Mantenedora da Conta
@@ -138,11 +140,11 @@ module BrBoleto
138
140
  complemento_p(pagamento)
139
141
  end
140
142
 
141
- # Código da carteira
143
+ # Código da carteira ou tipo de cobrança
142
144
  # 1 posição
143
145
  #
144
146
  def segmento_p_posicao_058_a_058
145
- conta.carteira
147
+ "#{conta.get_tipo_cobranca(conta.codigo_carteira, 240)}".adjust_size_to(1, '1')
146
148
  end
147
149
 
148
150
  # Forma de Cadastr. do Título no Banco
@@ -163,14 +165,14 @@ module BrBoleto
163
165
  # 1 posição
164
166
  #
165
167
  def segmento_p_posicao_061_a_061(pagamento)
166
- pagamento.emissao_boleto
168
+ "#{conta.get_identificacao_emissao(pagamento.emissao_boleto, 240)}".adjust_size_to(1, '2')
167
169
  end
168
170
 
169
171
  # Identificação da Distribuição
170
172
  # 1 posição
171
173
  #
172
174
  def segmento_p_posicao_062_a_062(pagamento)
173
- pagamento.distribuicao_boleto
175
+ "#{conta.get_distribuicao_boleto(pagamento.distribuicao_boleto)}".adjust_size_to(1, '2')
174
176
  end
175
177
 
176
178
  # Número do Documento de Cobrança
@@ -213,7 +215,7 @@ module BrBoleto
213
215
  # 2 posições
214
216
  #
215
217
  def segmento_p_posicao_107_a_108(pagamento)
216
- "#{pagamento.especie_titulo}".adjust_size_to(2, '0', :right)
218
+ "#{conta.get_especie_titulo(pagamento.especie_titulo, 240)}".adjust_size_to(2, '0', :right)
217
219
  end
218
220
 
219
221
  # Identific. de Título Aceito/Não Aceito (A ou N)
@@ -235,8 +237,7 @@ module BrBoleto
235
237
  # Padrão FEBRABAN = (1 = Valor fixo e 2 = Percentual, 3 = isento)
236
238
  #
237
239
  def segmento_p_posicao_118_a_118(pagamento)
238
- cod = "#{pagamento.codigo_juros}".adjust_size_to(1, '3')
239
- cod.in?(['1','2','3']) ? cod : '3'
240
+ "#{conta.get_codigo_juros(pagamento.codigo_juros)}".adjust_size_to(1, '3')
240
241
  end
241
242
 
242
243
  # Data do Juros de Mora
@@ -257,7 +258,7 @@ module BrBoleto
257
258
  # 1 posição
258
259
  #
259
260
  def segmento_p_posicao_142_a_142(pagamento)
260
- "#{pagamento.cod_desconto}".adjust_size_to(1)
261
+ "#{conta.get_codigo_desconto(pagamento.cod_desconto)}".adjust_size_to(1, '0')
261
262
  end
262
263
 
263
264
  # Data do Desconto 1
@@ -298,15 +299,21 @@ module BrBoleto
298
299
  # Código para Protesto
299
300
  # 1 posição
300
301
  #
301
- def segmento_p_posicao_221_a_221
302
- '1'
302
+ def segmento_p_posicao_221_a_221(pagamento)
303
+ "#{conta.get_codigo_protesto(pagamento.codigo_protesto)}".adjust_size_to(1, '1')
303
304
  end
304
305
 
305
- # Número de Dias para Protesto
306
+ # Número de Dias para Protesto
307
+ # Para os códigos '3' = Não Protestar e '8' = Negativação sem Protesto,
308
+ # setar dias de protesto '00', caso contrário setar o valor de dias_protesto
306
309
  # 2 posições
307
310
  #
308
- def segmento_p_posicao_222_a_223
309
- '00'
311
+ def segmento_p_posicao_222_a_223(pagamento)
312
+ if pagamento.codigo_protesto.to_i.in?([3, 8])
313
+ '00'
314
+ else
315
+ "#{pagamento.dias_protesto}".adjust_size_to(2, '0')
316
+ end
310
317
  end
311
318
 
312
319
  # Código para Baixa/Devolução
@@ -326,8 +333,9 @@ module BrBoleto
326
333
  # Código da Moeda (09 para real)
327
334
  # 2 posições
328
335
  #
329
- def segmento_p_posicao_228_a_229
330
- '09'
336
+ def segmento_p_posicao_228_a_229(pagamento)
337
+ moeda = "#{pagamento.codigo_moeda}".rjust(2, '0')
338
+ "#{conta.get_codigo_moeda(moeda, 240)}".adjust_size_to(2, '0')
331
339
  end
332
340
 
333
341
  # Nº do Contrato da Operação de Crédito (Uso do banco)
@@ -23,7 +23,7 @@ module BrBoleto
23
23
  segmento_q << segmento_q_posicao_009_a_013(sequencial) # num. sequencial do registro no lote 5
24
24
  segmento_q << segmento_q_posicao_014_a_014 # cod. segmento 1
25
25
  segmento_q << segmento_q_posicao_015_a_015 # uso exclusivo 1
26
- segmento_q << segmento_q_posicao_016_a_017 # cod. movimento remessa 2
26
+ segmento_q << segmento_q_posicao_016_a_017(pagamento) # cod. movimento remessa 2
27
27
  segmento_q << segmento_q_posicao_018_a_018(pagamento) # tipo insc. sacado 1
28
28
  segmento_q << segmento_q_posicao_019_a_033(pagamento) # documento sacado 14
29
29
  segmento_q << segmento_q_posicao_034_a_073(pagamento) # nome cliente 40
@@ -90,8 +90,9 @@ module BrBoleto
90
90
  # Código de Movimento Remessa
91
91
  # 2 posições
92
92
  #
93
- def segmento_q_posicao_016_a_017
94
- '01'
93
+ def segmento_q_posicao_016_a_017(pagamento)
94
+ code = "#{pagamento.identificacao_ocorrencia}".rjust(2, '0')
95
+ "#{conta.get_codigo_movimento_remessa(code, 240)}".adjust_size_to(2, '0')
95
96
  end
96
97
 
97
98
  # Tipo de Inscrição (1=CPF 2=CNPJ)
@@ -22,7 +22,7 @@ module BrBoleto
22
22
  segmento_r << segmento_r_posicao_009_a_013(sequencial)
23
23
  segmento_r << segmento_r_posicao_014_a_014
24
24
  segmento_r << segmento_r_posicao_015_a_015
25
- segmento_r << segmento_r_posicao_016_a_017
25
+ segmento_r << segmento_r_posicao_016_a_017(pagamento)
26
26
  segmento_r << segmento_r_posicao_018_a_018(pagamento)
27
27
  segmento_r << segmento_r_posicao_019_a_026(pagamento)
28
28
  segmento_r << segmento_r_posicao_027_a_041(pagamento)
@@ -96,8 +96,9 @@ module BrBoleto
96
96
  # Código de Movimento Remessa - 01 = Entrada de Titulos
97
97
  # 2 posições
98
98
  #
99
- def segmento_r_posicao_016_a_017
100
- '01'
99
+ def segmento_r_posicao_016_a_017(pagamento)
100
+ code = "#{pagamento.identificacao_ocorrencia}".rjust(2, '0')
101
+ "#{conta.get_codigo_movimento_remessa(code, 240)}".adjust_size_to(2, '0')
101
102
  end
102
103
 
103
104
  # Código do desconto 2
@@ -147,8 +148,7 @@ module BrBoleto
147
148
  # Padrão FEBRABAN = (1 = Valor fixo e 2 = Percentual, 3 = isento)
148
149
  #
149
150
  def segmento_r_posicao_066_a_066(pagamento)
150
- cod = "#{pagamento.codigo_multa}".adjust_size_to(1, '3')
151
- cod.in?(['1','2','3']) ? cod : '3'
151
+ "#{conta.get_codigo_multa(pagamento.codigo_multa)}".adjust_size_to(1, '3')
152
152
  end
153
153
 
154
154
  # Data da multa
@@ -22,7 +22,7 @@ module BrBoleto
22
22
  segmento_s << segmento_s_posicao_009_a_013(sequencial)
23
23
  segmento_s << segmento_s_posicao_014_a_014
24
24
  segmento_s << segmento_s_posicao_015_a_015
25
- segmento_s << segmento_s_posicao_016_a_017
25
+ segmento_s << segmento_s_posicao_016_a_017(pagamento)
26
26
  segmento_s << segmento_s_posicao_018_a_018(pagamento)
27
27
  if pagamento.tipo_impressao == '3'
28
28
  segmento_s << segmento_s_tipo_impressao_3(pagamento)
@@ -80,8 +80,9 @@ module BrBoleto
80
80
  # Código de Movimento Remessa - 01 = Entrada de Titulos
81
81
  # 2 posições
82
82
  #
83
- def segmento_s_posicao_016_a_017
84
- '01'
83
+ def segmento_s_posicao_016_a_017(pagamento)
84
+ code = "#{pagamento.identificacao_ocorrencia}".rjust(2, '0')
85
+ "#{conta.get_codigo_movimento_remessa(code, 240)}".adjust_size_to(2, '0')
85
86
  end
86
87
 
87
88
  # Tipo de impressão