brcobranca 9.2.4 → 10.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (193) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +43 -9
  3. data/HISTORY.md +71 -0
  4. data/README.md +47 -54
  5. data/Rakefile +4 -4
  6. data/lib/brcobranca/arquivos/logos/ailos.eps +412 -0
  7. data/lib/brcobranca/arquivos/logos/ailos_carne.eps +412 -0
  8. data/lib/brcobranca/arquivos/logos/safra.eps +0 -0
  9. data/lib/brcobranca/arquivos/logos/safra_carne.eps +0 -0
  10. data/lib/brcobranca/boleto/{cecred.rb → ailos.rb} +7 -5
  11. data/lib/brcobranca/boleto/banco_brasil.rb +9 -5
  12. data/lib/brcobranca/boleto/banco_brasilia.rb +5 -5
  13. data/lib/brcobranca/boleto/banco_nordeste.rb +4 -3
  14. data/lib/brcobranca/boleto/banestes.rb +4 -3
  15. data/lib/brcobranca/boleto/banrisul.rb +4 -3
  16. data/lib/brcobranca/boleto/base.rb +12 -7
  17. data/lib/brcobranca/boleto/bradesco.rb +4 -3
  18. data/lib/brcobranca/boleto/caixa.rb +10 -8
  19. data/lib/brcobranca/boleto/citibank.rb +9 -8
  20. data/lib/brcobranca/boleto/credisis.rb +6 -4
  21. data/lib/brcobranca/boleto/hsbc.rb +8 -6
  22. data/lib/brcobranca/boleto/itau.rb +5 -5
  23. data/lib/brcobranca/boleto/safra.rb +4 -4
  24. data/lib/brcobranca/boleto/santander.rb +4 -2
  25. data/lib/brcobranca/boleto/sicoob.rb +4 -3
  26. data/lib/brcobranca/boleto/sicredi.rb +6 -3
  27. data/lib/brcobranca/boleto/template/base.rb +2 -3
  28. data/lib/brcobranca/boleto/template/rghost.rb +18 -13
  29. data/lib/brcobranca/boleto/template/rghost_carne.rb +18 -12
  30. data/lib/brcobranca/boleto/unicred.rb +61 -103
  31. data/lib/brcobranca/calculo.rb +14 -9
  32. data/lib/brcobranca/calculo_data.rb +6 -5
  33. data/lib/brcobranca/currency.rb +10 -10
  34. data/lib/brcobranca/formatacao.rb +2 -1
  35. data/lib/brcobranca/formatacao_string.rb +7 -6
  36. data/lib/brcobranca/limpeza.rb +3 -3
  37. data/lib/brcobranca/remessa/base.rb +7 -10
  38. data/lib/brcobranca/remessa/cnab240/{cecred.rb → ailos.rb} +18 -15
  39. data/lib/brcobranca/remessa/cnab240/banco_brasil.rb +14 -11
  40. data/lib/brcobranca/remessa/cnab240/base.rb +56 -39
  41. data/lib/brcobranca/remessa/cnab240/base_correspondente.rb +25 -17
  42. data/lib/brcobranca/remessa/cnab240/caixa.rb +21 -13
  43. data/lib/brcobranca/remessa/cnab240/sicoob.rb +33 -30
  44. data/lib/brcobranca/remessa/cnab240/sicoob_banco_brasil.rb +14 -7
  45. data/lib/brcobranca/remessa/cnab240/sicredi.rb +28 -22
  46. data/lib/brcobranca/remessa/cnab240/unicred.rb +2 -1
  47. data/lib/brcobranca/remessa/cnab400/banco_brasil.rb +9 -9
  48. data/lib/brcobranca/remessa/cnab400/banco_brasilia.rb +29 -28
  49. data/lib/brcobranca/remessa/cnab400/banco_nordeste.rb +11 -10
  50. data/lib/brcobranca/remessa/cnab400/banrisul.rb +13 -10
  51. data/lib/brcobranca/remessa/cnab400/base.rb +22 -9
  52. data/lib/brcobranca/remessa/cnab400/bradesco.rb +30 -5
  53. data/lib/brcobranca/remessa/cnab400/citibank.rb +6 -5
  54. data/lib/brcobranca/remessa/cnab400/credisis.rb +7 -5
  55. data/lib/brcobranca/remessa/cnab400/itau.rb +9 -6
  56. data/lib/brcobranca/remessa/cnab400/santander.rb +17 -15
  57. data/lib/brcobranca/remessa/cnab400/sicoob.rb +8 -11
  58. data/lib/brcobranca/remessa/cnab400/unicred.rb +185 -69
  59. data/lib/brcobranca/remessa/pagamento.rb +43 -11
  60. data/lib/brcobranca/retorno/base.rb +5 -43
  61. data/lib/brcobranca/retorno/cnab240/{cecred.rb → ailos.rb} +12 -10
  62. data/lib/brcobranca/retorno/cnab240/base.rb +8 -9
  63. data/lib/brcobranca/retorno/cnab240/caixa.rb +4 -5
  64. data/lib/brcobranca/retorno/cnab240/santander.rb +12 -8
  65. data/lib/brcobranca/retorno/cnab240/sicoob.rb +11 -9
  66. data/lib/brcobranca/retorno/cnab240/sicredi.rb +12 -9
  67. data/lib/brcobranca/retorno/cnab400/banco_brasil.rb +3 -3
  68. data/lib/brcobranca/retorno/cnab400/banco_brasilia.rb +2 -1
  69. data/lib/brcobranca/retorno/cnab400/banco_nordeste.rb +2 -1
  70. data/lib/brcobranca/retorno/cnab400/banrisul.rb +1 -1
  71. data/lib/brcobranca/retorno/cnab400/base.rb +13 -12
  72. data/lib/brcobranca/retorno/cnab400/bradesco.rb +4 -4
  73. data/lib/brcobranca/retorno/cnab400/credisis.rb +2 -1
  74. data/lib/brcobranca/retorno/cnab400/itau.rb +6 -5
  75. data/lib/brcobranca/retorno/cnab400/santander.rb +8 -7
  76. data/lib/brcobranca/retorno/cnab400/unicred.rb +63 -58
  77. data/lib/brcobranca/retorno/retorno_cbr643.rb +1 -2
  78. data/lib/brcobranca/retorno/retorno_cnab240.rb +11 -9
  79. data/lib/brcobranca/retorno/retorno_cnab400.rb +6 -5
  80. data/lib/brcobranca/util/date.rb +2 -1
  81. data/lib/brcobranca/util/empresa.rb +2 -1
  82. data/lib/brcobranca/util/errors.rb +31 -31
  83. data/lib/brcobranca/validations.rb +127 -151
  84. data/lib/brcobranca/version.rb +2 -3
  85. data/lib/brcobranca.rb +5 -5
  86. data/spec/brcobranca/base_spec.rb +20 -11
  87. data/spec/brcobranca/boleto/{cecred_spec.rb → ailos_spec.rb} +13 -12
  88. data/spec/brcobranca/boleto/banco_brasil_spec.rb +14 -12
  89. data/spec/brcobranca/boleto/banco_brasilia_spec.rb +11 -10
  90. data/spec/brcobranca/boleto/banco_nordeste_spec.rb +2 -3
  91. data/spec/brcobranca/boleto/banestes_spec.rb +10 -11
  92. data/spec/brcobranca/boleto/banrisul_spec.rb +10 -12
  93. data/spec/brcobranca/boleto/bradesco_spec.rb +36 -33
  94. data/spec/brcobranca/boleto/caixa_spec.rb +11 -12
  95. data/spec/brcobranca/boleto/citibank_spec.rb +10 -11
  96. data/spec/brcobranca/boleto/credisis_spec.rb +18 -17
  97. data/spec/brcobranca/boleto/hsbc_spec.rb +9 -10
  98. data/spec/brcobranca/boleto/itau_spec.rb +11 -12
  99. data/spec/brcobranca/boleto/safra_spec.rb +10 -11
  100. data/spec/brcobranca/boleto/santander_spec.rb +9 -10
  101. data/spec/brcobranca/boleto/sicoob_spec.rb +10 -11
  102. data/spec/brcobranca/boleto/sicredi_spec.rb +14 -10
  103. data/spec/brcobranca/boleto/unicred_spec.rb +28 -38
  104. data/spec/brcobranca/boletos_em_lote_spec.rb +7 -7
  105. data/spec/brcobranca/calculo_data_spec.rb +2 -2
  106. data/spec/brcobranca/calculo_spec.rb +13 -11
  107. data/spec/brcobranca/currency_spec.rb +26 -26
  108. data/spec/brcobranca/formatacao_spec.rb +2 -2
  109. data/spec/brcobranca/formatacao_string_spec.rb +10 -4
  110. data/spec/brcobranca/limpeza_spec.rb +2 -2
  111. data/spec/brcobranca/remessa/base_spec.rb +1 -2
  112. data/spec/brcobranca/remessa/cnab240/{cecred_spec.rb → ailos_spec.rb} +48 -47
  113. data/spec/brcobranca/remessa/cnab240/banco_brasil_spec.rb +18 -13
  114. data/spec/brcobranca/remessa/cnab240/base_spec.rb +33 -10
  115. data/spec/brcobranca/remessa/cnab240/caixa_spec.rb +19 -17
  116. data/spec/brcobranca/remessa/cnab240/sicoob_banco_brasil_spec.rb +12 -8
  117. data/spec/brcobranca/remessa/cnab240/sicoob_spec.rb +28 -26
  118. data/spec/brcobranca/remessa/cnab240/sicredi_spec.rb +12 -10
  119. data/spec/brcobranca/remessa/cnab240/unicred_spec.rb +11 -9
  120. data/spec/brcobranca/remessa/cnab400/banco_brasil_spec.rb +6 -3
  121. data/spec/brcobranca/remessa/cnab400/banco_brasilia_spec.rb +24 -19
  122. data/spec/brcobranca/remessa/cnab400/banco_nordeste_spec.rb +19 -14
  123. data/spec/brcobranca/remessa/cnab400/banrisul_spec.rb +17 -15
  124. data/spec/brcobranca/remessa/cnab400/base_spec.rb +23 -8
  125. data/spec/brcobranca/remessa/cnab400/bradesco_spec.rb +19 -17
  126. data/spec/brcobranca/remessa/cnab400/citibank_spec.rb +14 -12
  127. data/spec/brcobranca/remessa/cnab400/credisis_spec.rb +21 -19
  128. data/spec/brcobranca/remessa/cnab400/itau_spec.rb +18 -16
  129. data/spec/brcobranca/remessa/cnab400/santander_spec.rb +24 -22
  130. data/spec/brcobranca/remessa/cnab400/sicoob_spec.rb +20 -20
  131. data/spec/brcobranca/remessa/cnab400/unicred_spec.rb +167 -166
  132. data/spec/brcobranca/remessa/pagamento_spec.rb +16 -15
  133. data/spec/brcobranca/retorno/cnab240/base_spec.rb +10 -9
  134. data/spec/brcobranca/retorno/cnab240/cecred_spec.rb +4 -2
  135. data/spec/brcobranca/retorno/cnab240/santander_spec.rb +2 -0
  136. data/spec/brcobranca/retorno/cnab240/sicoob_spec.rb +2 -0
  137. data/spec/brcobranca/retorno/cnab240/sicredi_spec.rb +2 -0
  138. data/spec/brcobranca/retorno/cnab400/banco_brasilia_spec.rb +2 -1
  139. data/spec/brcobranca/retorno/cnab400/banco_nordeste_spec.rb +2 -1
  140. data/spec/brcobranca/retorno/cnab400/banrisul_spec.rb +2 -1
  141. data/spec/brcobranca/retorno/cnab400/base_spec.rb +25 -25
  142. data/spec/brcobranca/retorno/cnab400/bradesco_spec.rb +2 -1
  143. data/spec/brcobranca/retorno/cnab400/credisis_spec.rb +5 -4
  144. data/spec/brcobranca/retorno/cnab400/itau_spec.rb +4 -2
  145. data/spec/brcobranca/retorno/cnab400/santander_spec.rb +2 -1
  146. data/spec/brcobranca/retorno/cnab400/unicred_spec.rb +28 -32
  147. data/spec/brcobranca/retorno/retorno_cbr643_spec.rb +2 -2
  148. data/spec/brcobranca/retorno/retorno_cnab400_spec.rb +2 -1
  149. data/spec/brcobranca/retorno/retorno_cnab_240_spec.rb +2 -1
  150. data/spec/brcobranca/rghost_spec.rb +4 -4
  151. data/spec/brcobranca/util/empresa_spec.rb +1 -2
  152. data/spec/brcobranca_spec.rb +1 -2
  153. metadata +85 -162
  154. data/spec/arquivos/CBR64310.RET +0 -28
  155. data/spec/arquivos/CNAB240.RET +0 -74
  156. data/spec/arquivos/CNAB240CECRED.RET +0 -10
  157. data/spec/arquivos/CNAB240SANTANDER.RET +0 -8
  158. data/spec/arquivos/CNAB240SICOOB.RET +0 -10
  159. data/spec/arquivos/CNAB240SICREDI.CRT +0 -8
  160. data/spec/arquivos/CNAB400.RET +0 -54
  161. data/spec/arquivos/CNAB400BANCOBRASILIA.RET +0 -3
  162. data/spec/arquivos/CNAB400BANCONORDESTE.RET +0 -3
  163. data/spec/arquivos/CNAB400BANRISUL.RET +0 -3
  164. data/spec/arquivos/CNAB400BRADESCO.RET +0 -8
  165. data/spec/arquivos/CNAB400CREDISIS.RET +0 -3
  166. data/spec/arquivos/CNAB400ITAU.RET +0 -54
  167. data/spec/arquivos/CNAB400SANTANDER.RET +0 -54
  168. data/spec/arquivos/CNAB400UNICRED.RET +0 -3
  169. data/spec/fixtures/remessa/remessa-banco-brasil-cnab400.rem +0 -3
  170. data/spec/fixtures/remessa/remessa-banco-brasilia-cnab400.rem +0 -3
  171. data/spec/fixtures/remessa/remessa-banco-nordeste-cnab400.rem +0 -3
  172. data/spec/fixtures/remessa/remessa-banco_brasil-cnab240.rem +0 -7
  173. data/spec/fixtures/remessa/remessa-bancoob-cnab240.rem +0 -7
  174. data/spec/fixtures/remessa/remessa-banrisul-cnab400.rem +0 -3
  175. data/spec/fixtures/remessa/remessa-bradesco-cnab400.rem +0 -3
  176. data/spec/fixtures/remessa/remessa-caixa-cnab240.rem +0 -7
  177. data/spec/fixtures/remessa/remessa-cecred-cnab240.rem +0 -7
  178. data/spec/fixtures/remessa/remessa-citibank-cnab400.rem +0 -3
  179. data/spec/fixtures/remessa/remessa-credisis-cnab400.rem +0 -3
  180. data/spec/fixtures/remessa/remessa-itau-cnab400.rem +0 -4
  181. data/spec/fixtures/remessa/remessa-santander-cnab400.rem +0 -3
  182. data/spec/fixtures/remessa/remessa-sicoob-cnab400.rem +0 -3
  183. data/spec/fixtures/remessa/remessa-sicoob-correspondente-bb-cnab240.rem +0 -4
  184. data/spec/fixtures/remessa/remessa-sicredi-cnab240.rem +0 -7
  185. data/spec/fixtures/remessa/remessa-unicred-cnab240.rem +0 -7
  186. data/spec/fixtures/remessa/remessa-unicred-cnab400.rem +0 -3
  187. data/spec/spec.opts +0 -8
  188. data/spec/spec_helper.rb +0 -38
  189. data/spec/support/remessa_helpers.rb +0 -13
  190. data/spec/support/shared_examples/busca_logotipo.rb +0 -15
  191. data/spec/support/shared_examples/cnab240.rb +0 -259
  192. data/spec/support/shared_examples/cnab400.rb +0 -180
  193. data/spec/support/shared_examples/formatos_validos.rb +0 -36
