@br-validators/core 1.6.2 → 1.8.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 (293) hide show
  1. package/README.md +26 -7
  2. package/dist/aeroportos.d.ts +1 -1
  3. package/dist/anp-combustiveis.d.ts +64 -0
  4. package/dist/anp-combustiveis.js +37816 -0
  5. package/dist/anp-combustiveis.js.map +1 -0
  6. package/dist/bancos.d.ts +1 -1
  7. package/dist/batch.d.ts +3 -3
  8. package/dist/batch.js +30 -28
  9. package/dist/boleto.d.ts +2 -2
  10. package/dist/boleto.js +5 -5
  11. package/dist/brcode.d.ts +2 -2
  12. package/dist/brcode.js +9 -9
  13. package/dist/cartao-credito.d.ts +2 -2
  14. package/dist/cartao-credito.js +3 -3
  15. package/dist/cbo.d.ts +1 -1
  16. package/dist/cbo.js +1 -1
  17. package/dist/cep.d.ts +3 -3
  18. package/dist/cep.js +5 -5
  19. package/dist/cest.d.ts +1 -1
  20. package/dist/cest.js +1 -1
  21. package/dist/cfop.d.ts +1 -1
  22. package/dist/cfop.js +1 -1
  23. package/dist/{chunk-FX6JEBWO.js → chunk-26HMLR4Y.js} +3 -3
  24. package/dist/{chunk-FX6JEBWO.js.map → chunk-26HMLR4Y.js.map} +1 -1
  25. package/dist/{chunk-LPGSPM53.js → chunk-2EYJMAE2.js} +3 -3
  26. package/dist/{chunk-LPGSPM53.js.map → chunk-2EYJMAE2.js.map} +1 -1
  27. package/dist/{chunk-L3IKYN3J.js → chunk-2FQOQMS6.js} +7 -7
  28. package/dist/{chunk-L3IKYN3J.js.map → chunk-2FQOQMS6.js.map} +1 -1
  29. package/dist/{chunk-QZNAGWZB.js → chunk-2HD6TA3O.js} +4 -4
  30. package/dist/{chunk-QZNAGWZB.js.map → chunk-2HD6TA3O.js.map} +1 -1
  31. package/dist/chunk-2NSBFMTP.js +125 -0
  32. package/dist/chunk-2NSBFMTP.js.map +1 -0
  33. package/dist/{chunk-VDCITFZG.js → chunk-2ZWBFVYY.js} +3 -3
  34. package/dist/{chunk-VDCITFZG.js.map → chunk-2ZWBFVYY.js.map} +1 -1
  35. package/dist/{chunk-EGDZGSHA.js → chunk-3EVLQVBC.js} +3 -3
  36. package/dist/{chunk-EGDZGSHA.js.map → chunk-3EVLQVBC.js.map} +1 -1
  37. package/dist/{chunk-BA4I3QL5.js → chunk-3ZIXLRXZ.js} +4 -3
  38. package/dist/chunk-3ZIXLRXZ.js.map +1 -0
  39. package/dist/{chunk-BUZTJ3KC.js → chunk-47PZ7WGA.js} +23 -19
  40. package/dist/chunk-47PZ7WGA.js.map +1 -0
  41. package/dist/{chunk-ISMIJ5DH.js → chunk-4T2ZBJFM.js} +3 -3
  42. package/dist/{chunk-ISMIJ5DH.js.map → chunk-4T2ZBJFM.js.map} +1 -1
  43. package/dist/chunk-5AQKUZ6R.js +35 -0
  44. package/dist/chunk-5AQKUZ6R.js.map +1 -0
  45. package/dist/{chunk-F5OHOWZU.js → chunk-5I6WYO5R.js} +3 -3
  46. package/dist/{chunk-F5OHOWZU.js.map → chunk-5I6WYO5R.js.map} +1 -1
  47. package/dist/{chunk-Q5IK2DV4.js → chunk-6PODNJTJ.js} +4 -4
  48. package/dist/{chunk-Q5IK2DV4.js.map → chunk-6PODNJTJ.js.map} +1 -1
  49. package/dist/{chunk-UTSZKJAL.js → chunk-7EMUKPPG.js} +8 -8
  50. package/dist/{chunk-UTSZKJAL.js.map → chunk-7EMUKPPG.js.map} +1 -1
  51. package/dist/{chunk-ULNZHOMA.js → chunk-AG3VELYX.js} +5 -14
  52. package/dist/chunk-AG3VELYX.js.map +1 -0
  53. package/dist/{chunk-BKF6CKUK.js → chunk-BBKNHH72.js} +7 -7
  54. package/dist/{chunk-BKF6CKUK.js.map → chunk-BBKNHH72.js.map} +1 -1
  55. package/dist/{chunk-OZ2VAF7L.js → chunk-BBYLFHZZ.js} +5 -5
  56. package/dist/{chunk-OZ2VAF7L.js.map → chunk-BBYLFHZZ.js.map} +1 -1
  57. package/dist/chunk-BG72VA7O.js +33 -0
  58. package/dist/chunk-BG72VA7O.js.map +1 -0
  59. package/dist/{chunk-XSYO3MVO.js → chunk-BMIYI2TC.js} +7 -7
  60. package/dist/{chunk-XSYO3MVO.js.map → chunk-BMIYI2TC.js.map} +1 -1
  61. package/dist/{chunk-D5POEOY7.js → chunk-BNM3RSDY.js} +24 -19
  62. package/dist/chunk-BNM3RSDY.js.map +1 -0
  63. package/dist/{chunk-6VJAOYIG.js → chunk-BSNVQQTV.js} +25 -20
  64. package/dist/chunk-BSNVQQTV.js.map +1 -0
  65. package/dist/chunk-BSSRVJ2C.js +14 -0
  66. package/dist/chunk-BSSRVJ2C.js.map +1 -0
  67. package/dist/{chunk-WJ6M5YKH.js → chunk-CQQDYYFS.js} +5 -5
  68. package/dist/{chunk-WJ6M5YKH.js.map → chunk-CQQDYYFS.js.map} +1 -1
  69. package/dist/{chunk-2AFEQOCJ.js → chunk-DAX5PVBJ.js} +10 -8
  70. package/dist/chunk-DAX5PVBJ.js.map +1 -0
  71. package/dist/{chunk-HHYQ3GXP.js → chunk-DFPIMLGD.js} +7 -7
  72. package/dist/{chunk-HHYQ3GXP.js.map → chunk-DFPIMLGD.js.map} +1 -1
  73. package/dist/{chunk-YN4M6XL2.js → chunk-DH7N2ZS6.js} +7 -7
  74. package/dist/{chunk-YN4M6XL2.js.map → chunk-DH7N2ZS6.js.map} +1 -1
  75. package/dist/{chunk-MDFK6L72.js → chunk-DMUWIPJR.js} +3 -3
  76. package/dist/{chunk-MDFK6L72.js.map → chunk-DMUWIPJR.js.map} +1 -1
  77. package/dist/{chunk-G557DGIX.js → chunk-E2BVDZKJ.js} +3 -3
  78. package/dist/{chunk-G557DGIX.js.map → chunk-E2BVDZKJ.js.map} +1 -1
  79. package/dist/{chunk-6WHDXMTW.js → chunk-EDJC6HIP.js} +3 -3
  80. package/dist/{chunk-6WHDXMTW.js.map → chunk-EDJC6HIP.js.map} +1 -1
  81. package/dist/{chunk-4NFEM2SU.js → chunk-EMZCVV5Y.js} +9 -3
  82. package/dist/chunk-EMZCVV5Y.js.map +1 -0
  83. package/dist/chunk-FI2JE6AS.js +15 -0
  84. package/dist/chunk-FI2JE6AS.js.map +1 -0
  85. package/dist/{chunk-A5UHVGRB.js → chunk-G4YT6X7N.js} +4 -4
  86. package/dist/{chunk-A5UHVGRB.js.map → chunk-G4YT6X7N.js.map} +1 -1
  87. package/dist/chunk-G65WTGYO.js +31 -0
  88. package/dist/chunk-G65WTGYO.js.map +1 -0
  89. package/dist/{chunk-ZJQ7DRH4.js → chunk-GFYWUMYH.js} +5 -5
  90. package/dist/{chunk-ZJQ7DRH4.js.map → chunk-GFYWUMYH.js.map} +1 -1
  91. package/dist/chunk-HIWHBRFG.js +30 -0
  92. package/dist/chunk-HIWHBRFG.js.map +1 -0
  93. package/dist/{chunk-U5SLA2ZP.js → chunk-HSLV626U.js} +7 -7
  94. package/dist/{chunk-U5SLA2ZP.js.map → chunk-HSLV626U.js.map} +1 -1
  95. package/dist/{chunk-BDHKGP3S.js → chunk-J3QGK6MX.js} +33 -33
  96. package/dist/{chunk-BDHKGP3S.js.map → chunk-J3QGK6MX.js.map} +1 -1
  97. package/dist/{chunk-IHSOANVC.js → chunk-KTP26VPJ.js} +7 -7
  98. package/dist/{chunk-IHSOANVC.js.map → chunk-KTP26VPJ.js.map} +1 -1
  99. package/dist/{chunk-P3EJRH4P.js → chunk-LXB5FIAQ.js} +4 -4
  100. package/dist/{chunk-P3EJRH4P.js.map → chunk-LXB5FIAQ.js.map} +1 -1
  101. package/dist/{chunk-PDGAMTBR.js → chunk-M3RBXFYG.js} +39 -20
  102. package/dist/chunk-M3RBXFYG.js.map +1 -0
  103. package/dist/{chunk-3DLNIUBY.js → chunk-M6VUQK73.js} +5 -5
  104. package/dist/{chunk-3DLNIUBY.js.map → chunk-M6VUQK73.js.map} +1 -1
  105. package/dist/{chunk-5423O35D.js → chunk-MAJPROT7.js} +7 -7
  106. package/dist/{chunk-5423O35D.js.map → chunk-MAJPROT7.js.map} +1 -1
  107. package/dist/{chunk-RSJK46ZE.js → chunk-MLUDCL3P.js} +4 -4
  108. package/dist/{chunk-RSJK46ZE.js.map → chunk-MLUDCL3P.js.map} +1 -1
  109. package/dist/{chunk-4COFDYBY.js → chunk-MZZNNXAB.js} +27 -21
  110. package/dist/chunk-MZZNNXAB.js.map +1 -0
  111. package/dist/{chunk-DVA6QQUF.js → chunk-O3HZW2GM.js} +3 -3
  112. package/dist/{chunk-DVA6QQUF.js.map → chunk-O3HZW2GM.js.map} +1 -1
  113. package/dist/{chunk-CNJ4DIYS.js → chunk-O7RJQUAJ.js} +3 -3
  114. package/dist/{chunk-CNJ4DIYS.js.map → chunk-O7RJQUAJ.js.map} +1 -1
  115. package/dist/{chunk-IJ2DAVSD.js → chunk-OM5ELPM6.js} +3 -3
  116. package/dist/{chunk-IJ2DAVSD.js.map → chunk-OM5ELPM6.js.map} +1 -1
  117. package/dist/chunk-OPFCKUFX.js +31 -0
  118. package/dist/chunk-OPFCKUFX.js.map +1 -0
  119. package/dist/{chunk-2JSOXG2M.js → chunk-P37C3MVF.js} +3 -3
  120. package/dist/{chunk-2JSOXG2M.js.map → chunk-P37C3MVF.js.map} +1 -1
  121. package/dist/chunk-P5BDKYBC.js +3 -0
  122. package/dist/chunk-P5BDKYBC.js.map +1 -0
  123. package/dist/{chunk-LBAWZ4EV.js → chunk-PUTVO6HG.js} +4 -4
  124. package/dist/{chunk-LBAWZ4EV.js.map → chunk-PUTVO6HG.js.map} +1 -1
  125. package/dist/{chunk-26MSDS43.js → chunk-Q2CFVQ2U.js} +4 -4
  126. package/dist/{chunk-26MSDS43.js.map → chunk-Q2CFVQ2U.js.map} +1 -1
  127. package/dist/{chunk-24JBIV3A.js → chunk-QKAXRXU5.js} +4 -4
  128. package/dist/{chunk-24JBIV3A.js.map → chunk-QKAXRXU5.js.map} +1 -1
  129. package/dist/{chunk-OWD47AWI.js → chunk-QZPKTG4A.js} +3 -3
  130. package/dist/{chunk-OWD47AWI.js.map → chunk-QZPKTG4A.js.map} +1 -1
  131. package/dist/{chunk-FLZGOGER.js → chunk-RNI5G42M.js} +4 -4
  132. package/dist/{chunk-FLZGOGER.js.map → chunk-RNI5G42M.js.map} +1 -1
  133. package/dist/{chunk-72EZ2VUO.js → chunk-ROU5ZHN7.js} +4 -4
  134. package/dist/{chunk-72EZ2VUO.js.map → chunk-ROU5ZHN7.js.map} +1 -1
  135. package/dist/{chunk-SH6K4PUU.js → chunk-RP5UWF2G.js} +3 -3
  136. package/dist/{chunk-SH6K4PUU.js.map → chunk-RP5UWF2G.js.map} +1 -1
  137. package/dist/{chunk-AED7KSBM.js → chunk-RRG2HJMY.js} +6 -6
  138. package/dist/{chunk-AED7KSBM.js.map → chunk-RRG2HJMY.js.map} +1 -1
  139. package/dist/{chunk-PR7NSNQG.js → chunk-RY2BSDOR.js} +4 -4
  140. package/dist/{chunk-PR7NSNQG.js.map → chunk-RY2BSDOR.js.map} +1 -1
  141. package/dist/{chunk-QSSKPIG5.js → chunk-SIMI5XYE.js} +3 -3
  142. package/dist/{chunk-QSSKPIG5.js.map → chunk-SIMI5XYE.js.map} +1 -1
  143. package/dist/{chunk-TTDHGQEC.js → chunk-SQO7BO3Y.js} +3 -3
  144. package/dist/{chunk-TTDHGQEC.js.map → chunk-SQO7BO3Y.js.map} +1 -1
  145. package/dist/{chunk-T5NFIPTU.js → chunk-SXPLYH4N.js} +3 -3
  146. package/dist/{chunk-T5NFIPTU.js.map → chunk-SXPLYH4N.js.map} +1 -1
  147. package/dist/{chunk-EEFQYVLF.js → chunk-UANHHEWY.js} +4 -4
  148. package/dist/{chunk-EEFQYVLF.js.map → chunk-UANHHEWY.js.map} +1 -1
  149. package/dist/{chunk-MF47DACR.js → chunk-UGSA7FSW.js} +7 -7
  150. package/dist/{chunk-MF47DACR.js.map → chunk-UGSA7FSW.js.map} +1 -1
  151. package/dist/{chunk-TAOFFAG3.js → chunk-UJXGDUKJ.js} +3 -3
  152. package/dist/{chunk-TAOFFAG3.js.map → chunk-UJXGDUKJ.js.map} +1 -1
  153. package/dist/chunk-VXHJLWMA.js +115 -0
  154. package/dist/chunk-VXHJLWMA.js.map +1 -0
  155. package/dist/chunk-W64OQYC4.js +13 -0
  156. package/dist/chunk-W64OQYC4.js.map +1 -0
  157. package/dist/{chunk-C7WXL7UR.js → chunk-WAVBQYPE.js} +4 -4
  158. package/dist/{chunk-C7WXL7UR.js.map → chunk-WAVBQYPE.js.map} +1 -1
  159. package/dist/{chunk-CYBWPBXJ.js → chunk-WE6RG6OC.js} +4 -4
  160. package/dist/{chunk-CYBWPBXJ.js.map → chunk-WE6RG6OC.js.map} +1 -1
  161. package/dist/{chunk-Z7KH65RZ.js → chunk-WKDCI3NI.js} +3 -3
  162. package/dist/{chunk-Z7KH65RZ.js.map → chunk-WKDCI3NI.js.map} +1 -1
  163. package/dist/chunk-XFKSJRWM.js +14 -0
  164. package/dist/chunk-XFKSJRWM.js.map +1 -0
  165. package/dist/chunk-XHHJTKSP.js +33 -0
  166. package/dist/chunk-XHHJTKSP.js.map +1 -0
  167. package/dist/chunk-XVT5QOAL.js +30 -0
  168. package/dist/chunk-XVT5QOAL.js.map +1 -0
  169. package/dist/{chunk-VE2XZSKP.js → chunk-YA7RWTAE.js} +3 -3
  170. package/dist/{chunk-VE2XZSKP.js.map → chunk-YA7RWTAE.js.map} +1 -1
  171. package/dist/chunk-YAHKWOSP.js +35 -0
  172. package/dist/chunk-YAHKWOSP.js.map +1 -0
  173. package/dist/{chunk-G4OYYXVP.js → chunk-YJBKWUCE.js} +4 -3
  174. package/dist/chunk-YJBKWUCE.js.map +1 -0
  175. package/dist/cnaes.d.ts +4 -2
  176. package/dist/cnaes.js +3 -2
  177. package/dist/cnaes.js.map +1 -1
  178. package/dist/cnh.d.ts +2 -2
  179. package/dist/cnh.js +5 -5
  180. package/dist/cnis.d.ts +50 -0
  181. package/dist/cnis.js +7 -0
  182. package/dist/cnis.js.map +1 -0
  183. package/dist/cnpj-motivos.d.ts +52 -0
  184. package/dist/cnpj-motivos.js +292 -0
  185. package/dist/cnpj-motivos.js.map +1 -0
  186. package/dist/cnpj.d.ts +2 -2
  187. package/dist/cnpj.js +5 -5
  188. package/dist/compare.d.ts +3 -3
  189. package/dist/compare.js +32 -30
  190. package/dist/cpf.d.ts +2 -2
  191. package/dist/cpf.js +5 -5
  192. package/dist/cst.d.ts +73 -0
  193. package/dist/cst.js +482 -0
  194. package/dist/cst.js.map +1 -0
  195. package/dist/data-catalog.d.ts +2 -2
  196. package/dist/data-catalog.js +45 -29
  197. package/dist/data-catalog.js.map +1 -1
  198. package/dist/detect.d.ts +2 -2
  199. package/dist/detect.js +28 -26
  200. package/dist/diff.d.ts +3 -3
  201. package/dist/diff.js +32 -30
  202. package/dist/ean.d.ts +43 -0
  203. package/dist/ean.js +6 -0
  204. package/dist/ean.js.map +1 -0
  205. package/dist/esocial.d.ts +45 -0
  206. package/dist/esocial.js +387 -0
  207. package/dist/esocial.js.map +1 -0
  208. package/dist/feriados.d.ts +1 -1
  209. package/dist/generate.d.ts +1 -1
  210. package/dist/generate.js +41 -39
  211. package/dist/ibge.d.ts +34 -2
  212. package/dist/ibge.js +109 -1
  213. package/dist/ibge.js.map +1 -1
  214. package/dist/ibpt.d.ts +74 -0
  215. package/dist/ibpt.js +166 -0
  216. package/dist/ibpt.js.map +1 -0
  217. package/dist/incoterms.d.ts +1 -1
  218. package/dist/incoterms.js +1 -1
  219. package/dist/{index-CJ5ACErT.d.ts → index-BmoilwS2.d.ts} +2 -2
  220. package/dist/index.d.ts +11 -9
  221. package/dist/index.js +77 -67
  222. package/dist/index.js.map +1 -1
  223. package/dist/{inscricao-estadual-produtor-rural-BNAyLQPY.d.ts → inscricao-estadual-produtor-rural-Hfq6jN1n.d.ts} +1 -1
  224. package/dist/inscricao-estadual-produtor-rural.d.ts +2 -2
  225. package/dist/inscricao-estadual-produtor-rural.js +3 -3
  226. package/dist/inscricao-estadual.d.ts +3 -3
  227. package/dist/inscricao-estadual.js +4 -4
  228. package/dist/lc116.d.ts +42 -0
  229. package/dist/lc116.js +866 -0
  230. package/dist/lc116.js.map +1 -0
  231. package/dist/mask.d.ts +3 -3
  232. package/dist/mask.js +44 -40
  233. package/dist/moedas.d.ts +1 -1
  234. package/dist/moedas.js +1 -1
  235. package/dist/natureza-juridica.d.ts +1 -1
  236. package/dist/natureza-juridica.js +1 -1
  237. package/dist/nbs.d.ts +1 -1
  238. package/dist/nbs.js +1 -1
  239. package/dist/ncm.d.ts +1 -1
  240. package/dist/ncm.js +1 -1
  241. package/dist/nfe-chave.d.ts +2 -2
  242. package/dist/nfe-chave.js +3 -3
  243. package/dist/paises-bacen.d.ts +1 -1
  244. package/dist/paises-bacen.js +1 -1
  245. package/dist/pis-pasep.d.ts +2 -2
  246. package/dist/pis-pasep.js +5 -3
  247. package/dist/{pix-QsM0lMas.d.ts → pix-BcPQzXRx.d.ts} +1 -1
  248. package/dist/pix.d.ts +2 -2
  249. package/dist/pix.js +9 -9
  250. package/dist/placa.d.ts +2 -2
  251. package/dist/placa.js +4 -4
  252. package/dist/pncp-reference.d.ts +1 -1
  253. package/dist/pncp-reference.js +1 -1
  254. package/dist/portos.d.ts +1 -1
  255. package/dist/portos.js +1 -1
  256. package/dist/processo-judicial.d.ts +2 -2
  257. package/dist/processo-judicial.js +3 -3
  258. package/dist/ptax.d.ts +53 -0
  259. package/dist/ptax.js +485 -0
  260. package/dist/ptax.js.map +1 -0
  261. package/dist/renavam.d.ts +2 -2
  262. package/dist/renavam.js +5 -5
  263. package/dist/rg.d.ts +2 -2
  264. package/dist/rg.js +2 -2
  265. package/dist/sanitize.d.ts +2 -2
  266. package/dist/sanitize.js +27 -25
  267. package/dist/simples-nacional.d.ts +67 -0
  268. package/dist/simples-nacional.js +178 -0
  269. package/dist/simples-nacional.js.map +1 -0
  270. package/dist/telefone.d.ts +3 -3
  271. package/dist/telefone.js +4 -4
  272. package/dist/titulo-eleitor.d.ts +2 -2
  273. package/dist/titulo-eleitor.js +5 -5
  274. package/dist/transparencia-snapshots.d.ts +1 -1
  275. package/dist/transparencia-snapshots.js +3 -3
  276. package/dist/transparencia-snapshots.js.map +1 -1
  277. package/dist/tse-municipios.d.ts +1 -1
  278. package/dist/{types-CCKLomYy.d.ts → types-CnePu8im.d.ts} +1 -1
  279. package/dist/{types-CQvCmvGu.d.ts → types-DTtrW1Km.d.ts} +2 -2
  280. package/dist/{validation-result-hfVg2-Mc.d.ts → validation-result-Rb7C0_xj.d.ts} +30 -2
  281. package/package.json +52 -2
  282. package/dist/chunk-2AFEQOCJ.js.map +0 -1
  283. package/dist/chunk-4COFDYBY.js.map +0 -1
  284. package/dist/chunk-4NFEM2SU.js.map +0 -1
  285. package/dist/chunk-6VJAOYIG.js.map +0 -1
  286. package/dist/chunk-BA4I3QL5.js.map +0 -1
  287. package/dist/chunk-BUZTJ3KC.js.map +0 -1
  288. package/dist/chunk-D5POEOY7.js.map +0 -1
  289. package/dist/chunk-G4OYYXVP.js.map +0 -1
  290. package/dist/chunk-PDGAMTBR.js.map +0 -1
  291. package/dist/chunk-ULNZHOMA.js.map +0 -1
  292. package/dist/chunk-WAYYRZ2L.js +0 -23
  293. package/dist/chunk-WAYYRZ2L.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/core/boleto/fator-vencimento.ts","../src/core/boleto/valor-documento.ts","../src/core/boleto/semantic.ts","../src/core/boleto/index.ts"],"names":["failure"],"mappings":"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","file":"chunk-3DLNIUBY.js","sourcesContent":["/**\n * Due-date factor semantic validation (Situação 1 only).\n * @see BR-BOLETO-012\n */\nimport type { ValidationErrorCode } from '../../types/validation-result.js';\n\nconst FATOR_MIN = 1;\n/** FEBRABAN factor space; values above this fail optional semantic validation. */\nconst FATOR_SEMANTIC_MAX = 9997;\n\nexport type FatorVencimentoValidationResult =\n | { ok: true; factor: string; hasDueDate: boolean }\n | { ok: false; code: ValidationErrorCode; message: string };\n\nexport function validateFatorVencimento(factor: string): FatorVencimentoValidationResult {\n if (!/^\\d{4}$/.test(factor)) {\n return {\n ok: false,\n code: 'INVALID_LENGTH',\n message: 'Due-date factor must have exactly 4 digits',\n };\n }\n\n if (factor === '0000') {\n return { ok: true, factor, hasDueDate: false };\n }\n\n const days = Number(factor);\n if (days < FATOR_MIN || days > FATOR_SEMANTIC_MAX) {\n return {\n ok: false,\n code: 'UNSUPPORTED_FORMAT',\n message: 'Due-date factor is out of the supported range',\n };\n }\n\n return { ok: true, factor, hasDueDate: true };\n}\n","/**\n * Document amount semantic validation (Situação 1 only).\n * @see BR-BOLETO-013\n */\nimport type { ValidationErrorCode } from '../../types/validation-result.js';\n\nexport type ValorDocumentoValidationResult =\n | { ok: true; amountCents: number }\n | { ok: false; code: ValidationErrorCode; message: string };\n\nexport function validateValorDocumento(value: string): ValorDocumentoValidationResult {\n if (!/^\\d{10}$/.test(value)) {\n return {\n ok: false,\n code: 'INVALID_LENGTH',\n message: 'Document amount must have exactly 10 digits (centavos)',\n };\n }\n\n return { ok: true, amountCents: Number(value) };\n}\n","/**\n * Optional semantic checks for Situação 1 cobrança fields.\n * @see BR-BOLETO-012, BR-BOLETO-013\n */\nimport type { BoletoInputKind, BoletoValidationResult } from '../../types/validation-result.js';\nimport { detectBoletoSituacao } from './detect-situacao.js';\nimport { validateFatorVencimento } from './fator-vencimento.js';\nimport { validateValorDocumento } from './valor-documento.js';\n\nexport type SemanticValidationOptions = {\n validateDueFactor?: boolean;\n validateAmount?: boolean;\n};\n\ntype FailedResult = Extract<BoletoValidationResult, { ok: false }>;\n\nfunction failure(code: FailedResult['code'], message: string, inputKind: BoletoInputKind): FailedResult {\n return { ok: false, code, message, inputKind };\n}\n\nexport function validateSemanticFields(\n barcode: string,\n options: SemanticValidationOptions,\n inputKind: BoletoInputKind,\n): FailedResult | null {\n if (detectBoletoSituacao(barcode) !== 'situacao-1') {\n return null;\n }\n\n if (options.validateDueFactor) {\n const factorResult = validateFatorVencimento(barcode.slice(5, 9));\n if (!factorResult.ok) {\n return failure(factorResult.code, factorResult.message, inputKind);\n }\n }\n\n if (options.validateAmount && detectBoletoSituacao(barcode) === 'situacao-1') {\n validateValorDocumento(barcode.slice(9, 19));\n }\n\n return null;\n}\n","/**\n * Boleto validation — linha digitável + código de barras (FEBRABAN cobrança).\n * @see docs/use-cases/UC-007-validate-boleto.md\n */\nimport type { BoletoInputKind, BoletoValidationResult } from '../../types/validation-result.js';\nimport { brandCodigoBarras, brandLinhaDigitavel } from '../../types/validation-result.js';\nimport { validateCodigoBarras } from './codigo-barras.js';\nimport {\n convertCodigoBarrasToLinhaDigits,\n convertLinhaToCodigoBarrasDigits,\n} from './convert.js';\nimport { detectBoletoInputKind } from './detect.js';\nimport { validateLinhaDigitavel } from './linha-digitavel.js';\nimport { validateSemanticFields } from './semantic.js';\nimport { validateArrecadacao } from './arrecadacao.js';\n\nexport {\n BOLETO_CODIGO_BARRAS_LENGTH,\n BOLETO_CODE_ISPB_HOLDER,\n BOLETO_CURRENCY_ISPB,\n BOLETO_CURRENCY_REAL,\n BOLETO_GOLDEN_CODIGO_BARRAS,\n BOLETO_GOLDEN_CODIGO_BARRAS_BB,\n BOLETO_GOLDEN_CODIGO_BARRAS_SITUACAO2,\n BOLETO_GOLDEN_LINHA_BB_STRIPPED,\n BOLETO_GOLDEN_LINHA_MASKED,\n BOLETO_GOLDEN_LINHA_SITUACAO2_STRIPPED,\n BOLETO_GOLDEN_LINHA_STRIPPED,\n BOLETO_LAYOUTS_PORTAL_URL,\n BOLETO_LINHA_LENGTH,\n BOLETO_OFFICIAL_SOURCE_URL,\n BOLETO_ARRECADACAO_LINHA_LENGTH,\n BOLETO_ARRECADACAO_CODIGO_BARRAS_LENGTH,\n BOLETO_ARRECADACAO_PRODUCT_ID,\n BOLETO_ARRECADACAO_OFFICIAL_SOURCE_URL,\n} from './constants.js';\nexport { computeModulo10FieldDv } from './modulo10.js';\nexport { computeModulo11BarcodeDv } from './modulo11.js';\nexport { detectBoletoInputKind, type DetectedBoletoInputKind } from './detect.js';\nexport {\n detectBoletoSituacao,\n toBoletoSituacaoCode,\n type BoletoSituacaoCode,\n type BoletoSituacaoKind,\n} from './detect-situacao.js';\nexport {\n convertCodigoBarrasToLinhaDigits,\n convertLinhaToCodigoBarrasDigits,\n} from './convert.js';\nexport {\n formatLinhaDigitavel,\n stripLinhaDigitavel,\n validateLinhaDigitavel,\n} from './linha-digitavel.js';\nexport { applyLinhaDigitavelMask } from './mask.js';\nexport { stripCodigoBarras, validateCodigoBarras } from './codigo-barras.js';\nexport { validateFatorVencimento, type FatorVencimentoValidationResult } from './fator-vencimento.js';\nexport { validateValorDocumento, type ValorDocumentoValidationResult } from './valor-documento.js';\nexport { validateSemanticFields } from './semantic.js';\nexport {\n buildArrecadacaoGoldenPair,\n isValidArrecadacao,\n linhaArrecadacaoToCodigoBarras,\n stripArrecadacao,\n validateArrecadacao,\n validateArrecadacaoCodigoBarras,\n validateArrecadacaoLinha,\n} from './arrecadacao.js';\nexport type { ArrecadacaoInputKind, ArrecadacaoValidationResult } from './arrecadacao.js';\nexport {\n computeArrecadacaoModulo10Dv,\n computeArrecadacaoModulo11Dv,\n getArrecadacaoDvCalculator,\n isArrecadacaoValueType,\n} from './arrecadacao-modulo.js';\nexport type { ArrecadacaoValueType } from './arrecadacao-modulo.js';\n\nexport type ValidateBoletoOptions = {\n kind?: BoletoInputKind;\n validateDueFactor?: boolean;\n validateAmount?: boolean;\n};\n\ntype FailedResult = Extract<BoletoValidationResult, { ok: false }>;\n\nfunction failure(code: FailedResult['code'], message: string, inputKind?: BoletoInputKind): FailedResult {\n return { ok: false, code, message, ...(inputKind ? { inputKind } : {}) };\n}\n\nfunction validateByKind(input: string, kind: BoletoInputKind, options?: ValidateBoletoOptions): BoletoValidationResult {\n const result = kind === 'linha-digitavel' ? validateLinhaDigitavel(input) : validateCodigoBarras(input);\n if (!result.ok) {\n return result;\n }\n\n const barcode =\n kind === 'linha-digitavel'\n ? convertLinhaToCodigoBarrasDigits(result.value)\n : result.value;\n\n const semanticError = validateSemanticFields(barcode, options ?? {}, kind);\n if (semanticError) {\n return semanticError;\n }\n\n return result;\n}\n\nexport function isValidBoleto(input: string, options?: ValidateBoletoOptions): boolean {\n return validateBoleto(input, options).ok;\n}\n\nexport function validateBoleto(input: string, options?: ValidateBoletoOptions): BoletoValidationResult {\n const trimmed = input.trim();\n if (trimmed.length === 0) {\n return failure('EMPTY_INPUT', 'Boleto input is empty');\n }\n\n const detected = detectBoletoInputKind(trimmed);\n\n if (detected === 'arrecadacao') {\n return validateArrecadacao(trimmed);\n }\n\n if (options?.kind !== undefined) {\n if (detected !== 'unknown' && detected !== options.kind) {\n return failure(\n 'UNSUPPORTED_FORMAT',\n `Boleto detected as ${detected} but forced kind is ${options.kind}`,\n options.kind,\n );\n }\n return validateByKind(trimmed, options.kind, options);\n }\n\n if (detected === 'unknown') {\n return failure('UNSUPPORTED_FORMAT', 'Boleto input kind could not be determined');\n }\n\n return validateByKind(trimmed, detected, options);\n}\n\nexport function convertLinhaToCodigoBarras(input: string): BoletoValidationResult {\n const result = validateLinhaDigitavel(input);\n if (!result.ok) {\n return result;\n }\n const barcode = convertLinhaToCodigoBarrasDigits(result.value);\n return {\n ok: true,\n value: brandCodigoBarras(barcode),\n inputKind: 'codigo-barras',\n format: 'codigo-barras',\n situacao: result.situacao,\n };\n}\n\nexport function convertCodigoBarrasToLinhaDigitavel(input: string): BoletoValidationResult {\n const result = validateCodigoBarras(input);\n if (!result.ok) {\n return result;\n }\n const linha = convertCodigoBarrasToLinhaDigits(result.value);\n return {\n ok: true,\n value: brandLinhaDigitavel(linha),\n inputKind: 'linha-digitavel',\n format: 'linha-digitavel',\n situacao: result.situacao,\n };\n}\n"]}
