@br-validators/core 0.12.0-alpha.3 → 1.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 (180) hide show
  1. package/README.md +84 -12
  2. package/dist/bancos.d.ts +41 -0
  3. package/dist/bancos.js +3328 -0
  4. package/dist/bancos.js.map +1 -0
  5. package/dist/batch.d.ts +28 -0
  6. package/dist/batch.js +30 -0
  7. package/dist/batch.js.map +1 -0
  8. package/dist/boleto.d.ts +58 -5
  9. package/dist/boleto.js +6 -3
  10. package/dist/brcode.d.ts +15 -3
  11. package/dist/brcode.js +8 -8
  12. package/dist/cartao-credito.d.ts +2 -2
  13. package/dist/cartao-credito.js +3 -3
  14. package/dist/cep.d.ts +2 -2
  15. package/dist/cep.js +4 -4
  16. package/dist/{chunk-WPL47PWJ.js → chunk-3LMDBXU6.js} +3 -3
  17. package/dist/{chunk-WPL47PWJ.js.map → chunk-3LMDBXU6.js.map} +1 -1
  18. package/dist/chunk-4J5IMD7B.js +3 -0
  19. package/dist/chunk-4J5IMD7B.js.map +1 -0
  20. package/dist/{chunk-BFZPCEYB.js → chunk-54UWHK5L.js} +3 -3
  21. package/dist/{chunk-BFZPCEYB.js.map → chunk-54UWHK5L.js.map} +1 -1
  22. package/dist/chunk-5V6N4JWQ.js +135 -0
  23. package/dist/chunk-5V6N4JWQ.js.map +1 -0
  24. package/dist/{chunk-F6PTZY4O.js → chunk-63G7QO73.js} +3 -3
  25. package/dist/{chunk-F6PTZY4O.js.map → chunk-63G7QO73.js.map} +1 -1
  26. package/dist/{chunk-3QP6R46N.js → chunk-665E36SC.js} +4 -4
  27. package/dist/{chunk-3QP6R46N.js.map → chunk-665E36SC.js.map} +1 -1
  28. package/dist/{chunk-AK5GVYQ5.js → chunk-ANWQBKGN.js} +3 -3
  29. package/dist/{chunk-AK5GVYQ5.js.map → chunk-ANWQBKGN.js.map} +1 -1
  30. package/dist/{chunk-D36RM7OD.js → chunk-AO6UTQ4A.js} +3 -3
  31. package/dist/{chunk-D36RM7OD.js.map → chunk-AO6UTQ4A.js.map} +1 -1
  32. package/dist/chunk-ASQ2XIN2.js +99 -0
  33. package/dist/chunk-ASQ2XIN2.js.map +1 -0
  34. package/dist/chunk-AU6TW3GH.js +136 -0
  35. package/dist/chunk-AU6TW3GH.js.map +1 -0
  36. package/dist/{chunk-XW5G2RAL.js → chunk-B6A7VF4R.js} +3 -3
  37. package/dist/{chunk-XW5G2RAL.js.map → chunk-B6A7VF4R.js.map} +1 -1
  38. package/dist/{chunk-Q7B5VOPW.js → chunk-BA3FAVK4.js} +243 -37
  39. package/dist/chunk-BA3FAVK4.js.map +1 -0
  40. package/dist/{chunk-Y6IW2LMW.js → chunk-CDNOUZEI.js} +3 -3
  41. package/dist/{chunk-Y6IW2LMW.js.map → chunk-CDNOUZEI.js.map} +1 -1
  42. package/dist/{chunk-XUO7FV6Z.js → chunk-CSRBRKXY.js} +3 -3
  43. package/dist/{chunk-XUO7FV6Z.js.map → chunk-CSRBRKXY.js.map} +1 -1
  44. package/dist/{chunk-DJUANFIK.js → chunk-CSVGWTCG.js} +3 -3
  45. package/dist/{chunk-DJUANFIK.js.map → chunk-CSVGWTCG.js.map} +1 -1
  46. package/dist/chunk-E2EFGMWA.js +200 -0
  47. package/dist/chunk-E2EFGMWA.js.map +1 -0
  48. package/dist/chunk-EFEE6CMO.js +24091 -0
  49. package/dist/chunk-EFEE6CMO.js.map +1 -0
  50. package/dist/{chunk-KSLDM5AD.js → chunk-EVULAGR5.js} +3 -3
  51. package/dist/{chunk-KSLDM5AD.js.map → chunk-EVULAGR5.js.map} +1 -1
  52. package/dist/{chunk-YXELVV37.js → chunk-FBARVLLP.js} +4 -4
  53. package/dist/{chunk-YXELVV37.js.map → chunk-FBARVLLP.js.map} +1 -1
  54. package/dist/chunk-FOP5LO7W.js +131 -0
  55. package/dist/chunk-FOP5LO7W.js.map +1 -0
  56. package/dist/{chunk-MK7OJUF5.js → chunk-H3MLGGFI.js} +8 -8
  57. package/dist/{chunk-MK7OJUF5.js.map → chunk-H3MLGGFI.js.map} +1 -1
  58. package/dist/{chunk-WLE2ENQA.js → chunk-I66ZRSEN.js} +3 -3
  59. package/dist/{chunk-WLE2ENQA.js.map → chunk-I66ZRSEN.js.map} +1 -1
  60. package/dist/{chunk-GRDUTHNX.js → chunk-IYOPXJLY.js} +3 -3
  61. package/dist/{chunk-GRDUTHNX.js.map → chunk-IYOPXJLY.js.map} +1 -1
  62. package/dist/chunk-JCWQDTZB.js +41 -0
  63. package/dist/chunk-JCWQDTZB.js.map +1 -0
  64. package/dist/{chunk-4Y2FBO57.js → chunk-JKDU7QYP.js} +3 -3
  65. package/dist/{chunk-4Y2FBO57.js.map → chunk-JKDU7QYP.js.map} +1 -1
  66. package/dist/{chunk-KH7DWOUA.js → chunk-JLCQ7MGC.js} +3 -3
  67. package/dist/{chunk-KH7DWOUA.js.map → chunk-JLCQ7MGC.js.map} +1 -1
  68. package/dist/chunk-KBNWI6GE.js +3 -0
  69. package/dist/chunk-KBNWI6GE.js.map +1 -0
  70. package/dist/chunk-KLPONHBL.js +3 -0
  71. package/dist/chunk-KLPONHBL.js.map +1 -0
  72. package/dist/chunk-KTEQPYYN.js +31 -0
  73. package/dist/chunk-KTEQPYYN.js.map +1 -0
  74. package/dist/{chunk-CDGRHI7W.js → chunk-LAEUXOF6.js} +3 -3
  75. package/dist/{chunk-CDGRHI7W.js.map → chunk-LAEUXOF6.js.map} +1 -1
  76. package/dist/chunk-LRUZVPLR.js +93 -0
  77. package/dist/chunk-LRUZVPLR.js.map +1 -0
  78. package/dist/{chunk-ZAUZRIOU.js → chunk-MESOO5GZ.js} +3 -3
  79. package/dist/{chunk-ZAUZRIOU.js.map → chunk-MESOO5GZ.js.map} +1 -1
  80. package/dist/chunk-MKYCKCZ6.js +100 -0
  81. package/dist/chunk-MKYCKCZ6.js.map +1 -0
  82. package/dist/chunk-N5CER3QZ.js +128 -0
  83. package/dist/chunk-N5CER3QZ.js.map +1 -0
  84. package/dist/chunk-N6RQICAP.js +220 -0
  85. package/dist/chunk-N6RQICAP.js.map +1 -0
  86. package/dist/{chunk-MSLJF2FM.js → chunk-NUQSMT4Y.js} +2 -2
  87. package/dist/chunk-NUQSMT4Y.js.map +1 -0
  88. package/dist/{chunk-KQDLIGSG.js → chunk-P2KNN6ZR.js} +3 -3
  89. package/dist/{chunk-KQDLIGSG.js.map → chunk-P2KNN6ZR.js.map} +1 -1
  90. package/dist/{chunk-JZNTCZMV.js → chunk-PCP77SLS.js} +34 -18
  91. package/dist/chunk-PCP77SLS.js.map +1 -0
  92. package/dist/{chunk-G2Y63PIF.js → chunk-PNPESCSP.js} +3 -3
  93. package/dist/{chunk-G2Y63PIF.js.map → chunk-PNPESCSP.js.map} +1 -1
  94. package/dist/{chunk-LYBFUKHR.js → chunk-RMTHCPIV.js} +4 -4
  95. package/dist/{chunk-LYBFUKHR.js.map → chunk-RMTHCPIV.js.map} +1 -1
  96. package/dist/{chunk-2JJS46FM.js → chunk-TE6NSONR.js} +3 -3
  97. package/dist/{chunk-2JJS46FM.js.map → chunk-TE6NSONR.js.map} +1 -1
  98. package/dist/{chunk-NHLLC6WH.js → chunk-TJCE4TVX.js} +4 -4
  99. package/dist/{chunk-NHLLC6WH.js.map → chunk-TJCE4TVX.js.map} +1 -1
  100. package/dist/chunk-UCNPXHIJ.js +32 -0
  101. package/dist/chunk-UCNPXHIJ.js.map +1 -0
  102. package/dist/{chunk-WCQUQ2WX.js → chunk-V7UJ55KW.js} +47 -5
  103. package/dist/chunk-V7UJ55KW.js.map +1 -0
  104. package/dist/{chunk-IQGRFAQV.js → chunk-VSW3NBJQ.js} +3 -3
  105. package/dist/{chunk-IQGRFAQV.js.map → chunk-VSW3NBJQ.js.map} +1 -1
  106. package/dist/{chunk-6QJFMOIX.js → chunk-VWVQWN2G.js} +3 -3
  107. package/dist/{chunk-6QJFMOIX.js.map → chunk-VWVQWN2G.js.map} +1 -1
  108. package/dist/chunk-XADVBV73.js +30 -0
  109. package/dist/chunk-XADVBV73.js.map +1 -0
  110. package/dist/{chunk-FXLVNCG3.js → chunk-XWHGXSQV.js} +3 -3
  111. package/dist/{chunk-FXLVNCG3.js.map → chunk-XWHGXSQV.js.map} +1 -1
  112. package/dist/{chunk-G32U6YQ5.js → chunk-YD5MPZWY.js} +3 -3
  113. package/dist/{chunk-G32U6YQ5.js.map → chunk-YD5MPZWY.js.map} +1 -1
  114. package/dist/{chunk-US4OLTJ2.js → chunk-YNVMVDFN.js} +3 -3
  115. package/dist/{chunk-US4OLTJ2.js.map → chunk-YNVMVDFN.js.map} +1 -1
  116. package/dist/cnh.d.ts +2 -2
  117. package/dist/cnh.js +4 -4
  118. package/dist/cnpj.d.ts +2 -2
  119. package/dist/cnpj.js +5 -5
  120. package/dist/compare.d.ts +16 -0
  121. package/dist/compare.js +33 -0
  122. package/dist/compare.js.map +1 -0
  123. package/dist/cpf.d.ts +2 -2
  124. package/dist/cpf.js +4 -4
  125. package/dist/data-catalog.d.ts +14 -0
  126. package/dist/data-catalog.js +25 -0
  127. package/dist/data-catalog.js.map +1 -0
  128. package/dist/detect.d.ts +1 -1
  129. package/dist/detect.js +23 -20
  130. package/dist/diff.d.ts +16 -0
  131. package/dist/diff.js +33 -0
  132. package/dist/diff.js.map +1 -0
  133. package/dist/generate.d.ts +24 -3
  134. package/dist/generate.js +37 -27
  135. package/dist/ibge.d.ts +65 -0
  136. package/dist/ibge.js +28174 -0
  137. package/dist/ibge.js.map +1 -0
  138. package/dist/{index-CZLo9YOT.d.ts → index-BEJFgDXj.d.ts} +1 -1
  139. package/dist/index.d.ts +15 -9
  140. package/dist/index.js +61 -49
  141. package/dist/index.js.map +1 -1
  142. package/dist/{inscricao-estadual-produtor-rural-CfWUaggb.d.ts → inscricao-estadual-produtor-rural-BXFVQscj.d.ts} +1 -1
  143. package/dist/inscricao-estadual-produtor-rural.d.ts +2 -2
  144. package/dist/inscricao-estadual-produtor-rural.js +3 -3
  145. package/dist/inscricao-estadual.d.ts +3 -3
  146. package/dist/inscricao-estadual.js +4 -4
  147. package/dist/mask.d.ts +13 -0
  148. package/dist/mask.js +41 -0
  149. package/dist/mask.js.map +1 -0
  150. package/dist/nfe-chave.d.ts +2 -2
  151. package/dist/nfe-chave.js +4 -3
  152. package/dist/pis-pasep.d.ts +2 -2
  153. package/dist/pis-pasep.js +3 -3
  154. package/dist/{pix-ddldLlb7.d.ts → pix-B4habHLG.d.ts} +1 -1
  155. package/dist/pix.d.ts +2 -2
  156. package/dist/pix.js +9 -8
  157. package/dist/placa.d.ts +2 -2
  158. package/dist/placa.js +4 -4
  159. package/dist/renavam.d.ts +2 -2
  160. package/dist/renavam.js +4 -4
  161. package/dist/sanitize.d.ts +2 -2
  162. package/dist/sanitize.js +21 -17
  163. package/dist/telefone.d.ts +34 -3
  164. package/dist/telefone.js +4 -3
  165. package/dist/titulo-eleitor.d.ts +2 -2
  166. package/dist/titulo-eleitor.js +4 -4
  167. package/dist/types-CBIZxgfG.d.ts +28 -0
  168. package/dist/types-MXifBcV5.d.ts +10 -0
  169. package/dist/{validation-result-BhQE-1_O.d.ts → validation-result-BaI2Xder.d.ts} +24 -5
  170. package/package.json +36 -1
  171. package/dist/chunk-4W4OKLSZ.js +0 -366
  172. package/dist/chunk-4W4OKLSZ.js.map +0 -1
  173. package/dist/chunk-5UL3M7IU.js +0 -192
  174. package/dist/chunk-5UL3M7IU.js.map +0 -1
  175. package/dist/chunk-CSZCIOGA.js +0 -187
  176. package/dist/chunk-CSZCIOGA.js.map +0 -1
  177. package/dist/chunk-JZNTCZMV.js.map +0 -1
  178. package/dist/chunk-MSLJF2FM.js.map +0 -1
  179. package/dist/chunk-Q7B5VOPW.js.map +0 -1
  180. package/dist/chunk-WCQUQ2WX.js.map +0 -1