@@ -1,24 +1,29 @@
1
- # -*- encoding: utf-8 -*-
1
+ # frozen_string_literal: true
2
+
2
3
  module Brcobranca
3
4
  module Remessa
4
5
  module Cnab400
5
6
  class Unicred < Brcobranca::Remessa::Cnab400::Base
6
- attr_accessor :posto, :byte_idt
7
-
8
- # Codigo de transmissao fornecido pelo banco
9
- attr_accessor :codigo_transmissao
7
+ # codigo da beneficiario (informado pelo Unicred no cadastramento)
8
+ attr_accessor :codigo_beneficiario
10
9
 
11
10
  validates_presence_of :agencia, :conta_corrente, :documento_cedente,
12
- :digito_conta, :codigo_transmissao, message: 'não pode estar em branco.'
11
+ :digito_conta, :codigo_beneficiario,
12
+ message: 'não pode estar em branco.'
13
13
 
14
- validates_length_of :agencia, maximum: 4, message: 'deve ter 4 dígitos.'
15
- validates_length_of :conta_corrente, maximum: 5, message: 'deve ter 5 dígitos.'
16
- validates_length_of :documento_cedente, minimum: 11, maximum: 14, message: 'deve ter entre 11 e 14 dígitos.'
17
- validates_length_of :carteira, maximum: 2, message: 'deve ter 2 dígitos.'
18
- validates_length_of :digito_conta, maximum: 1, message: 'deve ter 1 dígito.'
19
- validates_length_of :codigo_transmissao, maximum: 20, message: 'deve ter 20 dígitos.'
14
+ validates_length_of :agencia, maximum: 4,
15
+ message: 'deve ter 4 dígitos.'
16
+ validates_length_of :conta_corrente, maximum: 5,
17
+ message: 'deve ter 5 dígitos.'
18
+ validates_length_of :documento_cedente, minimum: 11, maximum: 14,
19
+ message: 'deve ter entre 11 e 14 dígitos.'
20
+ validates_length_of :carteira, maximum: 2,
21
+ message: 'deve ter 2 dígitos.'
22
+ validates_length_of :digito_conta, maximum: 1,
23
+ message: 'deve ter 1 dígito.'
20
24
 