1
+ {"version":3,"sources":["../src/core/boleto/fator-vencimento.ts","../src/core/boleto/valor-documento.ts","../src/core/boleto/semantic.ts","../src/core/boleto/index.ts"],"names":["failure"],"mappings":";;;;;AAMA,IAAM,SAAA,GAAY,CAAA;AAElB,IAAM,kBAAA,GAAqB,IAAA;AAMpB,SAAS,wBAAwB,MAAA,EAAiD;AACvF,EAAA,IAAI,CAAC,SAAA,CAAU,IAAA,CAAK,MAAM,CAAA,EAAG;AAC3B,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,KAAA;AAAA,MACJ,IAAA,EAAM,gBAAA;AAAA,MACN,OAAA,EAAS;AAAA,KACX;AAAA,EACF;AAEA,EAAA,IAAI,WAAW,MAAA,EAAQ;AACrB,IAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,MAAA,EAAQ,YAAY,KAAA,EAAM;AAAA,EAC/C;AAEA,EAAA,MAAM,IAAA,GAAO,OAAO,MAAM,CAAA;AAC1B,EAAA,IAAI,IAAA,GAAO,SAAA,IAAa,IAAA,GAAO,kBAAA,EAAoB;AACjD,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,KAAA;AAAA,MACJ,IAAA,EAAM,oBAAA;AAAA,MACN,OAAA,EAAS;AAAA,KACX;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,MAAA,EAAQ,YAAY,IAAA,EAAK;AAC9C;;;AC3BO,SAAS,uBAAuB,KAAA,EAA+C;AACpF,EAAA,IAAI,CAAC,UAAA,CAAW,IAAA,CAAK,KAAK,CAAA,EAAG;AAC3B,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,KAAA;AAAA,MACJ,IAAA,EAAM,gBAAA;AAAA,MACN,OAAA,EAAS;AAAA,KACX;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,WAAA,EAAa,MAAA,CAAO,KAAK,CAAA,EAAE;AAChD;;;ACJA,SAAS,OAAA,CAAQ,IAAA,EAA4B,OAAA,EAAiB,SAAA,EAA0C;AACtG,EAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,IAAA,EAAM,SAAS,SAAA,EAAU;AAC/C;AAEO,SAAS,sBAAA,CACd,OAAA,EACA,OAAA,EACA,SAAA,EACqB;AACrB,EAAA,IAAI,oBAAA,CAAqB,OAAO,CAAA,KAAM,YAAA,EAAc;AAClD,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,QAAQ,iBAAA,EAAmB;AAC7B,IAAA,MAAM,eAAe,uBAAA,CAAwB,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA;AAChE,IAAA,IAAI,CAAC,aAAa,EAAA,EAAI;AACpB,MAAA,OAAO,OAAA,CAAQ,YAAA,CAAa,IAAA,EAAM,YAAA,CAAa,SAAS,SAAS,CAAA;AAAA,IACnE;AAAA,EACF;AAEA,EAAA,IAAI,OAAA,CAAQ,cAAA,IAAkB,oBAAA,CAAqB,OAAO,MAAM,YAAA,EAAc;AAC5E,IAAA,sBAAA,CAAuB,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA;AAAA,EAC7C;AAEA,EAAA,OAAO,IAAA;AACT;;;AC4CA,SAASA,QAAAA,CAAQ,IAAA,EAA4B,OAAA,EAAiB,SAAA,EAA2C;AACvG,EAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,IAAA,EAAM,OAAA,EAAS,GAAI,SAAA,GAAY,EAAE,SAAA,EAAU,GAAI,EAAC,EAAG;AACzE;AAEA,SAAS,cAAA,CAAe,KAAA,EAAe,IAAA,EAAuB,OAAA,EAAyD;AACrH,EAAA,MAAM,SAAS,IAAA,KAAS,iBAAA,GAAoB,uBAAuB,KAAK,CAAA,GAAI,qBAAqB,KAAK,CAAA;AACtG,EAAA,IAAI,CAAC,OAAO,EAAA,EAAI;AACd,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM,UACJ,IAAA,KAAS,iBAAA,GACL,iCAAiC,MAAA,CAAO,KAAK,IAC7C,MAAA,CAAO,KAAA;AAEb,EAAA,MAAM,gBAAgB,sBAAA,CAAuB,OAAA,EAAS,OAAA,IAAW,IAAI,IAAI,CAAA;AACzE,EAAA,IAAI,aAAA,EAAe;AACjB,IAAA,OAAO,aAAA;AAAA,EACT;AAEA,EAAA,OAAO,MAAA;AACT;AAEO,SAAS,aAAA,CAAc,OAAe,OAAA,EAA0C;AACrF,EAAA,OAAO,cAAA,CAAe,KAAA,EAAO,OAAO,CAAA,CAAE,EAAA;AACxC;AAEO,SAAS,cAAA,CAAe,OAAe,OAAA,EAAyD;AACrG,EAAA,MAAM,OAAA,GAAU,MAAM,IAAA,EAAK;AAC3B,EAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,IAAA,OAAOA,QAAAA,CAAQ,eAAe,uBAAuB,CAAA;AAAA,EACvD;AAEA,EAAA,MAAM,QAAA,GAAW,sBAAsB,OAAO,CAAA;AAE9C,EAAA,IAAI,aAAa,aAAA,EAAe;AAC9B,IAAA,OAAO,oBAAoB,OAAO,CAAA;AAAA,EACpC;AAEA,EAAA,IAAI,OAAA,EAAS,SAAS,MAAA,EAAW;AAC/B,IAAA,IAAI,QAAA,KAAa,SAAA,IAAa,QAAA,KAAa,OAAA,CAAQ,IAAA,EAAM;AACvD,MAAA,OAAOA,QAAAA;AAAA,QACL,oBAAA;AAAA,QACA,CAAA,mBAAA,EAAsB,QAAQ,CAAA,oBAAA,EAAuB,OAAA,CAAQ,IAAI,CAAA,CAAA;AAAA,QACjE,OAAA,CAAQ;AAAA,OACV;AAAA,IACF;AACA,IAAA,OAAO,cAAA,CAAe,OAAA,EAAS,OAAA,CAAQ,IAAA,EAAM,OAAO,CAAA;AAAA,EACtD;AAEA,EAAA,IAAI,aAAa,SAAA,EAAW;AAC1B,IAAA,OAAOA,QAAAA,CAAQ,sBAAsB,2CAA2C,CAAA;AAAA,EAClF;AAEA,EAAA,OAAO,cAAA,CAAe,OAAA,EAAS,QAAA,EAAU,OAAO,CAAA;AAClD;AAEO,SAAS,2BAA2B,KAAA,EAAuC;AAChF,EAAA,MAAM,MAAA,GAAS,uBAAuB,KAAK,CAAA;AAC3C,EAAA,IAAI,CAAC,OAAO,EAAA,EAAI;AACd,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,MAAM,OAAA,GAAU,gCAAA,CAAiC,MAAA,CAAO,KAAK,CAAA;AAC7D,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,IAAA;AAAA,IACJ,KAAA,EAAO,kBAAkB,OAAO,CAAA;AAAA,IAChC,SAAA,EAAW,eAAA;AAAA,IACX,MAAA,EAAQ,eAAA;AAAA,IACR,UAAU,MAAA,CAAO;AAAA,GACnB;AACF;AAEO,SAAS,oCAAoC,KAAA,EAAuC;AACzF,EAAA,MAAM,MAAA,GAAS,qBAAqB,KAAK,CAAA;AACzC,EAAA,IAAI,CAAC,OAAO,EAAA,EAAI;AACd,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,MAAM,KAAA,GAAQ,gCAAA,CAAiC,MAAA,CAAO,KAAK,CAAA;AAC3D,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,IAAA;AAAA,IACJ,KAAA,EAAO,oBAAoB,KAAK,CAAA;AAAA,IAChC,SAAA,EAAW,iBAAA;AAAA,IACX,MAAA,EAAQ,iBAAA;AAAA,IACR,UAAU,MAAA,CAAO;AAAA,GACnB;AACF","file":"chunk-M6VUQK73.js","sourcesContent":["/**\n * Due-date factor semantic validation (Situação 1 only).\n * @see BR-BOLETO-012\n */\nimport type { ValidationErrorCode } from '../../types/validation-result.js';\n\nconst FATOR_MIN = 1;\n/** FEBRABAN factor space; values above this fail optional semantic validation. */\nconst FATOR_SEMANTIC_MAX = 9997;\n\nexport type FatorVencimentoValidationResult =\n | { ok: true; factor: string; hasDueDate: boolean }\n | { ok: false; code: ValidationErrorCode; message: string };\n\nexport function validateFatorVencimento(factor: string): FatorVencimentoValidationResult {\n if (!/^\\d{4}$/.test(factor)) {\n return {\n ok: false,\n code: 'INVALID_LENGTH',\n message: 'Due-date factor must have exactly 4 digits',\n };\n }\n\n if (factor === '0000') {\n return { ok: true, factor, hasDueDate: false };\n }\n\n const days = Number(factor);\n if (days < FATOR_MIN || days > FATOR_SEMANTIC_MAX) {\n return {\n ok: false,\n code: 'UNSUPPORTED_FORMAT',\n message: 'Due-date factor is out of the supported range',\n };\n }\n\n return { ok: true, factor, hasDueDate: true };\n}\n","/**\n * Document amount semantic validation (Situação 1 only).\n * @see BR-BOLETO-013\n */\nimport type { ValidationErrorCode } from '../../types/validation-result.js';\n\nexport type ValorDocumentoValidationResult =\n | { ok: true; amountCents: number }\n | { ok: false; code: ValidationErrorCode; message: string };\n\nexport function validateValorDocumento(value: string): ValorDocumentoValidationResult {\n if (!/^\\d{10}$/.test(value)) {\n return {\n ok: false,\n code: 'INVALID_LENGTH',\n message: 'Document amount must have exactly 10 digits (centavos)',\n };\n }\n\n return { ok: true, amountCents: Number(value) };\n}\n","/**\n * Optional semantic checks for Situação 1 cobrança fields.\n * @see BR-BOLETO-012, BR-BOLETO-013\n */\nimport type { BoletoInputKind, BoletoValidationResult } from '../../types/validation-result.js';\nimport { detectBoletoSituacao } from './detect-situacao.js';\nimport { validateFatorVencimento } from './fator-vencimento.js';\nimport { validateValorDocumento } from './valor-documento.js';\n\nexport type SemanticValidationOptions = {\n validateDueFactor?: boolean;\n validateAmount?: boolean;\n};\n\ntype FailedResult = Extract<BoletoValidationResult, { ok: false }>;\n\nfunction failure(code: FailedResult['code'], message: string, inputKind: BoletoInputKind): FailedResult {\n return { ok: false, code, message, inputKind };\n}\n\nexport function validateSemanticFields(\n barcode: string,\n options: SemanticValidationOptions,\n inputKind: BoletoInputKind,\n): FailedResult | null {\n if (detectBoletoSituacao(barcode) !== 'situacao-1') {\n return null;\n }\n\n if (options.validateDueFactor) {\n const factorResult = validateFatorVencimento(barcode.slice(5, 9));\n if (!factorResult.ok) {\n return failure(factorResult.code, factorResult.message, inputKind);\n }\n }\n\n if (options.validateAmount && detectBoletoSituacao(barcode) === 'situacao-1') {\n validateValorDocumento(barcode.slice(9, 19));\n }\n\n return null;\n}\n","/**\n * Boleto validation — linha digitável + código de barras (FEBRABAN cobrança).\n * @see docs/use-cases/UC-007-validate-boleto.md\n */\nimport type { BoletoInputKind, BoletoValidationResult } from '../../types/validation-result.js';\nimport { brandCodigoBarras, brandLinhaDigitavel } from '../../types/validation-result.js';\nimport { validateCodigoBarras } from './codigo-barras.js';\nimport {\n convertCodigoBarrasToLinhaDigits,\n convertLinhaToCodigoBarrasDigits,\n} from './convert.js';\nimport { detectBoletoInputKind } from './detect.js';\nimport { validateLinhaDigitavel } from './linha-digitavel.js';\nimport { validateSemanticFields } from './semantic.js';\nimport { validateArrecadacao } from './arrecadacao.js';\n\nexport {\n BOLETO_CODIGO_BARRAS_LENGTH,\n BOLETO_CODE_ISPB_HOLDER,\n BOLETO_CURRENCY_ISPB,\n BOLETO_CURRENCY_REAL,\n BOLETO_GOLDEN_CODIGO_BARRAS,\n BOLETO_GOLDEN_CODIGO_BARRAS_BB,\n BOLETO_GOLDEN_CODIGO_BARRAS_SITUACAO2,\n BOLETO_GOLDEN_LINHA_BB_STRIPPED,\n BOLETO_GOLDEN_LINHA_MASKED,\n BOLETO_GOLDEN_LINHA_SITUACAO2_STRIPPED,\n BOLETO_GOLDEN_LINHA_STRIPPED,\n BOLETO_LAYOUTS_PORTAL_URL,\n BOLETO_LINHA_LENGTH,\n BOLETO_OFFICIAL_SOURCE_URL,\n BOLETO_ARRECADACAO_LINHA_LENGTH,\n BOLETO_ARRECADACAO_CODIGO_BARRAS_LENGTH,\n BOLETO_ARRECADACAO_PRODUCT_ID,\n BOLETO_ARRECADACAO_OFFICIAL_SOURCE_URL,\n} from './constants.js';\nexport { computeModulo10FieldDv } from './modulo10.js';\nexport { computeModulo11BarcodeDv } from './modulo11.js';\nexport { detectBoletoInputKind, type DetectedBoletoInputKind } from './detect.js';\nexport {\n detectBoletoSituacao,\n toBoletoSituacaoCode,\n type BoletoSituacaoCode,\n type BoletoSituacaoKind,\n} from './detect-situacao.js';\nexport {\n convertCodigoBarrasToLinhaDigits,\n convertLinhaToCodigoBarrasDigits,\n} from './convert.js';\nexport {\n formatLinhaDigitavel,\n stripLinhaDigitavel,\n validateLinhaDigitavel,\n} from './linha-digitavel.js';\nexport { applyLinhaDigitavelMask } from './mask.js';\nexport { stripCodigoBarras, validateCodigoBarras } from './codigo-barras.js';\nexport { validateFatorVencimento, type FatorVencimentoValidationResult } from './fator-vencimento.js';\nexport { validateValorDocumento, type ValorDocumentoValidationResult } from './valor-documento.js';\nexport { validateSemanticFields } from './semantic.js';\nexport {\n buildArrecadacaoGoldenPair,\n isValidArrecadacao,\n linhaArrecadacaoToCodigoBarras,\n stripArrecadacao,\n validateArrecadacao,\n validateArrecadacaoCodigoBarras,\n validateArrecadacaoLinha,\n} from './arrecadacao.js';\nexport type { ArrecadacaoInputKind, ArrecadacaoValidationResult } from './arrecadacao.js';\nexport {\n computeArrecadacaoModulo10Dv,\n computeArrecadacaoModulo11Dv,\n getArrecadacaoDvCalculator,\n isArrecadacaoValueType,\n} from './arrecadacao-modulo.js';\nexport type { ArrecadacaoValueType } from './arrecadacao-modulo.js';\n\nexport type ValidateBoletoOptions = {\n kind?: BoletoInputKind;\n validateDueFactor?: boolean;\n validateAmount?: boolean;\n};\n\ntype FailedResult = Extract<BoletoValidationResult, { ok: false }>;\n\nfunction failure(code: FailedResult['code'], message: string, inputKind?: BoletoInputKind): FailedResult {\n return { ok: false, code, message, ...(inputKind ? { inputKind } : {}) };\n}\n\nfunction validateByKind(input: string, kind: BoletoInputKind, options?: ValidateBoletoOptions): BoletoValidationResult {\n const result = kind === 'linha-digitavel' ? validateLinhaDigitavel(input) : validateCodigoBarras(input);\n if (!result.ok) {\n return result;\n }\n\n const barcode =\n kind === 'linha-digitavel'\n ? convertLinhaToCodigoBarrasDigits(result.value)\n : result.value;\n\n const semanticError = validateSemanticFields(barcode, options ?? {}, kind);\n if (semanticError) {\n return semanticError;\n }\n\n return result;\n}\n\nexport function isValidBoleto(input: string, options?: ValidateBoletoOptions): boolean {\n return validateBoleto(input, options).ok;\n}\n\nexport function validateBoleto(input: string, options?: ValidateBoletoOptions): BoletoValidationResult {\n const trimmed = input.trim();\n if (trimmed.length === 0) {\n return failure('EMPTY_INPUT', 'Boleto input is empty');\n }\n\n const detected = detectBoletoInputKind(trimmed);\n\n if (detected === 'arrecadacao') {\n return validateArrecadacao(trimmed);\n }\n\n if (options?.kind !== undefined) {\n if (detected !== 'unknown' && detected !== options.kind) {\n return failure(\n 'UNSUPPORTED_FORMAT',\n `Boleto detected as ${detected} but forced kind is ${options.kind}`,\n options.kind,\n );\n }\n return validateByKind(trimmed, options.kind, options);\n }\n\n if (detected === 'unknown') {\n return failure('UNSUPPORTED_FORMAT', 'Boleto input kind could not be determined');\n }\n\n return validateByKind(trimmed, detected, options);\n}\n\nexport function convertLinhaToCodigoBarras(input: string): BoletoValidationResult {\n const result = validateLinhaDigitavel(input);\n if (!result.ok) {\n return result;\n }\n const barcode = convertLinhaToCodigoBarrasDigits(result.value);\n return {\n ok: true,\n value: brandCodigoBarras(barcode),\n inputKind: 'codigo-barras',\n format: 'codigo-barras',\n situacao: result.situacao,\n };\n}\n\nexport function convertCodigoBarrasToLinhaDigitavel(input: string): BoletoValidationResult {\n const result = validateCodigoBarras(input);\n if (!result.ok) {\n return result;\n }\n const linha = convertCodigoBarrasToLinhaDigits(result.value);\n return {\n ok: true,\n value: brandLinhaDigitavel(linha),\n inputKind: 'linha-digitavel',\n format: 'linha-digitavel',\n situacao: result.situacao,\n };\n}\n"]}
@@ -6,25 +6,25 @@ var metadata_default = {
6
6
  endpoints: [
7
7
  "https://iccwbo.org/resources-for-business/incoterms-rules/"
8
8
  ],
9
- capturadoEm: "2026-06-23",
10
- atualizadoEm: "2026-06-23T18:35:34.344Z",
9
+ capturadoEm: "2026-06-24",
10
+ atualizadoEm: "2026-06-24T15:36:49.547Z",
11
11
  contagens: {
12
12
  incoterms: 11
13
13
  },
14
14
  alteracoes: {
15
- adicionados: 11,
15
+ adicionados: 0,
16
16
  removidos: 0,
17
17
  alterados: 0,
18
- comparadoCom: null
18
+ comparadoCom: "2026-06-23"
19
19
  },
20
20
  verificacao: {
21
21
  agendamento: "diario",
22
22
  workflow: "data-refresh-bot.yml",
23
- ultimaExecucao: "2026-06-23T18:35:34.344Z"
23
+ ultimaExecucao: "2026-06-24T15:36:49.547Z"
24
24
  },
25
25
  documentacao: "docs/OFFICIAL-SOURCES.md#incoterms"
26
26
  };
