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.
- checksums.yaml +7 -0
- data/CHANGELOG.md +3 -0
- data/LICENSE +20 -0
- data/README.md +91 -0
- data/Rakefile +8 -0
- data/lib/brcobranca/arquivos/logos/ailos.eps +412 -0
- data/lib/brcobranca/arquivos/logos/ailos_carne.eps +412 -0
- data/lib/brcobranca/arquivos/logos/bancobrasil.eps +5402 -0
- data/lib/brcobranca/arquivos/logos/bancobrasil_carne.eps +5410 -0
- data/lib/brcobranca/arquivos/logos/bancobrasilia.eps +0 -0
- data/lib/brcobranca/arquivos/logos/bancobrasilia_carne.eps +0 -0
- data/lib/brcobranca/arquivos/logos/banconordeste.eps +0 -0
- data/lib/brcobranca/arquivos/logos/banconordeste_carne.eps +0 -0
- data/lib/brcobranca/arquivos/logos/banestes.eps +5198 -0
- data/lib/brcobranca/arquivos/logos/banestes_carne.eps +5206 -0
- data/lib/brcobranca/arquivos/logos/banrisul.eps +121 -0
- data/lib/brcobranca/arquivos/logos/banrisul_carne.eps +121 -0
- data/lib/brcobranca/arquivos/logos/bradesco.eps +5210 -0
- data/lib/brcobranca/arquivos/logos/bradesco_carne.eps +5214 -0
- data/lib/brcobranca/arquivos/logos/caixa.eps +5111 -0
- data/lib/brcobranca/arquivos/logos/caixa_carne.eps +5115 -0
- data/lib/brcobranca/arquivos/logos/cecred.eps +0 -0
- data/lib/brcobranca/arquivos/logos/cecred_carne.eps +0 -0
- data/lib/brcobranca/arquivos/logos/citibank.eps +745 -0
- data/lib/brcobranca/arquivos/logos/citibank_carne.eps +745 -0
- data/lib/brcobranca/arquivos/logos/credisis.eps +0 -0
- data/lib/brcobranca/arquivos/logos/credisis_carne.eps +0 -0
- data/lib/brcobranca/arquivos/logos/hsbc.eps +5124 -0
- data/lib/brcobranca/arquivos/logos/hsbc_carne.eps +5128 -0
- data/lib/brcobranca/arquivos/logos/itau.eps +5318 -0
- data/lib/brcobranca/arquivos/logos/itau_carne.eps +5322 -0
- data/lib/brcobranca/arquivos/logos/safra.eps +0 -0
- data/lib/brcobranca/arquivos/logos/safra_carne.eps +0 -0
- data/lib/brcobranca/arquivos/logos/santander.eps +5305 -0
- data/lib/brcobranca/arquivos/logos/santander_carne.eps +5313 -0
- data/lib/brcobranca/arquivos/logos/sicoob.eps +5375 -0
- data/lib/brcobranca/arquivos/logos/sicoob_carne.eps +5379 -0
- data/lib/brcobranca/arquivos/logos/sicredi.eps +5379 -0
- data/lib/brcobranca/arquivos/logos/sicredi_carne.eps +5383 -0
- data/lib/brcobranca/arquivos/logos/unicred.eps +0 -0
- data/lib/brcobranca/arquivos/logos/unicred_carne.eps +0 -0
- data/lib/brcobranca/arquivos/templates/modelo_carne.eps +1112 -0
- data/lib/brcobranca/arquivos/templates/modelo_generico.eps +0 -0
- data/lib/brcobranca/arquivos/templates/modelo_generico2.eps +9967 -0
- data/lib/brcobranca/boleto/ailos.rb +89 -0
- data/lib/brcobranca/boleto/banco_brasil.rb +165 -0
- data/lib/brcobranca/boleto/banco_brasilia.rb +102 -0
- data/lib/brcobranca/boleto/banco_nordeste.rb +80 -0
- data/lib/brcobranca/boleto/banestes.rb +86 -0
- data/lib/brcobranca/boleto/banrisul.rb +95 -0
- data/lib/brcobranca/boleto/base.rb +256 -0
- data/lib/brcobranca/boleto/bradesco.rb +100 -0
- data/lib/brcobranca/boleto/caixa.rb +123 -0
- data/lib/brcobranca/boleto/citibank.rb +97 -0
- data/lib/brcobranca/boleto/credisis.rb +118 -0
- data/lib/brcobranca/boleto/hsbc.rb +96 -0
- data/lib/brcobranca/boleto/itau.rb +138 -0
- data/lib/brcobranca/boleto/safra.rb +152 -0
- data/lib/brcobranca/boleto/santander.rb +86 -0
- data/lib/brcobranca/boleto/sicoob.rb +120 -0
- data/lib/brcobranca/boleto/sicredi.rb +145 -0
- data/lib/brcobranca/boleto/template/base.rb +28 -0
- data/lib/brcobranca/boleto/template/rghost.rb +308 -0
- data/lib/brcobranca/boleto/template/rghost2.rb +264 -0
- data/lib/brcobranca/boleto/template/rghost_bolepix.rb +286 -0
- data/lib/brcobranca/boleto/template/rghost_carne.rb +319 -0
- data/lib/brcobranca/boleto/unicred.rb +99 -0
- data/lib/brcobranca/calculo.rb +120 -0
- data/lib/brcobranca/calculo_data.rb +63 -0
- data/lib/brcobranca/currency.rb +69 -0
- data/lib/brcobranca/formatacao.rb +104 -0
- data/lib/brcobranca/formatacao_string.rb +37 -0
- data/lib/brcobranca/limpeza.rb +20 -0
- data/lib/brcobranca/remessa/base.rb +72 -0
- data/lib/brcobranca/remessa/cnab240/ailos.rb +156 -0
- data/lib/brcobranca/remessa/cnab240/banco_brasil.rb +249 -0
- data/lib/brcobranca/remessa/cnab240/base.rb +529 -0
- data/lib/brcobranca/remessa/cnab240/base_correspondente.rb +307 -0
- data/lib/brcobranca/remessa/cnab240/caixa.rb +171 -0
- data/lib/brcobranca/remessa/cnab240/santander.rb +225 -0
- data/lib/brcobranca/remessa/cnab240/sicoob.rb +229 -0
- data/lib/brcobranca/remessa/cnab240/sicoob_banco_brasil.rb +101 -0
- data/lib/brcobranca/remessa/cnab240/sicredi.rb +183 -0
- data/lib/brcobranca/remessa/cnab240/unicred.rb +10 -0
- data/lib/brcobranca/remessa/cnab400/banco_brasil.rb +169 -0
- data/lib/brcobranca/remessa/cnab400/banco_brasilia.rb +167 -0
- data/lib/brcobranca/remessa/cnab400/banco_nordeste.rb +161 -0
- data/lib/brcobranca/remessa/cnab400/banrisul.rb +158 -0
- data/lib/brcobranca/remessa/cnab400/base.rb +132 -0
- data/lib/brcobranca/remessa/cnab400/bradesco.rb +155 -0
- data/lib/brcobranca/remessa/cnab400/citibank.rb +139 -0
- data/lib/brcobranca/remessa/cnab400/credisis.rb +130 -0
- data/lib/brcobranca/remessa/cnab400/itau.rb +162 -0
- data/lib/brcobranca/remessa/cnab400/santander.rb +233 -0
- data/lib/brcobranca/remessa/cnab400/sicoob.rb +305 -0
- data/lib/brcobranca/remessa/cnab400/sicredi.rb +117 -0
- data/lib/brcobranca/remessa/cnab400/unicred.rb +259 -0
- data/lib/brcobranca/remessa/pagamento.rb +320 -0
- data/lib/brcobranca/retorno/base.rb +11 -0
- data/lib/brcobranca/retorno/cnab240/ailos.rb +104 -0
- data/lib/brcobranca/retorno/cnab240/base.rb +41 -0
- data/lib/brcobranca/retorno/cnab240/caixa.rb +47 -0
- data/lib/brcobranca/retorno/cnab240/santander.rb +99 -0
- data/lib/brcobranca/retorno/cnab240/sicoob.rb +101 -0
- data/lib/brcobranca/retorno/cnab240/sicredi.rb +82 -0
- data/lib/brcobranca/retorno/cnab400/banco_brasil.rb +130 -0
- data/lib/brcobranca/retorno/cnab400/banco_brasilia.rb +90 -0
- data/lib/brcobranca/retorno/cnab400/banco_nordeste.rb +113 -0
- data/lib/brcobranca/retorno/cnab400/banrisul.rb +42 -0
- data/lib/brcobranca/retorno/cnab400/base.rb +53 -0
- data/lib/brcobranca/retorno/cnab400/bradesco.rb +124 -0
- data/lib/brcobranca/retorno/cnab400/credisis.rb +116 -0
- data/lib/brcobranca/retorno/cnab400/itau.rb +144 -0
- data/lib/brcobranca/retorno/cnab400/santander.rb +58 -0
- data/lib/brcobranca/retorno/cnab400/sicredi.rb +78 -0
- data/lib/brcobranca/retorno/cnab400/unicred.rb +123 -0
- data/lib/brcobranca/retorno/retorno_cbr643.rb +48 -0
- data/lib/brcobranca/retorno/retorno_cnab240.rb +99 -0
- data/lib/brcobranca/retorno/retorno_cnab400.rb +71 -0
- data/lib/brcobranca/util/date.rb +21 -0
- data/lib/brcobranca/util/empresa.rb +29 -0
- data/lib/brcobranca/util/errors.rb +76 -0
- data/lib/brcobranca/validations.rb +208 -0
- data/lib/brcobranca/version.rb +5 -0
- data/lib/brcobranca.rb +200 -0
- 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,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
|