brcobranca_sicredi_400 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 (126) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +3 -0
  3. data/LICENSE +20 -0
  4. data/README.md +91 -0
  5. data/Rakefile +8 -0
  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/bancobrasil.eps +5402 -0
  9. data/lib/brcobranca/arquivos/logos/bancobrasil_carne.eps +5410 -0
  10. data/lib/brcobranca/arquivos/logos/bancobrasilia.eps +0 -0
  11. data/lib/brcobranca/arquivos/logos/bancobrasilia_carne.eps +0 -0
  12. data/lib/brcobranca/arquivos/logos/banconordeste.eps +0 -0
  13. data/lib/brcobranca/arquivos/logos/banconordeste_carne.eps +0 -0
  14. data/lib/brcobranca/arquivos/logos/banestes.eps +5198 -0
  15. data/lib/brcobranca/arquivos/logos/banestes_carne.eps +5206 -0
  16. data/lib/brcobranca/arquivos/logos/banrisul.eps +121 -0
  17. data/lib/brcobranca/arquivos/logos/banrisul_carne.eps +121 -0
  18. data/lib/brcobranca/arquivos/logos/bradesco.eps +5210 -0
  19. data/lib/brcobranca/arquivos/logos/bradesco_carne.eps +5214 -0
  20. data/lib/brcobranca/arquivos/logos/caixa.eps +5111 -0
  21. data/lib/brcobranca/arquivos/logos/caixa_carne.eps +5115 -0
  22. data/lib/brcobranca/arquivos/logos/cecred.eps +0 -0
  23. data/lib/brcobranca/arquivos/logos/cecred_carne.eps +0 -0
  24. data/lib/brcobranca/arquivos/logos/citibank.eps +745 -0
  25. data/lib/brcobranca/arquivos/logos/citibank_carne.eps +745 -0
  26. data/lib/brcobranca/arquivos/logos/credisis.eps +0 -0
  27. data/lib/brcobranca/arquivos/logos/credisis_carne.eps +0 -0
  28. data/lib/brcobranca/arquivos/logos/hsbc.eps +5124 -0
  29. data/lib/brcobranca/arquivos/logos/hsbc_carne.eps +5128 -0
  30. data/lib/brcobranca/arquivos/logos/itau.eps +5318 -0
  31. data/lib/brcobranca/arquivos/logos/itau_carne.eps +5322 -0
  32. data/lib/brcobranca/arquivos/logos/safra.eps +0 -0
  33. data/lib/brcobranca/arquivos/logos/safra_carne.eps +0 -0
  34. data/lib/brcobranca/arquivos/logos/santander.eps +5305 -0
  35. data/lib/brcobranca/arquivos/logos/santander_carne.eps +5313 -0
  36. data/lib/brcobranca/arquivos/logos/sicoob.eps +5375 -0
  37. data/lib/brcobranca/arquivos/logos/sicoob_carne.eps +5379 -0
  38. data/lib/brcobranca/arquivos/logos/sicredi.eps +5379 -0
  39. data/lib/brcobranca/arquivos/logos/sicredi_carne.eps +5383 -0
  40. data/lib/brcobranca/arquivos/logos/unicred.eps +0 -0
  41. data/lib/brcobranca/arquivos/logos/unicred_carne.eps +0 -0
  42. data/lib/brcobranca/arquivos/templates/modelo_carne.eps +1112 -0
  43. data/lib/brcobranca/arquivos/templates/modelo_generico.eps +0 -0
  44. data/lib/brcobranca/arquivos/templates/modelo_generico2.eps +9967 -0
  45. data/lib/brcobranca/boleto/ailos.rb +89 -0
  46. data/lib/brcobranca/boleto/banco_brasil.rb +165 -0
  47. data/lib/brcobranca/boleto/banco_brasilia.rb +102 -0
  48. data/lib/brcobranca/boleto/banco_nordeste.rb +80 -0
  49. data/lib/brcobranca/boleto/banestes.rb +86 -0
  50. data/lib/brcobranca/boleto/banrisul.rb +95 -0
  51. data/lib/brcobranca/boleto/base.rb +256 -0
  52. data/lib/brcobranca/boleto/bradesco.rb +100 -0
  53. data/lib/brcobranca/boleto/caixa.rb +123 -0
  54. data/lib/brcobranca/boleto/citibank.rb +97 -0
  55. data/lib/brcobranca/boleto/credisis.rb +118 -0
  56. data/lib/brcobranca/boleto/hsbc.rb +96 -0
  57. data/lib/brcobranca/boleto/itau.rb +138 -0
  58. data/lib/brcobranca/boleto/safra.rb +152 -0
  59. data/lib/brcobranca/boleto/santander.rb +86 -0
  60. data/lib/brcobranca/boleto/sicoob.rb +120 -0
  61. data/lib/brcobranca/boleto/sicredi.rb +145 -0
  62. data/lib/brcobranca/boleto/template/base.rb +28 -0
  63. data/lib/brcobranca/boleto/template/rghost.rb +308 -0
  64. data/lib/brcobranca/boleto/template/rghost2.rb +264 -0
  65. data/lib/brcobranca/boleto/template/rghost_bolepix.rb +286 -0
  66. data/lib/brcobranca/boleto/template/rghost_carne.rb +319 -0
  67. data/lib/brcobranca/boleto/unicred.rb +99 -0
  68. data/lib/brcobranca/calculo.rb +120 -0
  69. data/lib/brcobranca/calculo_data.rb +63 -0
  70. data/lib/brcobranca/currency.rb +69 -0
  71. data/lib/brcobranca/formatacao.rb +104 -0
  72. data/lib/brcobranca/formatacao_string.rb +37 -0
  73. data/lib/brcobranca/limpeza.rb +20 -0
  74. data/lib/brcobranca/remessa/base.rb +72 -0
  75. data/lib/brcobranca/remessa/cnab240/ailos.rb +156 -0
  76. data/lib/brcobranca/remessa/cnab240/banco_brasil.rb +249 -0
  77. data/lib/brcobranca/remessa/cnab240/base.rb +529 -0
  78. data/lib/brcobranca/remessa/cnab240/base_correspondente.rb +307 -0
  79. data/lib/brcobranca/remessa/cnab240/caixa.rb +171 -0
  80. data/lib/brcobranca/remessa/cnab240/santander.rb +225 -0
  81. data/lib/brcobranca/remessa/cnab240/sicoob.rb +229 -0
  82. data/lib/brcobranca/remessa/cnab240/sicoob_banco_brasil.rb +101 -0
  83. data/lib/brcobranca/remessa/cnab240/sicredi.rb +183 -0
  84. data/lib/brcobranca/remessa/cnab240/unicred.rb +10 -0
  85. data/lib/brcobranca/remessa/cnab400/banco_brasil.rb +169 -0
  86. data/lib/brcobranca/remessa/cnab400/banco_brasilia.rb +167 -0
  87. data/lib/brcobranca/remessa/cnab400/banco_nordeste.rb +161 -0
  88. data/lib/brcobranca/remessa/cnab400/banrisul.rb +158 -0
  89. data/lib/brcobranca/remessa/cnab400/base.rb +132 -0
  90. data/lib/brcobranca/remessa/cnab400/bradesco.rb +155 -0
  91. data/lib/brcobranca/remessa/cnab400/citibank.rb +139 -0
  92. data/lib/brcobranca/remessa/cnab400/credisis.rb +130 -0
  93. data/lib/brcobranca/remessa/cnab400/itau.rb +162 -0
  94. data/lib/brcobranca/remessa/cnab400/santander.rb +233 -0
  95. data/lib/brcobranca/remessa/cnab400/sicoob.rb +305 -0
  96. data/lib/brcobranca/remessa/cnab400/sicredi.rb +117 -0
  97. data/lib/brcobranca/remessa/cnab400/unicred.rb +259 -0
  98. data/lib/brcobranca/remessa/pagamento.rb +320 -0
  99. data/lib/brcobranca/retorno/base.rb +11 -0
  100. data/lib/brcobranca/retorno/cnab240/ailos.rb +104 -0
  101. data/lib/brcobranca/retorno/cnab240/base.rb +41 -0
  102. data/lib/brcobranca/retorno/cnab240/caixa.rb +47 -0
  103. data/lib/brcobranca/retorno/cnab240/santander.rb +99 -0
  104. data/lib/brcobranca/retorno/cnab240/sicoob.rb +101 -0
  105. data/lib/brcobranca/retorno/cnab240/sicredi.rb +82 -0
  106. data/lib/brcobranca/retorno/cnab400/banco_brasil.rb +130 -0
  107. data/lib/brcobranca/retorno/cnab400/banco_brasilia.rb +90 -0
  108. data/lib/brcobranca/retorno/cnab400/banco_nordeste.rb +113 -0
  109. data/lib/brcobranca/retorno/cnab400/banrisul.rb +42 -0
  110. data/lib/brcobranca/retorno/cnab400/base.rb +53 -0
  111. data/lib/brcobranca/retorno/cnab400/bradesco.rb +124 -0
  112. data/lib/brcobranca/retorno/cnab400/credisis.rb +116 -0
  113. data/lib/brcobranca/retorno/cnab400/itau.rb +144 -0
  114. data/lib/brcobranca/retorno/cnab400/santander.rb +58 -0
  115. data/lib/brcobranca/retorno/cnab400/sicredi.rb +78 -0
  116. data/lib/brcobranca/retorno/cnab400/unicred.rb +123 -0
  117. data/lib/brcobranca/retorno/retorno_cbr643.rb +48 -0
  118. data/lib/brcobranca/retorno/retorno_cnab240.rb +99 -0
  119. data/lib/brcobranca/retorno/retorno_cnab400.rb +71 -0
  120. data/lib/brcobranca/util/date.rb +21 -0
  121. data/lib/brcobranca/util/empresa.rb +29 -0
  122. data/lib/brcobranca/util/errors.rb +76 -0
  123. data/lib/brcobranca/validations.rb +208 -0
  124. data/lib/brcobranca/version.rb +5 -0
  125. data/lib/brcobranca.rb +200 -0
  126. metadata +225 -0
