Class: Brcobranca::Remessa::Cnab400::Citibank

Inherits:
Base
  • Object
show all
Defined in:
lib/brcobranca/remessa/cnab400/citibank.rb

Instance Attribute Summary collapse

Attributes inherited from Base

#aceite, #agencia, #carteira, #conta_corrente, #digito_conta, #documento_cedente, #empresa_mae, #pagamentos, #sequencial_remessa

Instance Method Summary collapse

Methods inherited from Base

#data_geracao, #gera_arquivo, #monta_header, #monta_trailer

Methods inherited from Base

#quantidade_titulos_cobranca, #totaliza_valor_titulos, #valor_titulos_carteira

Methods included from Validations

#errors, included, #invalid?, #valid?

Constructor Details

#initialize(campos = {}) ⇒ Citibank

Nova instancia do Citibank



17
18
19
20
# File 'lib/brcobranca/remessa/cnab400/citibank.rb', line 17

def initialize(campos = {})
  campos = { aceite: 'N', carteira: '1' }.merge!(campos)
  super(campos)
end

Instance Attribute Details

#portfolioObject

Identificação do portfolio. Necessário consultar o Citibank para informações referentes à conta cobrança e carteira do cliente.



9
10
11
# File 'lib/brcobranca/remessa/cnab400/citibank.rb', line 9

def portfolio
  @portfolio
end

Instance Method Details

#cod_bancoObject



22
23
24
# File 'lib/brcobranca/remessa/cnab400/citibank.rb', line 22

def cod_banco
  '745'
end

#complementoString

Complemento do header (no caso do Citibank, sao apenas espacos em branco)

Returns:

  • (String)


45
46
47
48
49
50
# File 'lib/brcobranca/remessa/cnab400/citibank.rb', line 45

def complemento
  # CAMPO                              TAMANHO
  # Densidade de gravação              5
  # Unidade de densidade de gravação   3
  '01600BPI'.rjust(294, ' ')
end

#info_contaString

Informacoes da conta corrente do cedente

Returns:

  • (String)


34
35
36
37
38
# File 'lib/brcobranca/remessa/cnab400/citibank.rb', line 34

def info_conta
  # CAMPO            TAMANHO
  # portfolio        20
  portfolio.rjust(20, ' ')
end

#monta_detalhe(pagamento, sequencial) ⇒ String

Detalhe do arquivo

Parameters:

  • pagamento (PagamentoCnab400)

    objeto contendo as informacoes referentes ao boleto (valor, vencimento, cliente)

  • sequencial

    num. sequencial do registro no arquivo

Returns:

  • (String)

Raises:



61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
# File 'lib/brcobranca/remessa/cnab400/citibank.rb', line 61

