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,139 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Brcobranca
|
4
|
+
module Remessa
|
5
|
+
module Cnab400
|
6
|
+
class Citibank < Brcobranca::Remessa::Cnab400::Base
|
7
|
+
# Identificação do portfolio.
|
8
|
+
# Necessário consultar o Citibank para informações referentes à conta cobrança e carteira do cliente.
|
9
|
+
attr_accessor :portfolio
|
10
|
+
|
11
|
+
validates_presence_of :documento_cedente, :portfolio, message: 'não pode estar em branco.'
|
12
|
+
validates_length_of :documento_cedente, minimum: 11, maximum: 14, message: 'deve ter entre 11 e 14 dígitos.'
|
13
|
+
validates_length_of :carteira, maximum: 1, message: 'deve ter no máximo 1 dígito.'
|
14
|
+
validates_length_of :portfolio, maximum: 20, message: 'deve ter no máximo 20 dígitos.'
|
15
|
+
|
16
|
+
# Nova instancia do Citibank
|
17
|
+
def initialize(campos = {})
|
18
|
+
campos = { aceite: 'N', carteira: '1' }.merge!(campos)
|
19
|
+
super(campos)
|
20
|
+
end
|
21
|
+
|
22
|
+
def cod_banco
|
23
|
+
'745'
|
24
|
+
end
|
25
|
+
|
26
|
+
def nome_banco
|
27
|
+
'CITIBANK'.ljust(15, ' ')
|
28
|
+
end
|
29
|
+
|
30
|
+
# Informacoes da conta corrente do cedente
|
31
|
+
#
|
32
|
+
# @return [String]
|
33
|
+
#
|
34
|
+
def info_conta
|
35
|
+
# CAMPO TAMANHO
|
36
|
+
# portfolio 20
|
37
|
+
portfolio.rjust(20, ' ')
|
38
|
+
end
|
39
|
+
|
40
|
+
# Complemento do header
|
41
|
+
# (no caso do Citibank, sao apenas espacos em branco)
|
42
|
+
#
|
43
|
+
# @return [String]
|
44
|
+
#
|
45
|
+
def complemento
|
46
|
+
# CAMPO TAMANHO
|
47
|
+
# Densidade de gravação 5
|
48
|
+
# Unidade de densidade de gravação 3
|
49
|
+
'01600BPI'.rjust(294, ' ')
|
50
|
+
end
|
51
|
+
|
52
|
+
# Detalhe do arquivo
|
53
|
+
#
|
54
|
+
# @param pagamento [PagamentoCnab400]
|
55
|
+
# objeto contendo as informacoes referentes ao boleto (valor, vencimento, cliente)
|
56
|
+
# @param sequencial
|
57
|
+
# num. sequencial do registro no arquivo
|
58
|
+
#
|
59
|
+
# @return [String]
|
60
|
+
#
|
61
|
+
def monta_detalhe(pagamento, sequencial)
|
62
|
+
raise Brcobranca::RemessaInvalida, pagamento if pagamento.invalid?
|
63
|
+
|
64
|
+
detalhe = '1' # identificacao transacao 9[01]
|
65
|
+
detalhe += Brcobranca::Util::Empresa.new(documento_cedente).tipo # tipo de identificacao da empresa 9[02]
|
66
|
+
detalhe << documento_cedente.to_s.rjust(14, '0') # cpf/cnpj da empresa 9[14]
|
67
|
+
detalhe << portfolio # portfolio X[20]
|
68
|
+
detalhe << pagamento.documento_ou_numero.to_s.ljust(25) # identificacao do tit. na empresa X[25]
|
69
|
+
detalhe << pagamento.especie_titulo # espécie do título 9[02] - 00 = DMI – Duplicata Mercantil por Indicação, 02 = DM – Duplicata Mercantil
|
70
|
+
detalhe << pagamento.nosso_numero.to_s.rjust(12, '0') # nosso numero 9[12]
|
71
|
+
detalhe << ''.rjust(6, ' ') # brancos X[06]
|
72
|
+
detalhe << pagamento.formata_data_segundo_desconto # data limite para o segundo desconto 9[06]
|
73
|
+
detalhe << pagamento.formata_valor_segundo_desconto # valor do segundo desconto 9[13]
|
74
|
+
detalhe << '000' # carne 9[03] - Válido apenas quando o campo 148/149 for igual a 03
|
75
|
+
detalhe << '000' # parcela 9[03] - Só preencher se o banco for imprimir e enviar e for um carnê
|
76
|
+
detalhe << carteira # codigo da carteira X[01] - Código 1 = Cobrança Simples, Código 2 = Cobrança Caucionada
|
77
|
+
detalhe << pagamento.identificacao_ocorrencia # identificacao ocorrencia 9[02]
|
78
|
+
detalhe << pagamento.numero.to_s.rjust(10, '0') # numero do documento X[10]
|
79
|
+
detalhe << pagamento.data_vencimento.strftime('%d%m%y') # data do vencimento 9[06]
|
80
|
+
detalhe << pagamento.formata_valor # valor do documento 9[13]
|
81
|
+
detalhe << cod_banco # codigo banco 9[03]
|
82
|
+
detalhe << ''.rjust(5, '0') # agencia cobradora - deixar zero 9[05]
|
83
|
+
|
84
|
+
# 01 = Banco imprime (apenas boletos simples não personalizados) 03 = Banco imprime de forma personalizada (boletos simples, personalizados e carnês)
|
85
|
+
# 07 = Banco não imprime
|
86
|
+
# 08 = Impressão via WEB (boleto por e-mail) sem impressão banco 09 = Impressão via WEB (boleto por e-mail) com impressão banco Observações:
|
87
|
+
# - Quando código 03, o cliente deverá entrar em contato com o banco, antes de enviar o arquivo, para definir a personalização do boleto.
|
88
|
+
# - Quando código 07, o campo 065/076, deverá ter o NOSSO NÚMERO atribuído pelo cliente.
|
89
|
+
# Se o portfolio do cliente for cobrança flexível:
|
90
|
+
# 04 = Título flex com boleto impresso via web (boleto por e-mail), aceita pagamento parcial
|
91
|
+
# 06 = Título flex com boleto impresso via web (boleto por e-mail), não aceita pagamento parcial
|
92
|
+
# (No caso de Cobrança Flexível, o campo 065/076 – NOSSO NÚMERO, no arquivo remessa, deve ser preenchido pelo cliente,
|
93
|
+
# ou será preenchido no banco após a entrada do arquivo no sistema de cobrança, visto que os códigos utilizados serão 04 ou 06 no campo Tipo de Emissão.)
|
94
|
+
# (Para a modalidade de Cobrança Flexível, a opção de envio por e- mail deverá ser um parâmetro cadastral.)
|
95
|
+
detalhe << '07' # Tipo de Emissão X[02]
|
96
|
+
detalhe << aceite # aceite (A/N) X[01]
|
97
|
+
detalhe << pagamento.data_emissao.strftime('%d%m%y') # data de emissao 9[06]
|
98
|
+
|
99
|
+
# 00 = SEM INSTRUÇÂO: após o vencimento, o título sofrerá a instrução presente no cadastro do cliente. Não havendo instruções no cadastro do cliente, o título será baixado automaticamente após 60 dias e o pagamento, após vencimento, poderá ser restrito ao Citibank
|
100
|
+
# 06 = PROTESTAR: quando esta instrução for dada também deverá ser preenchida a posição 159/160
|
101
|
+
# 07 = NEGATIVAR: instrução utilizada para envio de título para negativação na Serasa. Quando esta for informada, também deverá ser preenchida as posições 159/160.
|
102
|
+
# IMPORTANTE: essa instrução somente poderá ser utilizada após assinatura de contrato específico para o produto.
|
103
|
+
# 09 = DEVOLVER: esta é a instrução de BAIXA quando esta instrução for dada também deverá ser preenchida a posição 159/160
|
104
|
+
# 10 = SUSTAR PROTESTO: instrução utilizada para títulos que NÃO estejam em cartório
|
105
|
+
detalhe << '00' # Instrução para o título 9[02]
|
106
|
+
|
107
|
+
# Quando posição 157/158 (Instrução para título) conter instrução 06 ou 09,
|
108
|
+
# este campo deverá conter a quantidade de dias válidos para execução da instrução.
|
109
|
+
detalhe << '00' # Número de dias válidos para instrução 9[02]
|
110
|
+
detalhe << pagamento.formata_valor_mora # valor mora ao dia 9[13]
|
111
|
+
detalhe << pagamento.formata_data_desconto # data limite para desconto 9[06]
|
112
|
+
detalhe << pagamento.formata_valor_desconto # valor do desconto 9[13]
|
113
|
+
detalhe << pagamento.formata_valor_iof # valor do iof 9[13]
|
114
|
+
detalhe << pagamento.formata_valor_abatimento # valor do abatimento 9[13]
|
115
|
+
detalhe << pagamento.identificacao_sacado # identificacao do pagador 9[02]
|
116
|
+
detalhe << pagamento.documento_sacado.to_s.rjust(14, '0') # documento do pagador 9[14]
|
117
|
+
detalhe << pagamento.nome_sacado.format_size(40) # nome do pagador X[40]
|
118
|
+
detalhe << pagamento.endereco_sacado.format_size(40) # endereco do pagador X[40]
|
119
|
+
detalhe << pagamento.bairro_sacado.format_size(12) # bairro do pagador X[12]
|
120
|
+
detalhe << pagamento.cep_sacado # cep do pagador 9[08]
|
121
|
+
detalhe << pagamento.cidade_sacado.format_size(15) # cidade do pagador X[15]
|
122
|
+
detalhe << pagamento.uf_sacado # uf do pagador X[02]
|
123
|
+
|
124
|
+
# Este campo tem 3 finalidades:
|
125
|
+
# a) mensagem da empresa impressa no boleto pelo banco
|
126
|
+
# (para isto na primeira posição deve haver um
|
127
|
+
# asterisco);
|
128
|
+
# b) sem o asterisco, este campo será o nome do Sacador/Avalista, quando preenchido;
|
129
|
+
# c) Se posição 148/149 (Tipo de Emissão) estiver com código 08 ou 09, este campo será o e-mail do sacado.
|
130
|
+
detalhe << pagamento.nome_avalista.format_size(40) # Sacador/Mensagens X[40]
|
131
|
+
detalhe << ''.rjust(2, ' ') # Brancos X[06]
|
132
|
+
detalhe << '9' # moeda 9[01] - Código 9 = REAIS Código 5 = Dólar
|
133
|
+
detalhe << sequencial.to_s.rjust(6, '0') # numero do registro no arquivo 9[06]
|
134
|
+
detalhe
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
139
|
+
end
|
@@ -0,0 +1,130 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Brcobranca
|
4
|
+
module Remessa
|
5
|
+
module Cnab400
|
6
|
+
class Credisis < Brcobranca::Remessa::Cnab400::Base
|
7
|
+
attr_accessor :codigo_cedente, :documento_cedente, :convenio
|
8
|
+
|
9
|
+
validates_presence_of :agencia, :conta_corrente, :codigo_cedente, :digito_conta,
|
10
|
+
message: 'não pode estar em branco.'
|
11
|
+
validates_length_of :agencia, maximum: 4, message: 'deve ter 4 dígitos.'
|
12
|
+
validates_length_of :codigo_cedente, maximum: 4, message: 'deve ter 4 dígitos.'
|
13
|
+
validates_length_of :conta_corrente, maximum: 8, message: 'deve ter 8 dígitos.'
|
14
|
+
validates_length_of :carteira, maximum: 2, message: 'deve ter 2 dígitos.'
|
15
|
+
validates_length_of :digito_conta, maximum: 1, message: 'deve ter 1 dígito.'
|
16
|
+
validates_length_of :sequencial_remessa, :convenio, maximum: 7, message: 'deve ter 7 dígitos.'
|
17
|
+
|
18
|
+
# Nova instancia do CrediSIS
|
19
|
+
def initialize(campos = {})
|
20
|
+
campos = { aceite: 'N' }.merge!(campos)
|
21
|
+
super(campos)
|
22
|
+
end
|
23
|
+
|
24
|
+
def agencia=(valor)
|
25
|
+
@agencia = valor.to_s.rjust(4, '0') if valor
|
26
|
+
end
|
27
|
+
|
28
|
+
def conta_corrente=(valor)
|
29
|
+
@conta_corrente = valor.to_s.rjust(8, '0') if valor
|
30
|
+
end
|
31
|
+
|
32
|
+
def carteira=(valor)
|
33
|
+
@carteira = valor.to_s.rjust(2, '0') if valor
|
34
|
+
end
|
35
|
+
|
36
|
+
def sequencial_remessa=(valor)
|
37
|
+
@sequencial_remessa = valor.to_s.rjust(7, '0') if valor
|
38
|
+
end
|
39
|
+
|
40
|
+
def codigo_cedente=(valor)
|
41
|
+
@codigo_cedente = valor.to_s.rjust(4, '0') if valor
|
42
|
+
end
|
43
|
+
|
44
|
+
def cod_banco
|
45
|
+
'097'
|
46
|
+
end
|
47
|
+
|
48
|
+
def nome_banco
|
49
|
+
'CENTRALCRED'.ljust(15, ' ')
|
50
|
+
end
|
51
|
+
|
52
|
+
# Informacoes da conta corrente do cedente
|
53
|
+
#
|
54
|
+
# @return [String]
|
55
|
+
#
|
56
|
+
def info_conta
|
57
|
+
# CAMPO TAMANHO
|
58
|
+
# agencia 4
|
59
|
+
# complemento 1
|
60
|
+
# conta corrente 8
|
61
|
+
# digito da conta 1
|
62
|
+
# complemento 6
|
63
|
+
"#{agencia} #{conta_corrente}#{digito_conta}#{''.rjust(6, ' ')}"
|
64
|
+
end
|
65
|
+
|
66
|
+
# Complemento do header
|
67
|
+
#
|
68
|
+
# @return [String]
|
69
|
+
#
|
70
|
+
def complemento
|
71
|
+
sequencial_remessa.to_s.ljust(294, ' ')
|
72
|
+
end
|
73
|
+
|
74
|
+
def formata_nosso_numero(nosso_numero)
|
75
|
+
"0#{codigo_cedente}#{nosso_numero.rjust(6, '0')}"
|
76
|
+
end
|
77
|
+
|
78
|
+
# Detalhe do arquivo
|
79
|
+
#
|
80
|
+
# @param pagamento [PagamentoCnab400]
|
81
|
+
# objeto contendo as informacoes referentes ao boleto (valor, vencimento, cliente)
|
82
|
+
# @param sequencial
|
83
|
+
# num. sequencial do registro no arquivo
|
84
|
+
#
|
85
|
+
# @return [String]
|
86
|
+
#
|
87
|
+
def monta_detalhe(pagamento, sequencial)
|
88
|
+
raise Brcobranca::RemessaInvalida, pagamento if pagamento.invalid?
|
89
|
+
|
90
|
+
detalhe = '1' # identificacao transacao 9[01]
|
91
|
+
detalhe += Brcobranca::Util::Empresa.new(documento_cedente).tipo # tipo de identificacao da empresa 9[02]
|
92
|
+
detalhe << documento_cedente.to_s.rjust(14, '0') # cpf/cnpj da empresa 9[14]
|
93
|
+
detalhe << agencia # agencia 9[04]
|
94
|
+
detalhe << ''.rjust(1, ' ') # brancos X[01]
|
95
|
+
detalhe << conta_corrente # conta corrente 9[08]
|
96
|
+
detalhe << digito_conta # dac 9[01]
|
97
|
+
detalhe << ''.rjust(6, ' ') # complemento do registro (brancos) X[06]
|
98
|
+
detalhe << pagamento.documento_ou_numero.to_s.ljust(25) # identificacao do tit. na empresa X[25]
|
99
|
+
detalhe << formata_nosso_numero(pagamento.nosso_numero.to_s) # nosso numero 9[11]
|
100
|
+
detalhe << ''.rjust(37, ' ') # brancos X[37]
|
101
|
+
detalhe << pagamento.numero.to_s.rjust(10, '0') # numero do documento X[10]
|
102
|
+
detalhe << pagamento.data_vencimento.strftime('%d%m%y') # data do vencimento A[06]
|
103
|
+
detalhe << pagamento.formata_valor # valor do documento 9[13]
|
104
|
+
detalhe << ''.rjust(11, ' ') # brancos X[11]
|
105
|
+
detalhe << pagamento.data_emissao.strftime('%d%m%y') # data de emissao 9[06]
|
106
|
+
detalhe << ''.rjust(4, ' ') # brancos X[04]
|
107
|
+
detalhe << pagamento.formata_valor_mora(4).ljust(6, '0') # valor mora ao dia 9[06]
|
108
|
+
detalhe << pagamento.formata_percentual_multa.ljust(6, '0') # valor multa 9[06]
|
109
|
+
detalhe << ''.rjust(33, ' ') # brancos X[33]
|
110
|
+
detalhe << pagamento.formata_valor_desconto # valor do desconto 9[13]
|
111
|
+
detalhe << pagamento.identificacao_sacado # identificacao do pagador 9[02]
|
112
|
+
detalhe << pagamento.documento_sacado.to_s.rjust(14, '0') # documento do pagador 9[14]
|
113
|
+
detalhe << pagamento.nome_sacado.format_size(40) # nome do pagador A[40]
|
114
|
+
detalhe << pagamento.endereco_sacado.format_size(37) # endereco do pagador A[37]
|
115
|
+
detalhe << pagamento.bairro_sacado.format_size(15) # bairro do pagador X[15]
|
116
|
+
detalhe << pagamento.cep_sacado # cep do pagador 9[08]
|
117
|
+
detalhe << pagamento.cidade_sacado.format_size(15) # cidade do pagador A[15]
|
118
|
+
detalhe << pagamento.uf_sacado # uf do pagador A[02]
|
119
|
+
detalhe << pagamento.nome_avalista.format_size(25) # nome do sacador/avalista X[25]
|
120
|
+
detalhe << ''.rjust(1, ' ') # complemento do registro X[01]
|
121
|
+
detalhe << ''.rjust(14, ' ') # documento avalista X[14] *
|
122
|
+
detalhe << pagamento.dias_protesto.rjust(2, '0') # quantidade de dias do prazo 9[02]
|
123
|
+
detalhe << ''.rjust(1, ' ') # complemento do registro (brancos) X[01]
|
124
|
+
detalhe << sequencial.to_s.rjust(6, '0') # numero do registro no arquivo 9[06]
|
125
|
+
detalhe
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
@@ -0,0 +1,162 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Brcobranca
|
4
|
+
module Remessa
|
5
|
+
module Cnab400
|
6
|
+
class Itau < Brcobranca::Remessa::Cnab400::Base
|
7
|
+
VALOR_EM_REAIS = '1'
|
8
|
+
VALOR_EM_PERCENTUAL = '2'
|
9
|
+
|
10
|
+
validates_presence_of :agencia, :conta_corrente, message: 'não pode estar em branco.'
|
11
|
+
validates_presence_of :documento_cedente, :digito_conta, message: 'não pode estar em branco.'
|
12
|
+
validates_length_of :agencia, maximum: 4, message: 'deve ter 4 dígitos.'
|
13
|
+
validates_length_of :conta_corrente, maximum: 5, message: 'deve ter 5 dígitos.'
|
14
|
+
validates_length_of :documento_cedente, minimum: 11, maximum: 14, message: 'deve ter entre 11 e 14 dígitos.'
|
15
|
+
validates_length_of :carteira, maximum: 3, message: 'deve ter no máximo 3 dígitos.'
|
16
|
+
validates_length_of :digito_conta, maximum: 1, message: 'deve ter 1 dígito.'
|
17
|
+
|
18
|
+
# Nova instancia do Itau
|
19
|
+
def initialize(campos = {})
|
20
|
+
campos = { aceite: 'N' }.merge!(campos)
|
21
|
+
super(campos)
|
22
|
+
end
|
23
|
+
|
24
|
+
def agencia=(valor)
|
25
|
+
@agencia = valor.to_s.rjust(4, '0') if valor
|
26
|
+
end
|
27
|
+
|
28
|
+
def conta_corrente=(valor)
|
29
|
+
@conta_corrente = valor.to_s.rjust(5, '0') if valor
|
30
|
+
end
|
31
|
+
|
32
|
+
def carteira=(valor)
|
33
|
+
@carteira = valor.to_s.rjust(3, '0') if valor
|
34
|
+
end
|
35
|
+
|
36
|
+
def cod_banco
|
37
|
+
'341'
|
38
|
+
end
|
39
|
+
|
40
|
+
def nome_banco
|
41
|
+
'BANCO ITAU SA'.ljust(15, ' ')
|
42
|
+
end
|
43
|
+
|
44
|
+
# Informacoes da conta corrente do cedente
|
45
|
+
#
|
46
|
+
# @return [String]
|
47
|
+
#
|
48
|
+
def info_conta
|
49
|
+
# CAMPO TAMANHO
|
50
|
+
# agencia 4
|
51
|
+
# complemento 2
|
52
|
+
# conta corrente 5
|
53
|
+
# digito da conta 1
|
54
|
+
# complemento 8
|
55
|
+
"#{agencia}00#{conta_corrente}#{digito_conta}#{''.rjust(8, ' ')}"
|
56
|
+
end
|
57
|
+
|
58
|
+
# Complemento do header
|
59
|
+
# (no caso do Itau, sao apenas espacos em branco)
|
60
|
+
#
|
61
|
+
# @return [String]
|
62
|
+
#
|
63
|
+
def complemento
|
64
|
+
''.rjust(294, ' ')
|
65
|
+
end
|
66
|
+
|
67
|
+
# Codigo da carteira de acordo com a documentacao o Itau
|
68
|
+
# se a carteira nao forem as testadas (150, 191 e 147)
|
69
|
+
# retorna 'I' que é o codigo das carteiras restantes na documentacao
|
70
|
+
#
|
71
|
+
# @return [String]
|
72
|
+
#
|
73
|
+
def codigo_carteira
|
74
|
+
return 'U' if carteira.to_s == '150'
|
75
|
+
return '1' if carteira.to_s == '191'
|
76
|
+
return 'E' if carteira.to_s == '147'
|
77
|
+
|
78
|
+
'I'
|
79
|
+
end
|
80
|
+
|
81
|
+
# Detalhe do arquivo
|
82
|
+
#
|
83
|
+
# @param pagamento [PagamentoCnab400]
|
84
|
+
# objeto contendo as informacoes referentes ao boleto (valor, vencimento, cliente)
|
85
|
+
# @param sequencial
|
86
|
+
# num. sequencial do registro no arquivo
|
87
|
+
#
|
88
|
+
# @return [String]
|
89
|
+
#
|
90
|
+
def monta_detalhe(pagamento, sequencial)
|
91
|
+
raise Brcobranca::RemessaInvalida, pagamento if pagamento.invalid?
|
92
|
+
|
93
|
+
detalhe = '1' # identificacao transacao 9[01]
|
94
|
+
detalhe += Brcobranca::Util::Empresa.new(documento_cedente).tipo # tipo de identificacao da empresa 9[02]
|
95
|
+
detalhe << documento_cedente.to_s.rjust(14, '0') # cpf/cnpj da empresa 9[14]
|
96
|
+
detalhe << agencia # agencia 9[04]
|
97
|
+
detalhe << ''.rjust(2, '0') # complemento de registro (zeros) 9[02]
|
98
|
+
detalhe << conta_corrente # conta corrente 9[05]
|
99
|
+
detalhe << digito_conta # dac 9[01]
|
100
|
+
detalhe << ''.rjust(4, ' ') # complemento do registro (brancos) X[04]
|
101
|
+
detalhe << ''.rjust(4, '0') # codigo cancelamento (zeros) 9[04]
|
102
|
+
detalhe << pagamento.documento_ou_numero.to_s.ljust(25) # identificacao do tit. na empresa X[25]
|
103
|
+
detalhe << pagamento.nosso_numero.to_s.rjust(8, '0') # nosso numero 9[08]
|
104
|
+
detalhe << ''.rjust(13, '0') # quantidade de moeda variavel 9[13]
|
105
|
+
detalhe << carteira # carteira 9[03]
|
106
|
+
detalhe << ''.rjust(21, ' ') # identificacao da operacao no banco X[21]
|
107
|
+
detalhe << codigo_carteira # codigo da carteira X[01]
|
108
|
+
detalhe << pagamento.identificacao_ocorrencia # identificacao ocorrencia 9[02]
|
109
|
+
detalhe << pagamento.numero.to_s.rjust(10, '0') # numero do documento X[10]
|
110
|
+
detalhe << pagamento.data_vencimento.strftime('%d%m%y') # data do vencimento 9[06]
|
111
|
+
detalhe << pagamento.formata_valor # valor do documento 9[13]
|
112
|
+
detalhe << cod_banco # codigo banco 9[03]
|
113
|
+
detalhe << ''.rjust(5, '0') # agencia cobradora - deixar zero 9[05]
|
114
|
+
detalhe << pagamento.especie_titulo # especie do titulo X[02]
|
115
|
+
detalhe << aceite # aceite (A/N) X[01]
|
116
|
+
detalhe << pagamento.data_emissao.strftime('%d%m%y') # data de emissao 9[06]
|
117
|
+
detalhe << pagamento.cod_primeira_instrucao.to_s.rjust(2, '0') # 1a instrucao - deixar zero X[02]
|
118
|
+
detalhe << pagamento.cod_segunda_instrucao.to_s.rjust(2, '0') # 2a instrucao - deixar zero X[02]
|
119
|
+
detalhe << pagamento.formata_valor_mora # valor mora ao dia 9[13]
|
120
|
+
detalhe << pagamento.formata_data_desconto # data limite para desconto 9[06]
|
121
|
+
detalhe << pagamento.formata_valor_desconto # valor do desconto 9[13]
|
122
|
+
detalhe << pagamento.formata_valor_iof # valor do iof 9[13]
|
123
|
+
detalhe << pagamento.formata_valor_abatimento # valor do abatimento 9[13]
|
124
|
+
detalhe << pagamento.identificacao_sacado # identificacao do pagador 9[02]
|
125
|
+
detalhe << pagamento.documento_sacado.to_s.rjust(14, '0') # documento do pagador 9[14]
|
126
|
+
detalhe << pagamento.nome_sacado.format_size(30) # nome do pagador X[30]
|
127
|
+
detalhe << ''.rjust(10, ' ') # complemento do registro (brancos) X[10]
|
128
|
+
detalhe << pagamento.endereco_sacado.format_size(40) # endereco do pagador X[40]
|
129
|
+
detalhe << pagamento.bairro_sacado.format_size(12) # bairro do pagador X[12]
|
130
|
+
detalhe << pagamento.cep_sacado # cep do pagador 9[08]
|
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.nome_avalista.format_size(30) # nome do sacador/avalista X[30]
|
134
|
+
detalhe << ''.rjust(4, ' ') # complemento do registro X[04]
|
135
|
+
detalhe << ''.rjust(6, '0') # data da mora 9[06] *
|
136
|
+
detalhe << prazo_instrucao(pagamento) # prazo para a instrução 9[02]
|
137
|
+
detalhe << ''.rjust(1, ' ') # complemento do registro (brancos) X[01]
|
138
|
+
detalhe << sequencial.to_s.rjust(6, '0') # numero do registro no arquivo 9[06]
|
139
|
+
detalhe
|
140
|
+
end
|
141
|
+
|
142
|
+
def prazo_instrucao(pagamento)
|
143
|
+
return "03" unless %w[09 34 35].include?(
|
144
|
+
pagamento.cod_primeira_instrucao
|
145
|
+
)
|
146
|
+
|
147
|
+
pagamento.dias_protesto.rjust(2, '0')
|
148
|
+
end
|
149
|
+
|
150
|
+
def monta_detalhe_multa(pagamento, sequencial)
|
151
|
+
detalhe = '2'
|
152
|
+
detalhe += pagamento.codigo_multa
|
153
|
+
detalhe << pagamento.data_vencimento.strftime('%d%m%Y')
|
154
|
+
detalhe << pagamento.formata_percentual_multa(13)
|
155
|
+
detalhe << ''.rjust(371, ' ')
|
156
|
+
detalhe << sequencial.to_s.rjust(6, '0')
|
157
|
+
detalhe
|
158
|
+
end
|
159
|
+
end
|
160
|
+
end
|
161
|
+
end
|
162
|
+
end
|