Class: BrBoleto::Remessa::Cnab240::Base
- Inherits:
-
Base
- Object
- ActiveModelBase
- Base
- BrBoleto::Remessa::Cnab240::Base
- Includes:
- Helper::HeaderArquivo, Helper::HeaderLote, Helper::SegmentoP, Helper::SegmentoQ, Helper::SegmentoR, Helper::SegmentoS, Helper::TrailerArquivo, Helper::TrailerLote
- Defined in:
- lib/br_boleto/remessa/cnab240/base.rb
Instance Attribute Summary collapse
-
#lotes ⇒ Object
O atributo lotes sempre irá retornar umm Array.
-
#mensagem_1 ⇒ Object
mensagem 1.
-
#mensagem_2 ⇒ Object
mensagem 2.
Attributes inherited from Base
#data_hora_arquivo, #sequencial_remessa
Class Method Summary collapse
Instance Method Summary collapse
-
#codigo_convenio ⇒ Object
Codigo do convenio.
-
#complemento_header_arquivo ⇒ Object
Complemento do registro.
-
#complemento_p(pagamento) ⇒ Object
Complemento do segmento P Recebe um objeto da classe BrBoleto::Remessa::Pagamento Composto por 34 digitos Cada banco tem seu padrão Deve ser sobrescrito na classe do banco.
-
#complemento_trailer_lote(lote, nr_lote) ⇒ Object
Complemento final do trailer do lote Por padrão coloco 217 caracateres em branco pois é na maioria dos bancos Mas para alguns bancos isso pode mudar.
-
#convenio_lote(lote) ⇒ Object
Informacoes do convenio para o lote.
-
#dados_do_arquivo ⇒ String
Gera os dados para o arquivo remessa.
-
#informacoes_da_conta ⇒ Object
Informacoes da conta do cedente.
-
#monta_lote(lote, nro_lote) ⇒ Array
Monta um lote para o arquivo.
- #pagamento_valid_distribuicao_boleto_length ⇒ Object
- #pagamento_valid_emissao_boleto_length ⇒ Object
-
#segmento_p_numero_do_documento(pagamento) ⇒ Object
Número do Documento de Cobrança Cada banco tem sua maneira de identificar esse número, mas o padrão é o Valor que se encontra no numero_documento ou então em nosso numero 15 posições.
- #usa_segmento_R? ⇒ Boolean
- #usa_segmento_S? ⇒ Boolean
Methods included from Helper::TrailerArquivo
#monta_trailer_arquivo, #trailer_arquivo_posicao_001_a_003, #trailer_arquivo_posicao_004_a_007, #trailer_arquivo_posicao_008_a_008, #trailer_arquivo_posicao_009_a_017, #trailer_arquivo_posicao_018_a_023, #trailer_arquivo_posicao_024_a_029, #trailer_arquivo_posicao_030_a_035, #trailer_arquivo_posicao_036_a_240
Methods included from Helper::TrailerLote
#monta_trailer_lote, #trailer_lote_posicao_001_a_003, #trailer_lote_posicao_004_a_007, #trailer_lote_posicao_008_a_008, #trailer_lote_posicao_009_a_017, #trailer_lote_posicao_018_a_023, #trailer_lote_posicao_024_a_240
Methods included from Helper::SegmentoS
#monta_segmento_s, #segmento_s_posicao_001_a_003, #segmento_s_posicao_004_a_007, #segmento_s_posicao_008_a_008, #segmento_s_posicao_009_a_013, #segmento_s_posicao_014_a_014, #segmento_s_posicao_015_a_015, #segmento_s_posicao_016_a_017, #segmento_s_posicao_018_a_018, #segmento_s_posicao_019_a_020_tipo_impressao_1_ou_2, #segmento_s_posicao_019_a_058_tipo_impressao_3, #segmento_s_posicao_021_a_160_tipo_impressao_1_ou_2, #segmento_s_posicao_059_a_098_tipo_impressao_3, #segmento_s_posicao_099_a_138_tipo_impressao_3, #segmento_s_posicao_139_a_178_tipo_impressao_3, #segmento_s_posicao_161_a_162_tipo_impressao_1_ou_2, #segmento_s_posicao_163_a_240_tipo_impressao_1_ou_2, #segmento_s_posicao_179_a_218_tipo_impressao_3, #segmento_s_posicao_219_a_240_tipo_impressao_3, #segmento_s_tipo_impressao_1_ou_2, #segmento_s_tipo_impressao_3
Methods included from Helper::SegmentoR
#monta_segmento_r, #segmento_r_posicao_001_a_003, #segmento_r_posicao_004_a_007, #segmento_r_posicao_008_a_008, #segmento_r_posicao_009_a_013, #segmento_r_posicao_014_a_014, #segmento_r_posicao_015_a_015, #segmento_r_posicao_016_a_017, #segmento_r_posicao_018_a_018, #segmento_r_posicao_019_a_026, #segmento_r_posicao_027_a_041, #segmento_r_posicao_042_a_042, #segmento_r_posicao_043_a_050, #segmento_r_posicao_051_a_065, #segmento_r_posicao_066_a_066, #segmento_r_posicao_067_a_074, #segmento_r_posicao_075_a_089, #segmento_r_posicao_090_a_099, #segmento_r_posicao_100_a_139, #segmento_r_posicao_140_a_179, #segmento_r_posicao_180_a_199, #segmento_r_posicao_200_a_207, #segmento_r_posicao_208_a_210, #segmento_r_posicao_211_a_215, #segmento_r_posicao_216_a_216, #segmento_r_posicao_217_a_228, #segmento_r_posicao_229_a_229, #segmento_r_posicao_230_a_230, #segmento_r_posicao_231_a_231, #segmento_r_posicao_232_a_240
Methods included from Helper::SegmentoQ
#monta_segmento_q, #segmento_q_posicao_001_a_003, #segmento_q_posicao_004_a_007, #segmento_q_posicao_008_a_008, #segmento_q_posicao_009_a_013, #segmento_q_posicao_014_a_014, #segmento_q_posicao_015_a_015, #segmento_q_posicao_016_a_017, #segmento_q_posicao_018_a_018, #segmento_q_posicao_019_a_033, #segmento_q_posicao_034_a_073, #segmento_q_posicao_074_a_113, #segmento_q_posicao_114_a_128, #segmento_q_posicao_129_a_133, #segmento_q_posicao_134_a_136, #segmento_q_posicao_137_a_151, #segmento_q_posicao_152_a_153, #segmento_q_posicao_154_a_154, #segmento_q_posicao_155_a_169, #segmento_q_posicao_170_a_209, #segmento_q_posicao_210_a_212, #segmento_q_posicao_213_a_232, #segmento_q_posicao_233_a_240
Methods included from Helper::SegmentoP
#monta_segmento_p, #segmento_p_posicao_001_a_003, #segmento_p_posicao_004_a_007, #segmento_p_posicao_008_a_008, #segmento_p_posicao_009_a_013, #segmento_p_posicao_014_a_014, #segmento_p_posicao_015_a_015, #segmento_p_posicao_016_a_017, #segmento_p_posicao_018_a_022, #segmento_p_posicao_023_a_023, #segmento_p_posicao_024_a_057, #segmento_p_posicao_058_a_058, #segmento_p_posicao_059_a_059, #segmento_p_posicao_060_a_060, #segmento_p_posicao_061_a_061, #segmento_p_posicao_062_a_062, #segmento_p_posicao_063_a_077, #segmento_p_posicao_078_a_085, #segmento_p_posicao_086_a_100, #segmento_p_posicao_101_a_105, #segmento_p_posicao_106_a_106, #segmento_p_posicao_107_a_108, #segmento_p_posicao_109_a_109, #segmento_p_posicao_110_a_117, #segmento_p_posicao_118_a_118, #segmento_p_posicao_119_a_126, #segmento_p_posicao_127_a_141, #segmento_p_posicao_142_a_142, #segmento_p_posicao_143_a_150, #segmento_p_posicao_151_a_165, #segmento_p_posicao_166_a_180, #segmento_p_posicao_181_a_195, #segmento_p_posicao_196_a_220, #segmento_p_posicao_221_a_221, #segmento_p_posicao_222_a_223, #segmento_p_posicao_224_a_224, #segmento_p_posicao_225_a_227, #segmento_p_posicao_228_a_229, #segmento_p_posicao_230_a_239, #segmento_p_posicao_240_a_240
Methods included from Helper::HeaderLote
#header_lote_posicao_001_a_003, #header_lote_posicao_004_a_007, #header_lote_posicao_008_a_008, #header_lote_posicao_009_a_009, #header_lote_posicao_010_a_011, #header_lote_posicao_012_a_013, #header_lote_posicao_014_a_016, #header_lote_posicao_017_a_017, #header_lote_posicao_018_a_018, #header_lote_posicao_019_a_033, #header_lote_posicao_034_a_053, #header_lote_posicao_054_a_073, #header_lote_posicao_074_a_103, #header_lote_posicao_104_a_143, #header_lote_posicao_144_a_183, #header_lote_posicao_184_a_191, #header_lote_posicao_192_a_199, #header_lote_posicao_200_a_207, #header_lote_posicao_208_a_240, #monta_header_lote
Methods included from Helper::HeaderArquivo
#header_arquivo_posicao_001_a_003, #header_arquivo_posicao_004_a_007, #header_arquivo_posicao_008_a_008, #header_arquivo_posicao_009_a_017, #header_arquivo_posicao_018_a_018, #header_arquivo_posicao_019_a_032, #header_arquivo_posicao_033_a_052, #header_arquivo_posicao_053_a_072, #header_arquivo_posicao_073_a_102, #header_arquivo_posicao_103_a_132, #header_arquivo_posicao_133_a_142, #header_arquivo_posicao_143_a_143, #header_arquivo_posicao_144_a_151, #header_arquivo_posicao_152_a_157, #header_arquivo_posicao_158_a_163, #header_arquivo_posicao_164_a_166, #header_arquivo_posicao_167_a_171, #header_arquivo_posicao_172_a_191, #header_arquivo_posicao_192_a_211, #header_arquivo_posicao_212_a_240, #monta_header_arquivo
Methods inherited from Base
#data_geracao, #hora_geracao, #pagamento_valid_cod_desconto_length, #pagamento_valid_tipo_impressao_required, #persisted?
Methods included from HaveConta
Methods inherited from ActiveModelBase
#assign_attributes, #default_values, #initialize
Constructor Details
This class inherits a constructor from BrBoleto::ActiveModelBase
Instance Attribute Details
#lotes ⇒ Object
O atributo lotes sempre irá retornar umm Array
49 50 51 |
# File 'lib/br_boleto/remessa/cnab240/base.rb', line 49 def lotes @lotes end |
#mensagem_1 ⇒ Object
mensagem 1
41 42 43 |
# File 'lib/br_boleto/remessa/cnab240/base.rb', line 41 def mensagem_1 @mensagem_1 end |
#mensagem_2 ⇒ Object
mensagem 2
44 45 46 |
# File 'lib/br_boleto/remessa/cnab240/base.rb', line 44 def mensagem_2 @mensagem_2 end |
Class Method Details
Instance Method Details
#codigo_convenio ⇒ Object
Codigo do convenio
Este metodo deve ser sobrescrevido na classe do banco
213 214 215 |
# File 'lib/br_boleto/remessa/cnab240/base.rb', line 213 def codigo_convenio raise NotImplementedError.new('Sobreescreva este método na classe referente ao banco que você esta criando') end |
#complemento_header_arquivo ⇒ Object
Complemento do registro
Este metodo deve ser sobrescrevido na classe do banco
189 190 191 |
# File 'lib/br_boleto/remessa/cnab240/base.rb', line 189 def complemento_header_arquivo raise NotImplementedError.new('Sobreescreva este método na classe referente ao banco que você esta criando') end |
#complemento_p(pagamento) ⇒ Object
Complemento do segmento P Recebe um objeto da classe BrBoleto::Remessa::Pagamento Composto por 34 digitos Cada banco tem seu padrão Deve ser sobrescrito na classe do banco
223 224 225 |
# File 'lib/br_boleto/remessa/cnab240/base.rb', line 223 def complemento_p(pagamento) raise NotImplementedError.new('Sobreescreva este método na classe referente ao banco que você esta criando') end |
#complemento_trailer_lote(lote, nr_lote) ⇒ Object
Complemento final do trailer do lote Por padrão coloco 217 caracateres em branco pois é na maioria dos bancos Mas para alguns bancos isso pode mudar
231 232 233 |
# File 'lib/br_boleto/remessa/cnab240/base.rb', line 231 def complemento_trailer_lote(lote, nr_lote) ''.rjust(217, ' ') end |
#convenio_lote(lote) ⇒ Object
Informacoes do convenio para o lote
Este metodo deve ser sobrescrevido na classe do banco
197 198 199 |
# File 'lib/br_boleto/remessa/cnab240/base.rb', line 197 def convenio_lote(lote) raise NotImplementedError.new('Sobreescreva este método na classe referente ao banco que você esta criando') end |
#dados_do_arquivo ⇒ String
Gera os dados para o arquivo remessa
148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 |
# File 'lib/br_boleto/remessa/cnab240/base.rb', line 148 def dados_do_arquivo return if self.invalid? # contador dos registros do lote contador = 1 # Metodo 'monta_header_arquivo' implementado no module -> BrBoleto::Remessa::Cnab240::Helper::HeaderArquivo arquivo = [monta_header_arquivo] contador += 1 lotes.each_with_index do |lote, index| novo_lote = monta_lote(lote, (index + 1)) arquivo.push novo_lote novo_lote.each { |_lote| contador += 1 } end # Metodo 'monta_trailer_arquivo' implementado no module -> BrBoleto::Remessa::Cnab240::Helper::TrailerArquivo arquivo << monta_trailer_arquivo(lotes.count, contador) retorno = ActiveSupport::Inflector.transliterate(arquivo.join("\n")).to_ascii.upcase retorno << "\n" retorno.encode(retorno.encoding, :universal_newline => true).encode(retorno.encoding, :crlf_newline => true) end |
#informacoes_da_conta ⇒ Object
Informacoes da conta do cedente
Este metodo deve ser sobrescrevido na classe do banco
205 206 207 |
# File 'lib/br_boleto/remessa/cnab240/base.rb', line 205 def informacoes_da_conta raise NotImplementedError.new('Sobreescreva este método na classe referente ao banco que você esta criando') end |
#monta_lote(lote, nro_lote) ⇒ Array
Monta um lote para o arquivo
numero do lote no arquivo
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 136 137 138 139 140 141 142 |
# File 'lib/br_boleto/remessa/cnab240/base.rb', line 99 def monta_lote(lote, nro_lote) return if lote.invalid? # Metodo 'monta_header_lote' implementado no module -> BrBoleto::Remessa::Cnab240::Helper::HeaderLote itens_lote = [monta_header_lote(lote, nro_lote)] #Nº Sequencial de Registros no Lote: sequencial_do_lote = 0 lote.pagamentos.each do |pagamento| # Metodo 'monta_segmento_p' implementado no module -> BrBoleto::Remessa::Cnab240::Helper::SegmentoP sequencial_do_lote += 1 itens_lote << monta_segmento_p(pagamento, nro_lote, sequencial_do_lote) # Metodo 'monta_segmento_q' implementado no module -> BrBoleto::Remessa::Cnab240::Helper::SegmentoQ sequencial_do_lote += 1 itens_lote << monta_segmento_q(pagamento, nro_lote, sequencial_do_lote) # Metodo 'monta_segmento_r' implementado no module -> BrBoleto::Remessa::Cnab240::Helper::SegmentoR # Segmento R é opcional e não é utilizados por alguns bancos if usa_segmento_R? sequencial_do_lote += 1 itens_lote << monta_segmento_r(pagamento, nro_lote, sequencial_do_lote) end # Metodo 'monta_segmento_s' implementado no module -> BrBoleto::Remessa::Cnab240::Helper::SegmentoS # Segmento S é opcional e não é utilizados por alguns bancos if usa_segmento_S? sequencial_do_lote += 1 itens_lote << monta_segmento_s(pagamento, nro_lote, sequencial_do_lote) end end # total_de_registros_do_lote é a quantidade de registros(linhas) que constam em um lote # Total de complementos do lote + o HEADER_LOTE + TRAILER_LOTE # sequencial_do_lote + 1 + 1 total_de_registros_do_lote = sequencial_do_lote + 2 # Metodo 'monta_trailer_lote' implementado no module -> BrBoleto::Remessa::Cnab240::Helper::TrailerLote itens_lote << monta_trailer_lote(lote, nro_lote, total_de_registros_do_lote) itens_lote end |
#pagamento_valid_distribuicao_boleto_length ⇒ Object
59 60 61 |
# File 'lib/br_boleto/remessa/cnab240/base.rb', line 59 def pagamento_valid_distribuicao_boleto_length 1 end |
#pagamento_valid_emissao_boleto_length ⇒ Object
55 56 57 |
# File 'lib/br_boleto/remessa/cnab240/base.rb', line 55 def pagamento_valid_emissao_boleto_length 1 end |
#segmento_p_numero_do_documento(pagamento) ⇒ Object
Número do Documento de Cobrança Cada banco tem sua maneira de identificar esse número, mas o padrão é o Valor que se encontra no numero_documento ou então em nosso numero 15 posições
177 178 179 180 181 182 183 |
# File 'lib/br_boleto/remessa/cnab240/base.rb', line 177 def segmento_p_numero_do_documento(pagamento) if pagamento.numero_documento.present? pagamento.numero_documento.to_s.rjust(15, '0') else pagamento.nosso_numero.to_s.rjust(15, '0') end end |
#usa_segmento_R? ⇒ Boolean
63 64 65 |
# File 'lib/br_boleto/remessa/cnab240/base.rb', line 63 def usa_segmento_R? true end |
#usa_segmento_S? ⇒ Boolean
67 68 69 |
# File 'lib/br_boleto/remessa/cnab240/base.rb', line 67 def usa_segmento_S? true end |