Brunomm/br_boleto

View on GitHub
lib/br_boleto/remessa/cnab240/itau.rb

Summary

Maintainability
A
2 hrs
Test Coverage
# -*- encoding: utf-8 -*-
module BrBoleto
    module Remessa
        module Cnab240
            class Itau < BrBoleto::Remessa::Cnab240::Base
                def conta_class
                    BrBoleto::Conta::Itau
                end

                ########################### HEADER ARQUIVO #############################
                    #
                    # Informação da conta
                    # DESCRIÇÃO                       TAMANHO     POSIÇÃO
                    # ---------------------------------------------------------
                    # Complemento Registro (Zero)       01        53 - 53
                    # Agencia                           04        54 - 57
                    # Complemento Registro (Branco)     01        58 - 58
                    # Complemento Registro (Zeros)      07        59 - 65
                    # Conta Corrente                    05        66 - 70
                    # Complemento Registro (Branco)     01        71 - 71
                    # DV da Conta                       01        72 - 72
                    #
                    # TOTAL = 20 posições
                    def informacoes_da_conta
                        informacoes =  ''.rjust(1, '0')
                        informacoes << "#{conta.agencia}".adjust_size_to(4, '0', :right)
                        informacoes << ''.rjust(1)
                        informacoes << ''.rjust(7, '0')
                        informacoes << "#{conta.conta_corrente}".adjust_size_to(5, '0', :right)
                        informacoes << ''.rjust(1)
                        informacoes << "#{conta.conta_corrente_dv}".adjust_size_to(1, '0')
                        informacoes
                    end

                    # Espaço reservado para o Banco
                    # Para o Itau esse espaço deve ter 'Brancos'
                    # 54 posições
                    def header_arquivo_posicao_172_a_225
                        ''.rjust(54)
                    end
                    def header_arquivo_posicao_172_a_191
                        header_arquivo_posicao_172_a_225
                    end
                    def header_arquivo_posicao_192_a_211
                        ''
                    end

                    # Posição 226 a 228 do Header do Arquivo
                    # Para o Itau esse espaço deve ter 'Zeros'
                    # 3 posições
                    def header_posicao_226_a_228
                        ''.rjust(3, '0')
                    end

                    # Posição 229 a 240 do Header do Arquivo
                    # Para o Itau esse espaço deve ter 'Brancos'
                    # 12 posições
                    def header_posicao_229_a_240
                        ''.rjust(12)
                    end

                    def complemento_header_arquivo
                        "#{header_posicao_226_a_228}#{header_posicao_229_a_240}"
                    end

                ########################### HEADER LOTE #############################
                    # 
                    # COMPLEMENTO DE REGISTRO
                    # Para o Itau esse espaço deve ter 'Brancos'
                    # 20 posições
                    def codigo_convenio
                        ''.adjust_size_to(20)
                    end
                    def convenio_lote(lote)
                        codigo_convenio
                    end

                ######################### SEGMENTO P #############################
                    #
                    # Complemento de Registro - Conteúdo deve estar em 'Branco'
                    # 1 posição
                    def segmento_p_posicao_023_a_023
                        " "
                    end

                    # segmento_p_posicao_024_a_057
                    # DESCRIÇÃO                            TAMANHO      POSIÇÃO
                    # -----------------------------------------------------------
                    # COMPLEMENTO DE REGISTRO (ZEROS)        07         24 - 30
                    # NÚMERO DA CONTA CORRENTE               05         31 - 35
                    # COMPLEMENTO DE REGISTRO (BRANCO)       01         36 - 36
                    # DV AG./CONTA EMPRESA                   01         37 - 37
                    # NÚMERO DA CARTEIRA                     03         38 - 40
                    # NÚMERO DOCUMENTO                       08         41 - 48
                    # NOSSO NÚMERO DV                        01         49 - 49
                    # COMPLEMENTO DE REGISTRO (BRANCOS)      08         50 - 57
                    #                                                  
                    # TOTAL = 34 posições 
                    def complemento_p(pagamento)
                        complemento = ''.adjust_size_to(7, '0', :right)
                        complemento << "#{conta.conta_corrente}".adjust_size_to(5, '0', :right)
                        complemento << ''.rjust(1)
                        complemento << "#{conta.conta_corrente_dv}".adjust_size_to(1, '0', :right)
                        complemento << "#{conta.carteira}".adjust_size_to(3, '0', :right)
                        complemento << "#{pagamento.numero_documento}".adjust_size_to(8, '0', :right)
                        complemento << "#{pagamento.nosso_numero}".split('').last
                        complemento << ''.rjust(8)
                        complemento
                    end

                    # Segmento P posição 059 a 062
                    # Para o Itau esse espaço deve ter 'Zeros'
                    # 5 posições
                    def segmento_p_posicao_058_a_062
                        ''.rjust(5, '0')
                    end
                    def segmento_p_posicao_058_a_058
                        segmento_p_posicao_058_a_062
                    end
                    def segmento_p_posicao_059_a_059(pagamento)
                        ''
                    end
                    def segmento_p_posicao_060_a_060
                        ''
                    end
                    def segmento_p_posicao_061_a_061(pagamento)
                        ''
                    end
                    def segmento_p_posicao_062_a_062(pagamento)
                        ''
                    end

                    # segmento_p_posicao_063_a_077
                    # DESCRIÇÃO                      TAMANHO     POSIÇÃO
                    # ---------------------------------------------------------
                    # Número  Doc.                     10          63 - 72
                    # Brancos                          05          73 - 77
                    # TOTAL = 15 posições 
                    def segmento_p_numero_do_documento(pagamento)
                        segmento = "#{pagamento.numero_documento}".adjust_size_to(10, '0', :right)
                        segmento << ''.rjust(5)
                        segmento
                    end

                    # Dígito Verificador da Agência cobradora - Conteúdo deve ser 'Zero'
                    # 1 posição
                    def segmento_p_posicao_106_a_106
                        "0"
                    end

                    # Código do Juros de Mora
                    # Para o Itau esse espaço deve ter 'Zero'
                    # 1 posição
                    def segmento_p_posicao_118_a_118(pagamento) 
                        '0'
                    end

                    # Código da Moeda
                    # Para o Itau esse espaço deve ter 'Zeros'
                    # 2 posições
                    def segmento_p_posicao_228_a_229(pagamento)
                        '00'
                    end

                ######################### TRAILER LOTE #############################
                    #
                    # trailer_lote_posicao_024_a_240(lote, nr_lote)
                    # DESCRIÇÃO                              TAMANHO     POSIÇÃO
                    # ----------------------------------------------------------------
                    # Qtd. Títulos em Cobrança                 006       024  -  029
                    # Val. Tot. Títulos em Carteiras           017       030  -  046
                    # Qtd. Títulos em Cobrança                 006       047  -  052
                    # Val. Tot. Títulos em Carteiras           017       053  -  069
                    # Complemento De Registro (Zeros)          046       070  -  115
                    # Aviso Bancário (Brancos)                 008       116  -  123
                    # Uso FEBRABAN                             117       124  -  240 
                    #
                    # TOTAL = 217 posições 
                    #
                    def complemento_trailer_lote(lote, nr_lote)
                        complemento = ''
                        complemento << ''.rjust(92, '0')  # VALORES UTILIZADOS APENAS PARA ARQUIVO DE RETORNO
                        complemento << ''.rjust(8, ' ')   # REFERÊNCIA DO AVISO BANCÁRIO
                        complemento << ''.rjust(117, ' ') # USO EXCLUSIVO FEBRABAN
                        complemento
                    end


                # Por padrão o ITAU não utiliza o Segmento S
                def usa_segmento_S?
                    false
                end

            end
        end
    end
end