package/README.md CHANGED
@@ -25,10 +25,11 @@ Every Brazilian SaaS eventually reinvents CPF validation — usually wrong.
25
25
  (Receita Federal, Bacen, CONTRAN, TSE, SEFAZ, FEBRABAN, Anatel) so you don't have to.
26
26
 
27
27
  - ✅ **CNPJ alfanumérico** — new RFB format (effective July 2026), ready now
28
- - ✅ **18 document types** — CPF, CNPJ, CEP, NF-e chave, BR Code PIX, boleto, CNH, RENAVAM, placa, PIS/PASEP, PIX key, cartão de crédito, IE (27 UFs), IE produtor rural, título de eleitor, telefone, + platform APIs
28
+ - ✅ **18+ document types** — CPF, CNPJ, CEP, NF-e chave, BR Code PIX, boleto (cobrança + arrecadação), CNH, RENAVAM, placa, PIS/PASEP, PIX key, cartão de crédito, IE (27 UFs), IE produtor rural, título de eleitor, telefone, + platform APIs above
29
29
  - ✅ **Zero runtime dependencies** — pure TypeScript logic, no HTTP calls
30
30
  - ✅ **Never throws** — every function returns `{ ok: true, value } | { ok: false, message, code }`
31
31
  - ✅ **Tree-shakeable** — subpath imports per document type