27
27
 
28
28
  export { metadata_default };
29
- //# sourceMappingURL=chunk-5423O35D.js.map
30
- //# sourceMappingURL=chunk-5423O35D.js.map
29
+ //# sourceMappingURL=chunk-MAJPROT7.js.map
30
+ //# sourceMappingURL=chunk-MAJPROT7.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/incoterms/data/metadata.json"],"names":[],"mappings":";AAAA,IAAA,gBAAA,GAAA;AAAA,EACE,EAAA,EAAM,WAAA;AAAA,EACN,IAAA,EAAQ,oBAAA;AAAA,EACR,KAAA,EAAS,4EAAA;AAAA,EACT,SAAA,EAAa;AAAA,IACX;AAAA,GACF;AAAA,EACA,WAAA,EAAe,YAAA;AAAA,EACf,YAAA,EAAgB,0BAAA;AAAA,EAChB,SAAA,EAAa;AAAA,IACX,SAAA,EAAa;AAAA,GACf;AAAA,EACA,UAAA,EAAc;AAAA,IACZ,WAAA,EAAe,EAAA;AAAA,IACf,SAAA,EAAa,CAAA;AAAA,IACb,SAAA,EAAa,CAAA;AAAA,IACb,YAAA,EAAgB;AAAA,GAClB;AAAA,EACA,WAAA,EAAe;AAAA,IACb,WAAA,EAAe,QAAA;AAAA,IACf,QAAA,EAAY,sBAAA;AAAA,IACZ,cAAA,EAAkB;AAAA,GACpB;AAAA,EACA,YAAA,EAAgB;AAClB","file":"chunk-5423O35D.js","sourcesContent":["{\n \"id\": \"incoterms\",\n \"nome\": \"ICC Incoterms 2020\",\n \"fonte\": \"International Chamber of Commerce — Incoterms 2020 (static reference)\",\n \"endpoints\": [\n \"https://iccwbo.org/resources-for-business/incoterms-rules/\"\n ],\n \"capturadoEm\": \"2026-06-23\",\n \"atualizadoEm\": \"2026-06-23T18:35:34.344Z\",\n \"contagens\": {\n \"incoterms\": 11\n },\n \"alteracoes\": {\n \"adicionados\": 11,\n \"removidos\": 0,\n \"alterados\": 0,\n \"comparadoCom\": null\n },\n \"verificacao\": {\n \"agendamento\": \"diario\",\n \"workflow\": \"data-refresh-bot.yml\",\n \"ultimaExecucao\": \"2026-06-23T18:35:34.344Z\"\n },\n \"documentacao\": \"docs/OFFICIAL-SOURCES.md#incoterms\"\n}\n"]}
1
+ {"version":3,"sources":["../src/incoterms/data/metadata.json"],"names":[],"mappings":";AAAA,IAAA,gBAAA,GAAA;AAAA,EACE,EAAA,EAAM,WAAA;AAAA,EACN,IAAA,EAAQ,oBAAA;AAAA,EACR,KAAA,EAAS,4EAAA;AAAA,EACT,SAAA,EAAa;AAAA,IACX;AAAA,GACF;AAAA,EACA,WAAA,EAAe,YAAA;AAAA,EACf,YAAA,EAAgB,0BAAA;AAAA,EAChB,SAAA,EAAa;AAAA,IACX,SAAA,EAAa;AAAA,GACf;AAAA,EACA,UAAA,EAAc;AAAA,IACZ,WAAA,EAAe,CAAA;AAAA,IACf,SAAA,EAAa,CAAA;AAAA,IACb,SAAA,EAAa,CAAA;AAAA,IACb,YAAA,EAAgB;AAAA,GAClB;AAAA,EACA,WAAA,EAAe;AAAA,IACb,WAAA,EAAe,QAAA;AAAA,IACf,QAAA,EAAY,sBAAA;AAAA,IACZ,cAAA,EAAkB;AAAA,GACpB;AAAA,EACA,YAAA,EAAgB;AAClB","file":"chunk-MAJPROT7.js","sourcesContent":["{\n \"id\": \"incoterms\",\n \"nome\": \"ICC Incoterms 2020\",\n \"fonte\": \"International Chamber of Commerce — Incoterms 2020 (static reference)\",\n \"endpoints\": [\n \"https://iccwbo.org/resources-for-business/incoterms-rules/\"\n ],\n \"capturadoEm\": \"2026-06-24\",\n \"atualizadoEm\": \"2026-06-24T15:36:49.547Z\",\n \"contagens\": {\n \"incoterms\": 11\n },\n \"alteracoes\": {\n \"adicionados\": 0,\n \"removidos\": 0,\n \"alterados\": 0,\n \"comparadoCom\": \"2026-06-23\"\n },\n \"verificacao\": {\n \"agendamento\": \"diario\",\n \"workflow\": \"data-refresh-bot.yml\",\n \"ultimaExecucao\": \"2026-06-24T15:36:49.547Z\"\n },\n \"documentacao\": \"docs/OFFICIAL-SOURCES.md#incoterms\"\n}\n"]}
@@ -1,6 +1,6 @@
1
- import { computeCheckDigit } from './chunk-OTZHMJYE.js';
2
1
  import { stripCnpj } from './chunk-EB3G4IG6.js';
3
- import { brandCnpj } from './chunk-4NFEM2SU.js';
2
+ import { computeCheckDigit } from './chunk-OTZHMJYE.js';
3
+ import { brandCnpj } from './chunk-EMZCVV5Y.js';
4
4
 
5
5
  // src/core/cnpj/constants.ts
6
6
  var CNPJ_LENGTH = 14;
@@ -143,5 +143,5 @@ function validateCnpj(input) {
143
143
  }
144
144
 
