logos-bancos-br 0.2.0 → 0.4.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.
package/README.en.md CHANGED
@@ -1,8 +1,10 @@
1
1
  # logos-bancos-br
2
2
 
3
- > **Brazilian bank list + official logos, always up to date.** Everything is derived from
4
- > official sources only (Central Bank of Brazil and Open Finance Brasil) and **rebuilt
5
- > automatically every week by CI** — with verifiable per-logo provenance.
3
+ > **Dataset + logos of Brazil's financial and payment institutions** — banks, fintechs, payment
4
+ > institutions and credit unions — **always up to date**. Everything is derived from three named
5
+ > official sources: the **STR participants list** and the **active Pix participants list**, both
6
+ > from the **Central Bank of Brazil (BCB)**, plus the **Open Finance Brasil participants
7
+ > directory**. Rebuilt automatically every week by CI, with verifiable per-logo provenance.
6
8
  > **[Versão em português](README.md)**
7
9
 
8
10
  [![CI](https://github.com/rzmt/logos-bancos-br/actions/workflows/ci.yml/badge.svg)](https://github.com/rzmt/logos-bancos-br/actions/workflows/ci.yml)
@@ -28,15 +30,18 @@
28
30
 
29
31
  ## What this package gives you
30
32
 
31
- 1. **The list of institutions — auto-updated.** Every institution with a COMPE code in the
32
- Central Bank of Brazil STR participants list (currently 470), with official name, short name,
33
- COMPE code and ISPB, in [`data/bancos.json`](data/bancos.json). You never hand-maintain a
34
- bank list again.
35
- 2. **Official logos.** Currently 152, as 256×256 PNGs (+ SVG when available), from two origins —
36
- both official and identified in the dataset (`logo.source.type`): the public **Open Finance
37
- Brasil** directory (`openfinance`), where each institution publishes its own brand, and the
38
- **institution's own official website** (`direct-uri`), visually curated before shipping.
39
- Every file carries provenance: source URI, SHA-256 and date.
33
+ 1. **The list of institutions — auto-updated, in two sets.** The **main list**
34
+ ([`data/bancos.json`](data/bancos.json)) carries the **470 institutions with a COMPE code**
35
+ from the Central Bank STR participants list. The **643 Pix-only institutions** (fintechs,
36
+ payment institutions, cooperative affiliates — no COMPE) live in a separate dataset
37
+ ([`data/instituicoes-pix.json`](data/instituicoes-pix.json)) — the main list stays clean,
38
+ and the full Pix universe is one import away.
39
+ 2. **Official logos, deduplicated.** **473 institutions with a logo** backed by **160 distinct
40
+ files** (~1.7 MB): affiliates of single-brand cooperative systems (Sicoob, Sicredi, Cresol,
41
+ Unicred) **share one file per system**, marked `logo.source.type: "brand"`. Own logos come
42
+ from the public **Open Finance Brasil** directory (`openfinance`) or the **institution's own
43
+ official website** (`direct-uri`, visually curated). Every file carries provenance: source
44
+ URI, SHA-256 and date.
40
45
  3. **Automatic updates, no manual curation.** Every Monday a GitHub Action
41
46
  ([`update-logos.yml`](.github/workflows/update-logos.yml)) rebuilds **both the list AND the
42
47
  logos** from the sources and opens a PR with the visual diff. A bank created, renamed or
@@ -45,15 +50,15 @@
45
50
  copies the assets into Flutter/Kotlin/Swift/.NET/PHP projects, CDN URLs with no install — or
46
51
  just the JSON.
47
52
 
48
- ## Why not a hand-maintained list?
53
+ ## Why official sources?
49
54
 
50
- Because it rots: the Central Bank adds, renames and removes institutions throughout the year,
51
- and banks redesign their brands. Existing libraries ship either **data only** (no logos) or
52
- logos **hand-collected** from assorted websites with no traceability. The approach here:
55
+ Hand-maintained lists rot: the Central Bank adds, renames and removes institutions throughout
56
+ the year, and banks redesign their brands. Existing libraries ship either **data only** (no
57
+ logos) or logos **collected from assorted websites** with no traceability. The approach here:
53
58
 
54
- - **Official sources, and only them** — the STR participants CSV (updated daily by the Central
55
- Bank itself), the Open Finance Brasil participants directory and, for non-participants, the
56
- icon the institution publishes **on its own official website** (hand-reviewed). No images
59
+ - **Official sources, and only them** — the STR and Pix participants CSVs (updated daily by the
60
+ Central Bank itself), the Open Finance Brasil participants directory and, for non-participants,
61
+ the icon the institution publishes **on its own official website** (hand-reviewed). No images
57
62
  "found on Google" or from aggregators. Open Finance purists can filter:
58
63
  `banks().filter(b => b.logo?.source.type === 'openfinance')`.
59
64
  - **Per-logo provenance** — `data/bancos.json` records each logo's source URI, SHA-256 of the
@@ -63,10 +68,10 @@ logos **hand-collected** from assorted websites with no traceability. The approa
63
68
  In a banking context, a wrong logo is worse than no logo.
64
69
  - **Safe assets** — https-only downloads with size/pixel caps; SVGs redistributed only after
65
70
  sanitization (no scripts, event handlers, `foreignObject` or external references).
66
- - **Honest trade-off** — 152 of the 470 institutions have a logo (all Open Finance participants
67
- plus ~45 banks/payment institutions covered via official sites — the vast majority of accounts
68
- in Brazil). The rest are small credit unions/SCDs/brokers — your app picks the fallback, and
69
- coverage grows every release.
71
+ - **Honest trade-off** — 473 of the 1,113 institutions have a logo (Open Finance participants,
72
+ cooperative-system affiliates and ~45 institutions covered via official sites — the vast
73
+ majority of accounts in Brazil). The rest are small SCDs/brokers/payment institutions — your
74
+ app picks the fallback, and coverage grows every release.
70
75
 
71
76
  ## Install & use
72
77
 
@@ -78,7 +83,10 @@ Requires **Node ≥ 20** for Node/CLI usage (web and React Native follow your bu
78
83
  environment). Zero runtime dependencies. Published with **npm provenance** — verify integrity
79
84
  with `npm audit signatures`.
80
85
 
81
- Files are named by **ISPB** (8 digits). Lookups accept **COMPE or ISPB**.
86
+ Files are named by **ISPB** (8 digits). `banks()` is the main list (COMPE holders);
87
+ `pixInstitutions()` is the separate Pix-only set; `allInstitutions()` is both; `byIspb()`
88
+ resolves across the two. Each institution carries a `pix` block (participation attributes,
89
+ verbatim from the BCB list) or `null`.
82
90
 
83
91
  ```ts
84
92
  import { banks, byCompe, byIspb, logoCdnUrl } from 'logos-bancos-br';
@@ -88,8 +96,9 @@ byIspb('00000000'); // Banco do Brasil
88
96
  logoCdnUrl(341); // https://cdn.jsdelivr.net/npm/logos-bancos-br@x.y.z/logos/png/60701190.png
89
97
  ```
90
98
 
91
- **React Native (Expo/Metro)** — static require() map (bundles all logos, ~1.3 MB; keys accept
92
- both the 4-digit COMPE and the 8-digit ISPB):
99
+ **React Native (Expo/Metro)** — static require() map (bundles the 160 distinct logos, ~1.7 MB; keys accept both
100
+ the 4-digit COMPE and the 8-digit ISPB — Pix-only institutions by ISPB only; affiliates point at
101
+ the shared system asset):
93
102
 
94
103
  ```tsx
95
104
  import logos from 'logos-bancos-br/react-native';
@@ -113,23 +122,26 @@ npx logos-bancos-br list
113
122
  **CDN, no install** (always pin a version):
114
123
 
115
124
  ```
116
- https://cdn.jsdelivr.net/npm/logos-bancos-br@0.1.0/logos/png/60701190.png
125
+ https://cdn.jsdelivr.net/npm/logos-bancos-br@0.3.0/logos/png/60701190.png
117
126
  ```
118
127
 
119
- **Data only** (the bank list):
128
+ **Data only**:
120
129
 
121
130
  ```ts
122
- import data from 'logos-bancos-br/data/bancos.json';
131
+ import banks from 'logos-bancos-br/data/bancos.json'; // main list (COMPE)
132
+ import pixOnly from 'logos-bancos-br/data/instituicoes-pix.json'; // Pix-only
123
133
  ```
124
134
 
125
135
  ### API quick reference
126
136
 
127
137
  | Import | Function | Returns |
128
138
  |---|---|---|
129
- | `logos-bancos-br` | `banks()` | every institution (`Bank[]`) |
139
+ | `logos-bancos-br` | `banks()` | main list — COMPE institutions (`Bank[]`) |
140
+ | | `pixInstitutions()` | Pix-only set (`PixInstitution[]`) |
141
+ | | `allInstitutions()` | both sets (`Institution[]`) |
130
142
  | | `byCompe(code)` | `Bank \| undefined` — `341`, `'341'` and `'0341'` are equivalent |
131
- | | `byIspb(ispb)` | `Bank \| undefined` |
132
- | | `findBank(code)` | `Bank \| undefined` — more than 4 digits is treated as ISPB |
143
+ | | `byIspb(ispb)` | `Institution \| undefined` — resolves across both sets |
144
+ | | `findBank(code)` | `Institution \| undefined` — more than 4 digits is treated as ISPB |
133
145
  | | `logoCdnUrl(code, { format?, version? })` | jsDelivr URL, or `null` when there is no logo |
134
146
  | | `normalizeCompe(x)` · `normalizeIspb(x)` | `'0341'` · `'60701190'` |
135
147
  | | `version` | package version (string) |
@@ -137,7 +149,7 @@ import data from 'logos-bancos-br/data/bancos.json';
137
149
  | | `copyLogos({ dest, format?, by?, only? })` | copies assets into a directory (what the CLI uses) |
138
150
  | `logos-bancos-br/react-native` | `logos` (default export) | require() map keyed by COMPE4 **and** ISPB |
139
151
 
140
- Exported TypeScript types: `Bank`, `BankLogo`, `BankLogoSource`.
152
+ Exported TypeScript types: `Bank`, `PixInstitution`, `Institution`, `BankLogo`, `BankLogoSource`, `PixInfo`.
141
153
 
142
154
  ## Dataset shape
143
155
 
@@ -148,6 +160,7 @@ Exported TypeScript types: `Bank`, `BankLogo`, `BankLogoSource`.
148
160
  "compe4": "0341",
149
161
  "name": "Itaú Unibanco S.A.",
150
162
  "shortName": "ITAÚ UNIBANCO S.A.",
163
+ "pix": { "spiParticipationType": "Direta", "pixParticipationType": "Obrigatória", "modality": "Provedor de Conta Transacional", "institutionType": "Banco Múltiplo", "authorizedByBcb": true },
151
164
  "logo": {
152
165
  "png": "logos/png/60701190.png",
153
166
  "svg": "logos/svg/60701190.svg",
@@ -157,13 +170,18 @@ Exported TypeScript types: `Bank`, `BankLogo`, `BankLogoSource`.
157
170
  ```
158
171
 
159
172
  `logo.png` is a normalized transparent 256×256 PNG; `logo.svg` is the original vector when safely
160
- redistributable; `logo: null` means the institution has no logo in the official sources.
173
+ redistributable; `logo: null` means no logo in the official sources; `logo.source.type: "brand"`
174
+ marks a logo inherited from the institution's cooperative system (shared asset, `brand` says
175
+ which); `pix: null` marks a non-Pix participant. Pix-only records (separate dataset) always have
176
+ `compe: null`, a 14-digit `cnpj` and a `pix` block.
161
177
 
162
178
  ## How the auto-update works
163
179
 
164
- The pipeline joins the STR list (which institutions exist) with the Open Finance directory
165
- (their logos), bridged by `ISPB == first 8 digits of the CNPJ`; hand-reviewed `forcedMatches`
166
- cover second brands (XP CCTVM, Nu Invest, Bradesco BBI…). For institutions outside Open Finance,
180
+ The pipeline unions the Central Bank's STR and active-Pix participants lists (which institutions
181
+ exist, keyed by ISPB) and joins them with the Open Finance directory (their logos), bridged by
182
+ `ISPB == first 8 digits of the CNPJ`; hand-reviewed `forcedMatches` cover second brands (XP
183
+ CCTVM, Nu Invest, Bradesco BBI…), and a curated brand rule gives cooperative-system affiliates
184
+ (Sicoob/Sicredi/Cresol/Unicred) their system's logo. For institutions outside Open Finance,
167
185
  discovery tools (`npm run discover` / `discover:ai`) find the icon published on the institution's