32
+ - ✅ **Reference data** — IBGE, Bacen banks, DDD lookup with weekly freshness ([DATA-FRESHNESS.md](../../docs/DATA-FRESHNESS.md))
32
33
  - ✅ **ESM only**, Node ≥ 18, works in browser, Bun, Deno
33
34
 
34
35
  ---
@@ -93,9 +94,16 @@ generate('cnh');
93
94
  generate('inscricao-estadual', { uf: 'SP', seed: 42 });
94
95
  generate('titulo-eleitor', { uf: 'SC', seed: 42 });
95
96
  generate('cartao-credito', { brand: 'visa', seed: 42 });
97
+ generate('pix', { seed: 42 }); // EVP UUID — Bacen DICT
98
+ generate('nfe-chave', { seed: 42 }); // MOC §2.2.6 modulo-11 DV
99
+ generate('brcode', { seed: 42 }); // static PIX EMV + CRC16
100
+ generate('boleto', { masked: true }); // FEBRABAN cobrança Situação 1
101
+ generate('boleto-arrecadacao'); // FEBRABAN Layout v7
102
+ generate('inscricao-estadual-produtor-rural', { masked: true }); // SP SINTEGRA Bloco II
96
103
  ```
97
104
 
98
- > `generate()` is for test fixtures and seed data only — never use in production.
105
+ > `generate()` is for test fixtures and seed data only — never use in production.
106
+ > Alphanumeric CPF: `generate('cpf', { format: 'alphanumeric' })` throws `CPF_ALPHA_SPEC_PENDING` until RFB publishes the official algorithm ([OFFICIAL-SOURCES.md](https://github.com/AlexandreZanata/br-validators/blob/main/docs/OFFICIAL-SOURCES.md)).
99
107
 
100
108
  ### ETL / data cleanup
101
109
 
@@ -121,12 +129,66 @@ const result = validateNfeChave('52060433009911002506550120000007800267301615');
121
129
  ### BR Code (PIX QR payload)
122
130
 
123
131
  ```typescript