21
- validates_inclusion_of :carteira, in: %w(01 03 04 05 06 07), message: 'não existente para este banco.'
25
+ validates_inclusion_of :carteira, in: %w[21],
26
+ message: 'não existente para este banco.'
22
27
 
23
28
  # Nova instancia do Unicred
24
29
  def initialize(campos = {})
@@ -42,55 +47,113 @@ module Brcobranca
42
47
  end
43
48
 
44
49
  def cod_banco
45
- '748'
50
+ '136'
46
51
  end
47
52
 
48
53
  def nome_banco
49
54
  'UNICRED'.ljust(15, ' ')
50
55
  end
51
56
 
52
- # Informacoes da conta corrente do cedente
57
+ def identificador_complemento
58
+ ' '
59
+ end
60
+
61
+ # Numero sequencial utilizado para identificar o boleto.
62
+ # @return [String] 10 caracteres numericos.
63
+ def nosso_numero(nosso_numero)
64
+ nosso_numero.to_s.rjust(10, '0')
65
+ end
66
+
67
+ # Digito verificador do nosso numero
68
+ # @return [Integer] 1 caracteres numericos.
69
+ def nosso_numero_dv(nosso_numero)
70
+ nosso_numero.to_s.modulo11(mapeamento: mapeamento_para_modulo_11)
71
+ end
72
+
73
+ def nosso_numero_boleto(nosso_numero)
74
+ "#{nosso_numero(nosso_numero)}#{nosso_numero_dv(nosso_numero)}"
75
+ end
76
+
77
+ # Retorna o nosso numero
53
78
  #