def monta_detalhe(pagamento, sequencial)
  raise Brcobranca::RemessaInvalida, pagamento if pagamento.invalid?

  detalhe = '1'                                                     # identificacao transacao               9[01]
  detalhe += Brcobranca::Util::Empresa.new(documento_cedente).tipo  # tipo de identificacao da empresa      9[02]
  detalhe << documento_cedente.to_s.rjust(14, '0')                  # cpf/cnpj da empresa                   9[14]
  detalhe << portfolio                                              # portfolio                             X[20]
  detalhe << pagamento.documento_ou_numero.to_s.ljust(25) # identificacao do tit. na empresa      X[25]
  detalhe << pagamento.especie_titulo                               # espécie do título                     9[02] - 00 = DMI – Duplicata Mercantil por Indicação, 02 = DM – Duplicata Mercantil
  detalhe << pagamento.nosso_numero.to_s.rjust(12, '0')             # nosso numero                          9[12]
  detalhe << ''.rjust(6, ' ')                                       # brancos                               X[06]
  detalhe << pagamento.formata_data_segundo_desconto                # data limite para o segundo desconto   9[06]
  detalhe << pagamento.formata_valor_segundo_desconto               # valor do segundo desconto             9[13]
  detalhe << '000'                                                  # carne                                 9[03] - Válido apenas quando o campo 148/149 for igual a 03
  detalhe << '000'                                                  # parcela                               9[03] - Só preencher se o banco for imprimir e enviar e for um carnê
  detalhe << carteira                                               # codigo da carteira                    X[01] - Código 1 = Cobrança Simples, Código 2 = Cobrança Caucionada
  detalhe << pagamento.identificacao_ocorrencia                     # identificacao ocorrencia              9[02]
  detalhe << pagamento.numero.to_s.rjust(10, '0') # numero do documento                   X[10]
  detalhe << pagamento.data_vencimento.strftime('%d%m%y')           # data do vencimento                    9[06]
  detalhe << pagamento.formata_valor                                # valor do documento                    9[13]
  detalhe << cod_banco                                              # codigo banco                          9[03]
  detalhe << ''.rjust(5, '0')                                       # agencia cobradora - deixar zero       9[05]

  # 01 = Banco imprime (apenas boletos simples não personalizados) 03 = Banco imprime de forma personalizada (boletos simples, personalizados e carnês)
  # 07 = Banco não imprime
  # 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:
  #         - 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.
  #         - Quando código 07, o campo 065/076, deverá ter o NOSSO NÚMERO atribuído pelo cliente.
  # Se o portfolio do cliente for cobrança flexível:
  # 04 = Título flex com boleto impresso via web (boleto por e-mail), aceita pagamento parcial
  # 06 = Título flex com boleto impresso via web (boleto por e-mail), não aceita pagamento parcial
  # (No caso de Cobrança Flexível, o campo 065/076 – NOSSO NÚMERO, no arquivo remessa, deve ser preenchido pelo cliente,
  # 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.)
  # (Para a modalidade de Cobrança Flexível, a opção de envio por e- mail deverá ser um parâmetro cadastral.)
  detalhe << '07'                                                   # Tipo de Emissão                       X[02]
  detalhe << aceite                                                 # aceite (A/N)                          X[01]
  detalhe << pagamento.data_emissao.strftime('%d%m%y')              # data de emissao                       9[06]

  # 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
  # 06 = PROTESTAR: quando esta instrução for dada também deverá ser preenchida a posição 159/160
  # 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.
  # IMPORTANTE: essa instrução somente poderá ser utilizada após assinatura de contrato específico para o produto.
  # 09 = DEVOLVER: esta é a instrução de BAIXA quando esta instrução for dada também deverá ser preenchida a posição 159/160
  # 10 = SUSTAR PROTESTO: instrução utilizada para títulos que NÃO estejam em cartório
  detalhe << '00' # Instrução para o título               9[02]

  # Quando posição 157/158 (Instrução para título) conter instrução 06 ou 09,
  # este campo deverá conter a quantidade de dias válidos para execução da instrução.
  detalhe << '00'                                                   # Número de dias válidos para instrução 9[02]
  detalhe << pagamento.formata_valor_mora                           # valor mora ao dia                     9[13]
  detalhe << pagamento.formata_data_desconto                        # data limite para desconto             9[06]
  detalhe << pagamento.formata_valor_desconto                       # valor do desconto                     9[13]
  detalhe << pagamento.formata_valor_iof                            # valor do iof                          9[13]
  detalhe << pagamento.formata_valor_abatimento                     # valor do abatimento                   9[13]
  detalhe << pagamento.identificacao_sacado                         # identificacao do pagador              9[02]
  detalhe << pagamento.documento_sacado.to_s.rjust(14, '0')         # documento do pagador                  9[14]
  detalhe << pagamento.nome_sacado.format_size(40)                  # nome do pagador                       X[40]
  detalhe << pagamento.endereco_sacado.format_size(40)              # endereco do pagador                   X[40]
  detalhe << pagamento.bairro_sacado.format_size(12)                # bairro do pagador                     X[12]
  detalhe << pagamento.cep_sacado                                   # cep do pagador                        9[08]
  detalhe << pagamento.cidade_sacado.format_size(15)                # cidade do pagador                     X[15]
  detalhe << pagamento.uf_sacado                                    # uf do pagador                         X[02]

  # Este campo tem 3 finalidades:
  #   a) mensagem da empresa impressa no boleto pelo banco
  #    (para isto na primeira posição deve haver um
  #     asterisco);
  #   b) sem o asterisco, este campo será o nome do Sacador/Avalista, quando preenchido;
  #   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.
  detalhe << pagamento.nome_avalista.format_size(40)                # Sacador/Mensagens                     X[40]
  detalhe << ''.rjust(2, ' ')                                       # Brancos                               X[06]
  detalhe << '9'                                                    # moeda                                 9[01] - Código 9 = REAIS Código 5 = Dólar
  detalhe << sequencial.to_s.rjust(6, '0')                          # numero do registro no arquivo         9[06]
  detalhe
end

#nome_bancoObject



26
27
28
# File 'lib/brcobranca/remessa/cnab400/citibank.rb', line 26

def nome_banco
  'CITIBANK'.ljust(15, ' ')
end