145
145
  export { CNPJ_BASE_LENGTH, CNPJ_DV1_WEIGHTS, CNPJ_DV2_WEIGHTS, CNPJ_GOLDEN_ALPHANUMERIC, CNPJ_GOLDEN_ALPHANUMERIC_MASKED, CNPJ_GOLDEN_NUMERIC, CNPJ_GOLDEN_NUMERIC_MASKED, CNPJ_LENGTH, CNPJ_MASK_PATTERN, CNPJ_OFFICIAL_SOURCE_URL, cnpjCharValue, detectCnpjFormat, isValidCnpj, isValidCnpjAlphanumeric, isValidCnpjNumeric, validateCnpj };
146
- //# sourceMappingURL=chunk-RSJK46ZE.js.map
147
- //# sourceMappingURL=chunk-RSJK46ZE.js.map
146
+ //# sourceMappingURL=chunk-MLUDCL3P.js.map
147
+ //# sourceMappingURL=chunk-MLUDCL3P.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/core/cnpj/constants.ts","../src/core/cnpj/ascii-value.ts","../src/core/cnpj/alphanumeric.ts","../src/core/cnpj/detect.ts","../src/core/cnpj/numeric.ts","../src/core/cnpj/index.ts"],"names":[],"mappings":"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","file":"chunk-RSJK46ZE.js","sourcesContent":["/**\n * CNPJ constants — modulo 11 weights from RFB FAQ Q14.\n * @see https://www.gov.br/receitafederal/pt-br/centrais-de-conteudo/publicacoes/perguntas-e-respostas/cnpj/cnpj-alfanumerico.pdf\n */\nexport const CNPJ_LENGTH = 14;\nexport const CNPJ_BASE_LENGTH = 12;\n\nexport const CNPJ_DV1_WEIGHTS = [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2] as const;\nexport const CNPJ_DV2_WEIGHTS = [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2] as const;\n\nexport const CNPJ_ALPHANUMERIC_PATTERN = /^[A-Z0-9]{12}[0-9]{2}$/;\nexport const CNPJ_NUMERIC_PATTERN = /^[0-9]{14}$/;\n\nexport const CNPJ_OFFICIAL_SOURCE_URL =\n 'https://www.gov.br/receitafederal/pt-br/centrais-de-conteudo/publicacoes/perguntas-e-respostas/cnpj/cnpj-alfanumerico.pdf';\n\n/** RFB Q14 golden vector */\nexport const CNPJ_GOLDEN_ALPHANUMERIC = '12ABC34501DE35';\n\n/** Valid numeric CNPJ for regression tests (modulo 11) */\nexport const CNPJ_GOLDEN_NUMERIC = '11222333000181';\nexport const CNPJ_GOLDEN_NUMERIC_MASKED = '11.222.333/0001-81';\nexport const CNPJ_GOLDEN_ALPHANUMERIC_MASKED = '12.ABC.345/01DE-35';\n\nexport const CNPJ_MASK_PATTERN = /^(.{2})(.{3})(.{3})(.{4})(.{2})$/;\n","/**\n * Character value for CNPJ modulo 11 — ASCII decimal minus 48 (RFB Q14).\n * @see https://www.gov.br/receitafederal/pt-br/centrais-de-conteudo/publicacoes/perguntas-e-respostas/cnpj/cnpj-alfanumerico.pdf\n */\nexport function cnpjCharValue(char: string): number {\n return char.charCodeAt(0) - 48;\n}\n","import { CNPJ_ALPHANUMERIC_PATTERN, CNPJ_BASE_LENGTH, CNPJ_DV1_WEIGHTS, CNPJ_DV2_WEIGHTS, CNPJ_LENGTH } from './constants.js';\nimport { cnpjCharValue } from './ascii-value.js';\nimport { computeCheckDigit } from './modulo11.js';\n\nfunction hasRepeatedChars(value: string): boolean {\n const first = value[0];\n for (let i = 1; i < value.length; i++) {\n if (value[i] !== first) {\n return false;\n }\n }\n return true;\n}\n\nfunction isValidStructure(canonical: string): boolean {\n return canonical.length === CNPJ_LENGTH && CNPJ_ALPHANUMERIC_PATTERN.test(canonical);\n}\n\n/**\n * Alphanumeric CNPJ — ASCII-48 modulo 11 (RFB Q14).\n * Golden vector: 12ABC34501DE35\n */\nexport function isValidCnpjAlphanumeric(input: string): boolean {\n const canonical = input.toUpperCase();\n if (!isValidStructure(canonical)) {\n return false;\n }\n if (hasRepeatedChars(canonical)) {\n return false;\n }\n\n const base = canonical.slice(0, CNPJ_BASE_LENGTH);\n const dv1Expected = String(computeCheckDigit(base, CNPJ_DV1_WEIGHTS, cnpjCharValue));\n const dv2Expected = String(\n computeCheckDigit(base + dv1Expected, CNPJ_DV2_WEIGHTS, cnpjCharValue),\n );\n\n return canonical.slice(CNPJ_BASE_LENGTH) === dv1Expected + dv2Expected;\n}\n","import { CNPJ_ALPHANUMERIC_PATTERN, CNPJ_NUMERIC_PATTERN } from './constants.js';\nimport type { DocumentFormat } from '../../types/validation-result.js';\n\nexport function detectCnpjFormat(stripped: string): DocumentFormat | 'unknown' {\n const upper = stripped.toUpperCase();\n if (CNPJ_NUMERIC_PATTERN.test(upper)) {\n return 'numeric';\n }\n if (CNPJ_ALPHANUMERIC_PATTERN.test(upper)) {\n return 'alphanumeric';\n }\n return 'unknown';\n}\n\nexport function containsLetter(value: string): boolean {\n return /[A-Za-z]/.test(value);\n}\n","import { CNPJ_BASE_LENGTH, CNPJ_DV1_WEIGHTS, CNPJ_DV2_WEIGHTS, CNPJ_NUMERIC_PATTERN } from './constants.js';\nimport { computeCheckDigit } from './modulo11.js';\n\nfunction digitValue(char: string): number {\n return Number(char);\n}\n\nfunction hasRepeatedDigits(value: string): boolean {\n const first = value[0];\n for (let i = 1; i < value.length; i++) {\n if (value[i] !== first) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * Numeric CNPJ — traditional modulo 11 on digits (RFB Q6–Q7 coexistence).\n */\nexport function isValidCnpjNumeric(input: string): boolean {\n const canonical = input.replace(/\\D/g, '');\n if (!CNPJ_NUMERIC_PATTERN.test(canonical)) {\n return false;\n }\n if (hasRepeatedDigits(canonical)) {\n return false;\n }\n\n const base = canonical.slice(0, CNPJ_BASE_LENGTH);\n const dv1Expected = String(computeCheckDigit(base, CNPJ_DV1_WEIGHTS, digitValue));\n const dv2Expected = String(\n computeCheckDigit(base + dv1Expected, CNPJ_DV2_WEIGHTS, digitValue),\n );\n\n return canonical.slice(CNPJ_BASE_LENGTH) === dv1Expected + dv2Expected;\n}\n","import { stripCnpj } from '../../strip/cnpj.js';\nimport type { DocumentFormat, ValidationResult } from '../../types/validation-result.js';\nimport { brandCnpj } from '../../types/validation-result.js';\nimport { isValidCnpjAlphanumeric } from './alphanumeric.js';\nimport { CNPJ_LENGTH } from './constants.js';\nimport { containsLetter, detectCnpjFormat } from './detect.js';\nimport { isValidCnpjNumeric } from './numeric.js';\n\nexport { detectCnpjFormat, containsLetter } from './detect.js';\nexport { isValidCnpjAlphanumeric } from './alphanumeric.js';\nexport { isValidCnpjNumeric } from './numeric.js';\nexport {\n CNPJ_GOLDEN_ALPHANUMERIC,\n CNPJ_GOLDEN_ALPHANUMERIC_MASKED,\n CNPJ_GOLDEN_NUMERIC,\n CNPJ_GOLDEN_NUMERIC_MASKED,\n CNPJ_OFFICIAL_SOURCE_URL,\n} from './constants.js';\n\ntype FailedResult = Extract<ValidationResult, { ok: false }>;\n\nfunction failure(code: FailedResult['code'], message: string): FailedResult {\n return { ok: false, code, message };\n}\n\nfunction validateStructure(\n input: string,\n stripped: string,\n): FailedResult | { format: DocumentFormat } {\n if (stripped.length === 0) {\n return failure('EMPTY_INPUT', 'CNPJ input is empty');\n }\n\n const withoutMask = input.replace(/[.\\-/]/g, '');\n if (/[^A-Za-z0-9]/.test(withoutMask)) {\n return failure('INVALID_CHARACTER', 'CNPJ contains invalid characters');\n }\n\n if (stripped.length !== CNPJ_LENGTH) {\n return failure('INVALID_LENGTH', `CNPJ must have ${CNPJ_LENGTH} characters after normalization`);\n }\n\n const format = detectCnpjFormat(stripped);\n if (format === 'unknown') {\n return failure('UNSUPPORTED_FORMAT', 'CNPJ format is not numeric or alphanumeric');\n }\n\n return { format };\n}\n\nexport function isValidCnpj(input: string): boolean {\n return validateCnpj(input).ok;\n}\n\nexport function validateCnpj(input: string): ValidationResult {\n const stripped = stripCnpj(input);\n const structural = validateStructure(input, stripped);\n if ('ok' in structural) {\n return structural;\n }\n\n const { format } = structural;\n\n if (format === 'numeric' || !containsLetter(stripped)) {\n if (isValidCnpjNumeric(stripped)) {\n return { ok: true, value: brandCnpj(stripped), format: 'numeric' };\n }\n if (format === 'numeric') {\n if (/^(\\d)\\1{13}$/.test(stripped)) {\n return failure('KNOWN_INVALID_PATTERN', 'CNPJ with all identical digits is invalid');\n }\n return failure('INVALID_CHECK_DIGIT', 'CNPJ check digits are invalid');\n }\n }\n\n if (isValidCnpjAlphanumeric(stripped)) {\n return { ok: true, value: brandCnpj(stripped), format: 'alphanumeric' };\n }\n\n return failure('INVALID_CHECK_DIGIT', 'CNPJ check digits are invalid');\n}\n"]}
1
+ {"version":3,"sources":["../src/core/cnpj/constants.ts","../src/core/cnpj/ascii-value.ts","../src/core/cnpj/alphanumeric.ts","../src/core/cnpj/detect.ts","../src/core/cnpj/numeric.ts","../src/core/cnpj/index.ts"],"names":[],"mappings":"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","file":"chunk-MLUDCL3P.js","sourcesContent":["/**\n * CNPJ constants — modulo 11 weights from RFB FAQ Q14.\n * @see https://www.gov.br/receitafederal/pt-br/centrais-de-conteudo/publicacoes/perguntas-e-respostas/cnpj/cnpj-alfanumerico.pdf\n */\nexport const CNPJ_LENGTH = 14;\nexport const CNPJ_BASE_LENGTH = 12;\n\nexport const CNPJ_DV1_WEIGHTS = [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2] as const;\nexport const CNPJ_DV2_WEIGHTS = [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2] as const;\n\nexport const CNPJ_ALPHANUMERIC_PATTERN = /^[A-Z0-9]{12}[0-9]{2}$/;\nexport const CNPJ_NUMERIC_PATTERN = /^[0-9]{14}$/;\n\nexport const CNPJ_OFFICIAL_SOURCE_URL =\n 'https://www.gov.br/receitafederal/pt-br/centrais-de-conteudo/publicacoes/perguntas-e-respostas/cnpj/cnpj-alfanumerico.pdf';\n\n/** RFB Q14 golden vector */\nexport const CNPJ_GOLDEN_ALPHANUMERIC = '12ABC34501DE35';\n\n/** Valid numeric CNPJ for regression tests (modulo 11) */\nexport const CNPJ_GOLDEN_NUMERIC = '11222333000181';\nexport const CNPJ_GOLDEN_NUMERIC_MASKED = '11.222.333/0001-81';\nexport const CNPJ_GOLDEN_ALPHANUMERIC_MASKED = '12.ABC.345/01DE-35';\n\nexport const CNPJ_MASK_PATTERN = /^(.{2})(.{3})(.{3})(.{4})(.{2})$/;\n","/**\n * Character value for CNPJ modulo 11 — ASCII decimal minus 48 (RFB Q14).\n * @see https://www.gov.br/receitafederal/pt-br/centrais-de-conteudo/publicacoes/perguntas-e-respostas/cnpj/cnpj-alfanumerico.pdf\n */\nexport function cnpjCharValue(char: string): number {\n return char.charCodeAt(0) - 48;\n}\n","import { CNPJ_ALPHANUMERIC_PATTERN, CNPJ_BASE_LENGTH, CNPJ_DV1_WEIGHTS, CNPJ_DV2_WEIGHTS, CNPJ_LENGTH } from './constants.js';\nimport { cnpjCharValue } from './ascii-value.js';\nimport { computeCheckDigit } from './modulo11.js';\n\nfunction hasRepeatedChars(value: string): boolean {\n const first = value[0];\n for (let i = 1; i < value.length; i++) {\n if (value[i] !== first) {\n return false;\n }\n }\n return true;\n}\n\nfunction isValidStructure(canonical: string): boolean {\n return canonical.length === CNPJ_LENGTH && CNPJ_ALPHANUMERIC_PATTERN.test(canonical);\n}\n\n/**\n * Alphanumeric CNPJ — ASCII-48 modulo 11 (RFB Q14).\n * Golden vector: 12ABC34501DE35\n */\nexport function isValidCnpjAlphanumeric(input: string): boolean {\n const canonical = input.toUpperCase();\n if (!isValidStructure(canonical)) {\n return false;\n }\n if (hasRepeatedChars(canonical)) {\n return false;\n }\n\n const base = canonical.slice(0, CNPJ_BASE_LENGTH);\n const dv1Expected = String(computeCheckDigit(base, CNPJ_DV1_WEIGHTS, cnpjCharValue));\n const dv2Expected = String(\n computeCheckDigit(base + dv1Expected, CNPJ_DV2_WEIGHTS, cnpjCharValue),\n );\n\n return canonical.slice(CNPJ_BASE_LENGTH) === dv1Expected + dv2Expected;\n}\n","import { CNPJ_ALPHANUMERIC_PATTERN, CNPJ_NUMERIC_PATTERN } from './constants.js';\nimport type { DocumentFormat } from '../../types/validation-result.js';\n\nexport function detectCnpjFormat(stripped: string): DocumentFormat | 'unknown' {\n const upper = stripped.toUpperCase();\n if (CNPJ_NUMERIC_PATTERN.test(upper)) {\n return 'numeric';\n }\n if (CNPJ_ALPHANUMERIC_PATTERN.test(upper)) {\n return 'alphanumeric';\n }\n return 'unknown';\n}\n\nexport function containsLetter(value: string): boolean {\n return /[A-Za-z]/.test(value);\n}\n","import { CNPJ_BASE_LENGTH, CNPJ_DV1_WEIGHTS, CNPJ_DV2_WEIGHTS, CNPJ_NUMERIC_PATTERN } from './constants.js';\nimport { computeCheckDigit } from './modulo11.js';\n\nfunction digitValue(char: string): number {\n return Number(char);\n}\n\nfunction hasRepeatedDigits(value: string): boolean {\n const first = value[0];\n for (let i = 1; i < value.length; i++) {\n if (value[i] !== first) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * Numeric CNPJ — traditional modulo 11 on digits (RFB Q6–Q7 coexistence).\n */\nexport function isValidCnpjNumeric(input: string): boolean {\n const canonical = input.replace(/\\D/g, '');\n if (!CNPJ_NUMERIC_PATTERN.test(canonical)) {\n return false;\n }\n if (hasRepeatedDigits(canonical)) {\n return false;\n }\n\n const base = canonical.slice(0, CNPJ_BASE_LENGTH);\n const dv1Expected = String(computeCheckDigit(base, CNPJ_DV1_WEIGHTS, digitValue));\n const dv2Expected = String(\n computeCheckDigit(base + dv1Expected, CNPJ_DV2_WEIGHTS, digitValue),\n );\n\n return canonical.slice(CNPJ_BASE_LENGTH) === dv1Expected + dv2Expected;\n}\n","import { stripCnpj } from '../../strip/cnpj.js';\nimport type { DocumentFormat, ValidationResult } from '../../types/validation-result.js';\nimport { brandCnpj } from '../../types/validation-result.js';\nimport { isValidCnpjAlphanumeric } from './alphanumeric.js';\nimport { CNPJ_LENGTH } from './constants.js';\nimport { containsLetter, detectCnpjFormat } from './detect.js';\nimport { isValidCnpjNumeric } from './numeric.js';\n\nexport { detectCnpjFormat, containsLetter } from './detect.js';\nexport { isValidCnpjAlphanumeric } from './alphanumeric.js';\nexport { isValidCnpjNumeric } from './numeric.js';\nexport {\n CNPJ_GOLDEN_ALPHANUMERIC,\n CNPJ_GOLDEN_ALPHANUMERIC_MASKED,\n CNPJ_GOLDEN_NUMERIC,\n CNPJ_GOLDEN_NUMERIC_MASKED,\n CNPJ_OFFICIAL_SOURCE_URL,\n} from './constants.js';\n\ntype FailedResult = Extract<ValidationResult, { ok: false }>;\n\nfunction failure(code: FailedResult['code'], message: string): FailedResult {\n return { ok: false, code, message };\n}\n\nfunction validateStructure(\n input: string,\n stripped: string,\n): FailedResult | { format: DocumentFormat } {\n if (stripped.length === 0) {\n return failure('EMPTY_INPUT', 'CNPJ input is empty');\n }\n\n const withoutMask = input.replace(/[.\\-/]/g, '');\n if (/[^A-Za-z0-9]/.test(withoutMask)) {\n return failure('INVALID_CHARACTER', 'CNPJ contains invalid characters');\n }\n\n if (stripped.length !== CNPJ_LENGTH) {\n return failure('INVALID_LENGTH', `CNPJ must have ${CNPJ_LENGTH} characters after normalization`);\n }\n\n const format = detectCnpjFormat(stripped);\n if (format === 'unknown') {\n return failure('UNSUPPORTED_FORMAT', 'CNPJ format is not numeric or alphanumeric');\n }\n\n return { format };\n}\n\nexport function isValidCnpj(input: string): boolean {\n return validateCnpj(input).ok;\n}\n\nexport function validateCnpj(input: string): ValidationResult {\n const stripped = stripCnpj(input);\n const structural = validateStructure(input, stripped);\n if ('ok' in structural) {\n return structural;\n }\n\n const { format } = structural;\n\n if (format === 'numeric' || !containsLetter(stripped)) {\n if (isValidCnpjNumeric(stripped)) {\n return { ok: true, value: brandCnpj(stripped), format: 'numeric' };\n }\n if (format === 'numeric') {\n if (/^(\\d)\\1{13}$/.test(stripped)) {\n return failure('KNOWN_INVALID_PATTERN', 'CNPJ with all identical digits is invalid');\n }\n return failure('INVALID_CHECK_DIGIT', 'CNPJ check digits are invalid');\n }\n }\n\n if (isValidCnpjAlphanumeric(stripped)) {\n return { ok: true, value: brandCnpj(stripped), format: 'alphanumeric' };\n }\n\n return failure('INVALID_CHECK_DIGIT', 'CNPJ check digits are invalid');\n}\n"]}
@@ -1,22 +1,23 @@
1
- import { stripForType } from './chunk-2AFEQOCJ.js';
2
- import { validateRg } from './chunk-G557DGIX.js';
3
- import { validateProcessoJudicial } from './chunk-VE2XZSKP.js';
4
- import { validateRenavam } from './chunk-24JBIV3A.js';
5
- import { validateTelefone } from './chunk-QZNAGWZB.js';
6
- import { validateTituloEleitor } from './chunk-26MSDS43.js';
7
- import { validatePisPasep } from './chunk-ULNZHOMA.js';
8
- import { validatePlaca } from './chunk-2JSOXG2M.js';
9
- import { validateInscricaoEstadual } from './chunk-P3EJRH4P.js';
10
- import { validateNfeChave } from './chunk-IJ2DAVSD.js';
11
- import { validateIeSpRural } from './chunk-TAOFFAG3.js';
12
- import { validateCnh } from './chunk-A5UHVGRB.js';
13
- import { validateBoleto } from './chunk-3DLNIUBY.js';
14
- import { validateBrCode } from './chunk-72EZ2VUO.js';
15
- import { validatePixKey } from './chunk-UTSZKJAL.js';
16
- import { validateCnpj } from './chunk-RSJK46ZE.js';
17
- import { validateCpf } from './chunk-LBAWZ4EV.js';
18
- import { validateCartaoCredito } from './chunk-VDCITFZG.js';
19
- import { validateCep } from './chunk-EEFQYVLF.js';
1
+ import { stripForType } from './chunk-DAX5PVBJ.js';
2
+ import { validateRg } from './chunk-E2BVDZKJ.js';
3
+ import { validateRenavam } from './chunk-QKAXRXU5.js';
4
+ import { validateProcessoJudicial } from './chunk-YA7RWTAE.js';
5
+ import { validateTelefone } from './chunk-2HD6TA3O.js';
6
+ import { validateTituloEleitor } from './chunk-Q2CFVQ2U.js';
7
+ import { validatePisPasep } from './chunk-AG3VELYX.js';
8
+ import { validatePlaca } from './chunk-P37C3MVF.js';
9
+ import { validateNfeChave } from './chunk-OM5ELPM6.js';
10
+ import { validateInscricaoEstadual } from './chunk-LXB5FIAQ.js';
11
+ import { validateIeSpRural } from './chunk-UJXGDUKJ.js';
12
+ import { validateEan } from './chunk-2NSBFMTP.js';
13
+ import { validateCep } from './chunk-UANHHEWY.js';
14
+ import { validateCnh } from './chunk-G4YT6X7N.js';
15
+ import { validateBoleto } from './chunk-M6VUQK73.js';
16
+ import { validateBrCode } from './chunk-ROU5ZHN7.js';
17
+ import { validatePixKey } from './chunk-7EMUKPPG.js';
18
+ import { validateCpf } from './chunk-PUTVO6HG.js';
19
+ import { validateCnpj } from './chunk-MLUDCL3P.js';
20
+ import { validateCartaoCredito } from './chunk-2ZWBFVYY.js';
20
21
 