@@ -0,0 +1,183 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Brcobranca
4
+ module Remessa
5
+ module Cnab240
6
+ class Sicredi < Brcobranca::Remessa::Cnab240::Base
7
+ attr_accessor :modalidade_carteira, :parcela, :byte_idt, :posto
8
+
9
+ # Parcela - 02 posições (11 a 12) - "01" se parcela única
10
+
11
+ validates_presence_of :byte_idt, :modalidade_carteira, :parcela, :posto, :digito_conta,
12
+ message: 'não pode estar em branco.'
13
+
14
+ # Remessa 240 - 12 digitos
15
+ validates_length_of :conta_corrente, maximum: 5, message: 'deve ter 5 dígitos.'
16
+ validates_length_of :agencia, is: 4, message: 'deve ter 4 dígitos.'
17
+ validates_length_of :modalidade_carteira, is: 2, message: 'deve ter 2 dígitos.'
18
+ validates_length_of :digito_conta, is: 1, message: 'deve ter 1 dígito.'
19
+ validates_length_of :posto, maximum: 2, message: 'deve ter 2 dígitos.'
20
+ validates_length_of :byte_idt, is: 1,
21
+ message: 'deve ser 1 se o numero foi gerado pela agencia ou 2-9 se foi gerado pelo beneficiário'
22
+
23
+ def initialize(campos = {})
24
+ campos = { emissao_boleto: '2',
25
+ distribuicao_boleto: '2',
26
+ especie_titulo: '03',
27
+ parcela: '01',
28
+ modalidade_carteira: '01',
29
+ forma_cadastramento: '1',
30
+ tipo_documento: '1' }.merge!(campos)
31
+ super(campos)
32
+ end
33
+
34
+ def cod_banco
35
+ '748'
36
+ end
37
+
38
+ def nome_banco
39
+ 'SICREDI'.ljust(30, ' ')
40
+ end
41
+
42
+ def versao_layout_arquivo
43
+ '081'
44
+ end
45
+
46
+ def versao_layout_lote
47
+ '040'
48
+ end
49
+
50
+ def densidade_gravacao
51
+ '01600'
52
+ end
53
+
54
+ def digito_agencia
55
+ ' '
56
+ end
57
+
58
+ def dv_agencia_cobradora
59
+ ' '
60
+ end
61
+
62
+ def uso_exclusivo_banco
63
+ ''.rjust(20, ' ')
64
+ end
65
+
66
+ def uso_exclusivo_empresa
67
+ ''.rjust(20, ' ')
68
+ end
69
+
70
+ def codigo_convenio
71
+ # CAMPO TAMANHO
72
+ # num. convenio 20 BRANCOS
73
+ ''.rjust(20, ' ')
74
+ end
75
+
76
+ alias convenio_lote codigo_convenio
77
+
78
+ def info_conta
79
+ # CAMPO TAMANHO
80
+ # agencia 5
81
+ # digito agencia 1
82
+ # conta corrente 12
83
+ # digito conta 1
84
+ # digito agencia/conta 1
85
+ "#{agencia.rjust(5, '0')}#{digito_agencia}#{conta_corrente.rjust(12, '0')}#{digito_conta} "
86
+ end
87
+
88
+ def complemento_header
89
+ ''.rjust(29, ' ')
90
+ end
91
+
92
+ def complemento_trailer
93
+ # CAMPO TAMANHO
94
+ # Qt. Títulos em Cobrança Simples 6
95
+ # Vl. Títulos em Carteira Simples 15 + 2 decimais
96
+ # Qt. Títulos em Cobrança Vinculada 6
97
+ # Vl. Títulos em Carteira Vinculada 15 + 2 decimais
98
+ # Qt. Títulos em Cobrança Caucionada 6
99
+ # Vl. Títulos em Carteira Caucionada 15 + 2 decimais
100
+ # Qt. Títulos em Cobrança Descontada 6
101
+ # Vl. Títulos em Carteira Descontada 15 + 2 decimais
102
+ total_cobranca_simples = ''.rjust(23, '0')
103
+ total_cobranca_vinculada = ''.rjust(23, '0')
104
+ total_cobranca_caucionada = ''.rjust(23, '0')
105
+ total_cobranca_descontada = ''.rjust(23, '0')
106
+
107
+ "#{total_cobranca_simples}#{total_cobranca_vinculada}#{total_cobranca_caucionada}" \
108
+ "#{total_cobranca_descontada}".ljust(217, ' ')
109
+ end
110
+
111
+ # Monta o registro trailer do arquivo
112
+ #
113
+ # @param nro_lotes [Integer]
114
+ # numero de lotes no arquivo
115
+ # @param sequencial [Integer]
116
+ # numero de registros(linhas) no arquivo
117
+ #
118
+ # @return [String]
119
+ #
120
+ def monta_trailer_arquivo(nro_lotes, sequencial)
121
+ # CAMPO TAMANHO
122
+ # codigo banco 3
123
+ # lote de servico 4
124
+ # tipo de registro 1
125
+ # uso FEBRABAN 9
126
+ # nro de lotes 6
127
+ # nro de registros(linhas) 6
128
+ # uso FEBRABAN 211
129
+ "#{cod_banco}99999#{''.rjust(9,
130
+ ' ')}#{nro_lotes.to_s.rjust(6,
131
+ '0')}#{sequencial.to_s.rjust(6,
132
+ '0')}#{''.rjust(6,
133
+ '0')}#{''.rjust(
134
+ 205, ' '
135
+ )}"
136
+ end
137
+
138
+ def complemento_p(pagamento)
139
+ # CAMPO TAMANHO
140
+ # conta corrente 12
141
+ # digito conta 1
142
+ # digito agencia/conta 1
143
+ # ident. titulo no banco 20
144
+ "#{conta_corrente.rjust(12, '0')}#{digito_conta} #{formata_nosso_numero(pagamento.nosso_numero)}"
145
+ end
146
+
147
+ # Retorna o nosso numero
148
+ #
149
+ # @return [String]
150
+ def formata_nosso_numero(nosso_numero)
151
+ nosso_numero.somente_numeros.ljust(20, ' ')
152
+ end
153
+
154
+ def codigo_desconto(_pagamento)
155
+ '1'
156
+ end
157
+
158
+ def codigo_baixa(_pagamento)
159
+ '1'
160
+ end
161
+
162
+ def dias_baixa(_pagamento)
163
+ '060'
164
+ end
165
+
166
+ def data_mora(pagamento)
167
+ return ''.rjust(8, '0') unless %w[1 2].include? pagamento.tipo_mora
168
+
169
+ pagamento.data_vencimento.next_day.strftime('%d%m%Y')
170
+ end
171
+
172
+ private
173
+
174
+ def mapeamento_para_modulo_11
175
+ {
176
+ 10 => 0,
177
+ 11 => 0
178
+ }
179
+ end
180
+ end
181
+ end
182
+ end
183
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Brcobranca
4
+ module Remessa
5
+ module Cnab240
6
+ class Unicred < Brcobranca::Remessa::Cnab240::Sicredi
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,169 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Brcobranca
4
+ module Remessa
5
+ module Cnab400
6
+ class BancoBrasil < Brcobranca::Remessa::Cnab400::Base
7
+ #
8
+ # Documentacao para a geracao do arquivo pode ser encontrada em:
9
+ # http://www.bb.com.br/docs/pub/emp/empl/dwn/Doc2627CBR641Pos7.pdf
10
+ #
11
+
12
+ # Convenio
13
+ attr_accessor :convenio
14
+ # Variacao da carteira
15
+ attr_accessor :variacao_carteira
16
+ # OPCIONAL Convenio lider
17
+ attr_accessor :convenio_lider
18
+ # Tipo de cobranca
19
+ #
20
+ # a) Carteiras 11 ou 17:
21
+ # - 04DSC: Solicitação de registro na Modalidade Descontada
22
+ # - 08VDR: Solicitação de registro na Modalidade BBVendor
23
+ # - 02VIN: solicitação de registro na Modalidade Vinculada
24
+ # - BRANCOS: Registro na Modalidade Simples
25
+ # b) Carteiras 12, 31, 51:
26
+ # - Brancos
27
+ #
28
+ attr_accessor :tipo_cobranca
29
+
30
+ validates_presence_of :agencia, :conta_corrente, :convenio, :variacao_carteira, :documento_cedente,
31
+ message: 'não pode estar em branco.'
32
+
33
+ validates_length_of :agencia, maximum: 4, message: 'deve ser igual a 4 digítos.'
34
+ validates_length_of :conta_corrente, maximum: 8, message: 'deve ser menor ou igual a 8 dígitos.'
35
+ validates_length_of :variacao_carteira, is: 3, message: 'deve ser igual a 3 digítos.'
36
+ validates_length_of :carteira, is: 2, message: 'deve ser igual a 2 digítos.'
37
+ validates_length_of :documento_cedente, minimum: 11, maximum: 14, message: 'deve ter entre 11 e 14 dígitos.'
38
+
39
+ # Conta corrente
40
+ #
41
+ # Obs: formata para o padrao com 8 caracteres
42
+ #
43
+ def conta_corrente=(valor)
44
+ @conta_corrente = valor.to_s.rjust(8, '0') if valor
45
+ end
46
+
47
+ # Retorna dígito verificador da agência
48
+ #
49
+ # @return [String]
50
+ #
51
+ def agencia_dv
52
+ agencia.modulo11(mapeamento: { 10 => 'X' })
53
+ end
54
+
55
+ # Dígito verificador da conta corrente
56
+ #
57
+ # @return [String]
58
+ #
59
+ def conta_corrente_dv
60
+ conta_corrente.modulo11(mapeamento: { 10 => 'X' })
61
+ end
62
+
63
+ # Codigo do banco
64
+ #
65
+ def cod_banco
66
+ '001'
67
+ end
68
+
69
+ # Nome por extenso do banco
70
+ #
71
+ def nome_banco
72
+ 'BANCODOBRASIL'.ljust(15, ' ')
73
+ end
74
+
75
+ # Informacoes da conta corrente do cedente
76
+ #
77
+ # @return [String]
78
+ #
79
+ def info_conta
80
+ # CAMPO TAMANHO
81
+ # agencia 4
82
+ # digito agencia 1
83
+ # conta corrente 8
84
+ # digito da conta 1
85
+ # numero convenio 6
86
+ cc = conta_corrente.to_s.rjust(8, '0')
87
+ "#{agencia}#{agencia_dv}#{cc}#{conta_corrente_dv}#{''.rjust(6, '0')}"
88
+ end
89
+
90
+ def complemento
91
+ ret = ''
92
+ ret += sequencial_remessa.to_s.rjust(7, '0') # sequencial da remessa (nao controlado pelo banco) 9[007]
93
+ ret << ''.ljust(22, ' ') # complemento (brancos) X[022]
94
+ ret << convenio_lider.to_s.rjust(7, '0') # numero do convenio lider (opcional) 9[007]
95
+ ret << ''.ljust(258, ' ') # complemento (brancos) X[258]
96
+ end
97
+
98
+ def monta_detalhe(pagamento, sequencial)
99
+ raise Brcobranca::RemessaInvalida, pagamento if pagamento.invalid?
100
+
101
+ detalhe = '7' # identificacao do registro 9[1] 001 a 001
102
+ detalhe += Brcobranca::Util::Empresa.new(documento_cedente).tipo # tipo de identificacao da empresa 9[02] 002 a 003
103
+ detalhe << documento_cedente.to_s.rjust(14, '0') # cpf/cnpj da empresa 9[14] 004 a 017
104
+ detalhe << agencia # agencia 9[04] 018 a 021
105
+ detalhe << agencia_dv.to_s # digito agencia X[01] 022 a 022
106
+ detalhe << conta_corrente.to_s.rjust(8, '0') # conta corrente 9[08] 023 a 030
107
+ detalhe << conta_corrente_dv.to_s # digito conta corrente X[01] 031 a 031
108
+ detalhe << convenio.to_s.rjust(7, '0') # convenio de cobranca da empresa 9[07] 032 a 038
109
+ detalhe << ''.ljust(25, ' ') # controle do participante X[25] 039 a 063
110
+ detalhe << convenio.to_s.rjust(7, '0') # convenio (montagem nosso numero) 9[07] 064 a 070
111
+ detalhe << pagamento.nosso_numero.to_s.rjust(10, '0') # nosso numero 9[10] 071 a 080
112
+ detalhe << '00' # numero da prestacao (zeros) 9[02] 081 a 082
113
+ detalhe << '00' # grupo de valor (zeros) 9[02] 083 a 084
114
+ detalhe << ' ' # brancos X[03] 085 a 087
115
+ detalhe << ' ' # mensagem ou sacador/avalista X[01] 088 a 088
116
+ detalhe << ' ' # prefixo do titulo (brancos) X[03] 089 a 091
117
+ detalhe << variacao_carteira # variacao da carteira 9[03] 092 a 094
118
+ detalhe << '0' # conta caucao 9[01] 095 a 095
119
+ detalhe << '000000' # numero do bordero (zeros) 9[06] 096 a 101
120
+ detalhe << tipo_cobranca.to_s.ljust(5, ' ') # tipo de cobranca 9[05] 102 a 106
121
+ detalhe << carteira # carteira 9[02] 107 a 108
122
+ detalhe << pagamento.identificacao_ocorrencia # comando / ocorrência 9[02] 109 a 110
123
+ detalhe << pagamento.documento_ou_numero.to_s.rjust(10, '0') # numero atribuido pela empresa X[10] 111 a 120
124
+ detalhe << pagamento.data_vencimento.strftime('%d%m%y') # data de vencimento 9[06] 121 a 126
125
+ detalhe << pagamento.formata_valor # valor do titulo 9[13] 127 a 139
126
+ detalhe << cod_banco # numero do banco 9[03] 140 a 142
127
+ detalhe << '0000' # prefixo da agencia cobradora 9[04] 143 a 146
128
+ detalhe << ' ' # digito da agencia cobradora X[01] 147 a 147
129
+ detalhe << pagamento.especie_titulo # especie do titulo 9[02] 148 a 149
130
+ detalhe << aceite # aceite do titulo X[01] 150 a 150
131
+ detalhe << pagamento.data_emissao.strftime('%d%m%y') # data de emissao 9[06] 151 a 156
132
+ detalhe << pagamento.cod_primeira_instrucao.to_s.rjust(2, '0') # cod. primeira instrucao 9[02] 157 a 158
133
+ detalhe << pagamento.cod_segunda_instrucao.to_s.rjust(2, '0') # cod. segunda instrucao 9[02] 159 a 160
134
+ detalhe << pagamento.formata_valor_mora # valor de mora por dia 9[13] 161 a 173
135
+ detalhe << pagamento.formata_data_desconto # data para o desconto 9[06] 174 a 179
136
+ detalhe << pagamento.formata_valor_desconto # valor do desconto 9[13] 180 a 192
137
+ detalhe << pagamento.formata_valor_iof # valor do IOF 9[13] 193 a 205
138
+ detalhe << pagamento.formata_valor_abatimento # valor do abatimento 9[13] 206 a 218
139
+ detalhe << pagamento.identificacao_sacado # tipo pagador 9[02] 219 a 220
140
+ detalhe << pagamento.documento_sacado.to_s.rjust(14, '0') # documento do pagador 9[14] 221 a 234
141
+ detalhe << pagamento.nome_sacado.format_size(37) # nome do pagador 9[37] 235 a 271
142
+ detalhe << ' ' # complemento (brancos) X[03] 272 a 274
143
+ detalhe << pagamento.endereco_sacado.format_size(40) # endereco do pagador X[52] 275 a 314
144
+ detalhe << pagamento.bairro_sacado.format_size(12) # bairro do pagador X[12] 315 a 326
145
+ detalhe << pagamento.cep_sacado.gsub(/[.-]/i, '') # CEP do pagador X[08] 327 a 334
146
+ detalhe << pagamento.cidade_sacado.format_size(15) # cidade do pagador X[15] 335 a 349
147
+ detalhe << pagamento.uf_sacado # UF do pagador X[02] 350 a 351
148
+ detalhe << ''.ljust(40, ' ') # informacoes avalista X[40] 352 a 393 TODO implementar avalista
149
+ detalhe << pagamento.dias_protesto.to_s.ljust(2, ' ') # numero de dias para protesto X[02] 392 a 393
150
+ detalhe << ' ' # complemento (brancos) X[01] 394 a 394
151
+ detalhe << sequencial.to_s.rjust(6, '0') # sequencial do registro 9[06] 395 a 400
152
+ end
153
+
154
+ def monta_detalhe_multa(pagamento, sequencial)
155
+ raise Brcobranca::RemessaInvalida, pagamento if pagamento.invalid?
156
+
157
+ detalhe = '5'
158
+ detalhe += '99' # Tipo de Serviço: “99” (Cobrança de Multa) 9[02] 002 a 003
159
+ detalhe << pagamento.codigo_multa # código da multa 9[01] 004 a 004
160
+ detalhe << pagamento.formata_data_multa # Data de Inicio da Cobrança da Multa 9[06] 005 a 010
161
+ detalhe << pagamento.formata_valor_multa(12) # percentual multa 9[12] 011 a 022
162
+ detalhe << ''.rjust(372, ' ') # brancos 9[372] 023 a 394
163
+ detalhe << sequencial.to_s.rjust(6, '0') # numero do registro do arquivo 9[06] 395 a 400
164
+ detalhe
165
+ end
166
+ end
167
+ end
168
+ end
169
+ end
@@ -0,0 +1,167 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Brcobranca
4
+ module Remessa
5
+ module Cnab400
6
+ class BancoBrasilia < Brcobranca::Remessa::Cnab400::Base
7
+ attr_accessor :convenio
8
+
9
+ validates_presence_of :agencia, :conta_corrente, :digito_conta, message: 'não pode estar em branco.'
10
+ validates_length_of :agencia, maximum: 3, message: 'deve ter 3 dígitos.'
11
+ validates_length_of :conta_corrente, maximum: 7, message: 'deve ter 7 dígitos.'
12
+ validates_length_of :carteira, maximum: 1, message: 'deve ter 1 dígito.'
13
+ validates_length_of :digito_conta, maximum: 1, message: 'deve ter 1 dígito.'
14
+
15
+ # Nova instancia do Banco do Nordeste
16
+ def initialize(campos = {})
17
+ campos = {
18
+ aceite: 'N'
19
+ }.merge!(campos)
20
+
21
+ super(campos)
22
+ end
23
+
24
+ def agencia=(valor)
25
+ @agencia = valor.to_s.rjust(3, '0') if valor
26
+ end
27
+
28
+ def conta_corrente=(valor)
29
+ @conta_corrente = valor.to_s.rjust(7, '0') if valor
30
+ end
31
+
32
+ def carteira=(valor)
33
+ @carteira = valor.to_s.rjust(1, '0') if valor
34
+ end
35
+
36
+ def cod_banco
37
+ '070'
38
+ end
39
+
40
+ def nome_banco
41
+ ''
42
+ end
43
+
44
+ def data_formacao
45
+ Time.now.strftime('%Y%m%d%H%M%S')
46
+ end
47
+
48
+ def quantidade_registros
49
+ (pagamentos.size + 1).to_s.rjust(6, '0')
50
+ end
51
+
52
+ def monta_header
53
+ "DCB001075#{info_conta}#{data_formacao}#{quantidade_registros}"
54
+ end
55
+
56
+ # Informacoes da conta corrente do cedente
57
+ #
58
+ # @return [String]
59
+ #
60
+ def info_conta
61
+ # CAMPO TAMANHO
62
+ # agencia 3
63
+ # conta corrente 7
64
+ "#{agencia}#{conta_corrente}"
65
+ end
66
+
67
+ # Complemento do header
68
+ # (no caso do Banco de Brasilia, não é usado)
69
+ #
70
+ # @return [String]
71
+ #
72
+ def complemento; end
73
+
74
+ # Codigo da carteira de acordo com a documentacao do Banco do Nordeste
75
+ #
76
+ # @return [String]
77
+ #
78
+ def codigo_carteira
79
+ carteira.to_s
80
+ end
81
+
82
+ def monta_nosso_numero(pagamento)
83
+ return nosso_numero.rjust(12, '0') if carteira == '3'
84
+
85
+ formacao = "#{carteira}#{pagamento.nosso_numero.to_s.rjust(6, '0')}#{cod_banco}"
86
+
87
+ formacao += formacao.modulo10.to_s
88
+ formacao << formacao.modulo11(
89
+ multiplicador: (2..7).to_a,
90
+ mapeamento: { 10 => 0, 11 => 0 }
91
+ ) { |total| 11 - (total % 11) }.to_s
92
+ end
93
+
94
+ def codigo_tipo_juros(pagamento)
95
+ return '50' if pagamento.valor_mora.to_f > 0.0
96
+
97
+ '00'
98
+ end
99
+
100
+ def codigo_tipo_desconto(pagamento)
101
+ return '52' if pagamento.valor_desconto.to_f > 0.0
102
+
103
+ '00'
104
+ end
105
+
106
+ # Dígito verificador do nosso número.
107
+ #
108
+ # @param nosso_numero
109
+ #
110
+ # @return [String] 1 caracteres numéricos.
111
+ def digito_nosso_numero(nosso_numero); end
112
+
113
+ # Detalhe do arquivo
114
+ #
115
+ # @param pagamento [PagamentoCnab400]
116
+ # objeto contendo as informacoes referentes ao boleto (valor, vencimento, cliente)
117
+ # @param sequencial
118
+ # num. sequencial do registro no arquivo
119
+ #
120
+ # @return [String]
121
+ #
122
+ def monta_detalhe(pagamento, _sequencial)
123
+ raise Brcobranca::RemessaInvalida, pagamento if pagamento.invalid?
124
+
125
+ detalhe = '01' # identificacao transacao 9[02]
126
+ detalhe += agencia # agencia 9[03]
127
+ detalhe << conta_corrente # conta corrente 9[07]
128
+ detalhe << pagamento.documento_sacado.to_s.rjust(14, '0') # documento do pagador 9[14]
129
+ detalhe << pagamento.nome_sacado.format_size(35) # nome do pagador X[35]
130
+ detalhe << pagamento.endereco_sacado.format_size(35) # endereco do pagador X[35]
131
+ detalhe << pagamento.cidade_sacado.format_size(15) # cidade do pagador X[15]
132
+ detalhe << pagamento.uf_sacado # uf do pagador X[02]
133
+ detalhe << pagamento.cep_sacado # cep do pagador 9[08]
134
+ detalhe << pagamento.identificacao_sacado(false).to_s # tipo de pessoa 9[01]
135
+ detalhe << pagamento.documento_ou_numero.to_s.rjust(13, '0') # seu numero 9[13]
136
+ detalhe << codigo_carteira # categoria de cobranca 9[01]
137
+ detalhe << pagamento.data_emissao.strftime('%d%m%Y') # data de emissao 9[08]
138
+ detalhe << '21' # tipo do documento 9[02]
139
+ detalhe << '0' # código da natureza 9[01]
140
+ detalhe << '0' # código da cond. pagamento 9[02]
141
+ detalhe << '02' # código da moeda 9[02]
142
+ detalhe << cod_banco # código do banco 9[03]
143
+ detalhe << agencia.rjust(4, '0') # código da agênica 9[04]
144
+ detalhe << ''.rjust(30, ' ') # praca de cobranca X[30]
145
+ detalhe << pagamento.data_vencimento.strftime('%d%m%Y') # data do vencimento 9[08]
146
+ detalhe << pagamento.formata_valor(14) # valor do documento 9[14]
147
+ detalhe << monta_nosso_numero(pagamento) # nosso numero 9[12]
148
+ detalhe << codigo_tipo_juros(pagamento) # codigo tipo juros 9[02]
149
+ detalhe << pagamento.formata_valor_mora(14) # valor mora ao dia 9[14]
150
+ detalhe << pagamento.formata_valor_abatimento(14) # valor do abatimento 9[14]
151
+ detalhe << codigo_tipo_desconto(pagamento) # codigo tipo desconto 9[02]
152
+ detalhe << pagamento.formata_data_desconto('%d%m%Y') # data limite para desconto 9[08]
153
+ detalhe << pagamento.formata_valor_desconto(14) # valor do desconto 9[14]
154
+ detalhe << '00' # primeira instrucao 9[02]
155
+ detalhe << '00' # prazo da instrucao 9[02]
156
+ detalhe << '00' # segunda instrucao 9[02]
157
+ detalhe << '00' # prazo da instrucao 9[02]
158
+ detalhe << '00000' # taxa referente a instrucao 9[05]
159
+ detalhe << empresa_mae.format_size(40) # emitente do titulo X[40]
160
+ detalhe << ''.rjust(40, ' ') # mensagem livre X[40]
161
+ detalhe << ''.rjust(32, ' ') # branco X[32]
162
+ detalhe
163
+ end
164
+ end
165
+ end
166
+ end
167
+ end