124
- import { validateBrCode, parseBrCode } from '@br-validators/core/brcode';
125
-
126
- parseBrCode('00020126580014br.gov.bcb.pix0136...');
132
+ import {
133
+ buildStaticPixBrCode,
134
+ parseBrCode,
135
+ validateBrCode,
136
+ } from '@br-validators/core/brcode';
137
+
138
+ // Permanent static QR (no amount — payer sets value at payment time)
139
+ const payload = buildStaticPixBrCode({
140
+ pixKey: 'pix@bcb.gov.br',
141
+ merchantName: 'Fulano de Tal',
142
+ merchantCity: 'BRASILIA',
143
+ });
144
+ validateBrCode(payload).ok; // true
145
+
146
+ // Fixed-value static QR
147
+ buildStaticPixBrCode({
148
+ pixKey: 'pix@bcb.gov.br',
149
+ merchantName: 'Fulano de Tal',
150
+ merchantCity: 'BRASILIA',
151
+ amount: '10.50',
152
+ });
153
+
154
+ parseBrCode(payload);
127
155
  // { ok: true, pixKey, pixKeyType, merchantName, merchantCity, amount, txid }
128
156
  ```
129
157
 
158
+ **Playground:** [doc-raiz-playground.vercel.app/pix](https://doc-raiz-playground.vercel.app/pix) renders the QR image from `buildStaticPixBrCode` output. Official sources: [Bacen Manual BR Code](https://www.bcb.gov.br/content/estabilidadefinanceira/spb_docs/ManualBRCode.pdf) · [Manual de Padrões PIX](https://www.bcb.gov.br/content/estabilidadefinanceira/pix/Regulamento_Pix/II_ManualdePadroesparaIniciacaodoPix.pdf).
159
+
160
+ ### Boleto — cobrança + arrecadação
161
+
162
+ ```typescript
163
+ import { validateBoleto, validateArrecadacao } from '@br-validators/core/boleto';
164
+
165
+ validateBoleto('03399.02579 08991.834006 71742.301014 6 14500000099668');
166
+ // cobrança Situação 1/2 — FEBRABAN FB-0061/2021
167
+
168
+ validateArrecadacao('846300000003812345678906123456789015234567890129');
169
+ // arrecadação 48-digit — FEBRABAN Layout v7
170
+ ```
171
+
172
+ ### Platform APIs — mask, compare, batch, diff
173
+
174
+ ```typescript
175
+ import { mask, compare, batch, diff } from '@br-validators/core';
176
+
177
+ mask('12345678909', 'cpf');
178
+ // { ok: true, formatted: '123.456.789-09' }
179
+
180
+ compare('123.456.789-09', '12345678909', 'cpf');
181
+ // { equal: true }
182
+
183
+ batch(['12345678909', 'invalid'], 'cpf');
184
+ // { valid: [...], invalid: [...], summary: { total: 2, valid: 1, invalid: 1 } }
185
+
186
+ diff('12345678909', '12345678901', 'cpf');
187
+ // { changed: true, fields: [{ field: 'dv', a: '09', b: '01' }] }
188
+ ```
189
+
190
+ Per-type rules and official sources: [docs/OFFICIAL-SOURCES.md](https://github.com/AlexandreZanata/br-validators/blob/main/docs/OFFICIAL-SOURCES.md) · API contract: [docs/LIBRARY-API.md](https://github.com/AlexandreZanata/br-validators/blob/main/docs/LIBRARY-API.md)
191
+
130
192
  ### Form handler (React / Next.js)
131
193
 
132
194
  ```typescript
