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.
Files changed (126) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +3 -0
  3. data/LICENSE +20 -0
  4. data/README.md +91 -0
  5. data/Rakefile +8 -0
  6. data/lib/brcobranca/arquivos/logos/ailos.eps +412 -0
  7. data/lib/brcobranca/arquivos/logos/ailos_carne.eps +412 -0
  8. data/lib/brcobranca/arquivos/logos/bancobrasil.eps +5402 -0
  9. data/lib/brcobranca/arquivos/logos/bancobrasil_carne.eps +5410 -0
  10. data/lib/brcobranca/arquivos/logos/bancobrasilia.eps +0 -0
  11. data/lib/brcobranca/arquivos/logos/bancobrasilia_carne.eps +0 -0
  12. data/lib/brcobranca/arquivos/logos/banconordeste.eps +0 -0
  13. data/lib/brcobranca/arquivos/logos/banconordeste_carne.eps +0 -0
  14. data/lib/brcobranca/arquivos/logos/banestes.eps +5198 -0
  15. data/lib/brcobranca/arquivos/logos/banestes_carne.eps +5206 -0
  16. data/lib/brcobranca/arquivos/logos/banrisul.eps +121 -0
  17. data/lib/brcobranca/arquivos/logos/banrisul_carne.eps +121 -0
  18. data/lib/brcobranca/arquivos/logos/bradesco.eps +5210 -0
  19. data/lib/brcobranca/arquivos/logos/bradesco_carne.eps +5214 -0
  20. data/lib/brcobranca/arquivos/logos/caixa.eps +5111 -0
  21. data/lib/brcobranca/arquivos/logos/caixa_carne.eps +5115 -0
  22. data/lib/brcobranca/arquivos/logos/cecred.eps +0 -0
  23. data/lib/brcobranca/arquivos/logos/cecred_carne.eps +0 -0
  24. data/lib/brcobranca/arquivos/logos/citibank.eps +745 -0
  25. data/lib/brcobranca/arquivos/logos/citibank_carne.eps +745 -0
  26. data/lib/brcobranca/arquivos/logos/credisis.eps +0 -0
  27. data/lib/brcobranca/arquivos/logos/credisis_carne.eps +0 -0
  28. data/lib/brcobranca/arquivos/logos/hsbc.eps +5124 -0
  29. data/lib/brcobranca/arquivos/logos/hsbc_carne.eps +5128 -0
  30. data/lib/brcobranca/arquivos/logos/itau.eps +5318 -0
  31. data/lib/brcobranca/arquivos/logos/itau_carne.eps +5322 -0
  32. data/lib/brcobranca/arquivos/logos/safra.eps +0 -0
  33. data/lib/brcobranca/arquivos/logos/safra_carne.eps +0 -0
  34. data/lib/brcobranca/arquivos/logos/santander.eps +5305 -0
  35. data/lib/brcobranca/arquivos/logos/santander_carne.eps +5313 -0
  36. data/lib/brcobranca/arquivos/logos/sicoob.eps +5375 -0
  37. data/lib/brcobranca/arquivos/logos/sicoob_carne.eps +5379 -0
  38. data/lib/brcobranca/arquivos/logos/sicredi.eps +5379 -0
  39. data/lib/brcobranca/arquivos/logos/sicredi_carne.eps +5383 -0
  40. data/lib/brcobranca/arquivos/logos/unicred.eps +0 -0
  41. data/lib/brcobranca/arquivos/logos/unicred_carne.eps +0 -0
  42. data/lib/brcobranca/arquivos/templates/modelo_carne.eps +1112 -0
  43. data/lib/brcobranca/arquivos/templates/modelo_generico.eps +0 -0
  44. data/lib/brcobranca/arquivos/templates/modelo_generico2.eps +9967 -0
  45. data/lib/brcobranca/boleto/ailos.rb +89 -0
  46. data/lib/brcobranca/boleto/banco_brasil.rb +165 -0
  47. data/lib/brcobranca/boleto/banco_brasilia.rb +102 -0
  48. data/lib/brcobranca/boleto/banco_nordeste.rb +80 -0
  49. data/lib/brcobranca/boleto/banestes.rb +86 -0
  50. data/lib/brcobranca/boleto/banrisul.rb +95 -0
  51. data/lib/brcobranca/boleto/base.rb +256 -0
  52. data/lib/brcobranca/boleto/bradesco.rb +100 -0
  53. data/lib/brcobranca/boleto/caixa.rb +123 -0
  54. data/lib/brcobranca/boleto/citibank.rb +97 -0
  55. data/lib/brcobranca/boleto/credisis.rb +118 -0
  56. data/lib/brcobranca/boleto/hsbc.rb +96 -0
  57. data/lib/brcobranca/boleto/itau.rb +138 -0
  58. data/lib/brcobranca/boleto/safra.rb +152 -0
  59. data/lib/brcobranca/boleto/santander.rb +86 -0
  60. data/lib/brcobranca/boleto/sicoob.rb +120 -0
  61. data/lib/brcobranca/boleto/sicredi.rb +145 -0
  62. data/lib/brcobranca/boleto/template/base.rb +28 -0
  63. data/lib/brcobranca/boleto/template/rghost.rb +308 -0
  64. data/lib/brcobranca/boleto/template/rghost2.rb +264 -0
  65. data/lib/brcobranca/boleto/template/rghost_bolepix.rb +286 -0
  66. data/lib/brcobranca/boleto/template/rghost_carne.rb +319 -0
  67. data/lib/brcobranca/boleto/unicred.rb +99 -0
  68. data/lib/brcobranca/calculo.rb +120 -0
  69. data/lib/brcobranca/calculo_data.rb +63 -0
  70. data/lib/brcobranca/currency.rb +69 -0
  71. data/lib/brcobranca/formatacao.rb +104 -0
  72. data/lib/brcobranca/formatacao_string.rb +37 -0
  73. data/lib/brcobranca/limpeza.rb +20 -0
  74. data/lib/brcobranca/remessa/base.rb +72 -0
  75. data/lib/brcobranca/remessa/cnab240/ailos.rb +156 -0
  76. data/lib/brcobranca/remessa/cnab240/banco_brasil.rb +249 -0
  77. data/lib/brcobranca/remessa/cnab240/base.rb +529 -0
  78. data/lib/brcobranca/remessa/cnab240/base_correspondente.rb +307 -0
  79. data/lib/brcobranca/remessa/cnab240/caixa.rb +171 -0
  80. data/lib/brcobranca/remessa/cnab240/santander.rb +225 -0
  81. data/lib/brcobranca/remessa/cnab240/sicoob.rb +229 -0
  82. data/lib/brcobranca/remessa/cnab240/sicoob_banco_brasil.rb +101 -0
  83. data/lib/brcobranca/remessa/cnab240/sicredi.rb +183 -0
  84. data/lib/brcobranca/remessa/cnab240/unicred.rb +10 -0
  85. data/lib/brcobranca/remessa/cnab400/banco_brasil.rb +169 -0
  86. data/lib/brcobranca/remessa/cnab400/banco_brasilia.rb +167 -0
  87. data/lib/brcobranca/remessa/cnab400/banco_nordeste.rb +161 -0
  88. data/lib/brcobranca/remessa/cnab400/banrisul.rb +158 -0
  89. data/lib/brcobranca/remessa/cnab400/base.rb +132 -0
  90. data/lib/brcobranca/remessa/cnab400/bradesco.rb +155 -0
  91. data/lib/brcobranca/remessa/cnab400/citibank.rb +139 -0
  92. data/lib/brcobranca/remessa/cnab400/credisis.rb +130 -0
  93. data/lib/brcobranca/remessa/cnab400/itau.rb +162 -0
  94. data/lib/brcobranca/remessa/cnab400/santander.rb +233 -0
  95. data/lib/brcobranca/remessa/cnab400/sicoob.rb +305 -0
  96. data/lib/brcobranca/remessa/cnab400/sicredi.rb +117 -0
  97. data/lib/brcobranca/remessa/cnab400/unicred.rb +259 -0
  98. data/lib/brcobranca/remessa/pagamento.rb +320 -0
  99. data/lib/brcobranca/retorno/base.rb +11 -0
  100. data/lib/brcobranca/retorno/cnab240/ailos.rb +104 -0
  101. data/lib/brcobranca/retorno/cnab240/base.rb +41 -0
  102. data/lib/brcobranca/retorno/cnab240/caixa.rb +47 -0
  103. data/lib/brcobranca/retorno/cnab240/santander.rb +99 -0
  104. data/lib/brcobranca/retorno/cnab240/sicoob.rb +101 -0
  105. data/lib/brcobranca/retorno/cnab240/sicredi.rb +82 -0
  106. data/lib/brcobranca/retorno/cnab400/banco_brasil.rb +130 -0
  107. data/lib/brcobranca/retorno/cnab400/banco_brasilia.rb +90 -0
  108. data/lib/brcobranca/retorno/cnab400/banco_nordeste.rb +113 -0
  109. data/lib/brcobranca/retorno/cnab400/banrisul.rb +42 -0
  110. data/lib/brcobranca/retorno/cnab400/base.rb +53 -0
  111. data/lib/brcobranca/retorno/cnab400/bradesco.rb +124 -0
  112. data/lib/brcobranca/retorno/cnab400/credisis.rb +116 -0
  113. data/lib/brcobranca/retorno/cnab400/itau.rb +144 -0
  114. data/lib/brcobranca/retorno/cnab400/santander.rb +58 -0
  115. data/lib/brcobranca/retorno/cnab400/sicredi.rb +78 -0
  116. data/lib/brcobranca/retorno/cnab400/unicred.rb +123 -0
  117. data/lib/brcobranca/retorno/retorno_cbr643.rb +48 -0
  118. data/lib/brcobranca/retorno/retorno_cnab240.rb +99 -0
  119. data/lib/brcobranca/retorno/retorno_cnab400.rb +71 -0
  120. data/lib/brcobranca/util/date.rb +21 -0
  121. data/lib/brcobranca/util/empresa.rb +29 -0
  122. data/lib/brcobranca/util/errors.rb +76 -0
  123. data/lib/brcobranca/validations.rb +208 -0
  124. data/lib/brcobranca/version.rb +5 -0
  125. data/lib/brcobranca.rb +200 -0
  126. metadata +225 -0