54
79
  # @return [String]
55
- #
80
+ def formata_nosso_numero(nosso_numero)
81
+ nosso_numero_boleto(nosso_numero).to_s
82
+ end
83
+
84
+ def codigo_beneficiario=(valor)
85
+ @codigo_beneficiario = valor.to_s.rjust(20, '0') if valor
86
+ end
87
+
56
88
  def info_conta
57
- # CAMPO TAMANHO
58
- # codigo da transmissao 20
59
- "#{codigo_transmissao}"
89
+ codigo_beneficiario
60
90
  end
61
91
 
62
92
  # Complemento do header
63
- # (no caso do Unicred, sao apenas espacos em branco)
64
93
  #
65
94
  # @return [String]
66
95
  #
67
96
  def complemento
68
- ''.rjust(294, ' ')
97
+ 'codigo_beneficiario'.rjust(277, ' ')
69
98
  end
70
99
 
71
- # Codigo da carteira de acordo com a documentacao do Unicred
72
- #
73
- # @return [String]
74
- #
75
- def codigo_carteira
76
- codigo_carteira = carteira[1]
100
+ def sequencial_remessa=(valor)
101
+ @sequencial_remessa = valor.to_s.rjust(7, '0') if valor
77
102
  end
78
103
 
79
- def identificador_complemento
80
- " "
104
+ def digito_agencia
105
+ # utilizando a agencia com 4 digitos
106
+ # para calcular o digito
107
+ agencia.modulo11(mapeamento: { 10 => 'X' }).to_s
81
108
  end
82
109
 
83
- # Retorna o nosso numero
110
+ def digito_conta
111
+ # utilizando a conta corrente com 5 digitos
112
+ # para calcular o digito
113
+ conta_corrente.modulo11(mapeamento: { 10 => '0' }).to_s
114
+ end
115
+
116
+ def mapeamento_para_modulo_11
117
+ {
118
+ 10 => 0,
119
+ 11 => 0
120
+ }
121
+ end
122
+
123
+ # Header do arquivo remessa
84
124
  #
85
125
  # @return [String]
86
- def formata_nosso_numero(nosso_numero)
87
- nosso_numero.somente_numeros.rjust(20, ' ')
126
+ #
127
+ def monta_header
128
+ # CAMPO TAMANHO VALOR
129
+ # tipo do registro [1] 0
130
+ # operacao [1] 1
131
+ # literal remessa [7] REMESSA
132
+ # Codigo do serviço [2] 01
133
+ # cod. servico [15] COBRANCA
134
+ # info. conta [20]
135
+ # empresa mae [30]
136
+ # cod. banco [3]
137
+ # nome banco [15]
138
+ # data geracao [6] formato DDMMAA
139
+ # branco [7]
140
+ # Codigo da Variacaoo carteira da UNICRED 003
141
+ # Preencher com 000. [3] 000
142
+ # Numero Sequencial do arquivo [7]
143
+ # complemento registro [277]
144
+ # num. sequencial [6] 000001
145
+ header = "01REMESSA01COBRANCA #{info_conta}"
146
+ header += "#{empresa_mae.format_size(30)}#{cod_banco}"
147
+ header << "#{nome_banco}#{data_geracao} 000"
148
+ header << "#{sequencial_remessa}#{complemento}000001"
149
+ header
88
150
  end
89
151
 
90
152
  # Detalhe do arquivo
91
153
  #
92
154
  # @param pagamento [PagamentoCnab400]
93
- # objeto contendo as informacoes referentes ao boleto (valor, vencimento, cliente)
155
+ # objeto contendo as informacoes referentes ao
156
+ # boleto (valor, vencimento, cliente)
94
157
  # @param sequencial