@@ -156,8 +218,12 @@ br-validators cnpj validate "$CNPJ" --quiet || exit 1
156
218
  br-validators ie validate "$IE" --uf SP --json
157
219
  br-validators detect '123.456.789-09' --json
158
220
  br-validators generate cpf --seed 42 --masked
159
- br-validators generate inscricao-estadual --uf SP --seed 42
160
- br-validators generate cartao-credito --brand visa --seed 42
221
+ br-validators generate pix --seed 42
222
+ br-validators generate nfe-chave --seed 42
223
+ br-validators generate brcode --seed 42
224
+ br-validators generate boleto --masked --seed 42
225
+ br-validators generate boleto-arrecadacao --seed 42
226
+ br-validators generate inscricao-estadual-produtor-rural --masked --seed 42
161
227
  ```
162
228
 
163
229
  ---
@@ -176,15 +242,21 @@ br-validators generate cartao-credito --brand visa --seed 42
176
242
  | Placa (Mercosul + legada) | `@br-validators/core/placa` | `br-validators placa …` | `/placa` |
177
243
  | PIS / PASEP / NIS | `@br-validators/core/pis-pasep` | `br-validators pis-pasep …` | `/pis` |
178
244
  | PIX key | `@br-validators/core/pix` | `br-validators pix …` | `/pix` |
179
- | BR Code (PIX QR payload) | `@br-validators/core/brcode` | `br-validators brcode …` | `/brcode` |
180
- | Boleto (Situação 1 + 2) | `@br-validators/core/boleto` | `br-validators boleto …` | `/boleto` |
245
+ | BR Code (PIX QR payload + builder) | `@br-validators/core/brcode` | `br-validators brcode …` | `/brcode` |
246
+ | Boleto cobrança (Situação 1 + 2) | `@br-validators/core/boleto` | `br-validators boleto …` | `/boleto` |
247
+ | Boleto arrecadação (48/44) | `@br-validators/core/boleto` | `br-validators boleto …` | `/boleto` |
181
248
  | NF-e / NFC-e chave (44 digits) | `@br-validators/core/nfe-chave` | `br-validators nfe-chave …` | `/nfe-chave` |
182
249
  | Cartão de crédito (Luhn) | `@br-validators/core/cartao-credito` | `br-validators cartao …` | `/cartao-credito` |
183
250
  | Inscrição Estadual (27 UFs) | `@br-validators/core/inscricao-estadual` | `br-validators ie … --uf SP` | `/ie` |
184
- | IE Produtor Rural | `@br-validators/core/inscricao-estadual-produtor-rural` | `br-validators ie …` (auto-detect `P` prefix) | `/ie` |
251
+ | IE Produtor Rural | `@br-validators/core/inscricao-estadual-produtor-rural` | `br-validators ie …` (auto `P`) | `/ie` |
185
252
  | **detect()** | `@br-validators/core/detect` | `br-validators detect …` | `/detect` |
186
253
  | **sanitize()** | `@br-validators/core/sanitize` | `br-validators sanitize …` | `/sanitize` |
254
+ | **mask()** | `@br-validators/core/mask` | — | via per-type `format` |
255
+ | **compare()** | `@br-validators/core/compare` | — | — |
256
+ | **batch()** | `@br-validators/core/batch` | — | — |
257
+ | **diff()** | `@br-validators/core/diff` | — | — |
187
258
  | **generate()** | `@br-validators/core/generate` | `br-validators generate …` | `/generate` |
259
+ | **buildStaticPixBrCode()** | `@br-validators/core/brcode` | — | `/pix` (QR panel) |
188
260
 
189
261
  Full official sources per type: [docs/OFFICIAL-SOURCES.md](https://github.com/AlexandreZanata/br-validators/blob/main/docs/OFFICIAL-SOURCES.md)
190
262
 
@@ -207,8 +279,8 @@ import { parseNfeChave } from '@br-validators/core/nfe-chave';
207
279
  | Package | Status |
208
280
  |---|---|
209
281
  | [`@br-validators/cli`](https://www.npmjs.com/package/@br-validators/cli) | Published |
210
- | `@br-validators/zod` | Coming soon — Zod schemas |
211
- | `@br-validators/react-hook-form` | Coming soon — RHF resolvers |
282
+ | [`@br-validators/zod`](https://www.npmjs.com/package/@br-validators/zod) | Published — Zod 3/4 schemas |
283
+ | [`@br-validators/react-hook-form`](https://www.npmjs.com/package/@br-validators/react-hook-form) | Published — RHF resolvers |
212
284
 
213
285
  ---
214
286
 
@@ -0,0 +1,41 @@
1
+ import { b as DatasetChanges, c as DatasetVerification } from './types-CBIZxgfG.js';
2
+
3
+ interface Banco {
4
+ codigo: string;
5
+ ispb: string;
6
+ nome: string;
7
+ nomeReduzido: string;
8
+ participaCompe: boolean;
9
+ }
10
+ interface BancosDataVersion {
11
+ id: 'bancos';
12
+ nome: string;
13
+ fonte: string;
14
+ endpoints: string[];
15
+ capturadoEm: string;
16
+ atualizadoEm: string;
17
+ contagens: {
18
+ bancos: number;
19
+ };
20
+ alteracoes: DatasetChanges;
21
+ verificacao: DatasetVerification;
22
+ documentacao: string;
23
+ }
24
+
25
+ /**
26
+ * Bacen STR participant lookup — offline embedded data from official STR CSV.
27
+ * @see https://www.bcb.gov.br/content/estabilidadefinanceira/str1/ParticipantesSTR.csv
28
+ */
29
+
30
+ declare function getBancos(): readonly Banco[];
31
+ declare function getBancoPorCodigo(codigo: string): Banco | undefined;
32
+ declare function getBancoPorIspb(ispb: string): Banco | undefined;
33
+
34
+ declare const BANCOS_STR_URL = "https://www.bcb.gov.br/content/estabilidadefinanceira/str1/ParticipantesSTR.csv";
35
+ declare const BANCOS_GOLDEN_COMPE_BB = "001";
36
+ declare const BANCOS_GOLDEN_COMPE_ITAU = "341";
37
+ declare const BANCOS_GOLDEN_COMPE_NUBANK = "260";
38
+
39
+ declare const BANCOS_DATA_VERSION: BancosDataVersion;
40
+
41
+ export { BANCOS_DATA_VERSION, BANCOS_GOLDEN_COMPE_BB, BANCOS_GOLDEN_COMPE_ITAU, BANCOS_GOLDEN_COMPE_NUBANK, BANCOS_STR_URL, type Banco, type BancosDataVersion, getBancoPorCodigo, getBancoPorIspb, getBancos };