Skip to content

Commit 28c3941

Browse files
authored
Cnab444 itau (#267)
* adicionado cnab 444 itau * Update README.md
1 parent 36ef9d9 commit 28c3941

File tree

5 files changed

+104
-2
lines changed

5 files changed

+104
-2
lines changed

README.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ Criado pelo pessoal da [Akretion](http://www.akretion.com) muito TOP \o/
5353
| Caixa | 240 | 240 |
5454
| Citibank | Não | 400 |
5555
| HSBC | Não | Não |
56-
| Itaú | 400 | 400 |
56+
| Itaú | 400 | 400 e 444 |
5757
| Santander | 400 e 240 | 400 e 240 |
5858
| Sicoob | 240 | 400 e 240 |
5959
| Sicredi | 240 | 240 |
@@ -65,6 +65,7 @@ Criado pelo pessoal da [Akretion](http://www.akretion.com) muito TOP \o/
6565
- Caixa Economica Federal (CNAB240) [Isabella](https://github.com/isabellaSantos) da [Zaez](http://www.zaez.net)
6666
- Bradesco (CNAB400) [Isabella](https://github.com/isabellaSantos) da [Zaez](http://www.zaez.net)
6767
- Itaú (CNAB400) [Isabella](https://github.com/isabellaSantos) da [Zaez](http://www.zaez.net)
68+
- Itaú (CNAB444) [Junior Tada](https://github.com/juniortada)
6869
- Citibank (CNAB400)
6970
- Santander (CNAB400)
7071
- Santander (CNAB240)
@@ -88,4 +89,4 @@ Caso queira verificar(ou adicionar) alguma documentação, acesse [nosso wiki](h
8889

8990

9091
## License
91-
[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fkivanio%2Fbrcobranca.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fkivanio%2Fbrcobranca?ref=badge_large)
92+
[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fkivanio%2Fbrcobranca.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fkivanio%2Fbrcobranca?ref=badge_large)

lib/brcobranca.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,10 @@ module Cnab400
178178
autoload :Credisis, 'brcobranca/remessa/cnab400/credisis'
179179
end
180180

181+
module Cnab444
182+
autoload :Itau, 'brcobranca/remessa/cnab444/itau'
183+
end
184+
181185
module Cnab240
182186
autoload :Base, 'brcobranca/remessa/cnab240/base'
183187
autoload :BaseCorrespondente, 'brcobranca/remessa/cnab240/base_correspondente'
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# frozen_string_literal: true
2+
3+
module Brcobranca
4+
module Remessa
5+
module Cnab444
6+
class Itau < Brcobranca::Remessa::Cnab400::Itau
7+
8+
# Detalhe do arquivo
9+
#
10+
# @param pagamento [PagamentoCnab444]
11+
# objeto contendo as informacoes referentes ao boleto (valor, vencimento, cliente)
12+
# @param sequencial
13+
# num. sequencial do registro no arquivo
14+
#
15+
# @return [String]
16+
#
17+
def monta_detalhe(pagamento, sequencial)
18+
detalhe = super(pagamento, sequencial)
19+
20+
detalhe + pagamento.chave_nfe.to_s.ljust(44, ' ') # chave da nota fiscal (NFe) X[44]
21+
end
22+
end
23+
end
24+
end
25+
end

lib/brcobranca/remessa/pagamento.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,8 @@ class Pagamento
8989
attr_accessor :dias_baixa
9090
# <b>OPCIONAL</b>: Número da Parcela
9191
attr_accessor :parcela
92+
# <b>OPCIONAL</b>: Chave da Nota Fiscal Eletrônica
93+
attr_accessor :chave_nfe
9294

9395
validates_presence_of :nosso_numero, :data_vencimento, :valor,
9496
:documento_sacado, :nome_sacado, :endereco_sacado,
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
# frozen_string_literal: true
2+
3+
require 'spec_helper'
4+
5+
RSpec.describe Brcobranca::Remessa::Cnab444::Itau do
6+
let(:chave_nfe) { '12345678901234567890123456789012345678901234' }
7+
let(:pagamento) do
8+
Brcobranca::Remessa::Pagamento.new(valor: 199.9,
9+
data_vencimento: Date.current,
10+
nosso_numero: 123,
11+
documento: 6969,
12+
documento_sacado: '12345678901',
13+
nome_sacado: 'PABLO DIEGO JOSÉ FRANCISCO,!^.?\/@ DE PAULA JUAN NEPOMUCENO MARÍA DE LOS REMEDIOS CIPRIANO DE LA SANTÍSSIMA TRINIDAD RUIZ Y PICASSO',
14+
endereco_sacado: 'RUA RIO GRANDE DO SUL,!^.?\/@ São paulo Minas caçapa da silva junior',
15+
bairro_sacado: 'São josé dos quatro apostolos magros',
16+
cep_sacado: '12345678',
17+
cidade_sacado: 'Santa rita de cássia maria da silva',
18+
codigo_multa: '1',
19+
percentual_multa: 2.00,
20+
uf_sacado: 'SP',
21+
chave_nfe: chave_nfe)
22+
end
23+
let(:params) do
24+
{ carteira: '123',
25+
agencia: '1234',
26+
conta_corrente: '12345',
27+
digito_conta: '1',
28+
empresa_mae: 'SOCIEDADE BRASILEIRA DE ZOOLOGIA LTDA',
29+
documento_cedente: '12345678910',
30+
pagamentos: [pagamento] }
31+
end
32+
let(:itau) { subject.class.new(params) }
33+
34+
context 'monta remessa' do
35+
context 'detalhe' do
36+
it 'informacoes devem estar posicionadas corretamente no detalhe' do
37+
detalhe = itau.monta_detalhe pagamento, 2
38+
expect(detalhe[37..61]).to eq '6969'.ljust(25)
39+
expect(detalhe[62..69]).to eq '00000123' # nosso numero
40+
expect(detalhe[120..125]).to eq Date.current.strftime('%d%m%y') # data de vencimento
41+
expect(detalhe[126..138]).to eq '0000000019990' # valor do titulo
42+
expect(detalhe[142..146]).to eq '00000' # agência cobradora
43+
expect(detalhe[156..157]).to eq '00' # instrução 1
44+
expect(detalhe[158..159]).to eq '00' # instrução 2
45+
expect(detalhe[220..233]).to eq '00012345678901' # documento do pagador
46+
expect(detalhe[234..263]).to eq 'PABLO DIEGO JOSE FRANCISCO DE ' # nome do pagador
47+
expect(detalhe[400..443]).to eq chave_nfe # Chave da Nota Fiscal [401..444] x(044)
48+
end
49+
50+
it 'informacoes devem estar posicionadas corretamente no detalhe opcional de multa' do
51+
detalhe_multa = itau.monta_detalhe_multa pagamento, 3
52+
# Significado Posição Picture
53+
expect(detalhe_multa[0]).to eq '2' # Identificação do reg. transação [001..001] 9(001)
54+
expect(detalhe_multa[1]).to eq '1' # Código da multa [002..002] X(001)
55+
expect(detalhe_multa[2..9]).to eq Date.current.strftime('%d%m%Y') # Data da multa [003..010] 9(008)
56+
expect(detalhe_multa[10..22]).to eq '0000000000200' # Valor da multa [011..023] 9(013)
57+
expect(detalhe_multa[23..393]).to eq ''.rjust(371, ' ') # Complemento [024..394] X(370)
58+
expect(detalhe_multa[394..399]).to eq '000003' # Número sequencial [395..400] 9(006)
59+
end
60+
end
61+
62+
context 'arquivo' do
63+
before { Timecop.freeze(Time.local(2015, 7, 14, 16, 15, 15)) }
64+
65+
after { Timecop.return }
66+
67+
it { expect(itau.gera_arquivo).to eq(read_remessa('remessa-itau-cnab444.rem', itau.gera_arquivo)) }
68+
end
69+
end
70+
end

0 commit comments

Comments
 (0)