bbrcobranca 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/CHANGELOG.md +1 -0
- data/LICENSE +20 -0
- data/README.md +12 -0
- data/Rakefile +13 -0
- data/lib/bbrcobranca.rb +196 -0
- data/lib/bbrcobranca/arquivos/logos/bancobrasil.eps +5402 -0
- data/lib/bbrcobranca/arquivos/logos/bancobrasil_carne.eps +5410 -0
- data/lib/bbrcobranca/arquivos/logos/bancobrasilia.eps +0 -0
- data/lib/bbrcobranca/arquivos/logos/bancobrasilia_carne.eps +0 -0
- data/lib/bbrcobranca/arquivos/logos/banconordeste.eps +0 -0
- data/lib/bbrcobranca/arquivos/logos/banconordeste_carne.eps +0 -0
- data/lib/bbrcobranca/arquivos/logos/banestes.eps +5198 -0
- data/lib/bbrcobranca/arquivos/logos/banestes_carne.eps +5206 -0
- data/lib/bbrcobranca/arquivos/logos/banrisul.eps +121 -0
- data/lib/bbrcobranca/arquivos/logos/banrisul_carne.eps +121 -0
- data/lib/bbrcobranca/arquivos/logos/bradesco.eps +5210 -0
- data/lib/bbrcobranca/arquivos/logos/bradesco_carne.eps +5214 -0
- data/lib/bbrcobranca/arquivos/logos/caixa.eps +5111 -0
- data/lib/bbrcobranca/arquivos/logos/caixa_carne.eps +5115 -0
- data/lib/bbrcobranca/arquivos/logos/cecred.eps +0 -0
- data/lib/bbrcobranca/arquivos/logos/cecred_carne.eps +0 -0
- data/lib/bbrcobranca/arquivos/logos/credisis.eps +0 -0
- data/lib/bbrcobranca/arquivos/logos/credisis_carne.eps +0 -0
- data/lib/bbrcobranca/arquivos/logos/hsbc.eps +5124 -0
- data/lib/bbrcobranca/arquivos/logos/hsbc_carne.eps +5128 -0
- data/lib/bbrcobranca/arquivos/logos/itau.eps +5318 -0
- data/lib/bbrcobranca/arquivos/logos/itau_carne.eps +5322 -0
- data/lib/bbrcobranca/arquivos/logos/santander.eps +5305 -0
- data/lib/bbrcobranca/arquivos/logos/santander_carne.eps +5313 -0
- data/lib/bbrcobranca/arquivos/logos/sicoob.eps +5375 -0
- data/lib/bbrcobranca/arquivos/logos/sicoob_carne.eps +5379 -0
- data/lib/bbrcobranca/arquivos/logos/sicredi.eps +5379 -0
- data/lib/bbrcobranca/arquivos/logos/sicredi_carne.eps +5383 -0
- data/lib/bbrcobranca/arquivos/logos/unicred.eps +0 -0
- data/lib/bbrcobranca/arquivos/logos/unicred_carne.eps +0 -0
- data/lib/bbrcobranca/arquivos/templates/modelo_carne.eps +1112 -0
- data/lib/bbrcobranca/arquivos/templates/modelo_generico.eps +0 -0
- data/lib/bbrcobranca/boleto/banco_brasil.rb +157 -0
- data/lib/bbrcobranca/boleto/banco_brasilia.rb +102 -0
- data/lib/bbrcobranca/boleto/banco_nordeste.rb +79 -0
- data/lib/bbrcobranca/boleto/banestes.rb +85 -0
- data/lib/bbrcobranca/boleto/banrisul.rb +94 -0
- data/lib/bbrcobranca/boleto/base.rb +256 -0
- data/lib/bbrcobranca/boleto/bradesco.rb +99 -0
- data/lib/bbrcobranca/boleto/bradesco_grb.rb +85 -0
- data/lib/bbrcobranca/boleto/caixa.rb +121 -0
- data/lib/bbrcobranca/boleto/cecred.rb +86 -0
- data/lib/bbrcobranca/boleto/credisis.rb +116 -0
- data/lib/bbrcobranca/boleto/hsbc.rb +94 -0
- data/lib/bbrcobranca/boleto/itau.rb +138 -0
- data/lib/bbrcobranca/boleto/itau_adimplere.rb +159 -0
- data/lib/bbrcobranca/boleto/santander.rb +84 -0
- data/lib/bbrcobranca/boleto/santander_adimplere.rb +73 -0
- data/lib/bbrcobranca/boleto/sicoob.rb +119 -0
- data/lib/bbrcobranca/boleto/sicredi.rb +142 -0
- data/lib/bbrcobranca/boleto/template/base.rb +25 -0
- data/lib/bbrcobranca/boleto/template/rghost.rb +315 -0
- data/lib/bbrcobranca/boleto/template/rghost_carne.rb +317 -0
- data/lib/bbrcobranca/boleto/unicred.rb +141 -0
- data/lib/bbrcobranca/calculo.rb +115 -0
- data/lib/bbrcobranca/calculo_data.rb +62 -0
- data/lib/bbrcobranca/currency.rb +69 -0
- data/lib/bbrcobranca/formatacao.rb +103 -0
- data/lib/bbrcobranca/formatacao_string.rb +35 -0
- data/lib/bbrcobranca/limpeza.rb +20 -0
- data/lib/bbrcobranca/remessa/base.rb +76 -0
- data/lib/bbrcobranca/remessa/cnab240/banco_brasil.rb +246 -0
- data/lib/bbrcobranca/remessa/cnab240/base.rb +512 -0
- data/lib/bbrcobranca/remessa/cnab240/base_correspondente.rb +299 -0
- data/lib/bbrcobranca/remessa/cnab240/caixa.rb +163 -0
- data/lib/bbrcobranca/remessa/cnab240/cecred.rb +151 -0
- data/lib/bbrcobranca/remessa/cnab240/sicoob.rb +226 -0
- data/lib/bbrcobranca/remessa/cnab240/sicoob_banco_brasil.rb +94 -0
- data/lib/bbrcobranca/remessa/cnab240/sicredi.rb +177 -0
- data/lib/bbrcobranca/remessa/cnab240/unicred.rb +9 -0
- data/lib/bbrcobranca/remessa/cnab400/banco_brasil.rb +169 -0
- data/lib/bbrcobranca/remessa/cnab400/banco_brasilia.rb +166 -0
- data/lib/bbrcobranca/remessa/cnab400/banco_nordeste.rb +160 -0
- data/lib/bbrcobranca/remessa/cnab400/banrisul.rb +155 -0
- data/lib/bbrcobranca/remessa/cnab400/base.rb +119 -0
- data/lib/bbrcobranca/remessa/cnab400/bradesco.rb +130 -0
- data/lib/bbrcobranca/remessa/cnab400/citibank.rb +138 -0
- data/lib/bbrcobranca/remessa/cnab400/credisis.rb +128 -0
- data/lib/bbrcobranca/remessa/cnab400/itau.rb +157 -0
- data/lib/bbrcobranca/remessa/cnab400/santander.rb +231 -0
- data/lib/bbrcobranca/remessa/cnab400/sicoob.rb +308 -0
- data/lib/bbrcobranca/remessa/cnab400/unicred.rb +143 -0
- data/lib/bbrcobranca/remessa/pagamento.rb +288 -0
- data/lib/bbrcobranca/retorno/base.rb +49 -0
- data/lib/bbrcobranca/retorno/cnab240/base.rb +42 -0
- data/lib/bbrcobranca/retorno/cnab240/caixa.rb +48 -0
- data/lib/bbrcobranca/retorno/cnab240/cecred.rb +102 -0
- data/lib/bbrcobranca/retorno/cnab240/santander.rb +95 -0
- data/lib/bbrcobranca/retorno/cnab240/sicoob.rb +99 -0
- data/lib/bbrcobranca/retorno/cnab240/sicredi.rb +79 -0
- data/lib/bbrcobranca/retorno/cnab400/banco_brasil.rb +127 -0
- data/lib/bbrcobranca/retorno/cnab400/banco_brasilia.rb +89 -0
- data/lib/bbrcobranca/retorno/cnab400/banco_nordeste.rb +112 -0
- data/lib/bbrcobranca/retorno/cnab400/banrisul.rb +42 -0
- data/lib/bbrcobranca/retorno/cnab400/base.rb +50 -0
- data/lib/bbrcobranca/retorno/cnab400/bradesco.rb +124 -0
- data/lib/bbrcobranca/retorno/cnab400/credisis.rb +115 -0
- data/lib/bbrcobranca/retorno/cnab400/itau.rb +143 -0
- data/lib/bbrcobranca/retorno/cnab400/santander.rb +57 -0
- data/lib/bbrcobranca/retorno/cnab400/unicred.rb +118 -0
- data/lib/bbrcobranca/retorno/retorno_cbr643.rb +49 -0
- data/lib/bbrcobranca/retorno/retorno_cnab240.rb +97 -0
- data/lib/bbrcobranca/retorno/retorno_cnab400.rb +70 -0
- data/lib/bbrcobranca/util/date.rb +20 -0
- data/lib/bbrcobranca/util/empresa.rb +28 -0
- data/lib/bbrcobranca/util/errors.rb +76 -0
- data/lib/bbrcobranca/validations.rb +232 -0
- data/lib/bbrcobranca/version.rb +6 -0
- data/spec/arquivos/CBR64310.RET +28 -0
- data/spec/arquivos/CNAB240.RET +74 -0
- data/spec/arquivos/CNAB240CECRED.RET +10 -0
- data/spec/arquivos/CNAB240SANTANDER.RET +8 -0
- data/spec/arquivos/CNAB240SICOOB.RET +10 -0
- data/spec/arquivos/CNAB240SICREDI.CRT +8 -0
- data/spec/arquivos/CNAB400.RET +54 -0
- data/spec/arquivos/CNAB400BANCOBRASILIA.RET +3 -0
- data/spec/arquivos/CNAB400BANCONORDESTE.RET +3 -0
- data/spec/arquivos/CNAB400BANRISUL.RET +3 -0
- data/spec/arquivos/CNAB400BRADESCO.RET +8 -0
- data/spec/arquivos/CNAB400CREDISIS.RET +3 -0
- data/spec/arquivos/CNAB400ITAU.RET +54 -0
- data/spec/arquivos/CNAB400SANTANDER.RET +54 -0
- data/spec/arquivos/CNAB400UNICRED.RET +3 -0
- data/spec/bbrcobranca_spec.rb +34 -0
- data/spec/brcobranca/base_spec.rb +170 -0
- data/spec/brcobranca/boleto/banco_brasil_spec.rb +334 -0
- data/spec/brcobranca/boleto/banco_brasilia_spec.rb +152 -0
- data/spec/brcobranca/boleto/banco_nordeste_spec.rb +161 -0
- data/spec/brcobranca/boleto/banestes_spec.rb +194 -0
- data/spec/brcobranca/boleto/banrisul_spec.rb +182 -0
- data/spec/brcobranca/boleto/bradesco_spec.rb +211 -0
- data/spec/brcobranca/boleto/caixa_spec.rb +161 -0
- data/spec/brcobranca/boleto/cecred_spec.rb +147 -0
- data/spec/brcobranca/boleto/credisis_spec.rb +159 -0
- data/spec/brcobranca/boleto/hsbc_spec.rb +172 -0
- data/spec/brcobranca/boleto/itau_spec.rb +262 -0
- data/spec/brcobranca/boleto/santander_spec.rb +143 -0
- data/spec/brcobranca/boleto/sicoob_spec.rb +193 -0
- data/spec/brcobranca/boleto/sicredi_spec.rb +190 -0
- data/spec/brcobranca/boleto/unicred_spec.rb +149 -0
- data/spec/brcobranca/boletos_em_lote_spec.rb +38 -0
- data/spec/brcobranca/calculo_data_spec.rb +33 -0
- data/spec/brcobranca/calculo_spec.rb +185 -0
- data/spec/brcobranca/currency_spec.rb +79 -0
- data/spec/brcobranca/formatacao_spec.rb +46 -0
- data/spec/brcobranca/formatacao_string_spec.rb +24 -0
- data/spec/brcobranca/limpeza_spec.rb +10 -0
- data/spec/brcobranca/remessa/base_spec.rb +67 -0
- data/spec/brcobranca/remessa/cnab240/banco_brasil_spec.rb +217 -0
- data/spec/brcobranca/remessa/cnab240/base_spec.rb +91 -0
- data/spec/brcobranca/remessa/cnab240/caixa_spec.rb +163 -0
- data/spec/brcobranca/remessa/cnab240/cecred_spec.rb +164 -0
- data/spec/brcobranca/remessa/cnab240/sicoob_banco_brasil_spec.rb +268 -0
- data/spec/brcobranca/remessa/cnab240/sicoob_spec.rb +198 -0
- data/spec/brcobranca/remessa/cnab240/sicredi_spec.rb +201 -0
- data/spec/brcobranca/remessa/cnab240/unicred_spec.rb +193 -0
- data/spec/brcobranca/remessa/cnab400/banco_brasil_spec.rb +187 -0
- data/spec/brcobranca/remessa/cnab400/banco_brasilia_spec.rb +183 -0
- data/spec/brcobranca/remessa/cnab400/banco_nordeste_spec.rb +187 -0
- data/spec/brcobranca/remessa/cnab400/banrisul_spec.rb +190 -0
- data/spec/brcobranca/remessa/cnab400/base_spec.rb +53 -0
- data/spec/brcobranca/remessa/cnab400/bradesco_spec.rb +201 -0
- data/spec/brcobranca/remessa/cnab400/citibank_spec.rb +126 -0
- data/spec/brcobranca/remessa/cnab400/credisis_spec.rb +188 -0
- data/spec/brcobranca/remessa/cnab400/itau_spec.rb +190 -0
- data/spec/brcobranca/remessa/cnab400/santander_spec.rb +152 -0
- data/spec/brcobranca/remessa/cnab400/sicoob_spec.rb +217 -0
- data/spec/brcobranca/remessa/cnab400/unicred_spec.rb +185 -0
- data/spec/brcobranca/remessa/pagamento_spec.rb +227 -0
- data/spec/brcobranca/retorno/cnab240/base_spec.rb +23 -0
- data/spec/brcobranca/retorno/cnab240/cecred_spec.rb +50 -0
- data/spec/brcobranca/retorno/cnab240/santander_spec.rb +50 -0
- data/spec/brcobranca/retorno/cnab240/sicoob_spec.rb +50 -0
- data/spec/brcobranca/retorno/cnab240/sicredi_spec.rb +31 -0
- data/spec/brcobranca/retorno/cnab400/banco_brasilia_spec.rb +36 -0
- data/spec/brcobranca/retorno/cnab400/banco_nordeste_spec.rb +39 -0
- data/spec/brcobranca/retorno/cnab400/banrisul_spec.rb +41 -0
- data/spec/brcobranca/retorno/cnab400/base_spec.rb +57 -0
- data/spec/brcobranca/retorno/cnab400/bradesco_spec.rb +58 -0
- data/spec/brcobranca/retorno/cnab400/credisis_spec.rb +25 -0
- data/spec/brcobranca/retorno/cnab400/itau_spec.rb +58 -0
- data/spec/brcobranca/retorno/cnab400/santander_spec.rb +39 -0
- data/spec/brcobranca/retorno/cnab400/unicred_spec.rb +42 -0
- data/spec/brcobranca/retorno/retorno_cbr643_spec.rb +69 -0
- data/spec/brcobranca/retorno/retorno_cnab400_spec.rb +57 -0
- data/spec/brcobranca/retorno/retorno_cnab_240_spec.rb +52 -0
- data/spec/brcobranca/rghost_spec.rb +29 -0
- data/spec/brcobranca/util/empresa_spec.rb +36 -0
- data/spec/fixtures/remessa/remessa-banco-brasil-cnab400.rem +3 -0
- data/spec/fixtures/remessa/remessa-banco-brasilia-cnab400.rem +3 -0
- data/spec/fixtures/remessa/remessa-banco-nordeste-cnab400.rem +3 -0
- data/spec/fixtures/remessa/remessa-banco_brasil-cnab240.rem +7 -0
- data/spec/fixtures/remessa/remessa-bancoob-cnab240.rem +7 -0
- data/spec/fixtures/remessa/remessa-banrisul-cnab400.rem +3 -0
- data/spec/fixtures/remessa/remessa-bradesco-cnab400.rem +3 -0
- data/spec/fixtures/remessa/remessa-caixa-cnab240.rem +7 -0
- data/spec/fixtures/remessa/remessa-cecred-cnab240.rem +7 -0
- data/spec/fixtures/remessa/remessa-citibank-cnab400.rem +3 -0
- data/spec/fixtures/remessa/remessa-credisis-cnab400.rem +3 -0
- data/spec/fixtures/remessa/remessa-itau-cnab400.rem +4 -0
- data/spec/fixtures/remessa/remessa-santander-cnab400.rem +3 -0
- data/spec/fixtures/remessa/remessa-sicoob-cnab400.rem +3 -0
- data/spec/fixtures/remessa/remessa-sicoob-correspondente-bb-cnab240.rem +4 -0
- data/spec/fixtures/remessa/remessa-sicredi-cnab240.rem +7 -0
- data/spec/fixtures/remessa/remessa-unicred-cnab240.rem +7 -0
- data/spec/fixtures/remessa/remessa-unicred-cnab400.rem +3 -0
- data/spec/spec.opts +8 -0
- data/spec/spec_helper.rb +38 -0
- data/spec/support/remessa_helpers.rb +13 -0
- data/spec/support/shared_examples/busca_logotipo.rb +15 -0
- data/spec/support/shared_examples/cnab240.rb +259 -0
- data/spec/support/shared_examples/cnab400.rb +180 -0
- data/spec/support/shared_examples/formatos_validos.rb +36 -0
- metadata +422 -0
@@ -0,0 +1,138 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
module Bbrcobranca
|
3
|
+
module Remessa
|
4
|
+
module Cnab400
|
5
|
+
class Citibank < Bbrcobranca::Remessa::Cnab400::Base
|
6
|
+
# Identificação do portfolio.
|
7
|
+
# Necessário consultar o Citibank para informações referentes à conta cobrança e carteira do cliente.
|
8
|
+
attr_accessor :portfolio
|
9
|
+
|
10
|
+
validates_presence_of :documento_cedente, :portfolio, message: 'não pode estar em branco.'
|
11
|
+
validates_length_of :documento_cedente, minimum: 11, maximum: 14, message: 'deve ter entre 11 e 14 dígitos.'
|
12
|
+
validates_length_of :carteira, maximum: 1, message: 'deve ter no máximo 1 dígito.'
|
13
|
+
validates_length_of :portfolio, maximum: 20, message: 'deve ter no máximo 20 dígitos.'
|
14
|
+
|
15
|
+
# Nova instancia do Citibank
|
16
|
+
def initialize(campos = {})
|
17
|
+
campos = { aceite: 'N', carteira: '1' }.merge!(campos)
|
18
|
+
super(campos)
|
19
|
+
end
|
20
|
+
|
21
|
+
def cod_banco
|
22
|
+
'745'
|
23
|
+
end
|
24
|
+
|
25
|
+
def nome_banco
|
26
|
+
'CITIBANK'.ljust(15, ' ')
|
27
|
+
end
|
28
|
+
|
29
|
+
# Informacoes da conta corrente do cedente
|
30
|
+
#
|
31
|
+
# @return [String]
|
32
|
+
#
|
33
|
+
def info_conta
|
34
|
+
# CAMPO TAMANHO
|
35
|
+
# portfolio 20
|
36
|
+
portfolio.rjust(20, ' ')
|
37
|
+
end
|
38
|
+
|
39
|
+
# Complemento do header
|
40
|
+
# (no caso do Citibank, sao apenas espacos em branco)
|
41
|
+
#
|
42
|
+
# @return [String]
|
43
|
+
#
|
44
|
+
def complemento
|
45
|
+
# CAMPO TAMANHO
|
46
|
+
# Densidade de gravação 5
|
47
|
+
# Unidade de densidade de gravação 3
|
48
|
+
'01600BPI'.rjust(294, ' ')
|
49
|
+
end
|
50
|
+
|
51
|
+
# Detalhe do arquivo
|
52
|
+
#
|
53
|
+
# @param pagamento [PagamentoCnab400]
|
54
|
+
# objeto contendo as informacoes referentes ao boleto (valor, vencimento, cliente)
|
55
|
+
# @param sequencial
|
56
|
+
# num. sequencial do registro no arquivo
|
57
|
+
#
|
58
|
+
# @return [String]
|
59
|
+
#
|
60
|
+
def monta_detalhe(pagamento, sequencial)
|
61
|
+
raise Bbrcobranca::RemessaInvalida, pagamento if pagamento.invalid?
|
62
|
+
|
63
|
+
detalhe = '1' # identificacao transacao 9[01]
|
64
|
+
detalhe << Bbrcobranca::Util::Empresa.new(documento_cedente).tipo # tipo de identificacao da empresa 9[02]
|
65
|
+
detalhe << documento_cedente.to_s.rjust(14, '0') # cpf/cnpj da empresa 9[14]
|
66
|
+
detalhe << portfolio # portfolio X[20]
|
67
|
+
detalhe << pagamento.documento_ou_numero.to_s.ljust(25) # identificacao do tit. na empresa X[25]
|
68
|
+
detalhe << pagamento.especie_titulo # espécie do título 9[02] - 00 = DMI – Duplicata Mercantil por Indicação, 02 = DM – Duplicata Mercantil
|
69
|
+
detalhe << pagamento.nosso_numero.to_s.rjust(12, '0') # nosso numero 9[12]
|
70
|
+
detalhe << ''.rjust(6, ' ') # brancos X[06]
|
71
|
+
detalhe << pagamento.formata_data_segundo_desconto # data limite para o segundo desconto 9[06]
|
72
|
+
detalhe << pagamento.formata_valor_segundo_desconto # valor do segundo desconto 9[13]
|
73
|
+
detalhe << '000' # carne 9[03] - Válido apenas quando o campo 148/149 for igual a 03
|
74
|
+
detalhe << '000' # parcela 9[03] - Só preencher se o banco for imprimir e enviar e for um carnê
|
75
|
+
detalhe << carteira # codigo da carteira X[01] - Código 1 = Cobrança Simples, Código 2 = Cobrança Caucionada
|
76
|
+
detalhe << pagamento.identificacao_ocorrencia # identificacao ocorrencia 9[02]
|
77
|
+
detalhe << pagamento.numero.to_s.rjust(10, '0') # numero do documento X[10]
|
78
|
+
detalhe << pagamento.data_vencimento.strftime('%d%m%y') # data do vencimento 9[06]
|
79
|
+
detalhe << pagamento.formata_valor # valor do documento 9[13]
|
80
|
+
detalhe << cod_banco # codigo banco 9[03]
|
81
|
+
detalhe << ''.rjust(5, '0') # agencia cobradora - deixar zero 9[05]
|
82
|
+
|
83
|
+
# 01 = Banco imprime (apenas boletos simples não personalizados) 03 = Banco imprime de forma personalizada (boletos simples, personalizados e carnês)
|
84
|
+
# 07 = Banco não imprime
|
85
|
+
# 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:
|
86
|
+
# - 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.
|
87
|
+
# - Quando código 07, o campo 065/076, deverá ter o NOSSO NÚMERO atribuído pelo cliente.
|
88
|
+
# Se o portfolio do cliente for cobrança flexível:
|
89
|
+
# 04 = Título flex com boleto impresso via web (boleto por e-mail), aceita pagamento parcial
|
90
|
+
# 06 = Título flex com boleto impresso via web (boleto por e-mail), não aceita pagamento parcial
|
91
|
+
# (No caso de Cobrança Flexível, o campo 065/076 – NOSSO NÚMERO, no arquivo remessa, deve ser preenchido pelo cliente,
|
92
|
+
# 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.)
|
93
|
+
# (Para a modalidade de Cobrança Flexível, a opção de envio por e- mail deverá ser um parâmetro cadastral.)
|
94
|
+
detalhe << '07' # Tipo de Emissão X[02]
|
95
|
+
detalhe << aceite # aceite (A/N) X[01]
|
96
|
+
detalhe << pagamento.data_emissao.strftime('%d%m%y') # data de emissao 9[06]
|
97
|
+
|
98
|
+
# 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
|
99
|
+
# 06 = PROTESTAR: quando esta instrução for dada também deverá ser preenchida a posição 159/160
|
100
|
+
# 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.
|
101
|
+
# IMPORTANTE: essa instrução somente poderá ser utilizada após assinatura de contrato específico para o produto.
|
102
|
+
# 09 = DEVOLVER: esta é a instrução de BAIXA quando esta instrução for dada também deverá ser preenchida a posição 159/160
|
103
|
+
# 10 = SUSTAR PROTESTO: instrução utilizada para títulos que NÃO estejam em cartório
|
104
|
+
detalhe << '00' # Instrução para o título 9[02]
|
105
|
+
|
106
|
+
# Quando posição 157/158 (Instrução para título) conter instrução 06 ou 09,
|
107
|
+
# este campo deverá conter a quantidade de dias válidos para execução da instrução.
|
108
|
+
detalhe << '00' # Número de dias válidos para instrução 9[02]
|
109
|
+
detalhe << pagamento.formata_valor_mora # valor mora ao dia 9[13]
|
110
|
+
detalhe << pagamento.formata_data_desconto # data limite para desconto 9[06]
|
111
|
+
detalhe << pagamento.formata_valor_desconto # valor do desconto 9[13]
|
112
|
+
detalhe << pagamento.formata_valor_iof # valor do iof 9[13]
|
113
|
+
detalhe << pagamento.formata_valor_abatimento # valor do abatimento 9[13]
|
114
|
+
detalhe << pagamento.identificacao_sacado # identificacao do pagador 9[02]
|
115
|
+
detalhe << pagamento.documento_sacado.to_s.rjust(14, '0') # documento do pagador 9[14]
|
116
|
+
detalhe << pagamento.nome_sacado.format_size(40) # nome do pagador X[40]
|
117
|
+
detalhe << pagamento.endereco_sacado.format_size(40) # endereco do pagador X[40]
|
118
|
+
detalhe << pagamento.bairro_sacado.format_size(12) # bairro do pagador X[12]
|
119
|
+
detalhe << pagamento.cep_sacado # cep do pagador 9[08]
|
120
|
+
detalhe << pagamento.cidade_sacado.format_size(15) # cidade do pagador X[15]
|
121
|
+
detalhe << pagamento.uf_sacado # uf do pagador X[02]
|
122
|
+
|
123
|
+
# Este campo tem 3 finalidades:
|
124
|
+
# a) mensagem da empresa impressa no boleto pelo banco
|
125
|
+
# (para isto na primeira posição deve haver um
|
126
|
+
# asterisco);
|
127
|
+
# b) sem o asterisco, este campo será o nome do Sacador/Avalista, quando preenchido;
|
128
|
+
# 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.
|
129
|
+
detalhe << pagamento.nome_avalista.format_size(40) # Sacador/Mensagens X[40]
|
130
|
+
detalhe << ''.rjust(2, ' ') # Brancos X[06]
|
131
|
+
detalhe << '9' # moeda 9[01] - Código 9 = REAIS Código 5 = Dólar
|
132
|
+
detalhe << sequencial.to_s.rjust(6, '0') # numero do registro no arquivo 9[06]
|
133
|
+
detalhe
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
@@ -0,0 +1,128 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
module Bbrcobranca
|
3
|
+
module Remessa
|
4
|
+
module Cnab400
|
5
|
+
class Credisis < Bbrcobranca::Remessa::Cnab400::Base
|
6
|
+
attr_accessor :codigo_cedente, :documento_cedente, :convenio
|
7
|
+
|
8
|
+
validates_presence_of :agencia, :conta_corrente, :codigo_cedente, :digito_conta, message: 'não pode estar em branco.'
|
9
|
+
validates_length_of :agencia, maximum: 4, message: 'deve ter 4 dígitos.'
|
10
|
+
validates_length_of :codigo_cedente, maximum: 4, message: 'deve ter 4 dígitos.'
|
11
|
+
validates_length_of :conta_corrente, maximum: 8, message: 'deve ter 8 dígitos.'
|
12
|
+
validates_length_of :carteira, maximum: 2, message: 'deve ter 2 dígitos.'
|
13
|
+
validates_length_of :digito_conta, maximum: 1, message: 'deve ter 1 dígito.'
|
14
|
+
validates_length_of :sequencial_remessa, :convenio, maximum: 7, message: 'deve ter 7 dígitos.'
|
15
|
+
|
16
|
+
# Nova instancia do CrediSIS
|
17
|
+
def initialize(campos = {})
|
18
|
+
campos = { aceite: 'N' }.merge!(campos)
|
19
|
+
super(campos)
|
20
|
+
end
|
21
|
+
|
22
|
+
def agencia=(valor)
|
23
|
+
@agencia = valor.to_s.rjust(4, '0') if valor
|
24
|
+
end
|
25
|
+
|
26
|
+
def conta_corrente=(valor)
|
27
|
+
@conta_corrente = valor.to_s.rjust(8, '0') if valor
|
28
|
+
end
|
29
|
+
|
30
|
+
def carteira=(valor)
|
31
|
+
@carteira = valor.to_s.rjust(2, '0') if valor
|
32
|
+
end
|
33
|
+
|
34
|
+
def sequencial_remessa=(valor)
|
35
|
+
@sequencial_remessa = valor.to_s.rjust(7, '0') if valor
|
36
|
+
end
|
37
|
+
|
38
|
+
def codigo_cedente=(valor)
|
39
|
+
@codigo_cedente = valor.to_s.rjust(4, '0') if valor
|
40
|
+
end
|
41
|
+
|
42
|
+
def cod_banco
|
43
|
+
'097'
|
44
|
+
end
|
45
|
+
|
46
|
+
def nome_banco
|
47
|
+
'CENTRALCRED'.ljust(15, ' ')
|
48
|
+
end
|
49
|
+
|
50
|
+
# Informacoes da conta corrente do cedente
|
51
|
+
#
|
52
|
+
# @return [String]
|
53
|
+
#
|
54
|
+
def info_conta
|
55
|
+
# CAMPO TAMANHO
|
56
|
+
# agencia 4
|
57
|
+
# complemento 1
|
58
|
+
# conta corrente 8
|
59
|
+
# digito da conta 1
|
60
|
+
# complemento 6
|
61
|
+
"#{agencia} #{conta_corrente}#{digito_conta}#{''.rjust(6, ' ')}"
|
62
|
+
end
|
63
|
+
|
64
|
+
# Complemento do header
|
65
|
+
#
|
66
|
+
# @return [String]
|
67
|
+
#
|
68
|
+
def complemento
|
69
|
+
sequencial_remessa.to_s.ljust(294, ' ')
|
70
|
+
end
|
71
|
+
|
72
|
+
def formata_nosso_numero(nosso_numero)
|
73
|
+
"0#{codigo_cedente}#{nosso_numero.rjust(6, '0')}"
|
74
|
+
end
|
75
|
+
|
76
|
+
# Detalhe do arquivo
|
77
|
+
#
|
78
|
+
# @param pagamento [PagamentoCnab400]
|
79
|
+
# objeto contendo as informacoes referentes ao boleto (valor, vencimento, cliente)
|
80
|
+
# @param sequencial
|
81
|
+
# num. sequencial do registro no arquivo
|
82
|
+
#
|
83
|
+
# @return [String]
|
84
|
+
#
|
85
|
+
def monta_detalhe(pagamento, sequencial)
|
86
|
+
raise Bbrcobranca::RemessaInvalida, pagamento if pagamento.invalid?
|
87
|
+
|
88
|
+
detalhe = '1' # identificacao transacao 9[01]
|
89
|
+
detalhe << Bbrcobranca::Util::Empresa.new(documento_cedente).tipo # tipo de identificacao da empresa 9[02]
|
90
|
+
detalhe << documento_cedente.to_s.rjust(14, '0') # cpf/cnpj da empresa 9[14]
|
91
|
+
detalhe << agencia # agencia 9[04]
|
92
|
+
detalhe << ''.rjust(1, ' ') # brancos X[01]
|
93
|
+
detalhe << conta_corrente # conta corrente 9[08]
|
94
|
+
detalhe << digito_conta # dac 9[01]
|
95
|
+
detalhe << ''.rjust(6, ' ') # complemento do registro (brancos) X[06]
|
96
|
+
detalhe << pagamento.documento_ou_numero.to_s.ljust(25) # identificacao do tit. na empresa X[25]
|
97
|
+
detalhe << formata_nosso_numero(pagamento.nosso_numero.to_s) # nosso numero 9[11]
|
98
|
+
detalhe << ''.rjust(37, ' ') # brancos X[37]
|
99
|
+
detalhe << pagamento.numero.to_s.rjust(10, '0') # numero do documento X[10]
|
100
|
+
detalhe << pagamento.data_vencimento.strftime('%d%m%y') # data do vencimento A[06]
|
101
|
+
detalhe << pagamento.formata_valor # valor do documento 9[13]
|
102
|
+
detalhe << ''.rjust(11, ' ') # brancos X[11]
|
103
|
+
detalhe << pagamento.data_emissao.strftime('%d%m%y') # data de emissao 9[06]
|
104
|
+
detalhe << ''.rjust(4, ' ') # brancos X[04]
|
105
|
+
detalhe << pagamento.formata_valor_mora(4).ljust(6, '0') # valor mora ao dia 9[06]
|
106
|
+
detalhe << pagamento.formata_percentual_multa.ljust(6, '0') # valor multa 9[06]
|
107
|
+
detalhe << ''.rjust(33, ' ') # brancos X[33]
|
108
|
+
detalhe << pagamento.formata_valor_desconto # valor do desconto 9[13]
|
109
|
+
detalhe << pagamento.identificacao_sacado # identificacao do pagador 9[02]
|
110
|
+
detalhe << pagamento.documento_sacado.to_s.rjust(14, '0') # documento do pagador 9[14]
|
111
|
+
detalhe << pagamento.nome_sacado.format_size(40) # nome do pagador A[40]
|
112
|
+
detalhe << pagamento.endereco_sacado.format_size(37) # endereco do pagador A[37]
|
113
|
+
detalhe << pagamento.bairro_sacado.format_size(15) # bairro do pagador X[15]
|
114
|
+
detalhe << pagamento.cep_sacado # cep do pagador 9[08]
|
115
|
+
detalhe << pagamento.cidade_sacado.format_size(15) # cidade do pagador A[15]
|
116
|
+
detalhe << pagamento.uf_sacado # uf do pagador A[02]
|
117
|
+
detalhe << pagamento.nome_avalista.format_size(25) # nome do sacador/avalista X[25]
|
118
|
+
detalhe << ''.rjust(1, ' ') # complemento do registro X[01]
|
119
|
+
detalhe << ''.rjust(14, ' ') # documento avalista X[14] *
|
120
|
+
detalhe << pagamento.dias_protesto.rjust(2, '0') # quantidade de dias do prazo 9[02]
|
121
|
+
detalhe << ''.rjust(1, ' ') # complemento do registro (brancos) X[01]
|
122
|
+
detalhe << sequencial.to_s.rjust(6, '0') # numero do registro no arquivo 9[06]
|
123
|
+
detalhe
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
@@ -0,0 +1,157 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
module Bbrcobranca
|
3
|
+
module Remessa
|
4
|
+
module Cnab400
|
5
|
+
class Itau < Bbrcobranca::Remessa::Cnab400::Base
|
6
|
+
VALOR_EM_REAIS = "1"
|
7
|
+
VALOR_EM_PERCENTUAL = "2"
|
8
|
+
|
9
|
+
validates_presence_of :agencia, :conta_corrente, message: 'não pode estar em branco.'
|
10
|
+
validates_presence_of :documento_cedente, :digito_conta, message: 'não pode estar em branco.'
|
11
|
+
validates_length_of :agencia, maximum: 4, message: 'deve ter 4 dígitos.'
|
12
|
+
validates_length_of :conta_corrente, maximum: 5, message: 'deve ter 5 dígitos.'
|
13
|
+
validates_length_of :documento_cedente, minimum: 11, maximum: 14, message: 'deve ter entre 11 e 14 dígitos.'
|
14
|
+
validates_length_of :carteira, maximum: 3, message: 'deve ter no máximo 3 dígitos.'
|
15
|
+
validates_length_of :digito_conta, maximum: 1, message: 'deve ter 1 dígito.'
|
16
|
+
|
17
|
+
# Nova instancia do Itau
|
18
|
+
def initialize(campos = {})
|
19
|
+
campos = { aceite: 'N' }.merge!(campos)
|
20
|
+
super(campos)
|
21
|
+
end
|
22
|
+
|
23
|
+
def agencia=(valor)
|
24
|
+
@agencia = valor.to_s.rjust(4, '0') if valor
|
25
|
+
end
|
26
|
+
|
27
|
+
def conta_corrente=(valor)
|
28
|
+
@conta_corrente = valor.to_s.rjust(5, '0') if valor
|
29
|
+
end
|
30
|
+
|
31
|
+
def carteira=(valor)
|
32
|
+
@carteira = valor.to_s.rjust(3, '0') if valor
|
33
|
+
end
|
34
|
+
|
35
|
+
def cod_banco
|
36
|
+
'341'
|
37
|
+
end
|
38
|
+
|
39
|
+
def nome_banco
|
40
|
+
'BANCO ITAU SA'.ljust(15, ' ')
|
41
|
+
end
|
42
|
+
|
43
|
+
# Informacoes da conta corrente do cedente
|
44
|
+
#
|
45
|
+
# @return [String]
|
46
|
+
#
|
47
|
+
def info_conta
|
48
|
+
# CAMPO TAMANHO
|
49
|
+
# agencia 4
|
50
|
+
# complemento 2
|
51
|
+
# conta corrente 5
|
52
|
+
# digito da conta 1
|
53
|
+
# complemento 8
|
54
|
+
"#{agencia}00#{conta_corrente}#{digito_conta}#{''.rjust(8, ' ')}"
|
55
|
+
end
|
56
|
+
|
57
|
+
# Complemento do header
|
58
|
+
# (no caso do Itau, sao apenas espacos em branco)
|
59
|
+
#
|
60
|
+
# @return [String]
|
61
|
+
#
|
62
|
+
def complemento
|
63
|
+
''.rjust(294, ' ')
|
64
|
+
end
|
65
|
+
|
66
|
+
# Codigo da carteira de acordo com a documentacao o Itau
|
67
|
+
# se a carteira nao forem as testadas (150, 191 e 147)
|
68
|
+
# retorna 'I' que é o codigo das carteiras restantes na documentacao
|
69
|
+
#
|
70
|
+
# @return [String]
|
71
|
+
#
|
72
|
+
def codigo_carteira
|
73
|
+
return 'U' if carteira.to_s == '150'
|
74
|
+
return '1' if carteira.to_s == '191'
|
75
|
+
return 'E' if carteira.to_s == '147'
|
76
|
+
'I'
|
77
|
+
end
|
78
|
+
|
79
|
+
# Detalhe do arquivo
|
80
|
+
#
|
81
|
+
# @param pagamento [PagamentoCnab400]
|
82
|
+
# objeto contendo as informacoes referentes ao boleto (valor, vencimento, cliente)
|
83
|
+
# @param sequencial
|
84
|
+
# num. sequencial do registro no arquivo
|
85
|
+
#
|
86
|
+
# @return [String]
|
87
|
+
#
|
88
|
+
def monta_detalhe(pagamento, sequencial)
|
89
|
+
raise Bbrcobranca::RemessaInvalida, pagamento if pagamento.invalid?
|
90
|
+
|
91
|
+
detalhe = '1' # identificacao transacao 9[01]
|
92
|
+
detalhe << Bbrcobranca::Util::Empresa.new(documento_cedente).tipo # tipo de identificacao da empresa 9[02]
|
93
|
+
detalhe << documento_cedente.to_s.rjust(14, '0') # cpf/cnpj da empresa 9[14]
|
94
|
+
detalhe << agencia # agencia 9[04]
|
95
|
+
detalhe << ''.rjust(2, '0') # complemento de registro (zeros) 9[02]
|
96
|
+
detalhe << conta_corrente # conta corrente 9[05]
|
97
|
+
detalhe << digito_conta # dac 9[01]
|
98
|
+
detalhe << ''.rjust(4, ' ') # complemento do registro (brancos) X[04]
|
99
|
+
detalhe << ''.rjust(4, '0') # codigo cancelamento (zeros) 9[04]
|
100
|
+
detalhe << pagamento.documento_ou_numero.to_s.ljust(25) # identificacao do tit. na empresa X[25]
|
101
|
+
detalhe << pagamento.nosso_numero.to_s.rjust(8, '0') # nosso numero 9[08]
|
102
|
+
detalhe << ''.rjust(13, '0') # quantidade de moeda variavel 9[13]
|
103
|
+
detalhe << carteira # carteira 9[03]
|
104
|
+
detalhe << ''.rjust(21, ' ') # identificacao da operacao no banco X[21]
|
105
|
+
detalhe << codigo_carteira # codigo da carteira X[01]
|
106
|
+
detalhe << pagamento.identificacao_ocorrencia # identificacao ocorrencia 9[02]
|
107
|
+
detalhe << pagamento.numero.to_s.rjust(10, '0') # numero do documento X[10]
|
108
|
+
detalhe << pagamento.data_vencimento.strftime('%d%m%y') # data do vencimento 9[06]
|
109
|
+
detalhe << pagamento.formata_valor # valor do documento 9[13]
|
110
|
+
detalhe << cod_banco # codigo banco 9[03]
|
111
|
+
detalhe << ''.rjust(5, '0') # agencia cobradora - deixar zero 9[05]
|
112
|
+
detalhe << '99' # especie do titulo X[02]
|
113
|
+
detalhe << aceite # aceite (A/N) X[01]
|
114
|
+
detalhe << pagamento.data_emissao.strftime('%d%m%y') # data de emissao 9[06]
|
115
|
+
detalhe << pagamento.cod_primeira_instrucao # 1a instrucao - deixar zero X[02]
|
116
|
+
detalhe << pagamento.cod_segunda_instrucao # 2a instrucao - deixar zero X[02]
|
117
|
+
detalhe << pagamento.formata_valor_mora # valor mora ao dia 9[13]
|
118
|
+
detalhe << pagamento.formata_data_desconto # data limite para desconto 9[06]
|
119
|
+
detalhe << pagamento.formata_valor_desconto # valor do desconto 9[13]
|
120
|
+
detalhe << pagamento.formata_valor_iof # valor do iof 9[13]
|
121
|
+
detalhe << pagamento.formata_valor_abatimento # valor do abatimento 9[13]
|
122
|
+
detalhe << pagamento.identificacao_sacado # identificacao do pagador 9[02]
|
123
|
+
detalhe << pagamento.documento_sacado.to_s.rjust(14, '0') # documento do pagador 9[14]
|
124
|
+
detalhe << pagamento.nome_sacado.format_size(30) # nome do pagador X[30]
|
125
|
+
detalhe << ''.rjust(10, ' ') # complemento do registro (brancos) X[10]
|
126
|
+
detalhe << pagamento.endereco_sacado.format_size(40) # endereco do pagador X[40]
|
127
|
+
detalhe << pagamento.bairro_sacado.format_size(12) # bairro do pagador X[12]
|
128
|
+
detalhe << pagamento.cep_sacado # cep do pagador 9[08]
|
129
|
+
detalhe << pagamento.cidade_sacado.format_size(15) # cidade do pagador X[15]
|
130
|
+
detalhe << pagamento.uf_sacado # uf do pagador X[02]
|
131
|
+
detalhe << pagamento.nome_avalista.format_size(30) # nome do sacador/avalista X[30]
|
132
|
+
detalhe << ''.rjust(4, ' ') # complemento do registro X[04]
|
133
|
+
detalhe << ''.rjust(6, '0') # data da mora 9[06] *
|
134
|
+
detalhe << prazo_instrucao(pagamento) # prazo para a instrução 9[02]
|
135
|
+
detalhe << ''.rjust(1, ' ') # complemento do registro (brancos) X[01]
|
136
|
+
detalhe << sequencial.to_s.rjust(6, '0') # numero do registro no arquivo 9[06]
|
137
|
+
detalhe
|
138
|
+
end
|
139
|
+
|
140
|
+
def prazo_instrucao(pagamento)
|
141
|
+
return '03' unless pagamento.cod_primeira_instrucao == '09'
|
142
|
+
pagamento.dias_protesto.rjust(2, '0')
|
143
|
+
end
|
144
|
+
|
145
|
+
def monta_detalhe_multa(pagamento, sequencial)
|
146
|
+
detalhe = '2'
|
147
|
+
detalhe << pagamento.codigo_multa
|
148
|
+
detalhe << pagamento.data_vencimento.strftime('%d%m%Y')
|
149
|
+
detalhe << pagamento.formata_percentual_multa(13)
|
150
|
+
detalhe << ''.rjust(371, ' ')
|
151
|
+
detalhe << sequencial.to_s.rjust(6, '0')
|
152
|
+
detalhe
|
153
|
+
end
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|
157
|
+
end
|
@@ -0,0 +1,231 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
module Bbrcobranca
|
3
|
+
module Remessa
|
4
|
+
module Cnab400
|
5
|
+
class Santander < Bbrcobranca::Remessa::Cnab400::Base
|
6
|
+
|
7
|
+
# Código de Transmissão
|
8
|
+
# Consultar seu gerente para pegar esse código. Geralmente está no e-mail enviado pelo banco.
|
9
|
+
attr_accessor :codigo_transmissao
|
10
|
+
|
11
|
+
attr_accessor :codigo_carteira
|
12
|
+
|
13
|
+
validates_presence_of :documento_cedente, :codigo_transmissao, message: 'não pode estar em branco.'
|
14
|
+
validates_presence_of :digito_conta, message: 'não pode estar em branco.', if: :conta_padrao_novo?
|
15
|
+
validates_length_of :documento_cedente, minimum: 11, maximum: 14, message: 'deve ter entre 11 e 14 dígitos.'
|
16
|
+
validates_length_of :carteira, maximum: 3, message: 'deve ter no máximo 3 dígitos.'
|
17
|
+
validates_length_of :codigo_transmissao, maximum: 20, message: 'deve ter no máximo 20 dígitos.'
|
18
|
+
|
19
|
+
def initialize(campos = {})
|
20
|
+
campos = { aceite: 'N', carteira: '101', codigo_carteira: '1' }.merge!(campos)
|
21
|
+
super(campos)
|
22
|
+
end
|
23
|
+
|
24
|
+
def cod_banco
|
25
|
+
'033'
|
26
|
+
end
|
27
|
+
|
28
|
+
def nome_banco
|
29
|
+
'SANTANDER'.format_size(15)
|
30
|
+
end
|
31
|
+
|
32
|
+
def codigo_transmissao=(valor)
|
33
|
+
@codigo_transmissao = valor.to_s.strip.rjust(20, '0') if valor
|
34
|
+
end
|
35
|
+
|
36
|
+
# Informacoes do Código de Transmissão
|
37
|
+
#
|
38
|
+
# @return [String]
|
39
|
+
#
|
40
|
+
def info_conta
|
41
|
+
# CAMPO TAMANHO
|
42
|
+
# codigo_transmissao 20
|
43
|
+
codigo_transmissao
|
44
|
+
end
|
45
|
+
|
46
|
+
# Zeros do header
|
47
|
+
#
|
48
|
+
# @return [String]
|
49
|
+
#
|
50
|
+
def zeros
|
51
|
+
"".ljust(16, "0")
|
52
|
+
end
|
53
|
+
|
54
|
+
|
55
|
+
# Complemento do header
|
56
|
+
#
|
57
|
+
# @return [String]
|
58
|
+
#
|
59
|
+
def complemento
|
60
|
+
"".ljust(275, " ")
|
61
|
+
end
|
62
|
+
|
63
|
+
# Numero da versão da remessa
|
64
|
+
#
|
65
|
+
# @return [String]
|
66
|
+
#
|
67
|
+
def versao
|
68
|
+
"058"
|
69
|
+
end
|
70
|
+
|
71
|
+
def monta_header
|
72
|
+
# CAMPO TAMANHO VALOR
|
73
|
+
# tipo do registro [1] 0
|
74
|
+
# operacao [1] 1
|
75
|
+
# literal remessa [7] REMESSA
|
76
|
+
# Código do serviço [2] 01
|
77
|
+
# cod. servico [15] COBRANCA
|
78
|
+
# info. conta [20]
|
79
|
+
# empresa mae [30]
|
80
|
+
# cod. banco [3]
|
81
|
+
# nome banco [15]
|
82
|
+
# data geracao [6] formato DDMMAA
|
83
|
+
# zeros [16]
|
84
|
+
# complemento registro [275]
|
85
|
+
# versao [3]
|
86
|
+
# num. sequencial [6] 000001
|
87
|
+
"01REMESSA01COBRANCA #{info_conta}#{empresa_mae[0..29].to_s.ljust(30, ' ')}#{cod_banco}#{nome_banco}#{data_geracao}#{zeros}#{complemento}#{versao}000001"
|
88
|
+
end
|
89
|
+
|
90
|
+
# Detalhe do arquivo
|
91
|
+
#
|
92
|
+
# @param pagamento [PagamentoCnab400]
|
93
|
+
# objeto contendo as informacoes referentes ao boleto (valor, vencimento, cliente)
|
94
|
+
# @param sequencial
|
95
|
+
# num. sequencial do registro no arquivo
|
96
|
+
#
|
97
|
+
# @return [String]
|
98
|
+
#
|
99
|
+
def monta_detalhe(pagamento, sequencial)
|
100
|
+
raise Bbrcobranca::RemessaInvalida, pagamento if pagamento.invalid?
|
101
|
+
|
102
|
+
detalhe = '1' # identificacao transacao 9[01]
|
103
|
+
detalhe << Bbrcobranca::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 de Transmissão 9[20]
|
106
|
+
detalhe << pagamento.documento_ou_numero.to_s.ljust(25, ' ') # identificacao do tit. na empresa X[25]
|
107
|
+
detalhe << pagamento.nosso_numero.to_s.rjust(8, '0') # nosso numero 9[8]
|
108
|
+
detalhe << pagamento.formata_data_segundo_desconto # data limite para o segundo desconto 9[06]
|
109
|
+
detalhe << ''.rjust(1, ' ') # brancos X[1]
|
110
|
+
detalhe << pagamento.codigo_multa # Com multa = 4, Sem multa = 0 9[1]
|
111
|
+
detalhe << pagamento.formata_percentual_multa # Percentual multa por atraso % 9[6]
|
112
|
+
detalhe << '00' # Unidade de valor moeda corrente = 00 9[2]
|
113
|
+
detalhe << '0'.rjust(13, '0') # Valor do título em outra unidade 9[15]
|
114
|
+
detalhe << ''.rjust(4, ' ') # brancos X[4]
|
115
|
+
detalhe << pagamento.formata_data_multa # Data para cobrança de multa 9[6]
|
116
|
+
|
117
|
+
# codigo da carteira
|
118
|
+
# 1 = ELETRÔNICA COM REGISTRO
|
119
|
+
# 3 = CAUCIONADA ELETRÔNICA
|
120
|
+
# 4 = COBRANÇA SEM REGISTRO
|
121
|
+
# 5 = RÁPIDA COM REGISTRO
|
122
|
+
# (BLOQUETE EMITIDO PELO CLIENTE) 6 = CAUCIONADA RAPIDA
|
123
|
+
# 7 = DESCONTADA ELETRÔNICA
|
124
|
+
detalhe << codigo_carteira # codigo da carteira 9[01]
|
125
|
+
|
126
|
+
# Código da ocorrência:
|
127
|
+
# 01 = ENTRADA DE TÍTULO
|
128
|
+
# 02 = BAIXA DE TÍTULO
|
129
|
+
# 04 = CONCESSÃO DE ABATIMENTO
|
130
|
+
# 05 = CANCELAMENTO ABATIMENTO
|
131
|
+
# 06 = PRORROGAÇÃO DE VENCIMENTO
|
132
|
+
# 07 = ALT. NÚMERO CONT.CEDENTE
|
133
|
+
# 08 = ALTERAÇÃO DO SEU NÚMERO
|
134
|
+
# 09 = PROTESTAR
|
135
|
+
# 18 = SUSTAR PROTESTO
|
136
|
+
detalhe << pagamento.identificacao_ocorrencia # identificacao ocorrencia 9[02]
|
137
|
+
detalhe << pagamento.numero.to_s.rjust(10, '0') # numero do documento X[10]
|
138
|
+
detalhe << pagamento.data_vencimento.strftime('%d%m%y') # data do vencimento 9[06]
|
139
|
+
detalhe << pagamento.formata_valor # valor do documento 9[13]
|
140
|
+
detalhe << cod_banco # codigo banco 9[03]
|
141
|
+
detalhe << ''.rjust(5, '0') # agencia cobradora - deixar zero 9[05]
|
142
|
+
|
143
|
+
# Espécie de documento:
|
144
|
+
# 01 = DUPLICATA
|
145
|
+
# 02 = NOTA PROMISSÓRIA
|
146
|
+
# 03 = APÓLICE / NOTA DE SEGURO
|
147
|
+
# 05 = RECIBO
|
148
|
+
# 06 = DUPLICATA DE SERVIÇO
|
149
|
+
# 07 = LETRA DE CAMBIO
|
150
|
+
detalhe << pagamento.especie_titulo # Espécie de documento 9[02]
|
151
|
+
detalhe << aceite # aceite (A/N) X[01]
|
152
|
+
detalhe << pagamento.data_emissao.strftime('%d%m%y') # data de emissao 9[06]
|
153
|
+
|
154
|
+
# Instrução cobrança
|
155
|
+
# 00 = NÃO HÁ INSTRUÇÕES
|
156
|
+
# 02 = BAIXAR APÓS QUINZE DIAS DO VENCIMENTO
|
157
|
+
# 03 = BAIXAR APÓS 30 DIAS DO VENCIMENTO
|
158
|
+
# 04 = NÃO BAIXAR
|
159
|
+
# 06 = PROTESTAR (VIDE POSIÇÃO392/393)
|
160
|
+
# 07 = NÃO PROTESTAR
|
161
|
+
# 08 = NÃO COBRAR JUROS DE MORA
|
162
|
+
detalhe << pagamento.cod_primeira_instrucao # primeira instrução 9[02]
|
163
|
+
detalhe << pagamento.cod_segunda_instrucao # segunda instrução 9[02]
|
164
|
+
detalhe << pagamento.formata_valor_mora # valor mora ao dia 9[13]
|
165
|
+
detalhe << pagamento.formata_data_desconto # data limite para desconto 9[06]
|
166
|
+
detalhe << pagamento.formata_valor_desconto # valor do desconto 9[13]
|
167
|
+
detalhe << pagamento.formata_valor_iof # valor do iof 9[13]
|
168
|
+
detalhe << pagamento.formata_valor_abatimento # valor do abatimento 9[13]
|
169
|
+
detalhe << pagamento.identificacao_sacado # identificacao do pagador 9[02]
|
170
|
+
detalhe << pagamento.documento_sacado.to_s.rjust(14, '0') # documento do pagador 9[14]
|
171
|
+
detalhe << pagamento.nome_sacado.format_size(40) # nome do pagador X[40]
|
172
|
+
detalhe << pagamento.endereco_sacado.format_size(40) # endereco do pagador X[40]
|
173
|
+
detalhe << pagamento.bairro_sacado.format_size(12) # bairro do pagador X[12]
|
174
|
+
detalhe << pagamento.cep_sacado # cep do pagador 9[08]
|
175
|
+
detalhe << pagamento.cidade_sacado.format_size(15) # cidade do pagador X[15]
|
176
|
+
detalhe << pagamento.uf_sacado # uf do pagador X[02]
|
177
|
+
detalhe << pagamento.nome_avalista.format_size(30) # Sacador/Mensagens X[30]
|
178
|
+
detalhe << ''.rjust(1, ' ') # Brancos X[1]
|
179
|
+
detalhe << identificador_movimento_complemento # Identificador do Complemento X[1]
|
180
|
+
detalhe << movimento_complemento # Complemento 9[2]
|
181
|
+
detalhe << ''.rjust(6, ' ') # Brancos X[06]
|
182
|
+
# Se identificacao_ocorrencia = 06
|
183
|
+
detalhe << pagamento.dias_protesto.rjust(2, '0') # Número de dias para protesto 9[02]
|
184
|
+
detalhe << ''.rjust(1, ' ') # Brancos X[1]
|
185
|
+
detalhe << sequencial.to_s.rjust(6, '0') # numero do registro no arquivo 9[06]
|
186
|
+
detalhe
|
187
|
+
end
|
188
|
+
|
189
|
+
def identificador_movimento_complemento
|
190
|
+
return 'I' if conta_padrao_novo?
|
191
|
+
''.rjust(1, ' ')
|
192
|
+
end
|
193
|
+
|
194
|
+
def movimento_complemento
|
195
|
+
return "#{conta_corrente[8]}#{digito_conta}" if conta_padrao_novo?
|
196
|
+
''.rjust(2, ' ')
|
197
|
+
end
|
198
|
+
|
199
|
+
def conta_padrao_novo?
|
200
|
+
conta_corrente.present? && conta_corrente.length > 8
|
201
|
+
end
|
202
|
+
|
203
|
+
# Valor total de todos os títulos
|
204
|
+
#
|
205
|
+
# @return [String]
|
206
|
+
#
|
207
|
+
def total_titulos
|
208
|
+
total = sprintf "%.2f", pagamentos.map(&:valor).inject(:+)
|
209
|
+
total.to_s.somente_numeros.rjust(13, "0")
|
210
|
+
end
|
211
|
+
|
212
|
+
# Trailer do arquivo remessa
|
213
|
+
#
|
214
|
+
# @param sequencial
|
215
|
+
# num. sequencial do registro no arquivo
|
216
|
+
#
|
217
|
+
# @return [String]
|
218
|
+
#
|
219
|
+
def monta_trailer(sequencial)
|
220
|
+
# CAMPO TAMANHO VALOR
|
221
|
+
# código registro [1] 9
|
222
|
+
# quant. documentos [6]
|
223
|
+
# valor total titulos [13]
|
224
|
+
# zeros [374] 0
|
225
|
+
# num. sequencial [6]
|
226
|
+
"9#{sequencial.to_s.rjust(6, '0')}#{total_titulos}#{''.rjust(374, '0')}#{sequencial.to_s.rjust(6, "0")}"
|
227
|
+
end
|
228
|
+
end
|
229
|
+
end
|
230
|
+
end
|
231
|
+
end
|