95
158
  # num. sequencial do registro no arquivo
96
159
  #
@@ -99,42 +162,95 @@ module Brcobranca
99
162
  def monta_detalhe(pagamento, sequencial)
100
163
  raise Brcobranca::RemessaInvalida, pagamento if pagamento.invalid?
101
164
 
102
- detalhe = '1' # identificacao transacao 9[01]
103
- detalhe << Brcobranca::Util::Empresa.new(documento_cedente).tipo # tipo de identificacao da empresa 9[02]
104
- detalhe << documento_cedente.to_s.rjust(14, '0') # cpf/cnpj da empresa 9[14]
105
- detalhe << codigo_transmissao # código da transmissao 9[20]
106
- detalhe << pagamento.documento_ou_numero.to_s.ljust(25) # numero de controle do participante X[25]
107
- detalhe << formata_nosso_numero(pagamento.nosso_numero) # nosso numero X[20]
108
- detalhe << ''.rjust(25, ' ') # brancos X[25]
109
- detalhe << codigo_carteira # codigo da carteira X[01]
110
- detalhe << pagamento.identificacao_ocorrencia # identificacao ocorrencia 9[02]
111
- detalhe << pagamento.numero.to_s.rjust(10, '0') # numero do documento X[10]
112
- detalhe << pagamento.data_vencimento.strftime('%d%m%y') # data do vencimento 9[06]
113
- detalhe << pagamento.formata_valor # valor do documento 9[13]
114
- detalhe << cod_banco # codigo banco 9[03]
115
- detalhe << ''.rjust(5, '0') # agencia cobradora - deixar zero 9[05]
116
- detalhe << '01' # especie do titulo X[02]
117
- detalhe << aceite # aceite (A/N) X[01]
118
- detalhe << pagamento.data_emissao.strftime('%d%m%y') # data de emissao 9[06]
119
- detalhe << "".rjust(4, "0") # instrucao 9[04]
120
- detalhe << "0" # zero 9[01]
121
- detalhe << pagamento.formata_valor_mora(12) # valor mora ao dia 9[12]
122
- detalhe << pagamento.formata_data_desconto # data limite para desconto 9[06]
123
- detalhe << pagamento.formata_valor_desconto # valor do desconto 9[13]
124
- detalhe << pagamento.formata_valor_iof # valor do iof 9[13]
125
- detalhe << pagamento.formata_valor_abatimento # valor do abatimento 9[13]
126
- detalhe << pagamento.identificacao_sacado # identificacao do pagador 9[02]
127
- detalhe << pagamento.documento_sacado.to_s.rjust(14, '0') # documento do pagador 9[14]
128
- detalhe << pagamento.nome_sacado.format_size(40) # nome do pagador X[40]
129
- detalhe << pagamento.endereco_sacado.format_size(40) # endereco do pagador X[40]
130
- detalhe << pagamento.bairro_sacado.format_size(12) # bairro do pagador X[12]
131
- detalhe << pagamento.cep_sacado # cep do pagador 9[08]
132
- detalhe << pagamento.cidade_sacado.format_size(15) # cidade do pagador X[15]
133
- detalhe << pagamento.uf_sacado # uf do pagador X[02]
134
- detalhe << pagamento.nome_avalista.format_size(40) # nome do sacador/avalista X[40]
135
- detalhe << pagamento.dias_protesto.rjust(2, '0') # numero de dias para proteste 9[02]
136
- detalhe << "9" # moeda 9[01]
137
- detalhe << sequencial.to_s.rjust(6, '0') # numero do registro no arquivo 9[06]
165
+ # identificacao transacao 9[01]
166
+ detalhe = '1'
167
+ # Agencia do BENEFICIARIO na UNICRED 9[05] 002 a 006
168
+ detalhe += agencia.rjust(5, '0')
169
+ # Digito da Agencia 9[01] 007 a 007
170
+ detalhe << digito_agencia
171
+ # Conta Corrente 9[12] 008 a 019
172
+ detalhe << conta_corrente.rjust(12, '0')
173
+ # Digito da Conta 9[1] 020 a 020
174
+ detalhe << digito_conta
175
+ # Zero 9[1] 021 a 021
176
+ detalhe << '0'
177
+ # Codigo da Carteira 9[3] 022 a 024
178
+ detalhe << carteira.rjust(3, '0')
179
+ # Zeros 9[13] 025 a 037
180
+ detalhe << ''.rjust(13, '0')
181
+ # No Controle do Participante Uso
182
+ # da empresa 9[25] 038 a 062
183
+ detalhe << ''.rjust(25, ' ')
184
+ # Codigo do Banco na Camara de Compensacao 9[3] 063 a 065
185
+ detalhe << cod_banco
186
+ # Zeros 9[2] 066 a 067
187
+ detalhe << '00'
188
+ # Branco 9[25] 068 a 092
189
+ detalhe << ''.rjust(25, ' ')
190
+ # Filler 9[01] 093 a 093
191
+ detalhe << '0'
192
+ # Codigo da multa 9[1] 094 a 094
193
+ detalhe << pagamento.codigo_multa
194
+ # Valor/Percentual da Multa 9[1] 095 a 104
195
+ detalhe << pagamento.formata_percentual_multa(10)
196
+ # Tipo de Valor Mora 9[1] 105 a 105
197
+ detalhe << pagamento.tipo_mora
198
+ # Identificacao de Titulo Descontavel 9[1] 106 a 106
199
+ detalhe << 'N'
200
+ # Branco 9[1] 107 a 108
201
+ detalhe << ' '
202
+ # Identificacao da Ocorrencia 9[2] 109 a 110
203
+ detalhe << pagamento.identificacao_ocorrencia
204
+ # numero do documento X[10] 111 a 120
205
+ detalhe << pagamento.numero.to_s.rjust(10, '0')
206
+ # data do vencimento 9[06] 121 a 126
207
+ detalhe << pagamento.data_vencimento.strftime('%d%m%y')
208
+ # valor do documento 9[13] 127 a 139
209
+ detalhe << pagamento.formata_valor
210
+ # Filler 9[10] 140 a 149
211
+ detalhe << ''.rjust(10, '0')
212
+ # Codigo do Desconto 9[1] 150 a 150
213
+ detalhe << pagamento.cod_desconto
214
+ # data de emissao 9[06] 151 a 156
215
+ detalhe << pagamento.data_emissao.strftime('%d%m%y')
216
+ # Filler 9[01] 157 a 157
217
+ detalhe << '0'
218
+ # Codigo para Protesto 9[1] 158 a 158
219
+ detalhe << pagamento.codigo_protesto
220
+ # numero de dias para protesto 9[02] 159 a 160
221
+ detalhe << pagamento.dias_protesto.rjust(2, '0')
222
+ # valor mora ao dia 9[13] 161 a 173
223
+ detalhe << pagamento.formata_valor_mora(13)
224
+ # data limite para desconto 9[06] 174 a 179
225
+ detalhe << pagamento.formata_data_desconto
226
+ # valor do desconto 9[13] 180 a 192
227
+ detalhe << pagamento.formata_valor_desconto
228
+ # nosso numero X[11] 193 a 203
229
+ detalhe << formata_nosso_numero(pagamento.nosso_numero)
230
+ # Zeros 9[2] 204 a 205
231
+ detalhe << '00'
232
+ # valor do abatimento 9[13] 206 a 218
233
+ detalhe << pagamento.formata_valor_abatimento(13)
234
+ # Identificacao do Tipo de Inscricao do Pagador 9[2] 219 a 220
235
+ detalhe << pagamento.identificacao_sacado
236
+ # documento do pagador 9[14] 221 a 234
237
+ detalhe << pagamento.documento_sacado.to_s.rjust(14, '0')
238
+ # nome do pagador X[40] 235 a 274
239
+ detalhe << pagamento.nome_sacado.format_size(40)
240
+ # endereco do pagador X[40] 275 a 314
241
+ detalhe << pagamento.endereco_sacado.format_size(40)
242
+ # bairro do pagador X[12] 315 a 326
243
+ detalhe << pagamento.bairro_sacado.format_size(12)
244
+ # cep do pagador 9[08] 327 a 334
245
+ detalhe << pagamento.cep_sacado
246
+ # cidade do pagador X[15] 335 a 354
247
+ detalhe << pagamento.cidade_sacado.format_size(20)
248
+ # uf do pagador X[02] 355 a 356
249
+ detalhe << pagamento.uf_sacado
250
+ # nome do sacador/avalista X[38] 357 a 394
251
+ detalhe << pagamento.nome_avalista.format_size(38)
252
+ # numero do registro no arquivo 9[06] 395 a 400
253
+ detalhe << sequencial.to_s.rjust(6, '0')
138
254
  detalhe