@@ -0,0 +1,113 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'parseline'
4
+
5
+ module Brcobranca
6
+ module Retorno
7
+ module Cnab400
8
+ # Formato de Retorno CNAB 400
9
+ class BancoNordeste < Brcobranca::Retorno::Base
10
+ extend ParseLine::FixedWidth
11
+
12
+ def self.load_lines(file, options = {})
13
+ default_options = { except: [1] } # por padrao ignora a primeira linha que é header
14
+ options = default_options.merge!(options)
15
+
16
+ super(file, options)
17
+ end
18
+
19
+ fixed_width_layout do |parse|
20
+ # Todos os campos descritos no documento em ordem
21
+ parse.field :codigo_registro, 0..0
22
+
23
+ # :codigo_de_inscricao, 1..2 # identificacao do tipo de inscricao/empresa
24
+ # :numero_de_inscricao, 3..16 # numero de inscricao da empresa (cpf/cnpj)
25
+ # :zeros, 17..19
26
+
27
+ # Identificacao da empresa no banco
28
+ # :zeros, 20..20
29
+ parse.field :agencia_sem_dv, 17..20
30
+ parse.field :cedente_com_dv, 23..30
31
+
32
+ # :numero_controle_empresa, 37..61, # numero de controle da empresa
33
+ # :zeros, 62..69
34
+
35
+ parse.field :nosso_numero, 62..69
36
+
37
+ # :zeros, 82..91 # uso do banco
38
+ # :zeros, 92..103 # uso do banco
39
+ # :indicador_de_rateio, 104..104 # indicador de rateio de credito
40
+ # :zeros, 105..106
41
+ # :carteira, 107..107 # de novo?
42
+ parse.field :carteira, 107..107
43
+ parse.field :codigo_ocorrencia, 108..109
44
+ parse.field :data_ocorrencia, 110..115
45
+
46
+ # :n_do_documento, 116..125 # n umero do documento de cobranca (dupl, np etc)
47
+ # :nosso_numero, 126..133 # confirmacao do numero do titulo no banco
48
+ # :brancos, 134..145 # complemento de registro
49
+
50
+ # :vencimento, 146..151 # data de vencimento do titulo (ddmmaa)
51
+ parse.field :data_vencimento, 146..151
52
+
53
+ # :valor_do_titulo, 152..164 # valor nominal do titulo (ultimos 2 digitos, virgula decimal assumida)
54
+ parse.field :valor_titulo, 152..164
55
+
56
+ # :codigo_do_banco, 165..167 # numero do banco na camara de compensacao
57
+ parse.field :banco_recebedor, 165..167
58
+
59
+ # :agencia_cobradora, 168..171 # agencia cobradora, ag de liquidacao ou baixa
60
+ # :dac_ag_cobradora, 172..172 # dac da agencia cobradora
61
+ # :agencia_recebedora_com_dv, 168..172
62
+
63
+ # :especie, 173..174 # especie do titulo
64
+ parse.field :especie_documento, 173..174
65
+
66
+ # :tarifa_de_cobranca, 175..187 # valor da despesa de cobranca (ultimos 2 digitos, virgula decimal assumida)
67
+ parse.field :valor_tarifa, 175..187
68
+
69
+ # :outras_despesas 188..200, # valor de outras despesas ou custos do protesto
70
+ # :juros_operacao_em_atraso, 201..213 # zeros?
71
+
72
+ # :valor_do_iof, 214..226 # valor do iof a ser recolhido (ultimos 2 digitos, virgula decimal assumida)
73
+ # :iof, 214..226
74
+
75
+ # :valor_abatimento, 227..239 # valor do abatimento concedido (ultimos 2 digitos, virgula decimal assumida)
76
+ parse.field :valor_abatimento, 227..239
77
+
78
+ # :descontos, 240..252 # valor do desconto concedido (ultimos 2 digitos, virgula decimal assumida)
79
+ parse.field :desconto, 240..252
80
+
81
+ # :valor_recebido, 253..265 # valor lancado em conta corrente (ultimos 2 digitos, virgula decimal assumida)
82
+ parse.field :valor_recebido, 253..265
83
+
84
+ # :juros_mora, 266..278 # valor de mora e multa pagos pelo sacado (ultimos 2 digitos, virgula decimal assumida)
85
+ parse.field :juros_mora, 266..278
86
+
87
+ # :outros_creditos, 279..291 # valor de outros creditos (ultimos 2 digitos, virgula decimal assumida)
88
+ # :outros_recebimento, 279..291
89
+
90
+ # :brancos, 292..293
91
+ # :motivo_do_codigo_de_ocorrencia, 294..294
92
+
93
+ # :data_credito, 295..300 # data de credito desta liquidacao
94
+ parse.field :data_credito, 146..151
95
+
96
+ # :origem_pagamento, 301..303
97
+ # :brancos, 304..313
98
+ # :cheque_bradesco, 314..317
99
+ # :motivo_rejeicao, 318..327
100
+ # :brancos, 328..367
101
+ # :numero_do_cartorio, 368..369
102
+ # :numero_do_protocolo, 370..379
103
+ # :brancos, 380..393
104
+
105
+ parse.field :motivo_ocorrencia, 279..393
106
+
107
+ # :numero_sequencial, 394..399 # numero sequencial no arquivo
108
+ parse.field :sequencial, 394..399
109
+ end
110
+ end
111
+ end
112
+ end
113
+ end
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Brcobranca
4
+ module Retorno
5
+ module Cnab400
6
+ class Banrisul < Brcobranca::Retorno::Cnab400::Base
7
+ extend ParseLine::FixedWidth # Extendendo parseline
8
+
9
+ def self.load_lines(file, options = {})
10
+ default_options = { except: [1] } # por padrao ignora a primeira linha que é header
11
+ options = default_options.merge!(options)
12
+ super(file, options)
13
+ end
14
+
15
+ fixed_width_layout do |parse|
16
+ parse.field :codigo_registro, 0..0
17
+ parse.field :agencia_sem_dv, 17..20
18
+ parse.field :cedente_com_dv, 21..29
19
+ parse.field :nosso_numero, 62..71
20
+ parse.field :carteira, 107..107
21
+ parse.field :codigo_ocorrencia, 108..109
22
+ parse.field :data_ocorrencia, 110..115
23
+ parse.field :data_vencimento, 146..151
24
+ parse.field :valor_titulo, 152..164
25
+ parse.field :banco_recebedor, 165..167
26
+ parse.field :agencia_recebedora_com_dv, 168..172
27
+ parse.field :especie_documento, 173..174
28
+ parse.field :valor_tarifa, 175..187
29
+ parse.field :iof, 188..200
30
+ parse.field :valor_abatimento, 227..239
31
+ parse.field :desconto, 240..252
32
+ parse.field :valor_recebido, 253..265
33
+ parse.field :juros_mora, 266..278
34
+ parse.field :outros_recebimento, 279..291
35
+ parse.field :data_credito, 295..300
36
+ parse.field :motivo_ocorrencia, 382..391
37
+ parse.field :sequencial, 394..399
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'parseline'
4
+
5
+ module Brcobranca
6
+ module Retorno
7
+ module Cnab400
8
+ class Base < Brcobranca::Retorno::Base
9
+ # Load lines
10
+ def self.load_lines(file, options = {})
11
+ return nil unless file
12
+
13
+ codigo_banco = codigo_banco_do_arquivo(file)
14
+
15
+ case codigo_banco
16
+ when '001'
17
+ Brcobranca::Retorno::Cnab400::BancoBrasil.load_lines(file, options)
18
+ when '004'
19
+ Brcobranca::Retorno::Cnab400::BancoNordeste.load_lines(file, options)
20
+ when '041'
21
+ Brcobranca::Retorno::Cnab400::Banrisul.load_lines(file, options)
22
+ when '070'
23
+ Brcobranca::Retorno::Cnab400::BancoBrasilia.load_lines(file, options)
24
+ when '097'
25
+ Brcobranca::Retorno::Cnab400::Credisis.load_lines(file, options)
26
+ when '237'
27
+ Brcobranca::Retorno::Cnab400::Bradesco.load_lines(file, options)
28
+ when '341'
29
+ Brcobranca::Retorno::Cnab400::Itau.load_lines(file, options)
30
+ when '033', '353'
31
+ Brcobranca::Retorno::Cnab400::Santander.load_lines(file, options)
32
+ when '136'
33
+ Brcobranca::Retorno::Cnab400::Unicred.load_lines(file, options)
34
+ when '748'
35
+ Brcobranca::Retorno::Cnab400::Sicredi.load_lines(file, options)
36
+ else
37
+ Brcobranca::Retorno::RetornoCnab400.load_lines(file, options)
38
+ end
39
+ end
40
+
41
+ # Codigo do banco lido do arquivo.
42
+ # Registro Header [76..78]
43
+ def self.codigo_banco_do_arquivo(file)
44
+ arquivo = File.open(file, 'r')
45
+ header = arquivo.gets
46
+ codigo_banco = header.blank? ? nil : header[76..78]
47
+ arquivo.close
48
+ codigo_banco
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,124 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Brcobranca
4
+ module Retorno
5
+ module Cnab400
6
+ # Formato de Retorno CNAB 400
7
+ # Baseado em: http://www.bradesco.com.br/portal/PDF/pessoajuridica/solucoes-integradas/outros/layout-de-arquivo/cobranca/4008-524-0121-08-layout-cobranca-versao-portugues.pdf
8
+ class Bradesco < Brcobranca::Retorno::Cnab400::Base
9
+ extend ParseLine::FixedWidth # Extendendo parseline
10
+
11
+ # Load lines
12
+ def self.load_lines(file, options = {})
13
+ default_options = { except: [1] } # por padrao ignora a primeira linha que é header
14
+ options = default_options.merge!(options)
15
+ super(file, options)
16
+ end
17
+
18
+ # Fixed width layout for Bradesco
19
+ fixed_width_layout do |parse|
20
+ # Todos os campos descritos no documento em ordem
21
+ # :tipo_de_registro, 0..0 # identificacao do registro transacao
22
+ parse.field :codigo_registro, 0..0
23
+
24
+ # :codigo_de_inscricao, 1..2 # identificacao do tipo de inscricao/empresa
25
+ # :numero_de_inscricao, 3..16 # numero de inscricao da empresa (cpf/cnpj)
26
+ # :zeros, 17..19
27
+
28
+ # Identificacao da empresa no banco
29
+ # :zeros, 20..20
30
+ # :carteira, 21..23
31
+ # :agencia_sem_dv, 24..28
32
+ # :cedente_com_dv 29..36
33
+ parse.field :carteira, 21..23
34
+ parse.field :agencia_sem_dv, 24..28
35
+ parse.field :cedente_com_dv, 29..36
36
+
37
+ # :numero_controle_empresa, 37..61, # numero de controle da empresa
38
+ # :zeros, 62..69
39
+
40
+ # :nosso_numero, 70..81 # identificacao do titulo no banco
41
+ parse.field :nosso_numero, 70..81
42
+
43
+ # :zeros, 82..91 # uso do banco
44
+ # :zeros, 92..103 # uso do banco
45
+ # :indicador_de_rateio, 104..104 # indicador de rateio de credito
46
+ # :zeros, 105..106
47
+ # :carteira, 107..107 # de novo?
48
+ parse.field :codigo_ocorrencia, 108..109
49
+ parse.field :data_ocorrencia, 110..115 # data de ocorrencia no banco (ddmmaa)
50
+ # :n_do_documento, 116..125 # n umero do documento de cobranca (dupl, np etc)
51
+ parse.field :documento_numero, 116..125
52
+ # :nosso_numero, 126..133 # confirmacao do numero do titulo no banco
53
+ # :brancos, 134..145 # complemento de registro
54
+
55
+ # :vencimento, 146..151 # data de vencimento do titulo (ddmmaa)
56
+ parse.field :data_vencimento, 146..151
57
+
58
+ # :valor_do_titulo, 152..164 # valor nominal do titulo (ultimos 2 digitos, virgula decimal assumida)
59
+ parse.field :valor_titulo, 152..164
60
+
61
+ # :codigo_do_banco, 165..167 # numero do banco na camara de compensacao
62
+ parse.field :banco_recebedor, 165..167
63
+
64
+ # :agencia_cobradora, 168..171 # agencia cobradora, ag de liquidacao ou baixa
65
+ # :dac_ag_cobradora, 172..172 # dac da agencia cobradora
66
+ parse.field :agencia_recebedora_com_dv, 168..172
67
+
68
+ # :especie, 173..174 # especie do titulo
69
+ parse.field :especie_documento, 173..174
70
+
71
+ # :tarifa_de_cobranca, 175..187 # valor da despesa de cobranca (ultimos 2 digitos, virgula decimal assumida)
72
+ parse.field :valor_tarifa, 175..187
73
+
74
+ # :outras_despesas 188..200, # valor de outras despesas ou custos do protesto
75
+ # :juros_operacao_em_atraso, 201..213 # zeros?
76
+
77
+ # :valor_do_iof, 214..226 # valor do iof a ser recolhido (ultimos 2 digitos, virgula decimal assumida)
78
+ parse.field :iof, 214..226
79
+
80
+ # :valor_abatimento, 227..239 # valor do abatimento concedido (ultimos 2 digitos, virgula decimal assumida)
81
+ parse.field :valor_abatimento, 227..239
82
+
83
+ # :descontos, 240..252 # valor do desconto concedido (ultimos 2 digitos, virgula decimal assumida)
84
+ parse.field :desconto, 240..252
85
+
86
+ # :valor_recebido, 253..265 # valor lancado em conta corrente (ultimos 2 digitos, virgula decimal assumida)
87
+ parse.field :valor_recebido, 253..265
88
+
89
+ # :juros_mora, 266..278 # valor de mora e multa pagos pelo sacado (ultimos 2 digitos, virgula decimal assumida)
90
+ parse.field :juros_mora, 266..278
91
+
92
+ # :outros_creditos, 279..291 # valor de outros creditos (ultimos 2 digitos, virgula decimal assumida)
93
+ parse.field :outros_recebimento, 279..291
94
+
95
+ # :brancos, 292..293
96
+ # :motivo_do_codigo_de_ocorrencia, 294..294
97
+
98
+ # :data_credito, 295..300 # data de credito desta liquidacao
99
+ parse.field :data_credito, 295..300
100
+
101
+ # :origem_pagamento, 301..303
102
+ # :brancos, 304..313
103
+ # :cheque_bradesco, 314..317
104
+ # :motivo_rejeicao, 318..327
105
+ # :brancos, 328..367
106
+ # :numero_do_cartorio, 368..369
107
+ # :numero_do_protocolo, 370..379
108
+ # :brancos, 380..393
109
+
110
+ parse.field :motivo_ocorrencia, 318..327, lambda { |motivos|
111
+ motivos.scan(/.{2}/).reject(&:blank?).reject { |motivo| motivo == '00' }
112
+ }
113
+
114
+ # :numero_sequencial, 394..399 # numero sequencial no arquivo
115
+ parse.field :sequencial, 394..399
116
+ end
117
+
118
+ def agencia_com_dv
119
+ "#{agencia_sem_dv}-#{agencia_sem_dv.modulo11}"
120
+ end
121
+ end
122
+ end
123
+ end
124
+ end
@@ -0,0 +1,116 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'parseline'
4
+
5
+ module Brcobranca
6
+ module Retorno
7
+ module Cnab400
8
+ # Formato de Retorno CNAB 400
9
+ class Credisis < Brcobranca::Retorno::Base
10
+ extend ParseLine::FixedWidth
11
+
12
+ def self.load_lines(file, options = {})
13
+ default_options = { except: [1] } # por padrao ignora a primeira linha que é header
14
+ options = default_options.merge!(options)
15
+
16
+ super(file, options)
17
+ end
18
+
19
+ # Fixed width layout for Bradesco
20
+ fixed_width_layout do |parse|
21
+ # Todos os campos descritos no documento em ordem
22
+ # :tipo_de_registro, 0..0 # identificacao do registro transacao
23
+ parse.field :codigo_registro, 0..0
24
+
25
+ # :codigo_de_inscricao, 1..2 # identificacao do tipo de inscricao/empresa
26
+ # :numero_de_inscricao, 3..16 # numero de inscricao da empresa (cpf/cnpj)
27
+ # :zeros, 17..19
28
+
29
+ # Identificacao da empresa no banco
30
+ # :zeros, 20..20
31
+ # :carteira, 21..23
32
+ # :agencia_sem_dv, 24..28
33
+ # :cedente_com_dv 29..36
34
+ # :carteira, 21..23
35
+ # :agencia_sem_dv, 24..28
36
+ # :cedente_com_dv, 29..36
37
+
38
+ # :numero_controle_empresa, 37..61, # numero de controle da empresa
39
+ # :zeros, 62..69
40
+
41
+ # :nosso_numero, 62..72 # identificacao do titulo no banco
42
+ parse.field :nosso_numero, 62..72
43
+
44
+ # :zeros, 82..91 # uso do banco
45
+ # :zeros, 92..103 # uso do banco
46
+ # :indicador_de_rateio, 104..104 # indicador de rateio de credito
47
+ # :zeros, 105..106
48
+ # :carteira, 107..107 # de novo?
49
+ # :cod_de_ocorrencia, 108..109 # código de ocorrencia
50
+ # :data_de_ocorrencia, 110..115 # data de ocorrencia no banco (ddmmaa)
51
+ # :n_do_documento, 116..125 # n umero do documento de cobranca (dupl, np etc)
52
+ # :nosso_numero, 126..133 # confirmacao do numero do titulo no banco
53
+ # :brancos, 134..145 # complemento de registro
54
+
55
+ # :vencimento, 146..151 # data de vencimento do titulo (ddmmaa)
56
+ parse.field :data_vencimento, 146..151
57
+
58
+ # :valor_do_titulo, 152..164 # valor nominal do titulo (ultimos 2 digitos, virgula decimal assumida)
59
+ parse.field :valor_titulo, 152..164
60
+
61
+ # :codigo_do_banco, 165..167 # numero do banco na camara de compensacao
62
+ # :banco_recebedor, 165..167
63
+
64
+ # :agencia_cobradora, 168..171 # agencia cobradora, ag de liquidacao ou baixa
65
+ # :dac_ag_cobradora, 172..172 # dac da agencia cobradora
66
+ # :agencia_recebedora_com_dv, 168..172
67
+
68
+ # :especie, 173..174 # especie do titulo
69
+ # :especie_documento, 173..174
70
+
71
+ # :tarifa_de_cobranca, 175..187 # valor da despesa de cobranca (ultimos 2 digitos, virgula decimal assumida)
72
+ # :valor_tarifa, 175..187
73
+
74
+ # :outras_despesas 188..200, # valor de outras despesas ou custos do protesto
75
+ # :juros_operacao_em_atraso, 201..213 # zeros?
76
+
77
+ # :valor_do_iof, 214..226 # valor do iof a ser recolhido (ultimos 2 digitos, virgula decimal assumida)
78
+ # :iof, 214..226
79
+
80
+ # :valor_abatimento, 227..239 # valor do abatimento concedido (ultimos 2 digitos, virgula decimal assumida)
81
+ # :valor_abatimento, 227..239
82
+
83
+ # :descontos, 240..252 # valor do desconto concedido (ultimos 2 digitos, virgula decimal assumida)
84
+ # :desconto, 240..252
85
+
86
+ # :valor_recebido, 253..265 # valor lancado em conta corrente (ultimos 2 digitos, virgula decimal assumida)
87
+ parse.field :valor_recebido, 253..265
88
+
89
+ # :juros_mora, 266..278 # valor de mora e multa pagos pelo sacado (ultimos 2 digitos, virgula decimal assumida)
90
+ # :juros_mora, 266..278
91
+
92
+ # :outros_creditos, 279..291 # valor de outros creditos (ultimos 2 digitos, virgula decimal assumida)
93
+ # :outros_recebimento, 279..291
94
+
95
+ # :brancos, 292..293
96
+ # :motivo_do_codigo_de_ocorrencia, 294..294
97
+
98
+ # :data_credito, 295..300 # data de credito desta liquidacao
99
+ parse.field :data_credito, 175..180
100
+
101
+ # :origem_pagamento, 301..303
102
+ # :brancos, 304..313
103
+ # :cheque_bradesco, 314..317
104
+ # :motivo_rejeicao, 318..327
105
+ # :brancos, 328..367
106
+ # :numero_do_cartorio, 368..369
107
+ # :numero_do_protocolo, 370..379
108
+ # :brancos, 380..393
109
+
110
+ # :numero_sequencial, 394..399 # numero sequencial no arquivo
111
+ parse.field :sequencial, 394..399
112
+ end
113
+ end
114
+ end
115
+ end
116
+ end
@@ -0,0 +1,144 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'parseline'
4
+
5
+ module Brcobranca
6
+ module Retorno
7
+ module Cnab400
8
+ # Formato de Retorno CNAB 400
9
+ # Baseado em: http://download.itau.com.br/bankline/layout_cobranca_400bytes_cnab_itau_mensagem.pdf
10
+ class Itau < Brcobranca::Retorno::Cnab400::Base
11
+ extend ParseLine::FixedWidth # Extendendo parseline
12
+
13
+ # Load lines
14
+ def self.load_lines(file, options = {})
15
+ default_options = { except: [1] } # por padrao ignora a primeira linha que é header
16
+ options = default_options.merge!(options)
17
+ super(file, options)
18
+ end
19
+
20
+ fixed_width_layout do |parse|
21
+ # Todos os campos descritos no documento em ordem
22
+ # identificacao do registro transacao
23
+ parse.field :codigo_registro, 0..0
24
+ # :codigo_de_inscricao, 1..2 # identificacao do tipo de inscrica/empresa
25
+ # :numero_de_inscricao, 3..16 #numero de inscricao da empresa (cpf/cnpj)
26
+
27
+ # :agencia, 17..20 #agencia mantenedora da conta
28
+ parse.field :agencia_com_dv, 17..20 # FIXME: - SEM DIV
29
+
30
+ # :zeros, 21..22 # complemento de registro
31
+
32
+ # :conta, 23..27 #numero da conta corrente da empresa
33
+ # :dac, 28..28 #digito de auto conferencia ag/conta empresa
34
+ parse.field :cedente_com_dv, 23..28
35
+
36
+ # :brancos, 29..36 #complemento de registro
37
+ # :uso_da_empresa, 37..61 #identificacao do titulo na empresa
38
+
39
+ # :nosso_numero,62..69 # identificacao do titulo no banco
40
+ parse.field :nosso_numero, 62..69
41
+
42
+ # :brancos, 70..81 #complemento do registro
43
+
44
+ # :carteira, 82..84 #numero da carteira
45
+ parse.field :carteira_variacao, 82..84
46
+
47
+ # :nosso_numero, 85..92 #identificacao do titulo no banco (novamente?)
48
+ # :dac_nosso_numero, 93..93 #dac nosso numero
49
+ # :brancos, 94..106 #complemento do registro
50
+
51
+ # :carteira, 107..107 #código da carteira
52
+ parse.field :carteira, 107..107
53
+
54
+ parse.field :codigo_ocorrencia, 108..109
55
+
56
+ parse.field :data_ocorrencia, 110..115
57
+
58
+ # :n_do_documento, 116..125 # n umero do documento de cobranca (dupl, np etc)
59
+ # :nosso_numero, 126..133 # confirmacao do numero do titulo no banco
60
+ # :brancos, 134..145 #complemento de registro
61
+
62
+ # :vencimento, 146..151 #data de vencimento do titulo (ddmmaa)
63
+ parse.field :data_vencimento, 146..151
64
+
65
+ # :valor_do_titulo, 152..164 #valor nominal do titulo (ultimos 2 digitos, virgula decimal assumida)
66
+ parse.field :valor_titulo, 152..164
67
+
68
+ # :codigo_do_banco, 165..167 # numero do banco na camara de compensacao
69
+ parse.field :banco_recebedor, 165..167
70
+
71
+ # :agencia_cobradora, 168..171 # agencia cobradora, ag de liquidacao ou baixa
72
+ # :dac_ag_cobradora, 172..172 # dac da agencia cobradora
73
+ parse.field :agencia_recebedora_com_dv, 168..172
74
+
75
+ # :especie, 173..174 # especie do titulo
76
+ parse.field :especie_documento, 173..174
77
+
78
+ # :tarifa_de_cobranca, 175..187 #valor da despesa de cobranca (ultimos 2 digitos, virgula decimal assumida)
79
+ parse.field :valor_tarifa, 175..187
80
+
81
+ # :brancos, 188..213 #complemento do registro
82
+
83
+ # :valor_do_iof, 214..226 #valor do iof a ser recolhido (ultimos 2 digitos, virgula decimal assumida)
84
+ parse.field :iof, 214..226
85
+
86
+ # :valor_abatimento, 227..239 #valor do abatimento concedido (ultimos 2 digitos, virgula decimal assumida)
87
+ parse.field :valor_abatimento, 227..239
88
+
89
+ # :descontos, 240..252 #valor do desconto concedido (ultimos 2 digitos, virgula decimal assumida)
90
+ parse.field :desconto, 240..252
91
+
92
+ # :valor_principal, 253..265 #valor lancado em conta corrente (ultimos 2 digitos, virgula decimal assumida)
93
+
94
+ parse.field :valor_recebido, 253..265
95
+
96
+ # :juros_mora_multa, 266..278 #valor de mora e multa pagos pelo sacado (ultimos 2 digitos, virgula decimal assumida)
97
+ parse.field :juros_mora, 266..278
98
+
99
+ # :outros_creditos, 279..291 #valor de outros creditos (ultimos 2 digitos, virgula decimal assumida)
100
+ parse.field :outros_recebimento, 279..291
101
+
102
+ # :boleto_dda, 292..292 #indicador de boleto dda
103
+ # :brancos, 293..294 #complemento de registro
104
+
105
+ # :data_credito, 295..300 #data de credito desta liquidacao
106
+ parse.field :data_credito, 295..300
107
+
108
+ # :instr_cancelada, 301..304 # codigo da instrucao cancelada
109
+ # :brancos , 305..310 # complemento de registro
110
+ # :zeros, 311..323 #complemento de registro
111
+ # :nome_do_sacado, 324..353, #nome do sacado
112
+ # :brancos , 354..376 # complemento de registro
113
+ # :erros_msg, 377..384 #registros rejeitados ou laegacao do sacado ou registro de mensagem informativa
114
+ # :brancos, 385..391 #complemento de registro
115
+ # :cod_de_liquidacao, 392..393 #meio pelo qual o título foi liquidado
116
+
117
+ parse.field :motivo_ocorrencia, 377..384, lambda { |motivos|
118
+ motivos.scan(/.{2}/).reject(&:blank?).reject { |motivo| motivo == '00' }
119
+ }
120
+
121
+ # :numero_sequencial, 394..399 #numero sequencial no arquivo
122
+ parse.field :sequencial, 394..399
123
+
124
+ # Campos da classe base que não encontrei a relação com CNAB400
125
+ # parse.field :tipo_cobranca, 80..80
126
+ # parse.field :tipo_cobranca_anterior, 81..81
127
+ # parse.field :natureza_recebimento, 86..87
128
+ # parse.field :convenio, 31..37
129
+ # parse.field :comando, 108..109
130
+ # parse.field :juros_desconto, 201..213
131
+ # parse.field :iof_desconto, 214..226
132
+ # parse.field :desconto_concedito, 240..252
133
+ # parse.field :outras_despesas, 279..291
134
+ # parse.field :abatimento_nao_aproveitado, 292..304
135
+ # parse.field :data_liquidacao, 295..300
136
+ # parse.field :valor_lancamento, 305..317
137
+ # parse.field :indicativo_lancamento, 318..318
138
+ # parse.field :indicador_valor, 319..319
139
+ # parse.field :valor_ajuste, 320..331
140
+ end
141
+ end
142
+ end
143
+ end
144
+ end
@@ -0,0 +1,58 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'parseline'
4
+
5
+ module Brcobranca
6
+ module Retorno
7
+ module Cnab400
8
+ # Formato de Retorno CNAB 400
9
+ # Baseado em: http://download.itau.com.br/bankline/layout_cobranca_400bytes_cnab_itau_mensagem.pdf
10
+ class Santander < Brcobranca::Retorno::Cnab400::Base
11
+ extend ParseLine::FixedWidth # Extendendo parseline
12
+
13
+ # Load lines
14
+ def self.load_lines(file, options = {})
15
+ default_options = { except: [1] } # por padrao ignora a primeira linha que é header
16
+ options = default_options.merge!(options)
17
+ super(file, options)
18
+ end
19
+
20
+ fixed_width_layout do |parse|
21
+ # Todos os campos descritos no documento em ordem
22
+ # identificacao do registro transacao
23
+ # começa do 0 então contar com +1 as posições
24
+ parse.field :codigo_registro, 0..0
25
+ parse.field :agencia_com_dv, 17..20
26
+ parse.field :cedente_com_dv, 23..28
27
+ parse.field :nosso_numero, 62..69
28
+ # parse.field :carteira_variacao, 82..84
29
+ parse.field :carteira, 107..107
30
+ parse.field :codigo_ocorrencia, 108..109
31
+ parse.field :data_ocorrencia, 110..115
32
+ # identificados na documentação mas não parseados
33
+ # parse.field :seu_numero, 116..125 seu numero
34
+ # parse.field :nosso_numero, 126..133 nosso numero denovo?
35
+ # parse.field :codigo_rejeicao, 134..135 nosso numero
36
+ parse.field :motivo_ocorrencia, 136..145, lambda { |motivos|
37
+ motivos.scan(/.{2}/).reject(&:blank?).reject { |motivo| motivo == '00' }
38
+ }
39
+
40
+ parse.field :data_vencimento, 146..151
41
+ parse.field :valor_titulo, 152..164
42
+ parse.field :banco_recebedor, 165..167
43
+ parse.field :agencia_recebedora_com_dv, 168..172
44
+ parse.field :especie_documento, 173..174
45
+ parse.field :valor_tarifa, 175..187
46
+ parse.field :iof, 214..226
47
+ parse.field :valor_abatimento, 227..239
48
+ parse.field :desconto, 240..252
49
+ parse.field :valor_recebido, 253..265
50
+ parse.field :juros_mora, 266..278
51
+ parse.field :outros_recebimento, 279..291
52
+ parse.field :data_credito, 295..300
53
+ parse.field :sequencial, 394..399
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end