21
22
  // src/platform/normalize.ts
22
23
  var SANITIZABLE_PLATFORM_TYPES = /* @__PURE__ */ new Set([
@@ -34,6 +35,7 @@ var SANITIZABLE_PLATFORM_TYPES = /* @__PURE__ */ new Set([
34
35
  "nfe-chave",
35
36
  "boleto",
36
37
  "cartao-credito",
38
+ "ean",
37
39
  "inscricao-estadual",
38
40
  "inscricao-estadual-produtor-rural"
39
41
  ]);
@@ -116,6 +118,10 @@ function tryValidatedCanonical(value, type, uf) {
116
118
  const result = validateCartaoCredito(value);
117
119
  return result.ok ? result.value : null;
118
120
  }
121
+ case "ean": {
122
+ const result = validateEan(value);
123
+ return result.ok ? result.value : null;
124
+ }
119
125
  case "inscricao-estadual": {
120
126
  if (!uf) {
121
127
  return null;
@@ -142,5 +148,5 @@ function tryValidatedCanonical(value, type, uf) {
142
148
  }
143
149
 
144
150
  export { normalizeForPlatform };
145
- //# sourceMappingURL=chunk-4COFDYBY.js.map
146
- //# sourceMappingURL=chunk-4COFDYBY.js.map
151
+ //# sourceMappingURL=chunk-MZZNNXAB.js.map
152
+ //# sourceMappingURL=chunk-MZZNNXAB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/platform/normalize.ts"],"names":[],"mappings":"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","file":"chunk-MZZNNXAB.js","sourcesContent":["/**\n * Canonical normalization for platform compare/diff (BR-PLATFORM-001).\n * @see docs/OFFICIAL-SOURCES.md\n */\nimport { validateBrCode } from '../core/brcode/index.js';\nimport { validateBoleto } from '../core/boleto/index.js';\nimport { validateCartaoCredito } from '../core/cartao-credito/index.js';\nimport { validateEan } from '../core/ean/index.js';\nimport { validateCep } from '../core/cep/index.js';\nimport { validateCnh } from '../core/cnh/index.js';\nimport { validateCnpj } from '../core/cnpj/index.js';\nimport { validateCpf } from '../core/cpf/index.js';\nimport { validateInscricaoEstadual } from '../core/inscricao-estadual/index.js';\nimport { validateIeSpRural } from '../core/inscricao-estadual/sp-rural.js';\nimport { validateNfeChave } from '../core/nfe-chave/index.js';\nimport { validatePisPasep } from '../core/pis-pasep/index.js';\nimport { validatePlaca } from '../core/placa/index.js';\nimport { validatePixKey } from '../core/pix/index.js';\nimport { validateRenavam } from '../core/renavam/index.js';\nimport { validateTelefone } from '../core/telefone/index.js';\nimport { validateProcessoJudicial } from '../core/processo-judicial/index.js';\nimport { validateRg } from '../core/rg/index.js';\nimport type { RgUfCode } from '../types/validation-result.js';\nimport { validateTituloEleitor } from '../core/titulo-eleitor/index.js';\nimport { stripForType } from '../sanitize/fixes.js';\nimport type { SanitizableDocumentType } from '../sanitize/index.js';\nimport type { UfCode } from '../types/validation-result.js';\nimport type { PlatformDocumentType, PlatformOptions } from './types.js';\n\nconst SANITIZABLE_PLATFORM_TYPES = new Set<PlatformDocumentType>([\n 'cpf',\n 'cnpj',\n 'cep',\n 'placa',\n 'pis-pasep',\n 'telefone',\n 'cnh',\n 'renavam',\n 'titulo-eleitor',\n 'processo-judicial',\n 'rg',\n 'nfe-chave',\n 'boleto',\n 'cartao-credito',\n 'ean',\n 'inscricao-estadual',\n 'inscricao-estadual-produtor-rural',\n]);\n\nfunction isSanitizablePlatformType(type: PlatformDocumentType): type is SanitizableDocumentType {\n return SANITIZABLE_PLATFORM_TYPES.has(type);\n}\n\nfunction stripForPlatform(raw: string, type: PlatformDocumentType): string {\n if (type === 'pix' || type === 'brcode') {\n return raw;\n }\n if (isSanitizablePlatformType(type)) {\n return stripForType(raw, type);\n }\n return raw;\n}\n\nexport function normalizeForPlatform(\n raw: string,\n type: PlatformDocumentType,\n options: PlatformOptions = {},\n): string {\n const trimmed = raw.trim();\n const stripped = stripForPlatform(trimmed, type);\n const validated = tryValidatedCanonical(stripped, type, options.uf);\n return validated ?? stripped;\n}\n\nfunction tryValidatedCanonical(\n value: string,\n type: PlatformDocumentType,\n uf?: UfCode,\n): string | null {\n switch (type) {\n case 'cpf': {\n const result = validateCpf(value);\n return result.ok ? result.value : null;\n }\n case 'cnpj': {\n const result = validateCnpj(value);\n return result.ok ? result.value : null;\n }\n case 'cep': {\n const result = validateCep(value);\n return result.ok ? result.value : null;\n }\n case 'placa': {\n const result = validatePlaca(value);\n return result.ok ? result.value : null;\n }\n case 'pis-pasep': {\n const result = validatePisPasep(value);\n return result.ok ? result.value : null;\n }\n case 'telefone': {\n const result = validateTelefone(value);\n return result.ok ? result.value : null;\n }\n case 'cnh': {\n const result = validateCnh(value);\n return result.ok ? result.value : null;\n }\n case 'renavam': {\n const result = validateRenavam(value);\n return result.ok ? result.value : null;\n }\n case 'titulo-eleitor': {\n const result = validateTituloEleitor(value);\n return result.ok ? result.value : null;\n }\n case 'processo-judicial': {\n const result = validateProcessoJudicial(value);\n return result.ok ? result.value : null;\n }\n case 'rg': {\n if (!uf) {\n return null;\n }\n const result = validateRg(value, { uf: uf as RgUfCode });\n return result.ok ? result.value : null;\n }\n case 'nfe-chave': {\n const result = validateNfeChave(value);\n return result.ok ? result.value : null;\n }\n case 'boleto': {\n const result = validateBoleto(value);\n return result.ok ? result.value : null;\n }\n case 'cartao-credito': {\n const result = validateCartaoCredito(value);\n return result.ok ? result.value : null;\n }\n case 'ean': {\n const result = validateEan(value);\n return result.ok ? result.value : null;\n }\n case 'inscricao-estadual': {\n if (!uf) {\n return null;\n }\n const result = validateInscricaoEstadual(value, { uf });\n return result.ok ? result.value : null;\n }\n case 'inscricao-estadual-produtor-rural': {\n const result = validateIeSpRural(value);\n return result.ok ? result.value : null;\n }\n case 'pix': {\n const result = validatePixKey(value);\n return result.ok ? result.value : null;\n }\n case 'brcode': {\n const result = validateBrCode(value);\n return result.ok ? result.value : null;\n }\n default: {\n return null;\n }\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { validateProcessoJudicial, PROCESSO_JUDICIAL_NUMERIC_PATTERN, PROCESSO_JUDICIAL_LENGTH } from './chunk-VE2XZSKP.js';
1
+ import { validateProcessoJudicial, PROCESSO_JUDICIAL_NUMERIC_PATTERN, PROCESSO_JUDICIAL_LENGTH } from './chunk-YA7RWTAE.js';
2
2
 
3
3
  // src/core/processo-judicial/mask.ts
4
4
  function applyProcessoJudicialMask(canonical) {
@@ -18,5 +18,5 @@ function formatProcessoJudicial(input) {
18
18
  }
19
19
 
20
20
  export { formatProcessoJudicial };
21
- //# sourceMappingURL=chunk-DVA6QQUF.js.map
22
- //# sourceMappingURL=chunk-DVA6QQUF.js.map
21
+ //# sourceMappingURL=chunk-O3HZW2GM.js.map
22
+ //# sourceMappingURL=chunk-O3HZW2GM.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/core/processo-judicial/mask.ts","../src/format/processo-judicial.ts"],"names":[],"mappings":";;;AAKO,SAAS,0BAA0B,SAAA,EAA2B;AACnE,EAAA,IAAI,CAAC,iCAAA,CAAkC,IAAA,CAAK,SAAS,CAAA,EAAG;AACtD,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oCAAA,EAAuC,wBAAwB,CAAA,iBAAA,CAAmB,CAAA;AAAA,EACpG;AAEA,EAAA,OAAO,CAAA,EAAG,SAAA,CAAU,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,CAAA,EAAI,SAAA,CAAU,KAAA,CAAM,GAAG,CAAC,CAAC,CAAA,CAAA,EAAI,SAAA,CAAU,MAAM,CAAA,EAAG,EAAE,CAAC,CAAA,CAAA,EAAI,UAAU,KAAA,CAAM,EAAA,EAAI,EAAE,CAAC,IAAI,SAAA,CAAU,KAAA,CAAM,EAAA,EAAI,EAAE,CAAC,CAAA,CAAA,EAAI,SAAA,CAAU,KAAA,CAAM,EAAA,EAAI,EAAE,CAAC,CAAA,CAAA;AACrK;;;ACPO,SAAS,uBAAuB,KAAA,EAA6B;AAClE,EAAA,MAAM,MAAA,GAAS,yBAAyB,KAAK,CAAA;AAC7C,EAAA,IAAI,CAAC,OAAO,EAAA,EAAI;AACd,IAAA,OAAO,EAAE,IAAI,KAAA,EAAO,IAAA,EAAM,OAAO,IAAA,EAAM,OAAA,EAAS,OAAO,OAAA,EAAQ;AAAA,EACjE;AACA,EAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,WAAW,yBAAA,CAA0B,MAAA,CAAO,KAAK,CAAA,EAAE;AACxE","file":"chunk-DVA6QQUF.js","sourcesContent":["import { PROCESSO_JUDICIAL_LENGTH, PROCESSO_JUDICIAL_NUMERIC_PATTERN } from './constants.js';\n\n/**\n * Official display mask — NNNNNNN-DD.AAAA.J.TR.OOOO (Resolução 65/2008).\n */\nexport function applyProcessoJudicialMask(canonical: string): string {\n if (!PROCESSO_JUDICIAL_NUMERIC_PATTERN.test(canonical)) {\n throw new Error(`Processo judicial must have exactly ${PROCESSO_JUDICIAL_LENGTH} digits to format`);\n }\n\n return `${canonical.slice(0, 7)}-${canonical.slice(7, 9)}.${canonical.slice(9, 13)}.${canonical.slice(13, 14)}.${canonical.slice(14, 16)}.${canonical.slice(16, 20)}`;\n}\n","import { applyProcessoJudicialMask } from '../core/processo-judicial/mask.js';\nimport { validateProcessoJudicial } from '../core/processo-judicial/index.js';\nimport type { FormatResult } from '../types/validation-result.js';\n\nexport function formatProcessoJudicial(input: string): FormatResult {\n const result = validateProcessoJudicial(input);\n if (!result.ok) {\n return { ok: false, code: result.code, message: result.message };\n }\n return { ok: true, formatted: applyProcessoJudicialMask(result.value) };\n}\n"]}
1
+ {"version":3,"sources":["../src/core/processo-judicial/mask.ts","../src/format/processo-judicial.ts"],"names":[],"mappings":";;;AAKO,SAAS,0BAA0B,SAAA,EAA2B;AACnE,EAAA,IAAI,CAAC,iCAAA,CAAkC,IAAA,CAAK,SAAS,CAAA,EAAG;AACtD,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oCAAA,EAAuC,wBAAwB,CAAA,iBAAA,CAAmB,CAAA;AAAA,EACpG;AAEA,EAAA,OAAO,CAAA,EAAG,SAAA,CAAU,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,CAAA,EAAI,SAAA,CAAU,KAAA,CAAM,GAAG,CAAC,CAAC,CAAA,CAAA,EAAI,SAAA,CAAU,MAAM,CAAA,EAAG,EAAE,CAAC,CAAA,CAAA,EAAI,UAAU,KAAA,CAAM,EAAA,EAAI,EAAE,CAAC,IAAI,SAAA,CAAU,KAAA,CAAM,EAAA,EAAI,EAAE,CAAC,CAAA,CAAA,EAAI,SAAA,CAAU,KAAA,CAAM,EAAA,EAAI,EAAE,CAAC,CAAA,CAAA;AACrK;;;ACPO,SAAS,uBAAuB,KAAA,EAA6B;AAClE,EAAA,MAAM,MAAA,GAAS,yBAAyB,KAAK,CAAA;AAC7C,EAAA,IAAI,CAAC,OAAO,EAAA,EAAI;AACd,IAAA,OAAO,EAAE,IAAI,KAAA,EAAO,IAAA,EAAM,OAAO,IAAA,EAAM,OAAA,EAAS,OAAO,OAAA,EAAQ;AAAA,EACjE;AACA,EAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,WAAW,yBAAA,CAA0B,MAAA,CAAO,KAAK,CAAA,EAAE;AACxE","file":"chunk-O3HZW2GM.js","sourcesContent":["import { PROCESSO_JUDICIAL_LENGTH, PROCESSO_JUDICIAL_NUMERIC_PATTERN } from './constants.js';\n\n/**\n * Official display mask — NNNNNNN-DD.AAAA.J.TR.OOOO (Resolução 65/2008).\n */\nexport function applyProcessoJudicialMask(canonical: string): string {\n if (!PROCESSO_JUDICIAL_NUMERIC_PATTERN.test(canonical)) {\n throw new Error(`Processo judicial must have exactly ${PROCESSO_JUDICIAL_LENGTH} digits to format`);\n }\n\n return `${canonical.slice(0, 7)}-${canonical.slice(7, 9)}.${canonical.slice(9, 13)}.${canonical.slice(13, 14)}.${canonical.slice(14, 16)}.${canonical.slice(16, 20)}`;\n}\n","import { applyProcessoJudicialMask } from '../core/processo-judicial/mask.js';\nimport { validateProcessoJudicial } from '../core/processo-judicial/index.js';\nimport type { FormatResult } from '../types/validation-result.js';\n\nexport function formatProcessoJudicial(input: string): FormatResult {\n const result = validateProcessoJudicial(input);\n if (!result.ok) {\n return { ok: false, code: result.code, message: result.message };\n }\n return { ok: true, formatted: applyProcessoJudicialMask(result.value) };\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { CPF_MASK_PATTERN } from './chunk-LBAWZ4EV.js';
1
+ import { CPF_MASK_PATTERN } from './chunk-PUTVO6HG.js';
2
2
 
3
3
  // src/core/cpf/mask.ts
4
4
  function applyCpfMask(canonical) {
@@ -10,5 +10,5 @@ function applyCpfMask(canonical) {
10
10
  }
11
11
 
12
12
  export { applyCpfMask };
13
- //# sourceMappingURL=chunk-CNJ4DIYS.js.map
14
- //# sourceMappingURL=chunk-CNJ4DIYS.js.map
13
+ //# sourceMappingURL=chunk-O7RJQUAJ.js.map
14
+ //# sourceMappingURL=chunk-O7RJQUAJ.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/core/cpf/mask.ts"],"names":[],"mappings":";;;AAGO,SAAS,aAAa,SAAA,EAA2B;AACtD,EAAA,MAAM,KAAA,GAAQ,gBAAA,CAAiB,IAAA,CAAK,SAAS,CAAA;AAC7C,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,MAAM,IAAI,MAAM,+CAA+C,CAAA;AAAA,EACjE;AACA,EAAA,OAAO,CAAA,EAAG,KAAA,CAAM,CAAC,CAAC,IAAI,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA,EAAI,MAAM,CAAC,CAAC,CAAA,CAAA,EAAI,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AACxD","file":"chunk-CNJ4DIYS.js","sourcesContent":["import { CPF_MASK_PATTERN } from './constants.js';\n\n/** Mask XXX.XXX.XXX-DD (BR-CPF-005). */\nexport function applyCpfMask(canonical: string): string {\n const match = CPF_MASK_PATTERN.exec(canonical);\n if (!match) {\n throw new Error('CPF must have exactly 11 digits to apply mask');\n }\n return `${match[1]}.${match[2]}.${match[3]}-${match[4]}`;\n}\n"]}
1
+ {"version":3,"sources":["../src/core/cpf/mask.ts"],"names":[],"mappings":";;;AAGO,SAAS,aAAa,SAAA,EAA2B;AACtD,EAAA,MAAM,KAAA,GAAQ,gBAAA,CAAiB,IAAA,CAAK,SAAS,CAAA;AAC7C,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,MAAM,IAAI,MAAM,+CAA+C,CAAA;AAAA,EACjE;AACA,EAAA,OAAO,CAAA,EAAG,KAAA,CAAM,CAAC,CAAC,IAAI,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA,EAAI,MAAM,CAAC,CAAC,CAAA,CAAA,EAAI,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AACxD","file":"chunk-O7RJQUAJ.js","sourcesContent":["import { CPF_MASK_PATTERN } from './constants.js';\n\n/** Mask XXX.XXX.XXX-DD (BR-CPF-005). */\nexport function applyCpfMask(canonical: string): string {\n const match = CPF_MASK_PATTERN.exec(canonical);\n if (!match) {\n throw new Error('CPF must have exactly 11 digits to apply mask');\n }\n return `${match[1]}.${match[2]}.${match[3]}-${match[4]}`;\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import { stripNfeChave } from './chunk-4SNBZFS5.js';
2
- import { brandNfeChave } from './chunk-4NFEM2SU.js';
2
+ import { brandNfeChave } from './chunk-EMZCVV5Y.js';
3
3
 
4
4
  // src/core/nfe-chave/constants.ts
5
5
  var NFE_CHAVE_OFFICIAL_SOURCE_URL = "https://www.nfe.fazenda.gov.br/portal/listaConteudo.aspx?tipoConteudo=ndIjl+iEFdE%3D";
@@ -203,5 +203,5 @@ function validateNfeChave(input) {
203
203
  }
204
204
 
205
205
  export { NFE_CHAVE_BASE_LENGTH, NFE_CHAVE_DFE_PORTAL_URL, NFE_CHAVE_GOLDEN_PRIMARY, NFE_CHAVE_GOLDEN_SECONDARY, NFE_CHAVE_LENGTH, NFE_CHAVE_MOC_DV_SECTION_URL, NFE_CHAVE_MOC_ONLINE_URL, NFE_CHAVE_MOC_PDF_URL, NFE_CHAVE_MOD, NFE_CHAVE_NFCE_QR_ILLUSTRATIVE, NFE_CHAVE_NFCE_QR_ILLUSTRATIVE_URL, NFE_CHAVE_NUMERIC_PATTERN, NFE_CHAVE_OFFICIAL_SOURCE_URL, NFE_CHAVE_WEIGHT_CYCLE, NFE_IBGE_UF_BY_CODE, NFE_IBGE_UF_CODES, NFE_MODELOS, NFE_MODELO_NFCE, NFE_MODELO_NFE, computeNfeChaveCheckDigit, computeNfeChaveWeightedSum, isValidNfeChave, isValidNfeChaveCheckDigit, parseNfeChave, parseNfeChaveParts, resolveNfeChaveCheckDigit, validateNfeChave };
206
- //# sourceMappingURL=chunk-IJ2DAVSD.js.map
207
- //# sourceMappingURL=chunk-IJ2DAVSD.js.map
206
+ //# sourceMappingURL=chunk-OM5ELPM6.js.map
207
+ //# sourceMappingURL=chunk-OM5ELPM6.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/core/nfe-chave/constants.ts","../src/core/nfe-chave/dv.ts","../src/core/nfe-chave/parse.ts","../src/core/nfe-chave/index.ts"],"names":[],"mappings":"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","file":"chunk-IJ2DAVSD.js","sourcesContent":["/**\n * NF-e / NFC-e chave de acesso — 44 digits (ENCAT / SEFAZ MOC).\n * @see https://www.nfe.fazenda.gov.br/portal/listaConteudo.aspx?tipoConteudo=ndIjl+iEFdE%3D — MOC 7.0 index\n * @see http://moc.sped.fazenda.pr.gov.br/ — MOC online (SEFAZ-PR mirror), §2.2.6\n * @see https://www.confaz.fazenda.gov.br/legislacao/arquivo-manuais/moc7-visao-geral.pdf — MOC 7.0 §2.2.6.1–2.2.6.2\n */\nimport type { UfCode } from '../../types/validation-result.js';\n\nexport const NFE_CHAVE_OFFICIAL_SOURCE_URL =\n 'https://www.nfe.fazenda.gov.br/portal/listaConteudo.aspx?tipoConteudo=ndIjl+iEFdE%3D';\n\nexport const NFE_CHAVE_MOC_ONLINE_URL = 'http://moc.sped.fazenda.pr.gov.br/';\n\nexport const NFE_CHAVE_MOC_DV_SECTION_URL =\n 'http://moc.sped.fazenda.pr.gov.br/#2.2.6.2. Cálculo do Dígito Verificador da Chave de Acesso da NF-e';\n\nexport const NFE_CHAVE_MOC_PDF_URL =\n 'https://www.confaz.fazenda.gov.br/legislacao/arquivo-manuais/moc7-visao-geral.pdf';\n\nexport const NFE_CHAVE_DFE_PORTAL_URL = 'https://dfe-portal.svrs.rs.gov.br/NFe/Documentos';\n\n/** MOC DANFE NFC-e QR Code page — illustrative chave (DV inconsistent with §2.2.6.2). */\nexport const NFE_CHAVE_NFCE_QR_ILLUSTRATIVE_URL =\n 'http://moc.sped.fazenda.pr.gov.br/DanfeQrCodeNFCe.html';\n\nexport const NFE_CHAVE_LENGTH = 44;\nexport const NFE_CHAVE_BASE_LENGTH = 43;\nexport const NFE_CHAVE_MOD = 11;\nexport const NFE_CHAVE_WEIGHT_CYCLE = [2, 3, 4, 5, 6, 7, 8, 9] as const;\nexport const NFE_CHAVE_NUMERIC_PATTERN = /^\\d{44}$/;\n\n/**\n * Golden primary — MOC §2.2.6.2 worked example (sum=644, remainder=6, DV=5).\n * Base 43 digits from MOC table; DV appended per modulo-11 rule.\n */\nexport const NFE_CHAVE_GOLDEN_PRIMARY = '52060433009911002506550120000007800267301615';\n\n/** Secondary valid vector from MOC online examples. */\nexport const NFE_CHAVE_GOLDEN_SECONDARY = '41180678393592000146558900000006041028190697';\n\n/** MOC NFC-e QR page illustrative chave — fails DV under §2.2.6.2 (not used as valid golden). */\nexport const NFE_CHAVE_NFCE_QR_ILLUSTRATIVE = '28170800156225000131650110000151341562040824';\n\nexport const NFE_MODELO_NFE = '55';\nexport const NFE_MODELO_NFCE = '65';\nexport const NFE_MODELOS = [NFE_MODELO_NFE, NFE_MODELO_NFCE] as const;\n\n/** IBGE UF codes valid in cUF (positions 1–2). */\nexport const NFE_IBGE_UF_CODES = new Set<number>([\n 11, 12, 13, 14, 15, 16, 17,\n 21, 22, 23, 24, 25, 26, 27, 28, 29,\n 31, 32, 33, 35,\n 41, 42, 43,\n 50, 51, 52, 53,\n]);\n\n/** IBGE cUF → Brazilian UF sigla. */\nexport const NFE_IBGE_UF_BY_CODE: Readonly<Record<number, UfCode>> = {\n 11: 'RO',\n 12: 'AC',\n 13: 'AM',\n 14: 'RR',\n 15: 'PA',\n 16: 'AP',\n 17: 'TO',\n 21: 'MA',\n 22: 'PI',\n 23: 'CE',\n 24: 'RN',\n 25: 'PB',\n 26: 'PE',\n 27: 'AL',\n 28: 'SE',\n 29: 'BA',\n 31: 'MG',\n 32: 'ES',\n 33: 'RJ',\n 35: 'SP',\n 41: 'PR',\n 42: 'SC',\n 43: 'RS',\n 50: 'MS',\n 51: 'MT',\n 52: 'GO',\n 53: 'DF',\n};\n","/**\n * NF-e chave de acesso DV — modulo 11, weights 2..9 right-to-left (MOC §2.2.6.2).\n * @see http://moc.sped.fazenda.pr.gov.br/#2.2.6.2. Cálculo do Dígito Verificador da Chave de Acesso da NF-e\n */\nimport { NFE_CHAVE_BASE_LENGTH } from './constants.js';\n\nexport function computeNfeChaveWeightedSum(base43: string): number {\n let multiplier = 2;\n let sum = 0;\n\n for (let i = base43.length - 1; i >= 0; i--) {\n sum += Number(base43[i]) * multiplier;\n multiplier = multiplier >= 9 ? 2 : multiplier + 1;\n }\n\n return sum;\n}\n\nexport function resolveNfeChaveCheckDigit(weightedSum: number): number {\n const remainder = weightedSum % 11;\n return remainder < 2 ? 0 : 11 - remainder;\n}\n\n/** Compute DV for the first 43 digits of a chave de acesso. */\nexport function computeNfeChaveCheckDigit(base43: string): number {\n if (base43.length !== NFE_CHAVE_BASE_LENGTH) {\n throw new Error(`NF-e chave base must have exactly ${NFE_CHAVE_BASE_LENGTH} digits`);\n }\n return resolveNfeChaveCheckDigit(computeNfeChaveWeightedSum(base43));\n}\n\nexport function isValidNfeChaveCheckDigit(stripped: string): boolean {\n const base = stripped.slice(0, NFE_CHAVE_BASE_LENGTH);\n const expected = String(computeNfeChaveCheckDigit(base));\n return stripped[NFE_CHAVE_BASE_LENGTH] === expected;\n}\n","import { NFE_CHAVE_LENGTH } from './constants.js';\n\nexport type NfeChaveParts = {\n cUF: string;\n aamm: string;\n cnpj: string;\n mod: string;\n serie: string;\n nNF: string;\n tpEmis: string;\n cNF: string;\n cDV: string;\n};\n\nexport function parseNfeChaveParts(stripped: string): NfeChaveParts | null {\n if (stripped.length !== NFE_CHAVE_LENGTH) {\n return null;\n }\n\n return {\n cUF: stripped.slice(0, 2),\n aamm: stripped.slice(2, 6),\n cnpj: stripped.slice(6, 20),\n mod: stripped.slice(20, 22),\n serie: stripped.slice(22, 25),\n nNF: stripped.slice(25, 34),\n tpEmis: stripped.slice(34, 35),\n cNF: stripped.slice(35, 43),\n cDV: stripped.slice(43, 44),\n };\n}\n","/**\n * NF-e / NFC-e chave de acesso validation — 44 digits, modulo-11 DV (MOC §2.2.6).\n * @see http://moc.sped.fazenda.pr.gov.br/#2.2.6.2. Cálculo do Dígito Verificador da Chave de Acesso da NF-e\n */\nimport { stripNfeChave } from '../../strip/nfe-chave.js';\nimport type { NfeChaveValidationResult, UfCode } from '../../types/validation-result.js';\nimport { brandNfeChave } from '../../types/validation-result.js';\nimport {\n NFE_CHAVE_LENGTH,\n NFE_IBGE_UF_BY_CODE,\n NFE_IBGE_UF_CODES,\n NFE_MODELOS,\n} from './constants.js';\nimport { isValidNfeChaveCheckDigit } from './dv.js';\nimport { parseNfeChaveParts, type NfeChaveParts } from './parse.js';\n\nexport {\n NFE_CHAVE_BASE_LENGTH,\n NFE_CHAVE_DFE_PORTAL_URL,\n NFE_CHAVE_GOLDEN_PRIMARY,\n NFE_CHAVE_GOLDEN_SECONDARY,\n NFE_CHAVE_LENGTH,\n NFE_CHAVE_MOD,\n NFE_CHAVE_MOC_DV_SECTION_URL,\n NFE_CHAVE_MOC_ONLINE_URL,\n NFE_CHAVE_MOC_PDF_URL,\n NFE_CHAVE_NFCE_QR_ILLUSTRATIVE,\n NFE_CHAVE_NFCE_QR_ILLUSTRATIVE_URL,\n NFE_CHAVE_NUMERIC_PATTERN,\n NFE_CHAVE_OFFICIAL_SOURCE_URL,\n NFE_CHAVE_WEIGHT_CYCLE,\n NFE_IBGE_UF_BY_CODE,\n NFE_IBGE_UF_CODES,\n NFE_MODELO_NFCE,\n NFE_MODELO_NFE,\n NFE_MODELOS,\n} from './constants.js';\nexport {\n computeNfeChaveCheckDigit,\n computeNfeChaveWeightedSum,\n isValidNfeChaveCheckDigit,\n resolveNfeChaveCheckDigit,\n} from './dv.js';\nexport { parseNfeChaveParts, type NfeChaveParts } from './parse.js';\n\ntype FailedResult = Extract<NfeChaveValidationResult, { ok: false }>;\n\nfunction failure(code: FailedResult['code'], message: string): FailedResult {\n return { ok: false, code, message };\n}\n\nfunction isKnownModel(mod: string): boolean {\n return (NFE_MODELOS as readonly string[]).includes(mod);\n}\n\nfunction resolveUf(cuf: string): UfCode | undefined {\n return NFE_IBGE_UF_BY_CODE[Number(cuf)];\n}\n\ntype StructureResult =\n | { ok: false; error: FailedResult }\n | { ok: true; parts: NfeChaveParts };\n\nfunction validateStructure(input: string, stripped: string): StructureResult {\n if (stripped.length === 0) {\n return { ok: false, error: failure('EMPTY_INPUT', 'NF-e chave de acesso input is empty') };\n }\n\n const withoutMask = input.replace(/[\\s.]/g, '');\n if (/[^0-9]/.test(withoutMask)) {\n return { ok: false, error: failure('INVALID_CHARACTER', 'NF-e chave de acesso contains invalid characters') };\n }\n\n if (stripped.length !== NFE_CHAVE_LENGTH) {\n return {\n ok: false,\n error: failure(\n 'INVALID_LENGTH',\n `NF-e chave de acesso must have ${NFE_CHAVE_LENGTH} digits after normalization`,\n ),\n };\n }\n\n const parts = parseNfeChaveParts(stripped)!;\n const cufCode = Number(parts.cUF);\n if (!NFE_IBGE_UF_CODES.has(cufCode)) {\n return {\n ok: false,\n error: failure(\n 'KNOWN_INVALID_PATTERN',\n `NF-e chave cUF ${parts.cUF} is not a valid IBGE UF code`,\n ),\n };\n }\n\n if (!isKnownModel(parts.mod)) {\n return {\n ok: false,\n error: failure(\n 'KNOWN_INVALID_PATTERN',\n `NF-e chave modelo ${parts.mod} is not 55 (NF-e) or 65 (NFC-e)`,\n ),\n };\n }\n\n return { ok: true, parts };\n}\n\nfunction buildSuccess(stripped: string, parts: NfeChaveParts): Extract<NfeChaveValidationResult, { ok: true }> {\n const uf = resolveUf(parts.cUF);\n const success: Extract<NfeChaveValidationResult, { ok: true }> = {\n ok: true,\n value: brandNfeChave(stripped),\n format: 'numeric',\n parsed: parts,\n };\n if (uf !== undefined) {\n success.uf = uf;\n }\n return success;\n}\n\nexport function isValidNfeChave(input: string): boolean {\n return validateNfeChave(input).ok;\n}\n\nexport function parseNfeChave(input: string): NfeChaveValidationResult {\n const stripped = stripNfeChave(input);\n const structure = validateStructure(input, stripped);\n if (!structure.ok) {\n return structure.error;\n }\n\n if (!isValidNfeChaveCheckDigit(stripped)) {\n return failure('INVALID_CHECK_DIGIT', 'NF-e chave de acesso check digit is invalid');\n }\n\n return buildSuccess(stripped, structure.parts);\n}\n\nexport function validateNfeChave(input: string): NfeChaveValidationResult {\n return parseNfeChave(input);\n}\n"]}
1
+ {"version":3,"sources":["../src/core/nfe-chave/constants.ts","../src/core/nfe-chave/dv.ts","../src/core/nfe-chave/parse.ts","../src/core/nfe-chave/index.ts"],"names":[],"mappings":";;;;AAQO,IAAM,6BAAA,GACX;AAEK,IAAM,wBAAA,GAA2B;AAEjC,IAAM,4BAAA,GACX;AAEK,IAAM,qBAAA,GACX;AAEK,IAAM,wBAAA,GAA2B;AAGjC,IAAM,kCAAA,GACX;AAEK,IAAM,gBAAA,GAAmB;AACzB,IAAM,qBAAA,GAAwB;AAC9B,IAAM,aAAA,GAAgB;AACtB,IAAM,sBAAA,GAAyB,CAAC,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAC;AACtD,IAAM,yBAAA,GAA4B;AAMlC,IAAM,wBAAA,GAA2B;AAGjC,IAAM,0BAAA,GAA6B;AAGnC,IAAM,8BAAA,GAAiC;AAEvC,IAAM,cAAA,GAAiB;AACvB,IAAM,eAAA,GAAkB;AACxB,IAAM,WAAA,GAAc,CAAC,cAAA,EAAgB,eAAe;AAGpD,IAAM,iBAAA,uBAAwB,GAAA,CAAY;AAAA,EAC/C,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EACxB,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAChC,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EACZ,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EACR,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI;AACd,CAAC;AAGM,IAAM,mBAAA,GAAwD;AAAA,EACnE,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI;AACN;;;AC/EO,SAAS,2BAA2B,MAAA,EAAwB;AACjE,EAAA,IAAI,UAAA,GAAa,CAAA;AACjB,EAAA,IAAI,GAAA,GAAM,CAAA;AAEV,EAAA,KAAA,IAAS,IAAI,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG,CAAA,IAAK,GAAG,CAAA,EAAA,EAAK;AAC3C,IAAA,GAAA,IAAO,MAAA,CAAO,MAAA,CAAO,CAAC,CAAC,CAAA,GAAI,UAAA;AAC3B,IAAA,UAAA,GAAa,UAAA,IAAc,CAAA,GAAI,CAAA,GAAI,UAAA,GAAa,CAAA;AAAA,EAClD;AAEA,EAAA,OAAO,GAAA;AACT;AAEO,SAAS,0BAA0B,WAAA,EAA6B;AACrE,EAAA,MAAM,YAAY,WAAA,GAAc,EAAA;AAChC,EAAA,OAAO,SAAA,GAAY,CAAA,GAAI,CAAA,GAAI,EAAA,GAAK,SAAA;AAClC;AAGO,SAAS,0BAA0B,MAAA,EAAwB;AAChE,EAAA,IAAI,MAAA,CAAO,WAAW,qBAAA,EAAuB;AAC3C,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,kCAAA,EAAqC,qBAAqB,CAAA,OAAA,CAAS,CAAA;AAAA,EACrF;AACA,EAAA,OAAO,yBAAA,CAA0B,0BAAA,CAA2B,MAAM,CAAC,CAAA;AACrE;AAEO,SAAS,0BAA0B,QAAA,EAA2B;AACnE,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,KAAA,CAAM,CAAA,EAAG,qBAAqB,CAAA;AACpD,EAAA,MAAM,QAAA,GAAW,MAAA,CAAO,yBAAA,CAA0B,IAAI,CAAC,CAAA;AACvD,EAAA,OAAO,QAAA,CAAS,qBAAqB,CAAA,KAAM,QAAA;AAC7C;;;ACrBO,SAAS,mBAAmB,QAAA,EAAwC;AACzE,EAAA,IAAI,QAAA,CAAS,WAAW,gBAAA,EAAkB;AACxC,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,OAAO;AAAA,IACL,GAAA,EAAK,QAAA,CAAS,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA;AAAA,IACxB,IAAA,EAAM,QAAA,CAAS,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA;AAAA,IACzB,IAAA,EAAM,QAAA,CAAS,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAAA,IAC1B,GAAA,EAAK,QAAA,CAAS,KAAA,CAAM,EAAA,EAAI,EAAE,CAAA;AAAA,IAC1B,KAAA,EAAO,QAAA,CAAS,KAAA,CAAM,EAAA,EAAI,EAAE,CAAA;AAAA,IAC5B,GAAA,EAAK,QAAA,CAAS,KAAA,CAAM,EAAA,EAAI,EAAE,CAAA;AAAA,IAC1B,MAAA,EAAQ,QAAA,CAAS,KAAA,CAAM,EAAA,EAAI,EAAE,CAAA;AAAA,IAC7B,GAAA,EAAK,QAAA,CAAS,KAAA,CAAM,EAAA,EAAI,EAAE,CAAA;AAAA,IAC1B,GAAA,EAAK,QAAA,CAAS,KAAA,CAAM,EAAA,EAAI,EAAE;AAAA,GAC5B;AACF;;;ACiBA,SAAS,OAAA,CAAQ,MAA4B,OAAA,EAA+B;AAC1E,EAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,IAAA,EAAM,OAAA,EAAQ;AACpC;AAEA,SAAS,aAAa,GAAA,EAAsB;AAC1C,EAAA,OAAQ,WAAA,CAAkC,SAAS,GAAG,CAAA;AACxD;AAEA,SAAS,UAAU,GAAA,EAAiC;AAClD,EAAA,OAAO,mBAAA,CAAoB,MAAA,CAAO,GAAG,CAAC,CAAA;AACxC;AAMA,SAAS,iBAAA,CAAkB,OAAe,QAAA,EAAmC;AAC3E,EAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACzB,IAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,OAAO,OAAA,CAAQ,aAAA,EAAe,qCAAqC,CAAA,EAAE;AAAA,EAC3F;AAEA,EAAA,MAAM,WAAA,GAAc,KAAA,CAAM,OAAA,CAAQ,QAAA,EAAU,EAAE,CAAA;AAC9C,EAAA,IAAI,QAAA,CAAS,IAAA,CAAK,WAAW,CAAA,EAAG;AAC9B,IAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,OAAO,OAAA,CAAQ,mBAAA,EAAqB,kDAAkD,CAAA,EAAE;AAAA,EAC9G;AAEA,EAAA,IAAI,QAAA,CAAS,WAAW,gBAAA,EAAkB;AACxC,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,KAAA;AAAA,MACJ,KAAA,EAAO,OAAA;AAAA,QACL,gBAAA;AAAA,QACA,kCAAkC,gBAAgB,CAAA,2BAAA;AAAA;AACpD,KACF;AAAA,EACF;AAEA,EAAA,MAAM,KAAA,GAAQ,mBAAmB,QAAQ,CAAA;AACzC,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,KAAA,CAAM,GAAG,CAAA;AAChC,EAAA,IAAI,CAAC,iBAAA,CAAkB,GAAA,CAAI,OAAO,CAAA,EAAG;AACnC,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,KAAA;AAAA,MACJ,KAAA,EAAO,OAAA;AAAA,QACL,uBAAA;AAAA,QACA,CAAA,eAAA,EAAkB,MAAM,GAAG,CAAA,4BAAA;AAAA;AAC7B,KACF;AAAA,EACF;AAEA,EAAA,IAAI,CAAC,YAAA,CAAa,KAAA,CAAM,GAAG,CAAA,EAAG;AAC5B,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,KAAA;AAAA,MACJ,KAAA,EAAO,OAAA;AAAA,QACL,uBAAA;AAAA,QACA,CAAA,kBAAA,EAAqB,MAAM,GAAG,CAAA,+BAAA;AAAA;AAChC,KACF;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,KAAA,EAAM;AAC3B;AAEA,SAAS,YAAA,CAAa,UAAkB,KAAA,EAAuE;AAC7G,EAAA,MAAM,EAAA,GAAK,SAAA,CAAU,KAAA,CAAM,GAAG,CAAA;AAC9B,EAAA,MAAM,OAAA,GAA2D;AAAA,IAC/D,EAAA,EAAI,IAAA;AAAA,IACJ,KAAA,EAAO,cAAc,QAAQ,CAAA;AAAA,IAC7B,MAAA,EAAQ,SAAA;AAAA,IACR,MAAA,EAAQ;AAAA,GACV;AACA,EAAA,IAAI,OAAO,MAAA,EAAW;AACpB,IAAA,OAAA,CAAQ,EAAA,GAAK,EAAA;AAAA,EACf;AACA,EAAA,OAAO,OAAA;AACT;AAEO,SAAS,gBAAgB,KAAA,EAAwB;AACtD,EAAA,OAAO,gBAAA,CAAiB,KAAK,CAAA,CAAE,EAAA;AACjC;AAEO,SAAS,cAAc,KAAA,EAAyC;AACrE,EAAA,MAAM,QAAA,GAAW,cAAc,KAAK,CAAA;AACpC,EAAA,MAAM,SAAA,GAAY,iBAAA,CAAkB,KAAA,EAAO,QAAQ,CAAA;AACnD,EAAA,IAAI,CAAC,UAAU,EAAA,EAAI;AACjB,IAAA,OAAO,SAAA,CAAU,KAAA;AAAA,EACnB;AAEA,EAAA,IAAI,CAAC,yBAAA,CAA0B,QAAQ,CAAA,EAAG;AACxC,IAAA,OAAO,OAAA,CAAQ,uBAAuB,6CAA6C,CAAA;AAAA,EACrF;AAEA,EAAA,OAAO,YAAA,CAAa,QAAA,EAAU,SAAA,CAAU,KAAK,CAAA;AAC/C;AAEO,SAAS,iBAAiB,KAAA,EAAyC;AACxE,EAAA,OAAO,cAAc,KAAK,CAAA;AAC5B","file":"chunk-OM5ELPM6.js","sourcesContent":["/**\n * NF-e / NFC-e chave de acesso — 44 digits (ENCAT / SEFAZ MOC).\n * @see https://www.nfe.fazenda.gov.br/portal/listaConteudo.aspx?tipoConteudo=ndIjl+iEFdE%3D — MOC 7.0 index\n * @see http://moc.sped.fazenda.pr.gov.br/ — MOC online (SEFAZ-PR mirror), §2.2.6\n * @see https://www.confaz.fazenda.gov.br/legislacao/arquivo-manuais/moc7-visao-geral.pdf — MOC 7.0 §2.2.6.1–2.2.6.2\n */\nimport type { UfCode } from '../../types/validation-result.js';\n\nexport const NFE_CHAVE_OFFICIAL_SOURCE_URL =\n 'https://www.nfe.fazenda.gov.br/portal/listaConteudo.aspx?tipoConteudo=ndIjl+iEFdE%3D';\n\nexport const NFE_CHAVE_MOC_ONLINE_URL = 'http://moc.sped.fazenda.pr.gov.br/';\n\nexport const NFE_CHAVE_MOC_DV_SECTION_URL =\n 'http://moc.sped.fazenda.pr.gov.br/#2.2.6.2. Cálculo do Dígito Verificador da Chave de Acesso da NF-e';\n\nexport const NFE_CHAVE_MOC_PDF_URL =\n 'https://www.confaz.fazenda.gov.br/legislacao/arquivo-manuais/moc7-visao-geral.pdf';\n\nexport const NFE_CHAVE_DFE_PORTAL_URL = 'https://dfe-portal.svrs.rs.gov.br/NFe/Documentos';\n\n/** MOC DANFE NFC-e QR Code page — illustrative chave (DV inconsistent with §2.2.6.2). */\nexport const NFE_CHAVE_NFCE_QR_ILLUSTRATIVE_URL =\n 'http://moc.sped.fazenda.pr.gov.br/DanfeQrCodeNFCe.html';\n\nexport const NFE_CHAVE_LENGTH = 44;\nexport const NFE_CHAVE_BASE_LENGTH = 43;\nexport const NFE_CHAVE_MOD = 11;\nexport const NFE_CHAVE_WEIGHT_CYCLE = [2, 3, 4, 5, 6, 7, 8, 9] as const;\nexport const NFE_CHAVE_NUMERIC_PATTERN = /^\\d{44}$/;\n\n/**\n * Golden primary — MOC §2.2.6.2 worked example (sum=644, remainder=6, DV=5).\n * Base 43 digits from MOC table; DV appended per modulo-11 rule.\n */\nexport const NFE_CHAVE_GOLDEN_PRIMARY = '52060433009911002506550120000007800267301615';\n\n/** Secondary valid vector from MOC online examples. */\nexport const NFE_CHAVE_GOLDEN_SECONDARY = '41180678393592000146558900000006041028190697';\n\n/** MOC NFC-e QR page illustrative chave — fails DV under §2.2.6.2 (not used as valid golden). */\nexport const NFE_CHAVE_NFCE_QR_ILLUSTRATIVE = '28170800156225000131650110000151341562040824';\n\nexport const NFE_MODELO_NFE = '55';\nexport const NFE_MODELO_NFCE = '65';\nexport const NFE_MODELOS = [NFE_MODELO_NFE, NFE_MODELO_NFCE] as const;\n\n/** IBGE UF codes valid in cUF (positions 1–2). */\nexport const NFE_IBGE_UF_CODES = new Set<number>([\n 11, 12, 13, 14, 15, 16, 17,\n 21, 22, 23, 24, 25, 26, 27, 28, 29,\n 31, 32, 33, 35,\n 41, 42, 43,\n 50, 51, 52, 53,\n]);\n\n/** IBGE cUF → Brazilian UF sigla. */\nexport const NFE_IBGE_UF_BY_CODE: Readonly<Record<number, UfCode>> = {\n 11: 'RO',\n 12: 'AC',\n 13: 'AM',\n 14: 'RR',\n 15: 'PA',\n 16: 'AP',\n 17: 'TO',\n 21: 'MA',\n 22: 'PI',\n 23: 'CE',\n 24: 'RN',\n 25: 'PB',\n 26: 'PE',\n 27: 'AL',\n 28: 'SE',\n 29: 'BA',\n 31: 'MG',\n 32: 'ES',\n 33: 'RJ',\n 35: 'SP',\n 41: 'PR',\n 42: 'SC',\n 43: 'RS',\n 50: 'MS',\n 51: 'MT',\n 52: 'GO',\n 53: 'DF',\n};\n","/**\n * NF-e chave de acesso DV — modulo 11, weights 2..9 right-to-left (MOC §2.2.6.2).\n * @see http://moc.sped.fazenda.pr.gov.br/#2.2.6.2. Cálculo do Dígito Verificador da Chave de Acesso da NF-e\n */\nimport { NFE_CHAVE_BASE_LENGTH } from './constants.js';\n\nexport function computeNfeChaveWeightedSum(base43: string): number {\n let multiplier = 2;\n let sum = 0;\n\n for (let i = base43.length - 1; i >= 0; i--) {\n sum += Number(base43[i]) * multiplier;\n multiplier = multiplier >= 9 ? 2 : multiplier + 1;\n }\n\n return sum;\n}\n\nexport function resolveNfeChaveCheckDigit(weightedSum: number): number {\n const remainder = weightedSum % 11;\n return remainder < 2 ? 0 : 11 - remainder;\n}\n\n/** Compute DV for the first 43 digits of a chave de acesso. */\nexport function computeNfeChaveCheckDigit(base43: string): number {\n if (base43.length !== NFE_CHAVE_BASE_LENGTH) {\n throw new Error(`NF-e chave base must have exactly ${NFE_CHAVE_BASE_LENGTH} digits`);\n }\n return resolveNfeChaveCheckDigit(computeNfeChaveWeightedSum(base43));\n}\n\nexport function isValidNfeChaveCheckDigit(stripped: string): boolean {\n const base = stripped.slice(0, NFE_CHAVE_BASE_LENGTH);\n const expected = String(computeNfeChaveCheckDigit(base));\n return stripped[NFE_CHAVE_BASE_LENGTH] === expected;\n}\n","import { NFE_CHAVE_LENGTH } from './constants.js';\n\nexport type NfeChaveParts = {\n cUF: string;\n aamm: string;\n cnpj: string;\n mod: string;\n serie: string;\n nNF: string;\n tpEmis: string;\n cNF: string;\n cDV: string;\n};\n\nexport function parseNfeChaveParts(stripped: string): NfeChaveParts | null {\n if (stripped.length !== NFE_CHAVE_LENGTH) {\n return null;\n }\n\n return {\n cUF: stripped.slice(0, 2),\n aamm: stripped.slice(2, 6),\n cnpj: stripped.slice(6, 20),\n mod: stripped.slice(20, 22),\n serie: stripped.slice(22, 25),\n nNF: stripped.slice(25, 34),\n tpEmis: stripped.slice(34, 35),\n cNF: stripped.slice(35, 43),\n cDV: stripped.slice(43, 44),\n };\n}\n","/**\n * NF-e / NFC-e chave de acesso validation — 44 digits, modulo-11 DV (MOC §2.2.6).\n * @see http://moc.sped.fazenda.pr.gov.br/#2.2.6.2. Cálculo do Dígito Verificador da Chave de Acesso da NF-e\n */\nimport { stripNfeChave } from '../../strip/nfe-chave.js';\nimport type { NfeChaveValidationResult, UfCode } from '../../types/validation-result.js';\nimport { brandNfeChave } from '../../types/validation-result.js';\nimport {\n NFE_CHAVE_LENGTH,\n NFE_IBGE_UF_BY_CODE,\n NFE_IBGE_UF_CODES,\n NFE_MODELOS,\n} from './constants.js';\nimport { isValidNfeChaveCheckDigit } from './dv.js';\nimport { parseNfeChaveParts, type NfeChaveParts } from './parse.js';\n\nexport {\n NFE_CHAVE_BASE_LENGTH,\n NFE_CHAVE_DFE_PORTAL_URL,\n NFE_CHAVE_GOLDEN_PRIMARY,\n NFE_CHAVE_GOLDEN_SECONDARY,\n NFE_CHAVE_LENGTH,\n NFE_CHAVE_MOD,\n NFE_CHAVE_MOC_DV_SECTION_URL,\n NFE_CHAVE_MOC_ONLINE_URL,\n NFE_CHAVE_MOC_PDF_URL,\n NFE_CHAVE_NFCE_QR_ILLUSTRATIVE,\n NFE_CHAVE_NFCE_QR_ILLUSTRATIVE_URL,\n NFE_CHAVE_NUMERIC_PATTERN,\n NFE_CHAVE_OFFICIAL_SOURCE_URL,\n NFE_CHAVE_WEIGHT_CYCLE,\n NFE_IBGE_UF_BY_CODE,\n NFE_IBGE_UF_CODES,\n NFE_MODELO_NFCE,\n NFE_MODELO_NFE,\n NFE_MODELOS,\n} from './constants.js';\nexport {\n computeNfeChaveCheckDigit,\n computeNfeChaveWeightedSum,\n isValidNfeChaveCheckDigit,\n resolveNfeChaveCheckDigit,\n} from './dv.js';\nexport { parseNfeChaveParts, type NfeChaveParts } from './parse.js';\n\ntype FailedResult = Extract<NfeChaveValidationResult, { ok: false }>;\n\nfunction failure(code: FailedResult['code'], message: string): FailedResult {\n return { ok: false, code, message };\n}\n\nfunction isKnownModel(mod: string): boolean {\n return (NFE_MODELOS as readonly string[]).includes(mod);\n}\n\nfunction resolveUf(cuf: string): UfCode | undefined {\n return NFE_IBGE_UF_BY_CODE[Number(cuf)];\n}\n\ntype StructureResult =\n | { ok: false; error: FailedResult }\n | { ok: true; parts: NfeChaveParts };\n\nfunction validateStructure(input: string, stripped: string): StructureResult {\n if (stripped.length === 0) {\n return { ok: false, error: failure('EMPTY_INPUT', 'NF-e chave de acesso input is empty') };\n }\n\n const withoutMask = input.replace(/[\\s.]/g, '');\n if (/[^0-9]/.test(withoutMask)) {\n return { ok: false, error: failure('INVALID_CHARACTER', 'NF-e chave de acesso contains invalid characters') };\n }\n\n if (stripped.length !== NFE_CHAVE_LENGTH) {\n return {\n ok: false,\n error: failure(\n 'INVALID_LENGTH',\n `NF-e chave de acesso must have ${NFE_CHAVE_LENGTH} digits after normalization`,\n ),\n };\n }\n\n const parts = parseNfeChaveParts(stripped)!;\n const cufCode = Number(parts.cUF);\n if (!NFE_IBGE_UF_CODES.has(cufCode)) {\n return {\n ok: false,\n error: failure(\n 'KNOWN_INVALID_PATTERN',\n `NF-e chave cUF ${parts.cUF} is not a valid IBGE UF code`,\n ),\n };\n }\n\n if (!isKnownModel(parts.mod)) {\n return {\n ok: false,\n error: failure(\n 'KNOWN_INVALID_PATTERN',\n `NF-e chave modelo ${parts.mod} is not 55 (NF-e) or 65 (NFC-e)`,\n ),\n };\n }\n\n return { ok: true, parts };\n}\n\nfunction buildSuccess(stripped: string, parts: NfeChaveParts): Extract<NfeChaveValidationResult, { ok: true }> {\n const uf = resolveUf(parts.cUF);\n const success: Extract<NfeChaveValidationResult, { ok: true }> = {\n ok: true,\n value: brandNfeChave(stripped),\n format: 'numeric',\n parsed: parts,\n };\n if (uf !== undefined) {\n success.uf = uf;\n }\n return success;\n}\n\nexport function isValidNfeChave(input: string): boolean {\n return validateNfeChave(input).ok;\n}\n\nexport function parseNfeChave(input: string): NfeChaveValidationResult {\n const stripped = stripNfeChave(input);\n const structure = validateStructure(input, stripped);\n if (!structure.ok) {\n return structure.error;\n }\n\n if (!isValidNfeChaveCheckDigit(stripped)) {\n return failure('INVALID_CHECK_DIGIT', 'NF-e chave de acesso check digit is invalid');\n }\n\n return buildSuccess(stripped, structure.parts);\n}\n\nexport function validateNfeChave(input: string): NfeChaveValidationResult {\n return parseNfeChave(input);\n}\n"]}
@@ -0,0 +1,31 @@
1
+ // src/ibpt/data/metadata.json
2
+ var metadata_default = {
3
+ id: "ibpt",
4
+ nome: "IBPT \u2014 Carga tribut\xE1ria aproximada por NCM (Lei 12.741/2012)",
5
+ fonte: "IBPT \u2014 De Olho no Imposto (tabelas oficiais NCM \xD7 UF)",
6
+ endpoints: [
7
+ "https://deolhonoimposto.ibpt.org.br/",
8
+ "https://ibpt.valraw.com.br/api/2026/26.1.H/ncm/SP.json.gz"
9
+ ],
10
+ capturadoEm: "2026-06-25",
11
+ atualizadoEm: "2026-06-25T15:00:00.000Z",
12
+ contagens: {
13
+ cargas: 5
14
+ },
15
+ alteracoes: {
16
+ adicionados: 0,
17
+ removidos: 0,
18
+ alterados: 0,
19
+ comparadoCom: null
20
+ },
21
+ verificacao: {
22
+ agendamento: "semestral",
23
+ workflow: "data-refresh-bot.yml",
24
+ ultimaExecucao: "2026-06-25T15:00:00.000Z"
25
+ },
26
+ documentacao: "docs/OFFICIAL-SOURCES.md#ibpt-carga-tributaria-ncm"
27
+ };
28
+
29
+ export { metadata_default };
30
+ //# sourceMappingURL=chunk-OPFCKUFX.js.map
31
+ //# sourceMappingURL=chunk-OPFCKUFX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ibpt/data/metadata.json"],"names":[],"mappings":";AAAA,IAAA,gBAAA,GAAA;AAAA,EACE,EAAA,EAAM,MAAA;AAAA,EACN,IAAA,EAAQ,sEAAA;AAAA,EACR,KAAA,EAAS,+DAAA;AAAA,EACT,SAAA,EAAa;AAAA,IACX,sCAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA,WAAA,EAAe,YAAA;AAAA,EACf,YAAA,EAAgB,0BAAA;AAAA,EAChB,SAAA,EAAa;AAAA,IACX,MAAA,EAAU;AAAA,GACZ;AAAA,EACA,UAAA,EAAc;AAAA,IACZ,WAAA,EAAe,CAAA;AAAA,IACf,SAAA,EAAa,CAAA;AAAA,IACb,SAAA,EAAa,CAAA;AAAA,IACb,YAAA,EAAgB;AAAA,GAClB;AAAA,EACA,WAAA,EAAe;AAAA,IACb,WAAA,EAAe,WAAA;AAAA,IACf,QAAA,EAAY,sBAAA;AAAA,IACZ,cAAA,EAAkB;AAAA,GACpB;AAAA,EACA,YAAA,EAAgB;AAClB","file":"chunk-OPFCKUFX.js","sourcesContent":["{\n \"id\": \"ibpt\",\n \"nome\": \"IBPT — Carga tributária aproximada por NCM (Lei 12.741/2012)\",\n \"fonte\": \"IBPT — De Olho no Imposto (tabelas oficiais NCM × UF)\",\n \"endpoints\": [\n \"https://deolhonoimposto.ibpt.org.br/\",\n \"https://ibpt.valraw.com.br/api/2026/26.1.H/ncm/SP.json.gz\"\n ],\n \"capturadoEm\": \"2026-06-25\",\n \"atualizadoEm\": \"2026-06-25T15:00:00.000Z\",\n \"contagens\": {\n \"cargas\": 5\n },\n \"alteracoes\": {\n \"adicionados\": 0,\n \"removidos\": 0,\n \"alterados\": 0,\n \"comparadoCom\": null\n },\n \"verificacao\": {\n \"agendamento\": \"semestral\",\n \"workflow\": \"data-refresh-bot.yml\",\n \"ultimaExecucao\": \"2026-06-25T15:00:00.000Z\"\n },\n \"documentacao\": \"docs/OFFICIAL-SOURCES.md#ibpt-carga-tributaria-ncm\"\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import { stripPlaca } from './chunk-YYHS5WQN.js';
2
- import { brandPlaca } from './chunk-4NFEM2SU.js';
2
+ import { brandPlaca } from './chunk-EMZCVV5Y.js';
3
3
 
4
4
  // src/core/placa/constants.ts
5
5
  var PLACA_LENGTH = 7;
@@ -102,5 +102,5 @@ function validatePlaca(input) {
102
102
  }
103
103
 
104
104
  export { PLACA_GOLDEN_CONVERSION_FROM, PLACA_GOLDEN_CONVERSION_TO, PLACA_GOLDEN_LEGACY, PLACA_GOLDEN_MERCOSUL, PLACA_LEGACY_PATTERN, PLACA_LENGTH, PLACA_MERCOSUL_PATTERN, PLACA_OFFICIAL_SOURCE_URL, convertPlacaToMercosul, detectPlacaFormat, isValidPlaca, isValidPlacaLegacy, isValidPlacaMercosul, validatePlaca };
105
- //# sourceMappingURL=chunk-2JSOXG2M.js.map
106
- //# sourceMappingURL=chunk-2JSOXG2M.js.map
105
+ //# sourceMappingURL=chunk-P37C3MVF.js.map
106
+ //# sourceMappingURL=chunk-P37C3MVF.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/core/placa/constants.ts","../src/core/placa/detect.ts","../src/core/placa/legacy.ts","../src/core/placa/mercosul.ts","../src/core/placa/convert.ts","../src/core/placa/index.ts"],"names":["failure"],"mappings":"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","file":"chunk-2JSOXG2M.js","sourcesContent":["/**\n * License plate patterns — CONTRAN 729/2018 (legacy + Mercosul).\n * @see https://www.gov.br/transportes/pt-br/assuntos/transito/conteudo-contran/resolucoes/resolucao7292018consolidada.pdf\n * @see docs/use-cases/UC-004-validate-placa.md — golden vectors ABC1D23, ABC1234\n */\nexport const PLACA_LENGTH = 7;\nexport const PLACA_LEGACY_PATTERN = /^[A-Z]{3}[0-9]{4}$/;\nexport const PLACA_MERCOSUL_PATTERN = /^[A-Z]{3}[0-9][A-Z0-9][0-9]{2}$/;\nexport const PLACA_LEGACY_TO_MERCOSUL_MAP: Record<string, string> = {\n '0': 'A',\n '1': 'B',\n '2': 'C',\n '3': 'D',\n '4': 'E',\n '5': 'F',\n '6': 'G',\n '7': 'H',\n '8': 'I',\n '9': 'J',\n};\nexport const PLACA_GOLDEN_MERCOSUL = 'ABC1D23';\nexport const PLACA_GOLDEN_LEGACY = 'ABC1234';\nexport const PLACA_GOLDEN_CONVERSION_FROM = 'ABC1234';\nexport const PLACA_GOLDEN_CONVERSION_TO = 'ABC1C34';\nexport const PLACA_OFFICIAL_SOURCE_URL =\n 'https://www.gov.br/transportes/pt-br/assuntos/transito/conteudo-contran/resolucoes/resolucao7292018consolidada.pdf';\n","/**\n * License plate format detection — legacy vs Mercosul (CONTRAN).\n * @see https://www.gov.br/transportes/pt-br/assuntos/transito/conteudo-contran/resolucoes/resolucao7292018consolidada.pdf\n */\nimport { stripPlaca } from '../../strip/index.js';\nimport { PLACA_LENGTH, PLACA_LEGACY_PATTERN, PLACA_MERCOSUL_PATTERN } from './constants.js';\n\nexport type PlacaFormat = 'legacy' | 'mercosul' | 'unknown';\n\nexport function detectPlacaFormat(input: string): PlacaFormat {\n const stripped = stripPlaca(input);\n if (stripped.length !== PLACA_LENGTH) {\n return 'unknown';\n }\n if (PLACA_LEGACY_PATTERN.test(stripped)) {\n return 'legacy';\n }\n if (PLACA_MERCOSUL_PATTERN.test(stripped)) {\n return 'mercosul';\n }\n return 'unknown';\n}\n","/**\n * License plate — legacy format LLLNNNN (CONTRAN).\n * @see https://www.gov.br/transportes/pt-br/assuntos/transito/conteudo-contran/resolucoes/resolucao7292018consolidada.pdf\n */\nimport { stripPlaca } from '../../strip/index.js';\nimport { PLACA_LEGACY_PATTERN } from './constants.js';\n\nexport function isValidPlacaLegacy(input: string): boolean {\n const stripped = stripPlaca(input);\n return PLACA_LEGACY_PATTERN.test(stripped);\n}\n","/**\n * License plate — Mercosul format LLLNLNN (CONTRAN).\n * @see https://www.gov.br/transportes/pt-br/assuntos/transito/conteudo-contran/resolucoes/resolucao7292018consolidada.pdf\n */\nimport { stripPlaca } from '../../strip/index.js';\nimport { PLACA_MERCOSUL_PATTERN } from './constants.js';\n\nexport function isValidPlacaMercosul(input: string): boolean {\n const stripped = stripPlaca(input);\n return PLACA_MERCOSUL_PATTERN.test(stripped);\n}\n","/**\n * Legacy → Mercosul plate conversion (CONTRAN digit-to-letter table).\n * @see https://www.gov.br/transportes/pt-br/assuntos/transito/conteudo-contran/resolucoes/resolucao7292018consolidada.pdf\n */\nimport type { FormatResult } from '../../types/validation-result.js';\nimport { stripPlaca } from '../../strip/index.js';\nimport { PLACA_LEGACY_TO_MERCOSUL_MAP } from './constants.js';\nimport { detectPlacaFormat } from './detect.js';\n\ntype FailedResult = Extract<FormatResult, { ok: false }>;\n\nfunction failure(code: FailedResult['code'], message: string): FailedResult {\n return { ok: false, code, message };\n}\n\nexport function convertPlacaToMercosul(input: string): FormatResult {\n const stripped = stripPlaca(input);\n if (stripped.length === 0) {\n return failure('EMPTY_INPUT', 'Placa input is empty');\n }\n\n if (detectPlacaFormat(input) !== 'legacy') {\n return failure('UNSUPPORTED_FORMAT', 'Conversion requires a valid legacy plate (LLLNNNN)');\n }\n\n const prefix = stripped.slice(0, 4);\n const mapped = PLACA_LEGACY_TO_MERCOSUL_MAP[stripped.charAt(4)];\n const suffix = stripped.slice(5);\n return { ok: true, formatted: `${prefix}${mapped}${suffix}` };\n}\n","/**\n * License plate validation — legacy (LLLNNNN) + Mercosul (LLLNLNN). CONTRAN 729/2018.\n * @see https://www.gov.br/transportes/pt-br/assuntos/transito/conteudo-contran/resolucoes/resolucao7292018consolidada.pdf\n * @see docs/use-cases/UC-004-validate-placa.md — golden vectors ABC1D23, ABC1234\n */\nimport { stripPlaca } from '../../strip/index.js';\nimport type { DocumentFormat, Placa, ValidationResult } from '../../types/validation-result.js';\nimport { brandPlaca } from '../../types/validation-result.js';\nimport { detectPlacaFormat } from './detect.js';\nimport { PLACA_LENGTH } from './constants.js';\n\nexport {\n PLACA_GOLDEN_CONVERSION_FROM,\n PLACA_GOLDEN_CONVERSION_TO,\n PLACA_GOLDEN_LEGACY,\n PLACA_GOLDEN_MERCOSUL,\n PLACA_OFFICIAL_SOURCE_URL,\n} from './constants.js';\nexport { detectPlacaFormat, type PlacaFormat } from './detect.js';\nexport { isValidPlacaLegacy } from './legacy.js';\nexport { isValidPlacaMercosul } from './mercosul.js';\nexport { convertPlacaToMercosul } from './convert.js';\n\ntype FailedResult = Extract<ValidationResult, { ok: false }>;\n\nfunction failure(code: FailedResult['code'], message: string): FailedResult {\n return { ok: false, code, message };\n}\n\nfunction validateStructure(input: string, stripped: string): FailedResult | null {\n if (stripped.length === 0) {\n return failure('EMPTY_INPUT', 'Placa input is empty');\n }\n\n const withoutSeparators = input.replace(/[-\\s]/g, '');\n if (/[^A-Za-z0-9]/.test(withoutSeparators)) {\n return failure('INVALID_CHARACTER', 'Placa contains invalid characters');\n }\n\n if (stripped.length !== PLACA_LENGTH) {\n return failure('INVALID_LENGTH', `Placa must have ${PLACA_LENGTH} characters after normalization`);\n }\n\n return null;\n}\n\nexport function isValidPlaca(input: string): boolean {\n return validatePlaca(input).ok;\n}\n\nexport function validatePlaca(input: string): ValidationResult<Placa> {\n const stripped = stripPlaca(input);\n const structural = validateStructure(input, stripped);\n if (structural) {\n return structural;\n }\n\n const format = detectPlacaFormat(input);\n if (format === 'unknown') {\n return failure('UNSUPPORTED_FORMAT', 'Placa does not match legacy or Mercosul format');\n }\n\n return { ok: true, value: brandPlaca(stripped), format: format as DocumentFormat };\n}\n"]}
1
+ {"version":3,"sources":["../src/core/placa/constants.ts","../src/core/placa/detect.ts","../src/core/placa/legacy.ts","../src/core/placa/mercosul.ts","../src/core/placa/convert.ts","../src/core/placa/index.ts"],"names":["failure"],"mappings":"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","file":"chunk-P37C3MVF.js","sourcesContent":["/**\n * License plate patterns — CONTRAN 729/2018 (legacy + Mercosul).\n * @see https://www.gov.br/transportes/pt-br/assuntos/transito/conteudo-contran/resolucoes/resolucao7292018consolidada.pdf\n * @see docs/use-cases/UC-004-validate-placa.md — golden vectors ABC1D23, ABC1234\n */\nexport const PLACA_LENGTH = 7;\nexport const PLACA_LEGACY_PATTERN = /^[A-Z]{3}[0-9]{4}$/;\nexport const PLACA_MERCOSUL_PATTERN = /^[A-Z]{3}[0-9][A-Z0-9][0-9]{2}$/;\nexport const PLACA_LEGACY_TO_MERCOSUL_MAP: Record<string, string> = {\n '0': 'A',\n '1': 'B',\n '2': 'C',\n '3': 'D',\n '4': 'E',\n '5': 'F',\n '6': 'G',\n '7': 'H',\n '8': 'I',\n '9': 'J',\n};\nexport const PLACA_GOLDEN_MERCOSUL = 'ABC1D23';\nexport const PLACA_GOLDEN_LEGACY = 'ABC1234';\nexport const PLACA_GOLDEN_CONVERSION_FROM = 'ABC1234';\nexport const PLACA_GOLDEN_CONVERSION_TO = 'ABC1C34';\nexport const PLACA_OFFICIAL_SOURCE_URL =\n 'https://www.gov.br/transportes/pt-br/assuntos/transito/conteudo-contran/resolucoes/resolucao7292018consolidada.pdf';\n","/**\n * License plate format detection — legacy vs Mercosul (CONTRAN).\n * @see https://www.gov.br/transportes/pt-br/assuntos/transito/conteudo-contran/resolucoes/resolucao7292018consolidada.pdf\n */\nimport { stripPlaca } from '../../strip/index.js';\nimport { PLACA_LENGTH, PLACA_LEGACY_PATTERN, PLACA_MERCOSUL_PATTERN } from './constants.js';\n\nexport type PlacaFormat = 'legacy' | 'mercosul' | 'unknown';\n\nexport function detectPlacaFormat(input: string): PlacaFormat {\n const stripped = stripPlaca(input);\n if (stripped.length !== PLACA_LENGTH) {\n return 'unknown';\n }\n if (PLACA_LEGACY_PATTERN.test(stripped)) {\n return 'legacy';\n }\n if (PLACA_MERCOSUL_PATTERN.test(stripped)) {\n return 'mercosul';\n }\n return 'unknown';\n}\n","/**\n * License plate — legacy format LLLNNNN (CONTRAN).\n * @see https://www.gov.br/transportes/pt-br/assuntos/transito/conteudo-contran/resolucoes/resolucao7292018consolidada.pdf\n */\nimport { stripPlaca } from '../../strip/index.js';\nimport { PLACA_LEGACY_PATTERN } from './constants.js';\n\nexport function isValidPlacaLegacy(input: string): boolean {\n const stripped = stripPlaca(input);\n return PLACA_LEGACY_PATTERN.test(stripped);\n}\n","/**\n * License plate — Mercosul format LLLNLNN (CONTRAN).\n * @see https://www.gov.br/transportes/pt-br/assuntos/transito/conteudo-contran/resolucoes/resolucao7292018consolidada.pdf\n */\nimport { stripPlaca } from '../../strip/index.js';\nimport { PLACA_MERCOSUL_PATTERN } from './constants.js';\n\nexport function isValidPlacaMercosul(input: string): boolean {\n const stripped = stripPlaca(input);\n return PLACA_MERCOSUL_PATTERN.test(stripped);\n}\n","/**\n * Legacy → Mercosul plate conversion (CONTRAN digit-to-letter table).\n * @see https://www.gov.br/transportes/pt-br/assuntos/transito/conteudo-contran/resolucoes/resolucao7292018consolidada.pdf\n */\nimport type { FormatResult } from '../../types/validation-result.js';\nimport { stripPlaca } from '../../strip/index.js';\nimport { PLACA_LEGACY_TO_MERCOSUL_MAP } from './constants.js';\nimport { detectPlacaFormat } from './detect.js';\n\ntype FailedResult = Extract<FormatResult, { ok: false }>;\n\nfunction failure(code: FailedResult['code'], message: string): FailedResult {\n return { ok: false, code, message };\n}\n\nexport function convertPlacaToMercosul(input: string): FormatResult {\n const stripped = stripPlaca(input);\n if (stripped.length === 0) {\n return failure('EMPTY_INPUT', 'Placa input is empty');\n }\n\n if (detectPlacaFormat(input) !== 'legacy') {\n return failure('UNSUPPORTED_FORMAT', 'Conversion requires a valid legacy plate (LLLNNNN)');\n }\n\n const prefix = stripped.slice(0, 4);\n const mapped = PLACA_LEGACY_TO_MERCOSUL_MAP[stripped.charAt(4)];\n const suffix = stripped.slice(5);\n return { ok: true, formatted: `${prefix}${mapped}${suffix}` };\n}\n","/**\n * License plate validation — legacy (LLLNNNN) + Mercosul (LLLNLNN). CONTRAN 729/2018.\n * @see https://www.gov.br/transportes/pt-br/assuntos/transito/conteudo-contran/resolucoes/resolucao7292018consolidada.pdf\n * @see docs/use-cases/UC-004-validate-placa.md — golden vectors ABC1D23, ABC1234\n */\nimport { stripPlaca } from '../../strip/index.js';\nimport type { DocumentFormat, Placa, ValidationResult } from '../../types/validation-result.js';\nimport { brandPlaca } from '../../types/validation-result.js';\nimport { detectPlacaFormat } from './detect.js';\nimport { PLACA_LENGTH } from './constants.js';\n\nexport {\n PLACA_GOLDEN_CONVERSION_FROM,\n PLACA_GOLDEN_CONVERSION_TO,\n PLACA_GOLDEN_LEGACY,\n PLACA_GOLDEN_MERCOSUL,\n PLACA_OFFICIAL_SOURCE_URL,\n} from './constants.js';\nexport { detectPlacaFormat, type PlacaFormat } from './detect.js';\nexport { isValidPlacaLegacy } from './legacy.js';\nexport { isValidPlacaMercosul } from './mercosul.js';\nexport { convertPlacaToMercosul } from './convert.js';\n\ntype FailedResult = Extract<ValidationResult, { ok: false }>;\n\nfunction failure(code: FailedResult['code'], message: string): FailedResult {\n return { ok: false, code, message };\n}\n\nfunction validateStructure(input: string, stripped: string): FailedResult | null {\n if (stripped.length === 0) {\n return failure('EMPTY_INPUT', 'Placa input is empty');\n }\n\n const withoutSeparators = input.replace(/[-\\s]/g, '');\n if (/[^A-Za-z0-9]/.test(withoutSeparators)) {\n return failure('INVALID_CHARACTER', 'Placa contains invalid characters');\n }\n\n if (stripped.length !== PLACA_LENGTH) {\n return failure('INVALID_LENGTH', `Placa must have ${PLACA_LENGTH} characters after normalization`);\n }\n\n return null;\n}\n\nexport function isValidPlaca(input: string): boolean {\n return validatePlaca(input).ok;\n}\n\nexport function validatePlaca(input: string): ValidationResult<Placa> {\n const stripped = stripPlaca(input);\n const structural = validateStructure(input, stripped);\n if (structural) {\n return structural;\n }\n\n const format = detectPlacaFormat(input);\n if (format === 'unknown') {\n return failure('UNSUPPORTED_FORMAT', 'Placa does not match legacy or Mercosul format');\n }\n\n return { ok: true, value: brandPlaca(stripped), format: format as DocumentFormat };\n}\n"]}
@@ -0,0 +1,3 @@
1
+
2
+ //# sourceMappingURL=chunk-P5BDKYBC.js.map
3
+ //# sourceMappingURL=chunk-P5BDKYBC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-P5BDKYBC.js"}
@@ -1,6 +1,6 @@
1
- import { computeCheckDigit } from './chunk-OTZHMJYE.js';
2
1
  import { stripCpf } from './chunk-UCJPSJN5.js';
3
- import { brandCpf } from './chunk-4NFEM2SU.js';
2
+ import { computeCheckDigit } from './chunk-OTZHMJYE.js';
3
+ import { brandCpf } from './chunk-EMZCVV5Y.js';
4
4
 
5
5
  // src/core/cpf/constants.ts
6
6
  var CPF_DV1_WEIGHTS = [10, 9, 8, 7, 6, 5, 4, 3, 2];
@@ -69,5 +69,5 @@ function validateCpf(input) {
69
69
  }
70
70
 
71
71
  export { CPF_BASE_LENGTH, CPF_DV1_WEIGHTS, CPF_DV2_WEIGHTS, CPF_GOLDEN_PRIMARY, CPF_GOLDEN_PRIMARY_MASKED, CPF_GOLDEN_SECONDARY, CPF_MASK_PATTERN, CPF_OFFICIAL_SOURCE_URL, isValidCpf, validateCpf };
72
- //# sourceMappingURL=chunk-LBAWZ4EV.js.map
73
- //# sourceMappingURL=chunk-LBAWZ4EV.js.map
72
+ //# sourceMappingURL=chunk-PUTVO6HG.js.map
73
+ //# sourceMappingURL=chunk-PUTVO6HG.js.map