168
186
  official website — nothing ships without visual curation (brand + domain reviewed); approvals
169
187
  become `forcedUris` (`source.type: "direct-uri"`). The weekly workflow regenerates
package/README.md CHANGED
@@ -1,8 +1,11 @@
1
1
  # logos-bancos-br
2
2
 
3
- > **Lista de bancos brasileiros + logos oficiais, sempre atualizados.** Tudo derivado de fontes
4
- > 100% oficiais (Banco Central e Open Finance Brasil) e **reconstruído automaticamente toda
5
- > semana por CI** — com proveniência verificável por logo. **[English version](README.en.md)**
3
+ > **Dataset + logos das instituições financeiras e de pagamento do Brasil** — bancos, fintechs,
4
+ > IPs e cooperativas — **sempre atualizados**. Tudo derivado de três fontes 100% oficiais e
5
+ > nomeadas: a **lista de participantes do STR** e a **lista de participantes ativos do Pix**,
6
+ > ambas do **Banco Central do Brasil**, e o **diretório de participantes do Open Finance
7
+ > Brasil**. Reconstruído automaticamente toda semana por CI, com proveniência verificável por
8
+ > logo. **[English version](README.en.md)**
6
9
 
7
10
  [![CI](https://github.com/rzmt/logos-bancos-br/actions/workflows/ci.yml/badge.svg)](https://github.com/rzmt/logos-bancos-br/actions/workflows/ci.yml)
8
11
  [![atualização](https://github.com/rzmt/logos-bancos-br/actions/workflows/update-logos.yml/badge.svg)](https://github.com/rzmt/logos-bancos-br/actions/workflows/update-logos.yml)
@@ -27,15 +30,20 @@
27
30
 
28
31
  ## O que este pacote entrega
29
32
 
30
- 1. **A lista de instituições — atualizada automaticamente.** Todas as instituições com código
31
- COMPE da lista de participantes do STR do **Banco Central** (hoje 470), com nome oficial,
32
- nome reduzido, código COMPE e ISPB, em [`data/bancos.json`](data/bancos.json). Você nunca
33
- mais mantém uma lista de bancos à mão.
34
- 2. **Logos oficiais.** Hoje 152, em PNG 256×256 (+ SVG quando disponível), de duas origens —
35
- ambas oficiais e identificadas no dataset (`logo.source.type`): o diretório público do
36
- **Open Finance Brasil** (`openfinance`), onde cada instituição publica a própria marca, e o
37
- **site oficial da própria instituição** (`direct-uri`), com curadoria visual antes de entrar.
38
- Cada arquivo carrega proveniência: URI de origem, SHA-256 e data.
33
+ 1. **A lista de instituições — atualizada automaticamente, em dois conjuntos.** A **lista
34
+ principal** ([`data/bancos.json`](data/bancos.json)) traz as **470 instituições com código
35
+ COMPE** da lista de participantes do STR do Banco Central. As **643 instituições só-Pix**
36
+ (fintechs, IPs e cooperativas afiliadas, sem COMPE) ficam num conjunto separado
37
+ ([`data/instituicoes-pix.json`](data/instituicoes-pix.json)) — a lista principal permanece
38
+ limpa e quem precisa do universo completo do Pix tem tudo. Ambos com nomes oficiais, ISPB,
39
+ CNPJ (só-Pix) e atributos de participação no Pix. Você nunca mais mantém uma lista de
40
+ instituições no seu projeto.
41
+ 2. **Logos oficiais, sem duplicação.** **473 instituições com logo** usando **160 arquivos
42
+ distintos** (~1,7 MB): afiliadas de sistemas cooperativos de marca única (Sicoob, Sicredi,
43
+ Cresol, Unicred) **compartilham um único arquivo por sistema** e são marcadas com
44
+ `logo.source.type: "brand"`. Logos próprios vêm do diretório público do **Open Finance
45
+ Brasil** (`openfinance`) ou do **site oficial da instituição** (`direct-uri`, com curadoria
46
+ visual). Cada arquivo carrega proveniência: URI, SHA-256 e data.
39
47
  3. **Atualização automática, sem curadoria manual.** Toda segunda-feira um GitHub Action
40
48
  ([`update-logos.yml`](.github/workflows/update-logos.yml)) reconstrói **a lista E os logos**
41
49
  a partir das fontes e abre um PR com o diff visual. Banco criado, renomeado ou extinto pelo
@@ -44,17 +52,17 @@
44
52
  copia os assets para projetos Flutter/Kotlin/Swift/.NET/PHP, URLs de CDN sem instalar nada —
45
53
  ou só o JSON.
46
54
 
47
- ## Por que não manter uma lista à mão?
55
+ ## Por que fontes oficiais?
48
56
 
49
- Porque ela envelhece: o BCB inclui, renomeia e exclui instituições ao longo do ano, e os bancos
50
- redesenham suas marcas. As bibliotecas existentes ou trazem **só dados** (sem logos), ou logos
51
- **coletados manualmente** de sites variados, sem rastreabilidade. A abordagem aqui:
57
+ Listas mantidas manualmente envelhecem: o BCB inclui, renomeia e exclui instituições ao longo do
58
+ ano, e os bancos redesenham suas marcas. As bibliotecas existentes ou trazem **só dados** (sem
59
+ logos), ou logos **coletados de sites variados**, sem rastreabilidade. A abordagem aqui:
52
60
 
53
- - **Fontes oficiais, e apenas elas** — o CSV de participantes do STR (que o próprio BCB atualiza
54
- diariamente), o diretório de participantes do Open Finance Brasil e, para quem não participa do
55
- Open Finance, o ícone que a própria instituição publica **no site oficial dela** (revisado à
56
- mão). Nenhuma imagem "achada no Google" ou de agregador. Quem quiser só a fonte Open Finance
57
- filtra: `banks().filter(b => b.logo?.source.type === 'openfinance')`.
61
+ - **Fontes oficiais, e apenas elas** — os CSVs de participantes do STR e do Pix (que o próprio
62
+ BCB atualiza diariamente), o diretório de participantes do Open Finance Brasil e, para quem não
63
+ participa do Open Finance, o ícone que a própria instituição publica **no site oficial dela**
64
+ (revisado à mão). Nenhuma imagem "achada no Google" ou de agregador. Quem quiser só a fonte
65
+ Open Finance filtra: `banks().filter(b => b.logo?.source.type === 'openfinance')`.
58
66
  - **Proveniência por logo** — `data/bancos.json` registra a URI de origem, o SHA-256 do arquivo
59
67
  original e a data de cada logo. O diff do git é a auditoria.
60
68
  - **Correspondência segura** — match automático **somente por ISPB** (= raiz do CNPJ).
@@ -63,10 +71,10 @@ redesenham suas marcas. As bibliotecas existentes ou trazem **só dados** (sem l
63
71
  - **Assets seguros** — download só via https com teto de tamanho e de pixels; SVGs
64
72
  redistribuídos apenas após sanitização (sem `script`, event handlers, `foreignObject` ou
65
73
  referências externas).
66
- - **Trade-off honesto** — 152 das 470 instituições têm logo (todas as participantes do Open
67
- Finance + ~45 bancos e IPs cobertos pelos sites oficiais, o que inclui a esmagadora maioria
68
- das contas do país). As demais são SCDs/cooperativas/corretoras pequenas; para elas seu app
69
- usa o fallback que preferir — e a cobertura cresce a cada release.
74
+ - **Trade-off honesto** — 473 das 1.113 instituições têm logo (participantes do Open Finance,
75
+ afiliadas dos sistemas cooperativos e ~45 instituições cobertas pelos sites oficiais — a
76
+ esmagadora maioria das contas do país). As demais são SCDs/corretoras/IPs pequenas; para elas
77
+ seu app usa o fallback que preferir — e a cobertura cresce a cada release.
70
78
 
71
79
  ## Instalação e uso
72
80
 
@@ -78,19 +86,27 @@ Requer **Node ≥ 20** para uso via Node/CLI (em web e React Native vale o ambie
78
86
  bundler). Zero dependências de runtime. Publicado com **npm provenance** — verifique a
79
87
  integridade com `npm audit signatures`.
80
88
 
81
- Os arquivos são nomeados pelo **ISPB** (8 dígitos, estável e universal — inclusive para
82
- instituições Pix sem COMPE, no roadmap). As consultas aceitam **COMPE ou ISPB**.
89
+ Os arquivos são nomeados pelo **ISPB** (8 dígitos, estável e universal — é o que permite cobrir
90
+ as ~640 instituições do Pix que não têm código COMPE). As consultas aceitam **COMPE ou ISPB**.
83
91
 
84
92
  ### JavaScript / TypeScript (Node ou web)
85
93
 
86
94
  ```ts
87
- import { banks, byCompe, byIspb, logoCdnUrl } from 'logos-bancos-br';
95
+ import { banks, pixInstitutions, allInstitutions, byCompe, byIspb, logoCdnUrl } from 'logos-bancos-br';
96
+
97
+ banks(); // lista principal: 470 instituições com COMPE
98
+ pixInstitutions(); // conjunto separado: 643 só-Pix (fintechs, IPs, afiliadas)
99
+ allInstitutions(); // as duas juntas (1.113)
88
100
 
89
101
  byCompe(341); // { ispb: '60701190', compe4: '0341', name: 'Itaú Unibanco S.A.', logo: {...} }
90
102
  byCompe('0260'); // Nubank — '260', 260 e '0260' são equivalentes
91
103
  byIspb('00000000'); // Banco do Brasil
104
+ byIspb('11275560'); // RecargaPay — só-Pix; byIspb resolve nos DOIS conjuntos
92
105
 
93
106
  logoCdnUrl(341); // https://cdn.jsdelivr.net/npm/logos-bancos-br@x.y.z/logos/png/60701190.png
107
+
108
+ // Atributos de participação no Pix (verbatim da lista do BCB):
109
+ byCompe(341)?.pix; // { spiParticipationType: 'Direta', pixParticipationType: 'Obrigatória', ... }
94
110
  ```
95
111
 
96
112
  ### React (web)
@@ -109,9 +125,10 @@ import logos from 'logos-bancos-br/react-native'; // mapa require() estático
109
125
  <Image source={logos[codigoBanco.padStart(4, '0')]} style={{ width: 40, height: 40 }} />
110
126
  ```
111
127
 
112
- > As chaves do mapa aceitam o COMPE com 4 dígitos (`'0341'`) **e** o ISPB (`'60701190'`).
113
- > Importar esse entry adiciona **todos** os logos (~1,3 MB) ao bundle. Se preferir empacotar só
114
- > alguns, use o CLI abaixo e faça `require()` dos arquivos copiados.
128
+ > As chaves do mapa aceitam o COMPE com 4 dígitos (`'0341'`) **e** o ISPB (`'60701190'`;
129
+ > instituições só-Pix aparecem apenas pelo ISPB; afiliadas apontam para o asset compartilhado do
130
+ > sistema). Importar esse entry adiciona os **160 logos distintos** (~1,7 MB) ao bundle. Se
131
+ > preferir empacotar só alguns, use o CLI abaixo e faça `require()` dos arquivos copiados.
115
132
 
116
133
  ### Node (caminho dos arquivos no disco)
117
134
 
@@ -126,8 +143,8 @@ logoPngPath('341'); // /…/node_modules/logos-bancos-br/logos/png/60701190.png
126
143
  Vendorize os assets no seu projeto — sem dependência de runtime:
127
144
 
128
145
  ```bash
129
- npx logos-bancos-br copy --dest ./assets/banks # 0341.png, 0001.png, ... (por COMPE)
130
- npx logos-bancos-br copy --dest ./assets/banks --by ispb # 60701190.png, ...
146
+ npx logos-bancos-br copy --dest ./assets/banks # 0341.png, ... (por COMPE; só-Pix ficam de fora)
147
+ npx logos-bancos-br copy --dest ./assets/banks --by ispb # 60701190.png, ... (todas, incl. só-Pix)
131
148
  npx logos-bancos-br copy --dest ./assets/banks --format both --only 341,001,260
132
149
  npx logos-bancos-br list # tabela COMPE · ISPB · nome · tem logo
133
150
  ```
@@ -137,28 +154,30 @@ Rode de novo a cada atualização do pacote para receber lista e logos novos.
137
154
  ### CDN — sem instalar nada
138
155
 
139
156
  ```
140
- https://cdn.jsdelivr.net/npm/logos-bancos-br@0.1.0/logos/png/60701190.png
141
- https://cdn.jsdelivr.net/npm/logos-bancos-br@0.1.0/logos/svg/18236120.svg
157
+ https://cdn.jsdelivr.net/npm/logos-bancos-br@0.3.0/logos/png/60701190.png
158
+ https://cdn.jsdelivr.net/npm/logos-bancos-br@0.3.0/logos/svg/18236120.svg
142
159
  ```
143
160
 
144
- Fixe sempre uma versão (`@0.1.0`) — a correspondência COMPE→ISPB está em
161
+ Fixe sempre uma versão (`@0.3.0`) — a correspondência COMPE→ISPB está em
145
162
  [`data/bancos.json`](data/bancos.json).
146
163
 
147
- ### Só os dados (lista de bancos)
164
+ ### Só os dados
148
165
 
149
166
  ```ts
150
- import dados from 'logos-bancos-br/data/bancos.json';
151
- // todas as instituições: ispb, compe, compe4, nome oficial, nome reduzido, logo (ou null)
167
+ import bancos from 'logos-bancos-br/data/bancos.json'; // lista principal (COMPE)
168
+ import soPix from 'logos-bancos-br/data/instituicoes-pix.json'; // só-Pix (sem COMPE)
152
169
  ```
153
170
 
154
171
  ### Referência rápida da API
155
172
 
156
173
  | Import | Função | Retorna |
157
174
  |---|---|---|
158
- | `logos-bancos-br` | `banks()` | todas as instituições (`Bank[]`) |
175
+ | `logos-bancos-br` | `banks()` | lista principal — instituições com COMPE (`Bank[]`) |
176
+ | | `pixInstitutions()` | só-Pix, sem COMPE (`PixInstitution[]`) |
177
+ | | `allInstitutions()` | os dois conjuntos (`Institution[]`) |
159
178
  | | `byCompe(codigo)` | `Bank \| undefined` — `341`, `'341'` e `'0341'` são equivalentes |
160
- | | `byIspb(ispb)` | `Bank \| undefined` |
161
- | | `findBank(codigo)` | `Bank \| undefined` — mais de 4 dígitos trata como ISPB |
179
+ | | `byIspb(ispb)` | `Institution \| undefined` — resolve nos dois conjuntos |
180
+ | | `findBank(codigo)` | `Institution \| undefined` — mais de 4 dígitos trata como ISPB |
162
181
  | | `logoCdnUrl(codigo, { format?, version? })` | URL do jsDelivr, ou `null` se não houver logo |
163
182
  | | `normalizeCompe(x)` · `normalizeIspb(x)` | `'0341'` · `'60701190'` |
164
183
  | | `version` | versão do pacote (string) |
@@ -166,7 +185,7 @@ import dados from 'logos-bancos-br/data/bancos.json';
166
185
  | | `copyLogos({ dest, format?, by?, only? })` | copia os assets para um diretório (o que o CLI usa) |
167
186
  | `logos-bancos-br/react-native` | `logos` (default export) | mapa `require()` com chaves COMPE4 **e** ISPB |
168
187
 
169
- Tipos TypeScript exportados: `Bank`, `BankLogo`, `BankLogoSource`.
188
+ Tipos TypeScript exportados: `Bank`, `PixInstitution`, `Institution`, `BankLogo`, `BankLogoSource`, `PixInfo`.
170
189
 
171
190
  ## O dataset
172
191
 
@@ -179,6 +198,13 @@ Um registro de `data/bancos.json`:
179
198
  "compe4": "0341",
180
199
  "name": "Itaú Unibanco S.A.",
181
200
  "shortName": "ITAÚ UNIBANCO S.A.",
201
+ "pix": {
202
+ "spiParticipationType": "Direta",
203
+ "pixParticipationType": "Obrigatória",
204
+ "modality": "Provedor de Conta Transacional",
205
+ "institutionType": "Banco Múltiplo",
206
+ "authorizedByBcb": true
207
+ },
182
208
  "logo": {
183
209
  "png": "logos/png/60701190.png",
184
210
  "svg": "logos/svg/60701190.svg",
@@ -200,22 +226,33 @@ Um registro de `data/bancos.json`:
200
226
  `openfinance` (diretório Open Finance, match automático por ISPB ou revisado), `direct-uri`
201
227
  (URL no site oficial da instituição, revisada à mão) ou `override` (arte mantida no repo).
202
228
  - `logo: null` — instituição sem logo nas fontes oficiais (use seu fallback).
229
+ - `logo.source.type: "brand"` — logo herdado do sistema cooperativo (campo `brand` diz qual,
230
+ ex.: `"SICOOB"`); o arquivo é **compartilhado** entre as afiliadas do sistema.
231
+ - `pix` — atributos verbatim da lista de participantes ativos do Pix do BCB; `null` quando a
232
+ instituição não é participante ativa.
233
+ - Em `instituicoes-pix.json`, cada registro tem `compe: null`, `cnpj` (14 dígitos) e `pix`
234
+ sempre presente.
203
235
 
204
236
  ## Como funciona a atualização automática
205
237
 
206
- 1. **Espinha dorsal**: o CSV público de participantes do STR do Banco Central define *quais
207
- instituições existem* (ISPB + COMPE + nomes oficiais). O BCB atualiza esse arquivo
208
- diariamente.
238
+ 1. **Espinha dorsal**: a união, por ISPB, de dois CSVs públicos do Banco Central — a lista de
239
+ participantes do STR (`ParticipantesSTR.csv`: ISPB + COMPE + nomes oficiais) e a **lista de
240
+ participantes ativos do Pix** (arquivo diário datado, que acrescenta as instituições sem
241
+ COMPE e os atributos de participação). Ambos atualizados diariamente pelo BCB.
209
242
  2. **Logos**: o diretório público de participantes do Open Finance Brasil traz, por CNPJ, o logo
210
243
  que cada instituição publica para ser exibido por terceiros.
211
244
  3. **Ponte**: `ISPB == 8 primeiros dígitos do CNPJ` (é assim que o BCB os atribui na esmagadora
212
245
  maioria dos casos). Quando não bate — segundas marcas como XP CCTVM, Nu Invest, Bradesco BBI —
213
246
  entra o `forcedMatches`, revisado à mão a partir das sugestões do relatório.
214
- 4. **Fora do Open Finance**: ferramentas de descoberta (`npm run discover` e `discover:ai`)
247
+ 4. **Sistemas cooperativos**: afiliadas que carregam a marca do sistema no nome oficial
248
+ (Sicoob, Sicredi, Cresol, Unicred) recebem o logo do sistema por regra curada — explícita e
249
+ auditável, não semelhança fuzzy — e **compartilham um único arquivo por marca** (nada de
250
+ centenas de cópias do mesmo PNG).
251
+ 5. **Fora do Open Finance**: ferramentas de descoberta (`npm run discover` e `discover:ai`)
215
252
  acham o ícone publicado no site oficial da instituição; **nada entra sem curadoria visual**
216
253
  (o revisor confere marca e domínio) — aprovados viram `forcedUris`.
217
- 5. **Normalização**: cada arte vira PNG 256×256; o SVG original é mantido quando seguro.
218
- 6. **Cadência**: o workflow roda **toda segunda-feira** (e sob demanda), regenera
254
+ 6. **Normalização**: cada arte vira PNG 256×256; o SVG original é mantido quando seguro.
255
+ 7. **Cadência**: o workflow roda **toda segunda-feira** (e sob demanda), regenera
219
256
  `data/bancos.json`, `logos/`, `PREVIEW.md` e `react-native.js`, e **abre um PR** com o
220
257
  relatório e o diff visual dos PNGs. Depois da revisão e merge, o mantenedor publica uma
221
258
  nova versão no npm (Release no GitHub). Nada é editado à mão.
@@ -225,14 +262,15 @@ Detalhes de manutenção (rodar o pipeline localmente, promover sugestões, over
225
262
 
226
263
  ## Limitações conhecidas
227
264
 
228
- - Cobertura de logos: 152 hoje (Open Finance + sites oficiais curados); cresce conforme o
229
- ecossistema e a curadoria. **Sua instituição está sem logo?** Abra uma issue com o template
230
- "Sugestão de match"/"Adicionar logo" apontando a URL no domínio oficial — promovemos rápido.
265
+ - Cobertura de logos: 473 de 1.113 instituições (153 na lista principal; o restante são
266
+ afiliadas com logo de sistema e só-Pix); cresce conforme o ecossistema e a curadoria. **Sua
267
+ instituição está sem logo?** Abra uma issue com o template "Sugestão de match"/"Adicionar
268
+ logo" apontando a URL no domínio oficial — promovemos rápido.
231
269
  - Algumas instituições publicam no diretório o logo da sua **marca de produto** (ex.: Banco CSF →
232
270
  cartão Atacadão). É a escolha oficial da própria instituição; se preferir outra arte no seu app,
233
271
  use um override local seu.
234
- - Instituições **sem** código COMPE (participantes só do Pix) ainda não entram — o naming por ISPB
235
- já foi desenhado para recebê-las sem breaking change (roadmap).
272
+ - Instituições em processo de **adesão** ao Pix (segunda seção da lista do BCB) e participantes
273
+ sem ISPB publicado (18 hoje) não entram — só participantes ativos com ISPB.
236
274
 
237
275
  ## Marcas e remoção
238
276