139
255
  end
140
256
  end
@@ -1,8 +1,10 @@
1
- # -*- encoding: utf-8 -*-
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_support/core_ext/object/blank'
4
+
2
5
  module Brcobranca
3
6
  module Remessa
4
7
  class Pagamento
5
-
6
8
  include Brcobranca::Validations
7
9
 
8
10
  # <b>REQUERIDO</b>: nosso numero
@@ -61,6 +63,10 @@ module Brcobranca
61
63
  attr_accessor :data_segundo_desconto
62
64
  # <b>OPCIONAL</b>: valor a ser concedido de desconto
63
65
  attr_accessor :valor_segundo_desconto
66
+ # <b>OPCIONAL</b>: data limite para o terceiro desconto
67
+ attr_accessor :data_terceiro_desconto
68
+ # <b>OPCIONAL</b>: valor a ser concedido de desconto
69
+ attr_accessor :valor_terceiro_desconto
64
70
  # <b>OPCIONAL</b>: espécie do título
65
71
  attr_accessor :especie_titulo
66
72
  # <b>OPCIONAL</b>: código da multa
@@ -87,8 +93,8 @@ module Brcobranca
87
93
  attr_accessor :parcela
88
94
 
89
95
  validates_presence_of :nosso_numero, :data_vencimento, :valor,
90
- :documento_sacado, :nome_sacado, :endereco_sacado,
91
- :cep_sacado, :cidade_sacado, :uf_sacado, message: 'não pode estar em branco.'
96
+ :documento_sacado, :nome_sacado, :endereco_sacado,
97
+ :cep_sacado, :cidade_sacado, :uf_sacado, message: 'não pode estar em branco.'
92
98
  validates_length_of :uf_sacado, is: 2, message: 'deve ter 2 dígitos.'
93
99
  validates_length_of :cep_sacado, is: 8, message: 'deve ter 8 dígitos.'
94
100
  validates_length_of :cod_desconto, is: 1, message: 'deve ter 1 dígito.'
@@ -102,11 +108,13 @@ module Brcobranca
102
108
  def initialize(campos = {})
