bs2_api 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bs2Api
4
+ module Entities
5
+ class Bank
6
+ attr_accessor :ispb, :account, :customer
7
+
8
+ def initialize(args = {})
9
+ @ispb = args.fetch(:ispb, nil)
10
+ @account = args.fetch(:account, nil)
11
+ @customer = args.fetch(:customer, nil)
12
+ end
13
+
14
+ def to_hash
15
+ ActiveSupport::HashWithIndifferentAccess.new(
16
+ {
17
+ "ispb": get_ispb,
18
+ "conta": @account.to_hash,
19
+ "pessoa": @customer.to_hash
20
+ }
21
+ )
22
+ end
23
+
24
+ def self.from_response(hash_payload)
25
+ hash = ActiveSupport::HashWithIndifferentAccess.new(hash_payload)
26
+
27
+ Bs2Api::Entities::Bank.new(
28
+ ispb: hash["ispb"],
29
+ account: Bs2Api::Entities::Account.from_response(hash["conta"]),
30
+ customer: Bs2Api::Entities::Customer.from_response(hash["pessoa"])
31
+ )
32
+ end
33
+
34
+ private
35
+ def get_ispb
36
+ Bs2Api::Util::BankService.find_by_code(@account.bank_code)["ispb"]
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bs2Api
4
+ module Entities
5
+ class Customer
6
+ attr_accessor :document, :type, :name, :business_name
7
+
8
+ TYPES = {
9
+ personal: 'CPF',
10
+ business: 'CNPJ'
11
+ }
12
+
13
+ def initialize(args = {})
14
+ @document = args.fetch(:document, nil)
15
+ @type = args.fetch(:type, 'CPF')
16
+ @name = args.fetch(:name, nil)
17
+ @business_name = args.fetch(:business_name, nil)
18
+ end
19
+
20
+ def to_hash
21
+ ActiveSupport::HashWithIndifferentAccess.new(
22
+ {
23
+ "documento": @document,
24
+ "tipoDocumento": @type,
25
+ "nome": @name,
26
+ "nomeFantasia": @business_name
27
+ }
28
+ )
29
+ end
30
+
31
+ def self.from_response(hash_payload)
32
+ hash = ActiveSupport::HashWithIndifferentAccess.new(hash_payload)
33
+
34
+ Bs2Api::Entities::Customer.new(
35
+ document: hash["documento"],
36
+ type: hash["tipoDocumento"],
37
+ name: hash["nome"],
38
+ business_name: hash["nomeFantasia"]
39
+ )
40
+ end
41
+
42
+ def personal?
43
+ @type == TYPES[:personal]
44
+ end
45
+
46
+ def business?
47
+ @type == TYPES[:business]
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bs2Api
4
+ module Entities
5
+ class Payment
6
+ attr_accessor :id, :merchant_id, :receiver, :payer
7
+
8
+ def initialize(args = {})
9
+ @id = args.fetch(:id, nil)
10
+ @merchant_id = args.fetch(:merchant_id, nil)
11
+ @receiver = args.fetch(:receiver, nil)
12
+ @payer = args.fetch(:payer, nil)
13
+ end
14
+
15
+ def to_hash
16
+ ActiveSupport::HashWithIndifferentAccess.new(
17
+ {
18
+ "pagamentoId": @id,
19
+ "endToEndId": @merchant_id,
20
+ "recebedor": @receiver.to_hash,
21
+ "pagador": @payer.to_hash
22
+ }
23
+ )
24
+ end
25
+
26
+ def self.from_response(hash_payload)
27
+ hash = ActiveSupport::HashWithIndifferentAccess.new(hash_payload)
28
+
29
+ Bs2Api::Entities::Payment.new(
30
+ id: hash["pagamentoId"],
31
+ merchant_id: hash["endToEndId"],
32
+ receiver: Bs2Api::Entities::Bank.from_response(hash["recebedor"]),
33
+ payer: Bs2Api::Entities::Bank.from_response(hash["pagador"])
34
+ )
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bs2Api
4
+ module Entities
5
+ class PixKey
6
+ attr_accessor :key, :type
7
+
8
+ TYPES = {
9
+ cpf: 'CPF',
10
+ cnpj: 'CNPJ',
11
+ phone: 'PHONE',
12
+ email: 'EMAIL',
13
+ random: 'EVP'
14
+ }
15
+
16
+ def initialize(args = {})
17
+ @key = args.fetch(:key, nil)
18
+ @type = args.fetch(:type, 'CPF')
19
+ end
20
+
21
+ def to_hash
22
+ ActiveSupport::HashWithIndifferentAccess.new(
23
+ {
24
+ "valor": @key,
25
+ "tipo": @type
26
+ }
27
+ )
28
+ end
29
+
30
+ def self.from_response(hash_payload)
31
+ hash = ActiveSupport::HashWithIndifferentAccess.new(hash_payload)
32
+
33
+ Bs2Api::Entities::PixKey.new(
34
+ key: hash["valor"],
35
+ type: hash["tipo"]
36
+ )
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bs2Api
4
+ module Errors
5
+ class BadRequest < Base; end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bs2Api
4
+ module Errors
5
+ class Base < StandardError; end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bs2Api
4
+ module Errors
5
+ class InvalidCustomer < Base; end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bs2Api
4
+ module Errors
5
+ class InvalidPixKey < Base; end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bs2Api
4
+ module Errors
5
+ class MissingConfiguration < Base; end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bs2Api
4
+ module Errors
5
+ class ServerError < Base; end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bs2Api
4
+ module Errors
5
+ class Unauthorized < Base; end
6
+ end
7
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Hash
4
+ def to_query
5
+ keys.map do |key|
6
+ "#{key}=#{self[key]}"
7
+ end.join("&")
8
+ end
9
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Object
4
+ def blank?
5
+ respond_to?(:empty?) ? !!empty? : !self
6
+ end
7
+
8
+ def present?
9
+ !blank?
10
+ end
11
+ end
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bs2Api
4
+ module Payment
5
+ class Base
6
+ def call
7
+ response = HTTP.auth("Bearer #{bearer_token}")
8
+ .headers(headers)
9
+ .post(
10
+ url,
11
+ json: payload
12
+ )
13
+
14
+ raise Bs2Api::Errors::BadRequest, response.body.to_s if !response.status.created?
15
+
16
+ Bs2Api::Entities::Payment.from_response(response.parse)
17
+ end
18
+
19
+ private
20
+ def headers
21
+ {
22
+ "Content-Type": "application/json",
23
+ "Accept": "application/json",
24
+ "Accept-Encoding": "gzip,deflate"
25
+ }
26
+ end
27
+
28
+ def bearer_token
29
+ Bs2Api::Request::Auth.token
30
+ end
31
+
32
+ def payload
33
+ no_method_error
34
+ end
35
+
36
+ def url
37
+ no_method_error
38
+ end
39
+
40
+ def no_method_error
41
+ raise NoMethodError, "Missing #{__method__} to #{self.class}"
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bs2Api
4
+ module Payment
5
+ class Key < Base
6
+ def initialize key
7
+ @key = key
8
+ end
9
+
10
+ private
11
+ def url
12
+ "#{Bs2Api.endpoint}/pix/direto/forintegration/v1/pagamentos/chave"
13
+ end
14
+
15
+ def payload
16
+ {
17
+ "chave": @key.to_hash
18
+ }
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bs2Api
4
+ module Payment
5
+ class Manual < Base
6
+ def initialize bank
7
+ @bank = bank
8
+ end
9
+
10
+ private
11
+ def url
12
+ "#{Bs2Api.endpoint}/pix/direto/forintegration/v1/pagamentos/manual"
13
+ end
14
+
15
+ def payload
16
+ {
17
+ "recebedor": @bank.to_hash
18
+ }
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bs2Api
4
+ module Request
5
+ class Auth
6
+ class << self
7
+ def token
8
+ Bs2Api.configuration.valid?
9
+
10
+ response = create_session
11
+
12
+ raise Bs2Api::Errors::Unauthorized, response.parse["error_description"] if response.status.unauthorized?
13
+ raise Bs2Api::Errors::BadRequest, response.parse["error_description"] if response.status.bad_request?
14
+ raise Bs2Api::Errors::ServerError, response.body.to_s if !response.status.success?
15
+
16
+ response.parse["access_token"]
17
+ end
18
+
19
+ private
20
+ def create_session
21
+ HTTP.basic_auth(
22
+ user: Bs2Api.configuration.client_id,
23
+ pass: Bs2Api.configuration.client_secret
24
+ ).post(
25
+ auth_url,
26
+ body: body,
27
+ headers: headers
28
+ )
29
+ end
30
+
31
+ def headers
32
+ {
33
+ "Content-Type": "application/x-www-form-urlencoded",
34
+ "Accept": "application/json"
35
+ }
36
+ end
37
+
38
+ def body
39
+ {
40
+ grant_type: "client_credentials",
41
+ scope: "pix.write%20pix.read"
42
+ }.to_query
43
+ end
44
+
45
+ def auth_url
46
+ "#{Bs2Api.endpoint}/auth/oauth/v2/token"
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'yaml'
4
+
5
+ module Bs2Api
6
+ module Util
7
+ class BankService
8
+ class << self
9
+ def find_by_code code
10
+ bank_list.find {|b| b["code"] == code }
11
+ end
12
+
13
+ private
14
+ def bank_list
15
+ @bank_list ||= YAML.load_file(File.join(__dir__, 'banks.yml'))
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,393 @@
1
+ - name: "Banco A.J. RENNER"
2
+ code: "654"
3
+ ispb: "92874270"
4
+ - name: "Banco ABC Brasil"
5
+ code: "246"
6
+ ispb: "28195667"
7
+ - name: "Banco ABN AMRO"
8
+ code: "75"
9
+ ispb: "3532415"
10
+ - name: "Banco ALFA"
11
+ code: "25"
12
+ ispb: "3323840"
13
+ - name: "Banco ARBI"
14
+ code: "213"
15
+ ispb: "54403563"
16
+ - name: "Banco AZTECA do Brasil"
17
+ code: "19"
18
+ ispb: "9391857"
19
+ - name: "Banco BARCLAYS"
20
+ code: "740"
21
+ ispb: "61146577"
22
+ - name: "Banco BBM"
23
+ code: "107"
24
+ ispb: "15114366"
25
+ - name: "Banco BMFBOVESPA"
26
+ code: "96"
27
+ ispb: "997185"
28
+ - name: "Banco BMG"
29
+ code: "318"
30
+ ispb: "61186680"
31
+ - name: "Banco BNP PARIBAS Brasil"
32
+ code: "752"
33
+ ispb: "1522368"
34
+ - name: "Banco BOA VISTA INTERATLANTICO"
35
+ code: "248"
36
+ ispb: "33485541"
37
+ - name: "Banco BONSUCESSO"
38
+ code: "218"
39
+ ispb: "71027866"
40
+ - name: "Banco BRACCE"
41
+ code: "65"
42
+ ispb: "48795256"
43
+ - name: "Banco BRADESCARD"
44
+ code: "63"
45
+ ispb: "4184779"
46
+ - name: "Banco BRADESCO"
47
+ code: "237"
48
+ ispb: "60746948"
49
+ - name: "Banco BRADESCO BBI"
50
+ code: "36"
51
+ ispb: "60746948"
52
+ - name: "Banco BRADESCO CARTÕES"
53
+ code: "204"
54
+ ispb: "59438325"
55
+ - name: "Banco BRADESCO FINANCIAMENTOS"
56
+ code: "394"
57
+ ispb: "7207996"
58
+ - name: "Banco BTG PACTUAL"
59
+ code: "208"
60
+ ispb: "30306294"
61
+ - name: "Banco CACIQUE"
62
+ code: "263"
63
+ ispb: "33349358"
64
+ - name: "Banco CAIXA GERAL – Brasil"
65
+ code: "473"
66
+ ispb: "33466988"
67
+ - name: "Banco CAPITAL"
68
+ code: "412"
69
+ ispb: "15173776"
70
+ - name: "Banco CARGILL"
71
+ code: "40"
72
+ ispb: "3609817"
73
+ - name: "Banco CEDULA"
74
+ code: "266"
75
+ ispb: "33132044"
76
+ - name: "Banco CETELEM"
77
+ code: "739"
78
+ ispb: "558456"
79
+ - name: "Banco CIFRA"
80
+ code: "233"
81
+ ispb: "62421979"
82
+ - name: "Banco CITIBANK"
83
+ code: "745"
84
+ ispb: "33479023"
85
+ - name: "Banco CLÁSSICO"
86
+ code: "241"
87
+ ispb: "31597552"
88
+ - name: "Banco COOPERATIVO do Brasil – Bancoob"
89
+ code: "756"
90
+ ispb: "2038232"
91
+ - name: "Banco COOPERATIVO SICREDI"
92
+ code: "748"
93
+ ispb: "1181521"
94
+ - name: "Banco CREDIT AGRICOLE Brasil"
95
+ code: "222"
96
+ ispb: "75647891"
97
+ - name: "Banco CREDIT SUISSE (Brasil)"
98
+ code: "505"
99
+ ispb: "32062580"
100
+ - name: "Banco da AMAZONIA"
101
+ code: "3"
102
+ ispb: "4902979"
103
+ - name: "Banco da CHINA Brasil"
104
+ code: "83"
105
+ ispb: "10690848"
106
+ - name: "Banco DAYCOVAL"
107
+ code: "707"
108
+ ispb: "62232889"
109
+ - name: "Banco de LA NACION ARGENTINA"
110
+ code: "300"
111
+ ispb: "33042151"
112
+ - name: "Banco de LA PROVINCIA de BUENOS AIRES"
113
+ code: "495"
114
+ ispb: "44189447"
115
+ - name: "Banco de LA REPUBLICA ORIENTAL DEL URUGUAY"
116
+ code: "494"
117
+ ispb: "51938876"
118
+ - name: "Banco de TOKYO MITSUBISHI UFJ Brasil"
119
+ code: "456"
120
+ ispb: "60498557"
121
+ - name: "Banco DIBENS"
122
+ code: "214"
123
+ ispb: "61199881"
124
+ - name: "Banco do BRASIL"
125
+ code: "1"
126
+ ispb: "0"
127
+ - name: "Banco do ESTADO de SERGIPE"
128
+ code: "47"
129
+ ispb: "13009717"
130
+ - name: "Banco do ESTADO do PARA"
131
+ code: "37"
132
+ ispb: "4913711"
133
+ - name: "Banco do ESTADO do RIO GRANDE do SUL (BANRISUL"
134
+ code: "41"
135
+ ispb: "92702067"
136
+ - name: "Banco do NORDESTE do Brasil"
137
+ code: "4"
138
+ ispb: "7237373"
139
+ - name: "Banco FATOR"
140
+ code: "265"
141
+ ispb: "33644196"
142
+ - name: "Banco FIBRA"
143
+ code: "224"
144
+ ispb: "58616418"
145
+ - name: "Banco FICSA"
146
+ code: "626"
147
+ ispb: "61348538"
148
+ - name: "Banco GERADOR"
149
+ code: "121"
150
+ ispb: "10664513"
151
+ - name: "Banco GUANABARA"
152
+ code: "612"
153
+ ispb: "31880826"
154
+ - name: "Banco INDUSTRIAL do Brasil"
155
+ code: "604"
156
+ ispb: "31895683"
157
+ - name: "Banco INDUSTRIAL e COMERCIAL"
158
+ code: "320"
159
+ ispb: "7450604"
160
+ - name: "Banco INDUSVAL"
161
+ code: "653"
162
+ ispb: "61024352"
163
+ - name: "Banco INTERCAP"
164
+ code: "630"
165
+ ispb: "58497702"
166
+ - name: "Banco INTERMEDIUM"
167
+ code: "77"
168
+ ispb: "416968"
169
+ - name: "Banco INVESTCRED UNIBANCO"
170
+ code: "249"
171
+ ispb: "61182408"
172
+ - name: "Banco ITAU BBA"
173
+ code: "184"
174
+ ispb: "17298092"
175
+ - name: "Banco ITAÚ HOLDING FINANCEIRA"
176
+ code: "652"
177
+ ispb: "60872504"
178
+ - name: "Banco J. SAFRA"
179
+ code: "74"
180
+ ispb: "3017677"
181
+ - name: "Banco J.P. MORGAN"
182
+ code: "376"
183
+ ispb: "33172537"
184
+ - name: "Banco JOHN DEERE"
185
+ code: "217"
186
+ ispb: "91884981"
187
+ - name: "Banco KDB do Brasil"
188
+ code: "76"
189
+ ispb: "7656500"
190
+ - name: "Banco KEB do Brasil"
191
+ code: "757"
192
+ ispb: "2318507"
193
+ - name: "Banco LUSO BRASILEIRO"
194
+ code: "600"
195
+ ispb: "59118133"
196
+ - name: "Banco MÁXIMA"
197
+ code: "243"
198
+ ispb: "33923798"
199
+ - name: "Banco MERCANTIL do BRASIL"
200
+ code: "389"
201
+ ispb: "17184037"
202
+ - name: "Banco MIZUHO do Brasil"
203
+ code: "370"
204
+ ispb: "61088183"
205
+ - name: "Banco MODAL"
206
+ code: "746"
207
+ ispb: "30723886"
208
+ - name: "Banco MORGAN STANLEY DEAN WITTER"
209
+ code: "66"
210
+ ispb: "2801938"
211
+ - name: "Banco ORIGINAL"
212
+ code: "212"
213
+ ispb: "92894922"
214
+ - name: "Banco ORIGINAL do Agronegócio"
215
+ code: "79"
216
+ ispb: "9516419"
217
+ - name: "Banco PANAMERICANO"
218
+ code: "623"
219
+ ispb: "59285411"
220
+ - name: "Banco PAULISTA"
221
+ code: "611"
222
+ ispb: "61820817"
223
+ - name: "Banco PECUNIA"
224
+ code: "613"
225
+ ispb: "60850229"
226
+ - name: "Banco PETRA"
227
+ code: "94"
228
+ ispb: "11758741"
229
+ - name: "Banco PINE"
230
+ code: "643"
231
+ ispb: "62144175"
232
+ - name: "Banco POTTENCIAL"
233
+ code: "735"
234
+ ispb: "253448"
235
+ - name: "Banco RABOBANK INTERNATIONAL Brasil"
236
+ code: "747"
237
+ ispb: "1023570"
238
+ - name: "Banco RANDON"
239
+ code: "88"
240
+ ispb: "11476673"
241
+ - name: "Banco RENDIMENTO"
242
+ code: "633"
243
+ ispb: "68900810"
244
+ - name: "Banco RIBEIRAO PRETO"
245
+ code: "741"
246
+ ispb: "517645"
247
+ - name: "Banco RODOBENS"
248
+ code: "120"
249
+ ispb: "33603457"
250
+ - name: "Banco SAFRA"
251
+ code: "422"
252
+ ispb: "58160789"
253
+ - name: "Banco SANTANDER (Brasil"
254
+ code: "33"
255
+ ispb: "90400888"
256
+ - name: "Banco SEMEAR"
257
+ code: "743"
258
+ ispb: "795423"
259
+ - name: "Banco SOCIETE GENERALE Brasil"
260
+ code: "366"
261
+ ispb: "61533584"
262
+ - name: "Banco SOFISA"
263
+ code: "637"
264
+ ispb: "60889128"
265
+ - name: "Banco SUMITOMO MITSUI Brasileiro"
266
+ code: "464"
267
+ ispb: "60518222"
268
+ - name: "Banco TOPAZIO"
269
+ code: "82"
270
+ ispb: "7679404"
271
+ - name: "Banco TRIÂNGULO"
272
+ code: "634"
273
+ ispb: "17351180"
274
+ - name: "Banco VOTORANTIM"
275
+ code: "655"
276
+ ispb: "59588111"
277
+ - name: "Banco VR"
278
+ code: "610"
279
+ ispb: "78626983"
280
+ - name: "Banco WESTERN UNION do Brasil"
281
+ code: "119"
282
+ ispb: "13720915"
283
+ - name: "Banco WOORI BANK do Brasil"
284
+ code: "124"
285
+ ispb: "15357060"
286
+ - name: "BANESTES (Banco do ESTADO do ESPIRITO SANTO"
287
+ code: "21"
288
+ ispb: "28127603"
289
+ - name: "BANIF – Banco INTERNACIONAL do FUNCHAL (Brasil)"
290
+ code: "719"
291
+ ispb: "33884941"
292
+ - name: "BANK OF AMERICA MERRILL LYNCH Banco Múltiplo"
293
+ code: "755"
294
+ ispb: "62073200"
295
+ - name: "BCV – Banco de Crédito e Varejo"
296
+ code: "250"
297
+ ispb: "50585090"
298
+ - name: "BES Investimento do Brasil – Banco de Investimento"
299
+ code: "78"
300
+ ispb: "34111187"
301
+ - name: "BM TRICURY"
302
+ code: "18"
303
+ ispb: "57839805"
304
+ - name: "BNY MELLON"
305
+ code: "17"
306
+ ispb: "42272526"
307
+ - name: "BPN Brasil Banco Múltiplo"
308
+ code: "69"
309
+ ispb: "61033106"
310
+ - name: "BRADESCO BERJ"
311
+ code: "122"
312
+ ispb: "33147315"
313
+ - name: "BRASIL PLURAL Banco Múltiplo"
314
+ code: "125"
315
+ ispb: "45246410"
316
+ - name: "BRB – Banco de Brasília"
317
+ code: "70"
318
+ ispb: "208"
319
+ - name: "BRICKELL Crédito Financiamento e Investimento"
320
+ code: "92"
321
+ ispb: "12865507"
322
+ - name: "CAIXA ECONOMICA FEDERAL"
323
+ code: "104"
324
+ ispb: "360305"
325
+ - name: "CC CREDICOAMO Crédito Rural Cooperativa"
326
+ code: "10"
327
+ ispb: "81723108"
328
+ - name: "CC UNICRED Brasil Central"
329
+ code: "112"
330
+ ispb: "4243780"
331
+ - name: "CC UNICRED do Brasil"
332
+ code: "136"
333
+ ispb: "315557"
334
+ - name: "CC UNIPRIME NORTE do PARANA"
335
+ code: "84"
336
+ ispb: "2398976"
337
+ - name: "CECOOPES – Central das Cooperativas de Economia e Crédito Mútuo"
338
+ code: "114"
339
+ ispb: "5790149"
340
+ - name: "CITIBANK N.A."
341
+ code: "477"
342
+ ispb: "33042953"
343
+ - name: "Cooperativa Central de Crédito do Estado de SP"
344
+ code: "90"
345
+ ispb: "73085573"
346
+ - name: "Cooperativa Central de Crédito NOROESTE Brasileiro"
347
+ code: "97"
348
+ ispb: "4632856"
349
+ - name: "Cooperativa Central de Crédito Urbano – CECRED"
350
+ code: "85"
351
+ ispb: "5463212"
352
+ - name: "Cooperativa de Crédito Rural da Região da Mogiana"
353
+ code: "89"
354
+ ispb: "62109566"
355
+ - name: "CREDIALIANCA Cooperativa de Crédito RURAL"
356
+ code: "98"
357
+ ispb: "78157146"
358
+ - name: "DEUTSCHE BANK – Banco ALEMÃO"
359
+ code: "487"
360
+ ispb: "62331228"
361
+ - name: "HIPERCARD Banco Múltiplo"
362
+ code: "62"
363
+ ispb: "3012230"
364
+ - name: "HSBC BANK Brasil – Banco Múltiplo"
365
+ code: "399"
366
+ ispb: "1701201"
367
+ - name: "ICBC do Brasil Banco Múltiplo"
368
+ code: "132"
369
+ ispb: "17453575"
370
+ - name: "ING BANK N.V."
371
+ code: "492"
372
+ ispb: "49336860"
373
+ - name: "ITAÚ UNIBANCO"
374
+ code: "341"
375
+ ispb: "60701190"
376
+ - name: "NOVO Banco CONTINENTAL"
377
+ code: "753"
378
+ ispb: "74828799"
379
+ - name: "PARANA Banco"
380
+ code: "254"
381
+ ispb: "14388334"
382
+ - name: "SCOTIABANK Brasil Banco Múltiplo"
383
+ code: "751"
384
+ ispb: "29030467"
385
+ - name: "UNICRED Central RS – Central de Cooperativa de Economia e Crédito Mútuo do Estado do RS"
386
+ code: "91"
387
+ ispb: "1634601"
388
+ - name: "UNICRED Central Santa Catarina"
389
+ code: "87"
390
+ ispb: "543968"
391
+ - name: "UNIPRIME Central – Central Interestadual de Cooperativa de Crédito"
392
+ code: "99"
393
+ ispb: "3046391"