103
109
  padrao = {
104
110
  data_emissao: Date.current,
105
- data_segundo_desconto:'00-00-00',
106
- tipo_mora: "3",
111
+ data_segundo_desconto: '00-00-00',
112
+ data_terceiro_desconto: '00-00-00',
113
+ tipo_mora: '3',
107
114
  valor_mora: 0.0,
108
115
  valor_desconto: 0.0,
109
116
  valor_segundo_desconto: 0.0,
117
+ valor_terceiro_desconto: 0.0,
110
118
  valor_iof: 0.0,
111
119
  valor_abatimento: 0.0,
112
120
  nome_avalista: '',
@@ -138,7 +146,7 @@ module Brcobranca
138
146
  #
139
147
  def formata_data_desconto(formato = '%d%m%y')
140
148
  data_desconto.strftime(formato)
141
- rescue
149
+ rescue StandardError
142
150
  if formato == '%d%m%y'
143
151
  '000000'
144
152
  else
@@ -152,7 +160,21 @@ module Brcobranca
152
160
  #
153
161
  def formata_data_segundo_desconto(formato = '%d%m%y')
154
162
  data_segundo_desconto.strftime(formato)
155
- rescue
163
+ rescue StandardError
164
+ if formato == '%d%m%y'
165
+ '000000'
166
+ else
167
+ '00000000'
168
+ end
169
+ end
170
+
171
+ # Formata a data de terceiro desconto de acordo com o formato passado
172
+ #
173
+ # @return [String]
174
+ #
175
+ def formata_data_terceiro_desconto(formato = '%d%m%y')
176
+ data_terceiro_desconto.strftime(formato)
177
+ rescue StandardError
156
178
  if formato == '%d%m%y'
157
179
  '000000'
158
180
  else
@@ -177,7 +199,7 @@ module Brcobranca
177
199
  #
178
200
  def formata_data_multa(formato = '%d%m%y')
179
201
  data_multa.strftime(formato)
180
- rescue
202
+ rescue StandardError
181
203
  if formato == '%d%m%y'
182
204
  '000000'
183
205
  else
@@ -241,6 +263,15 @@ module Brcobranca
241
263
  format_value(valor_segundo_desconto, tamanho)
242
264
  end
243
265
 
266
+ # Formata o campo valor do terceiro desconto
267
+ #
268
+ # @param tamanho [Integer]
269
+ # quantidade de caracteres a ser retornado
270
+ #
271
+ def formata_valor_terceiro_desconto(tamanho = 13)
272
+ format_value(valor_terceiro_desconto, tamanho)
273
+ end
274
+
244
275
  # Formata o campo valor do IOF
245
276
  #
246
277
  # @param tamanho [Integer]
@@ -273,15 +304,16 @@ module Brcobranca
273
304
  #
274
305
  def identificacao_avalista(zero = true)
275
306
  return '0' if documento_avalista.nil?
307
+
276
308
  Brcobranca::Util::Empresa.new(documento_avalista, zero).tipo
277
309
  end
278
310
 
279
311
  private
280
312
 
281
313
  def format_value(value, tamanho)
282
- raise ValorInvalido, 'Deve ser um Float' unless value.to_s =~ /\./
314
+ raise ValorInvalido, 'Deve ser um Float' unless /\./.match?(value.to_s)
283
315
 
284
- sprintf('%.2f', value).delete('.').rjust(tamanho, '0')
316
+ format('%.2f', value).delete('.').rjust(tamanho, '0')
285
317
  end
286
318
  end
287
319
  end
@@ -1,49 +1,11 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  module Brcobranca
4
4
  module Retorno
5
- class Base # Classe base para retornos bancários
6
- attr_accessor :codigo_registro
7
- attr_accessor :agencia_com_dv
8
- attr_accessor :agencia_sem_dv
9
- attr_accessor :cedente_com_dv
10
- attr_accessor :convenio
11
- attr_accessor :nosso_numero
12
- attr_accessor :documento_numero
13
- attr_accessor :tipo_cobranca
14
- attr_accessor :tipo_cobranca_anterior
15
- attr_accessor :natureza_recebimento
16
- attr_accessor :carteira_variacao
17
- attr_accessor :desconto
18
- attr_accessor :iof
19
- attr_accessor :carteira
20
- attr_accessor :comando
21
- attr_accessor :data_liquidacao
22
- attr_accessor :data_vencimento
23
- attr_accessor :valor_titulo
24
- attr_accessor :banco_recebedor
25
- attr_accessor :agencia_recebedora_com_dv
26
- attr_accessor :especie_documento
27
- attr_accessor :codigo_ocorrencia
28
- attr_accessor :motivo_ocorrencia
29
- attr_accessor :data_ocorrencia
30
- attr_accessor :data_credito
31
- attr_accessor :valor_tarifa
32
- attr_accessor :outras_despesas
33
- attr_accessor :juros_desconto
34
- attr_accessor :iof_desconto
35
- attr_accessor :valor_abatimento
36
- attr_accessor :desconto_concedito
37
- attr_accessor :valor_recebido
38
- attr_accessor :juros_mora
39
- attr_accessor :outros_recebimento
40
- attr_accessor :abatimento_nao_aproveitado
41
- attr_accessor :valor_lancamento
42
- attr_accessor :indicativo_lancamento
43
- attr_accessor :indicador_valor
44
- attr_accessor :valor_ajuste
45
- attr_accessor :sequencial
46
- attr_accessor :arquivo
5
+ # Classe base para retornos bancários
6
+ class Base
7
+ attr_accessor :codigo_registro, :agencia_com_dv, :agencia_sem_dv, :cedente_com_dv, :convenio, :nosso_numero,
8
+ :documento_numero, :tipo_cobranca, :tipo_cobranca_anterior, :natureza_recebimento, :carteira_variacao, :desconto, :iof, :carteira, :comando, :data_liquidacao, :data_vencimento, :valor_titulo, :banco_recebedor, :agencia_recebedora_com_dv, :especie_documento, :codigo_ocorrencia, :motivo_ocorrencia, :data_ocorrencia, :data_credito, :valor_tarifa, :outras_despesas, :juros_desconto, :iof_desconto, :valor_abatimento, :desconto_concedito, :valor_recebido, :juros_mora, :outros_recebimento, :abatimento_nao_aproveitado, :valor_lancamento, :indicativo_lancamento, :indicador_valor, :valor_ajuste, :sequencial, :arquivo
47
9
  end
48
10
  end
49
11
  end
@@ -1,13 +1,13 @@
1
- # -*- encoding: utf-8 -*-
1
+ # frozen_string_literal: true
2
2
 
3
3
  require 'parseline'
4
4
 
5
5
  module Brcobranca
6
6
  module Retorno
7
7
  module Cnab240
8
- class Cecred < Brcobranca::Retorno::Cnab240::Base
8
+ class Ailos < Brcobranca::Retorno::Cnab240::Base
9
9
  # Regex para remoção de headers e trailers além de registros diferentes de T ou U
10
- REGEX_DE_EXCLUSAO_DE_REGISTROS_NAO_T_OU_U = /^((?!^.{7}3.{5}[T|U].*$).)*$/
10
+ REGEX_DE_EXCLUSAO_DE_REGISTROS_NAO_T_OU_U = /^((?!^.{7}3.{5}[T|U].*$).)*$/.freeze
11
11
 
12
12
  def self.load_lines(file, options = {})
13
13
  default_options = { except: REGEX_DE_EXCLUSAO_DE_REGISTROS_NAO_T_OU_U }
@@ -23,11 +23,11 @@ module Brcobranca
23
23
  cnab_lines.each do |line|
24
24
  if line.tipo_registro == 'T'
25
25
  Line::REGISTRO_T_FIELDS.each do |attr|
26
- retorno.send(attr + '=', line.send(attr))
26
+ retorno.send("#{attr}=", line.send(attr))
27
27
  end
28
28
  else
29
29
  Line::REGISTRO_U_FIELDS.each do |attr|
30
- retorno.send(attr + '=', line.send(attr))
30
+ retorno.send("#{attr}=", line.send(attr))
31
31
  end
32
32
  end
33
33
  end
@@ -41,8 +41,10 @@ module Brcobranca
41
41
  class Line < Base
42
42
  extend ParseLine::FixedWidth # Extendendo parseline
43
43
 
44
- REGISTRO_T_FIELDS = %w(codigo_registro codigo_ocorrencia agencia_com_dv cedente_com_dv nosso_numero carteira data_vencimento valor_titulo banco_recebedor agencia_recebedora_com_dv sequencial valor_tarifa motivo_ocorrencia)
45
- REGISTRO_U_FIELDS = %w(desconto_concedito valor_abatimento iof_desconto juros_mora valor_recebido outras_despesas outros_recebimento data_credito data_ocorrencia)
44
+ REGISTRO_T_FIELDS = %w[codigo_registro codigo_ocorrencia agencia_com_dv cedente_com_dv nosso_numero carteira
45
+ data_vencimento valor_titulo banco_recebedor agencia_recebedora_com_dv sequencial valor_tarifa motivo_ocorrencia].freeze
46
+ REGISTRO_U_FIELDS = %w[desconto_concedito valor_abatimento iof_desconto juros_mora valor_recebido
47
+ outras_despesas outros_recebimento data_credito data_ocorrencia].freeze
46
48
 
47
49
  attr_accessor :tipo_registro
48
50
 
@@ -61,9 +63,9 @@ module Brcobranca
61
63
  parse.field :banco_recebedor, 96..98
62
64
  parse.field :agencia_recebedora_com_dv, 99..104
63
65
  parse.field :valor_tarifa, 198..212
64
- parse.field :motivo_ocorrencia, 213..222, ->(motivos) do
65
- motivos.scan(/.{2}/).reject(&:blank?).reject{|motivo| motivo == '00'}
66
- end
66
+ parse.field :motivo_ocorrencia, 213..222, lambda { |motivos|
67
+ motivos.scan(/.{2}/).reject(&:blank?).reject { |motivo| motivo == '00' }
68
+ }
67
69
 
68
70
  # Segmento U
69
71
  parse.field :data_ocorrencia, 137..144
@@ -1,25 +1,25 @@
1
- # -*- encoding: utf-8 -*-
1
+ # frozen_string_literal: true
2
+
2
3
  require 'parseline'
3
4
 
4
5
  module Brcobranca
5
6
  module Retorno
6
7
  module Cnab240
7
8
  class Base < Brcobranca::Retorno::Base
8
-
9
9
  # Load lines
10
- def self.load_lines(file, options={})
10
+ def self.load_lines(file, options = {})
11
11
  return nil if file.blank?
12
12
 
13
13
  codigo_banco = codigo_banco_do_arquivo(file)
14
14
 
15
15
  case codigo_banco
16
- when "033"
16
+ when '033'
17
17
  Brcobranca::Retorno::Cnab240::Santander.load_lines(file, options)
18
- when "085"
19
- Brcobranca::Retorno::Cnab240::Cecred.load_lines(file, options)
20
- when "748"
18
+ when '085'
19
+ Brcobranca::Retorno::Cnab240::Ailos.load_lines(file, options)
20
+ when '748'
21
21
  Brcobranca::Retorno::Cnab240::Sicredi.load_lines(file, options)
22
- when "756"
22
+ when '756'
23
23
  Brcobranca::Retorno::Cnab240::Sicoob.load_lines(file, options)
24
24
  else
25
25
  Brcobranca::Retorno::RetornoCnab240.load_lines(file, options)
@@ -35,7 +35,6 @@ module Brcobranca
35
35
  arquivo.close
36
36
  codigo_banco
37
37
  end
38
-
39
38
  end
40
39
  end
41
40
  end
@@ -1,5 +1,4 @@
1
- # -*- encoding: utf-8 -*-
2
- #
1
+ # frozen_string_literal: true
3
2
 
4
3
  module Brcobranca
5
4
  module Retorno
@@ -25,9 +24,9 @@ module Brcobranca
25
24
  parse.field :codigo_ocorrencia, 15..16
26
25
  parse.field :nosso_numero, 39..55
27
26
  parse.field :agencia_recebedora_com_dv, 99..103
28
- parse.field :motivo_ocorrencia, 213..222, ->(motivos) do
29
- motivos.scan(/.{2}/).reject(&:blank?).reject{|motivo| motivo == '00'}
30
- end
27
+ parse.field :motivo_ocorrencia, 213..222, lambda { |motivos|
28
+ motivos.scan(/.{2}/).reject(&:blank?).reject { |motivo| motivo == '00' }
29
+ }
31
30
 
32
31
  # REGISTRO_U_FIELDS
33
32