@br-validators/core 0.11.0-alpha.0 → 0.12.0-alpha.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 (174) hide show
  1. package/README.md +3 -0
  2. package/dist/boleto.d.ts +2 -2
  3. package/dist/boleto.js +3 -2
  4. package/dist/brcode.d.ts +2 -2
  5. package/dist/brcode.js +9 -6
  6. package/dist/cartao-credito.d.ts +2 -2
  7. package/dist/cartao-credito.js +4 -2
  8. package/dist/cep.d.ts +2 -2
  9. package/dist/cep.js +6 -3
  10. package/dist/chunk-2CNYSY3Z.js +3 -0
  11. package/dist/chunk-2CNYSY3Z.js.map +1 -0
  12. package/dist/{chunk-GLKGX552.js → chunk-2JJS46FM.js} +5 -23
  13. package/dist/chunk-2JJS46FM.js.map +1 -0
  14. package/dist/{chunk-FLZ6IHOD.js → chunk-3QP6R46N.js} +119 -496
  15. package/dist/chunk-3QP6R46N.js.map +1 -0
  16. package/dist/chunk-4SNBZFS5.js +8 -0
  17. package/dist/chunk-4SNBZFS5.js.map +1 -0
  18. package/dist/{chunk-IW3ESGWH.js → chunk-4W4OKLSZ.js} +4 -25
  19. package/dist/chunk-4W4OKLSZ.js.map +1 -0
  20. package/dist/chunk-4Y2FBO57.js +26 -0
  21. package/dist/chunk-4Y2FBO57.js.map +1 -0
  22. package/dist/{chunk-465IC76U.js → chunk-5UL3M7IU.js} +4 -23
  23. package/dist/chunk-5UL3M7IU.js.map +1 -0
  24. package/dist/chunk-6QJFMOIX.js +22 -0
  25. package/dist/chunk-6QJFMOIX.js.map +1 -0
  26. package/dist/chunk-7ZL7PZII.js +187 -0
  27. package/dist/chunk-7ZL7PZII.js.map +1 -0
  28. package/dist/chunk-BFZPCEYB.js +14 -0
  29. package/dist/chunk-BFZPCEYB.js.map +1 -0
  30. package/dist/chunk-CDGRHI7W.js +22 -0
  31. package/dist/chunk-CDGRHI7W.js.map +1 -0
  32. package/dist/chunk-CQPM43VV.js +3 -0
  33. package/dist/chunk-CQPM43VV.js.map +1 -0
  34. package/dist/chunk-D36RM7OD.js +207 -0
  35. package/dist/chunk-D36RM7OD.js.map +1 -0
  36. package/dist/{chunk-CR45BOLS.js → chunk-EPKHEW5V.js} +4 -13
  37. package/dist/chunk-EPKHEW5V.js.map +1 -0
  38. package/dist/{chunk-5BBNLRZP.js → chunk-F6PTZY4O.js} +5 -14
  39. package/dist/chunk-F6PTZY4O.js.map +1 -0
  40. package/dist/chunk-FXLVNCG3.js +26 -0
  41. package/dist/chunk-FXLVNCG3.js.map +1 -0
  42. package/dist/chunk-G24G7WR5.js +3 -0
  43. package/dist/chunk-G24G7WR5.js.map +1 -0
  44. package/dist/chunk-G2Y63PIF.js +24 -0
  45. package/dist/chunk-G2Y63PIF.js.map +1 -0
  46. package/dist/chunk-G32U6YQ5.js +14 -0
  47. package/dist/chunk-G32U6YQ5.js.map +1 -0
  48. package/dist/{chunk-TVVNTLIH.js → chunk-GRDUTHNX.js} +3 -3
  49. package/dist/{chunk-TVVNTLIH.js.map → chunk-GRDUTHNX.js.map} +1 -1
  50. package/dist/chunk-GVK6IMBF.js +3 -0
  51. package/dist/chunk-GVK6IMBF.js.map +1 -0
  52. package/dist/chunk-IQGRFAQV.js +23 -0
  53. package/dist/chunk-IQGRFAQV.js.map +1 -0
  54. package/dist/chunk-JQABTHUJ.js +3 -0
  55. package/dist/chunk-JQABTHUJ.js.map +1 -0
  56. package/dist/{chunk-GN7QIQE6.js → chunk-KH7DWOUA.js} +5 -23
  57. package/dist/chunk-KH7DWOUA.js.map +1 -0
  58. package/dist/chunk-KQDLIGSG.js +14 -0
  59. package/dist/chunk-KQDLIGSG.js.map +1 -0
  60. package/dist/chunk-LF2B4VPE.js +3 -0
  61. package/dist/chunk-LF2B4VPE.js.map +1 -0
  62. package/dist/chunk-LGD2JJBZ.js +288 -0
  63. package/dist/chunk-LGD2JJBZ.js.map +1 -0
  64. package/dist/{chunk-MQT25QN7.js → chunk-LYBFUKHR.js} +4 -3
  65. package/dist/chunk-LYBFUKHR.js.map +1 -0
  66. package/dist/chunk-MFNJTAUS.js +3 -0
  67. package/dist/chunk-MFNJTAUS.js.map +1 -0
  68. package/dist/{chunk-D5JMGN7U.js → chunk-MK7OJUF5.js} +7 -5
  69. package/dist/chunk-MK7OJUF5.js.map +1 -0
  70. package/dist/chunk-MLPXW7N2.js +226 -0
  71. package/dist/chunk-MLPXW7N2.js.map +1 -0
  72. package/dist/{chunk-BBL6ZPXH.js → chunk-MSLJF2FM.js} +18 -3
  73. package/dist/chunk-MSLJF2FM.js.map +1 -0
  74. package/dist/{chunk-V3OWDXRU.js → chunk-NHLLC6WH.js} +4 -3
  75. package/dist/chunk-NHLLC6WH.js.map +1 -0
  76. package/dist/chunk-OCYXNLHO.js +307 -0
  77. package/dist/chunk-OCYXNLHO.js.map +1 -0
  78. package/dist/{chunk-B2TDI3YS.js → chunk-OTZHMJYE.js} +3 -3
  79. package/dist/{chunk-B2TDI3YS.js.map → chunk-OTZHMJYE.js.map} +1 -1
  80. package/dist/chunk-P55H5YRX.js +3 -0
  81. package/dist/chunk-P55H5YRX.js.map +1 -0
  82. package/dist/chunk-PB4RIS6G.js +27 -0
  83. package/dist/chunk-PB4RIS6G.js.map +1 -0
  84. package/dist/chunk-QGMVUIDD.js +3 -0
  85. package/dist/chunk-QGMVUIDD.js.map +1 -0
  86. package/dist/chunk-RYGAK7PB.js +3 -0
  87. package/dist/chunk-RYGAK7PB.js.map +1 -0
  88. package/dist/chunk-US4OLTJ2.js +104 -0
  89. package/dist/chunk-US4OLTJ2.js.map +1 -0
  90. package/dist/{chunk-GEHAH4OH.js → chunk-WCQUQ2WX.js} +4 -4
  91. package/dist/{chunk-GEHAH4OH.js.map → chunk-WCQUQ2WX.js.map} +1 -1
  92. package/dist/chunk-WLE2ENQA.js +86 -0
  93. package/dist/chunk-WLE2ENQA.js.map +1 -0
  94. package/dist/{chunk-2KTD23PD.js → chunk-WPL47PWJ.js} +5 -14
  95. package/dist/chunk-WPL47PWJ.js.map +1 -0
  96. package/dist/chunk-XKY2CV3G.js +14 -0
  97. package/dist/chunk-XKY2CV3G.js.map +1 -0
  98. package/dist/chunk-XUO7FV6Z.js +14 -0
  99. package/dist/chunk-XUO7FV6Z.js.map +1 -0
  100. package/dist/chunk-Y2KUN2D3.js +3 -0
  101. package/dist/chunk-Y2KUN2D3.js.map +1 -0
  102. package/dist/chunk-Y6IW2LMW.js +460 -0
  103. package/dist/chunk-Y6IW2LMW.js.map +1 -0
  104. package/dist/chunk-YGA5W54J.js +3 -0
  105. package/dist/chunk-YGA5W54J.js.map +1 -0
  106. package/dist/{chunk-UE4PVN6Y.js → chunk-YXELVV37.js} +5 -14
  107. package/dist/chunk-YXELVV37.js.map +1 -0
  108. package/dist/chunk-YYHS5WQN.js +28 -0
  109. package/dist/chunk-YYHS5WQN.js.map +1 -0
  110. package/dist/chunk-ZAUZRIOU.js +23 -0
  111. package/dist/chunk-ZAUZRIOU.js.map +1 -0
  112. package/dist/chunk-ZH4RJNG7.js +3 -0
  113. package/dist/chunk-ZH4RJNG7.js.map +1 -0
  114. package/dist/cnh.d.ts +39 -0
  115. package/dist/cnh.js +11 -0
  116. package/dist/cnh.js.map +1 -0
  117. package/dist/cnpj.d.ts +2 -2
  118. package/dist/cnpj.js +6 -4
  119. package/dist/cpf.d.ts +2 -2
  120. package/dist/cpf.js +6 -4
  121. package/dist/detect.d.ts +23 -0
  122. package/dist/detect.js +26 -0
  123. package/dist/detect.js.map +1 -0
  124. package/dist/generate.d.ts +10 -0
  125. package/dist/generate.js +29 -0
  126. package/dist/generate.js.map +1 -0
  127. package/dist/index-CZLo9YOT.d.ts +21 -0
  128. package/dist/index.d.ts +12 -4
  129. package/dist/index.js +60 -25
  130. package/dist/index.js.map +1 -1
  131. package/dist/inscricao-estadual-produtor-rural-CfWUaggb.d.ts +46 -0
  132. package/dist/inscricao-estadual-produtor-rural.d.ts +2 -0
  133. package/dist/inscricao-estadual-produtor-rural.js +7 -0
  134. package/dist/inscricao-estadual-produtor-rural.js.map +1 -0
  135. package/dist/inscricao-estadual.d.ts +4 -21
  136. package/dist/inscricao-estadual.js +5 -2
  137. package/dist/nfe-chave.d.ts +71 -0
  138. package/dist/nfe-chave.js +6 -0
  139. package/dist/nfe-chave.js.map +1 -0
  140. package/dist/pis-pasep.d.ts +2 -2
  141. package/dist/pis-pasep.js +5 -3
  142. package/dist/{pix-BtTx04Si.d.ts → pix-ddldLlb7.d.ts} +1 -1
  143. package/dist/pix.d.ts +2 -2
  144. package/dist/pix.js +8 -6
  145. package/dist/placa.d.ts +2 -2
  146. package/dist/placa.js +6 -3
  147. package/dist/renavam.d.ts +37 -0
  148. package/dist/renavam.js +11 -0
  149. package/dist/renavam.js.map +1 -0
  150. package/dist/sanitize.d.ts +9 -0
  151. package/dist/sanitize.js +24 -0
  152. package/dist/sanitize.js.map +1 -0
  153. package/dist/telefone.d.ts +2 -2
  154. package/dist/telefone.js +4 -2
  155. package/dist/titulo-eleitor.d.ts +56 -0
  156. package/dist/titulo-eleitor.js +10 -0
  157. package/dist/titulo-eleitor.js.map +1 -0
  158. package/dist/{validation-result-C-Ei-lZH.d.ts → validation-result-BhQE-1_O.d.ts} +64 -2
  159. package/package.json +33 -1
  160. package/dist/chunk-2KTD23PD.js.map +0 -1
  161. package/dist/chunk-465IC76U.js.map +0 -1
  162. package/dist/chunk-5BBNLRZP.js.map +0 -1
  163. package/dist/chunk-BBL6ZPXH.js.map +0 -1
  164. package/dist/chunk-CR45BOLS.js.map +0 -1
  165. package/dist/chunk-D5JMGN7U.js.map +0 -1
  166. package/dist/chunk-FLZ6IHOD.js.map +0 -1
  167. package/dist/chunk-GLKGX552.js.map +0 -1
  168. package/dist/chunk-GN7QIQE6.js.map +0 -1
  169. package/dist/chunk-IW3ESGWH.js.map +0 -1
  170. package/dist/chunk-MQT25QN7.js.map +0 -1
  171. package/dist/chunk-UE4PVN6Y.js.map +0 -1
  172. package/dist/chunk-V3OWDXRU.js.map +0 -1
  173. package/dist/chunk-W6UXVWSR.js +0 -13
  174. package/dist/chunk-W6UXVWSR.js.map +0 -1
@@ -1,398 +1,153 @@
1
- import { brandInscricaoEstadual } from './chunk-BBL6ZPXH.js';
1
+ import { IE_DF_LENGTH, IE_DF_PREFIX, computeIeDfCheckDigit, IE_DF_DV1_WEIGHTS, IE_DF_DV2_WEIGHTS, IE_MT_CANONICAL_LENGTH, IE_MT_LEGACY_LENGTH, IE_MT_PREFIX, computeIeMtCheckDigit, IE_SP_LENGTH, computeIeSpCheckDigit, IE_SP_DV1_WEIGHTS, IE_SP_DV2_WEIGHTS, IE_OFFICIAL_SOURCE_URLS, applyIeSpMask, applyIeDfMask, IE_SUPPORTED_UFS, IE_TO_LEGACY_PREFIXES, computeIeToCheckDigit, computeIeCyclicMod11CheckDigit, IE_RR_PREFIX, computeIeRrCheckDigit, computeIeRoCheckDigit, IE_RN_PREFIX, computeIePrStyleCheckDigit, computeIePeCheckDigit, IE_PA_PREFIX, IE_MS_PREFIX, computeIeMgFirstCheckDigit, computeIeMgSecondCheckDigit, IE_MA_PREFIX, IE_GO_PREFIXES, computeIeGoCheckDigit, computeIeCeCheckDigit, computeIeBaModule, computeIeBaCheckDigit, IE_AP_PREFIX, computeIeApCheckDigit, computeIeAmCheckDigit, IE_AL_PREFIX, computeIeAlCheckDigit, IE_AC_PREFIX, computeIeAcCheckDigit } from './chunk-Y6IW2LMW.js';
2
+ import { brandInscricaoEstadual } from './chunk-MSLJF2FM.js';
2
3
 
3
- // src/core/inscricao-estadual/constants.ts
4
- var IE_SUPPORTED_UFS = [
5
- "AC",
6
- "AL",
7
- "AM",
8
- "AP",
9
- "BA",
10
- "CE",
11
- "DF",
12
- "ES",
13
- "GO",
14
- "MA",
15
- "MG",
16
- "MS",
17
- "MT",
18
- "PA",
19
- "PB",
20
- "PE",
21
- "PI",
22
- "PR",
23
- "RJ",
24
- "RN",
25
- "RO",
26
- "RR",
27
- "RS",
28
- "SC",
29
- "SE",
30
- "SP",
31
- "TO"
32
- ];
33
- var IE_OFFICIAL_SOURCE_URLS = {
34
- AC: "https://sefaz.ac.gov.br/",
35
- AL: "https://www.sefaz.al.gov.br/calculo",
36
- AM: "https://www.sefaz.am.gov.br/",
37
- AP: "https://www.sefaz.ap.gov.br/",
38
- BA: "https://www.sefaz.ba.gov.br/inspetoria-eletronica/icms/cadastro/calculo-dv/",
39
- CE: "https://www.sefaz.ce.gov.br/",
40
- DF: "https://www.receita.fazenda.df.gov.br/",
41
- ES: "https://sitenet.es.gov.br/sefaz/",
42
- GO: "http://www.sefaz.go.gov.br/ServicosAFA/ece.html",
43
- MA: "https://www.sefaz.ma.gov.br/",
44
- MG: "https://www.fazenda.mg.gov.br/empresas/Cadastro/cadastro/consultapublica.html",
45
- MS: "https://www.sefaz.ms.gov.br/",
46
- MT: "https://app1.sefaz.mt.gov.br/Sistema/legislacao/legislacaotribut.nsf/709f9c981a9d9f468425671300482be0/2217ddcf7a9b7cea03258c6c007324ba?OpenDocument=",
47
- PA: "https://www.sefa.pa.gov.br/",
48
- PB: "https://www.receita.pb.gov.br/",
49
- PE: "https://www.sefaz.pe.gov.br/",
50
- PI: "https://www.sefaz.pi.gov.br/",
51
- PR: "https://www.fazenda.pr.gov.br/Pagina/calculo-digito-verificador",
52
- RJ: "https://portal.fazenda.rj.gov.br/cadastro/",
53
- RN: "https://www.set.rn.gov.br/",
54
- RO: "https://www.sefin.ro.gov.br/",
55
- RR: "https://www.sefaz.rr.gov.br/",
56
- RS: "https://www.sefaz.rs.gov.br/",
57
- SC: "https://sat.sef.sc.gov.br/",
58
- SE: "https://www.sefaz.se.gov.br/",
59
- SP: "https://portal.fazenda.sp.gov.br/servicos/icms/Paginas/sintegra-rotina-consistencia.aspx",
60
- TO: "https://www.sefaz.to.gov.br/"
61
- };
62
- var IE_AC_PREFIX = "01";
63
- var IE_AL_PREFIX = "24";
64
- var IE_AP_PREFIX = "03";
65
- var IE_DF_PREFIX = "07";
66
- var IE_GO_PREFIXES = ["10", "11", "15", "20"];
67
- var IE_MA_PREFIX = "12";
68
- var IE_MS_PREFIX = "28";
69
- var IE_MT_PREFIX = "13";
70
- var IE_PA_PREFIX = "15";
71
- var IE_RN_PREFIX = "20";
72
- var IE_RR_PREFIX = "24";
73
- var IE_TO_LEGACY_PREFIXES = ["01", "02", "03", "99"];
74
- var IE_SP_LENGTH = 12;
75
- var IE_SP_DV1_WEIGHTS = [1, 3, 4, 5, 6, 7, 8, 10];
76
- var IE_SP_DV2_WEIGHTS = [3, 2, 10, 9, 8, 7, 6, 5, 4, 3, 2];
77
- var IE_SP_GOLDEN = "110042490114";
78
- var IE_SP_GOLDEN_MASKED = "110.042.490.114";
79
- var IE_SP_OFFICIAL_SOURCE_URL = IE_OFFICIAL_SOURCE_URLS.SP;
80
- var IE_MT_CANONICAL_LENGTH = 9;
81
- var IE_MT_LEGACY_LENGTH = 11;
82
- var IE_MT_GOLDEN_LEGACY = "00130000019";
83
- var IE_MT_GOLDEN_CANONICAL = "130000019";
84
- var IE_MT_OFFICIAL_SOURCE_URL = IE_OFFICIAL_SOURCE_URLS.MT;
85
- var IE_DF_LENGTH = 13;
86
- var IE_DF_DV1_WEIGHTS = [4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2];
87
- var IE_DF_DV2_WEIGHTS = [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2];
88
- var IE_DF_GOLDEN = "0730000100109";
89
- var IE_DF_GOLDEN_MASKED = "073.00001.001-09";
90
- var IE_DF_OFFICIAL_SOURCE_URL = IE_OFFICIAL_SOURCE_URLS.DF;
91
-
92
- // src/core/inscricao-estadual/ie-common.ts
93
- function stripIeDigits(input) {
94
- return input.replace(/\D/g, "");
95
- }
96
- function ieFailure(uf, code, message) {
97
- return { ok: false, code, message, uf };
98
- }
99
- function ieEmptyInput(uf) {
100
- return { ok: false, code: "EMPTY_INPUT", message: "Inscri\xE7\xE3o Estadual input is empty", uf };
4
+ // src/core/inscricao-estadual/df.ts
5
+ var DF_MASK_PATTERN = /^[0-9.-]+$/;
6
+ function failure(code, message) {
7
+ return { ok: false, code, message, uf: "DF" };
101
8
  }
102
- function ieSuccess(stripped, uf) {
103
- return {
104
- ok: true,
105
- value: brandInscricaoEstadual(stripped),
106
- uf,
107
- format: "inscricao-estadual"
108
- };
9
+ function stripIeDf(input) {
10
+ return input.replace(/\D/g, "");
109
11
  }
110
- function checkTrimmedEmpty(trimmed, uf) {
12
+ function validateIeDf(input) {
13
+ const trimmed = input.trim();
111
14
  if (trimmed.length === 0) {
112
- return ieEmptyInput(uf);
15
+ return { ok: false, code: "EMPTY_INPUT", message: "Inscri\xE7\xE3o Estadual input is empty", uf: "DF" };
113
16
  }
114
- return null;
115
- }
116
- function checkDigitChars(trimmed, uf, pattern = /^[0-9.\-\s/]+$/) {
117
- if (!pattern.test(trimmed)) {
118
- return ieFailure(uf, "INVALID_CHARACTER", `${uf} Inscri\xE7\xE3o Estadual contains invalid characters`);
17
+ if (!DF_MASK_PATTERN.test(trimmed)) {
18
+ return failure("INVALID_CHARACTER", "DF Inscri\xE7\xE3o Estadual contains invalid characters");
119
19
  }
120
- return null;
121
- }
122
-
123
- // src/core/inscricao-estadual/modulo-ie.ts
124
- function computeIeSpCheckDigit(digits, weights) {
125
- let sum = 0;
126
- for (let i = 0; i < weights.length; i++) {
127
- sum += Number(digits[i]) * weights[i];
20
+ const stripped = stripIeDf(trimmed);
21
+ if (stripped.length === 12) {
22
+ return failure("INVALID_LENGTH", "DF Inscri\xE7\xE3o Estadual legacy 12-digit format is not supported; use 13 digits");
128
23
  }
129
- const remainder = sum % 11;
130
- return remainder === 10 ? 0 : remainder % 10;
131
- }
132
- function computeIeMtCheckDigit(digits10) {
133
- let sum = 0;
134
- const weights = [3, 2, 9, 8, 7, 6, 5, 4, 3, 2];
135
- for (let i = 0; i < 10; i++) {
136
- sum += Number(digits10[i]) * weights[i];
24
+ if (stripped.length !== IE_DF_LENGTH) {
25
+ return failure("INVALID_LENGTH", `DF Inscri\xE7\xE3o Estadual must have ${IE_DF_LENGTH} digits after normalization`);
137
26
  }
138
- const remainder = sum % 11;
139
- return remainder <= 1 ? 0 : 11 - remainder;
140
- }
141
- function computeIeDfCheckDigit(digits, weights, includeDv1 = false, dv1 = 0) {
142
- let sum = 0;
143
- const digitCount = includeDv1 ? 11 : digits.length;
144
- for (let i = 0; i < digitCount; i++) {
145
- sum += Number(digits[i]) * weights[i];
27
+ if (!stripped.startsWith(IE_DF_PREFIX)) {
28
+ return failure("UNSUPPORTED_FORMAT", "DF Inscri\xE7\xE3o Estadual must start with prefix 07");
146
29
  }
147
- if (includeDv1) {
148
- sum += dv1 * weights[11];
30
+ const dv1 = computeIeDfCheckDigit(stripped.slice(0, 11), IE_DF_DV1_WEIGHTS);
31
+ const dv2 = computeIeDfCheckDigit(stripped.slice(0, 11), IE_DF_DV2_WEIGHTS, true, dv1);
32
+ if (Number(stripped.charAt(11)) !== dv1 || Number(stripped.charAt(12)) !== dv2) {
33
+ return failure("INVALID_CHECK_DIGIT", "DF Inscri\xE7\xE3o Estadual check digits are invalid");
149
34
  }
150
- const remainder = sum % 11;
151
- return remainder <= 1 ? 0 : 11 - remainder;
35
+ return {
36
+ ok: true,
37
+ value: brandInscricaoEstadual(stripped),
38
+ uf: "DF",
39
+ format: "inscricao-estadual"
40
+ };
152
41
  }
153
- function computeIeCeCheckDigit(body8) {
154
- let weight = 9;
155
- let sum = 0;
156
- for (let i = 0; i < 8; i++) {
157
- sum += Number(body8[i]) * weight;
158
- weight--;
159
- }
160
- const rest = sum % 11;
161
- let digit = 11 - rest;
162
- if (digit >= 10) {
163
- digit = 0;
164
- }
165
- return digit;
42
+
43
+ // src/core/inscricao-estadual/mt.ts
44
+ function failure2(code, message) {
45
+ return { ok: false, code, message, uf: "MT" };
166
46
  }
167
- function computeIeAlCheckDigit(body8) {
168
- let weight = 9;
169
- let sum = 0;
170
- for (let i = 0; i < 8; i++) {
171
- sum += Number(body8[i]) * weight;
172
- weight--;
173
- }
174
- const product = sum * 10;
175
- let digit = product - Math.floor(product / 11) * 11;
176
- if (digit >= 10) {
177
- digit = 0;
178
- }
179
- return digit;
47
+ function stripIeMt(input) {
48
+ return input.replace(/\D/g, "");
180
49
  }
181
- function computeIeAmCheckDigit(body8) {
182
- let weight = 9;
183
- let sum = 0;
184
- for (let i = 0; i < 8; i++) {
185
- sum += Number(body8[i]) * weight;
186
- weight--;
50
+ function normalizeMtToCanonical(padded11) {
51
+ const trimmed = padded11.replace(/^0+/, "");
52
+ return trimmed.length === IE_MT_CANONICAL_LENGTH ? trimmed : padded11.slice(-IE_MT_CANONICAL_LENGTH);
53
+ }
54
+ function validateIeMt(input) {
55
+ const trimmed = input.trim();
56
+ if (trimmed.length === 0) {
57
+ return { ok: false, code: "EMPTY_INPUT", message: "Inscri\xE7\xE3o Estadual input is empty", uf: "MT" };
187
58
  }
188
- if (sum < 11) {
189
- return 11 - sum;
59
+ if (/[^0-9.\-\s]/.test(trimmed)) {
60
+ return failure2("INVALID_CHARACTER", "MT Inscri\xE7\xE3o Estadual contains invalid characters");
190
61
  }
191
- const remainder = sum % 11;
192
- let digit = 11 - remainder;
193
- if (digit >= 10) {
194
- digit = 0;
62
+ const stripped = stripIeMt(trimmed);
63
+ if (stripped.length < IE_MT_CANONICAL_LENGTH || stripped.length > IE_MT_LEGACY_LENGTH) {
64
+ return failure2(
65
+ "INVALID_LENGTH",
66
+ `MT Inscri\xE7\xE3o Estadual must have ${IE_MT_CANONICAL_LENGTH} or ${IE_MT_LEGACY_LENGTH} digits after normalization`
67
+ );
195
68
  }
196
- return digit;
197
- }
198
- function computeIePrStyleCheckDigit(body) {
199
- let weight = body.length - 5;
200
- let sum = 0;
201
- for (let i = 0; i < body.length; i++) {
202
- sum += Number(body[i]) * weight;
203
- weight--;
204
- if (weight === 1) {
205
- weight = 7;
206
- }
69
+ const padded = stripped.length === IE_MT_LEGACY_LENGTH ? stripped : stripped.padStart(IE_MT_LEGACY_LENGTH, "0");
70
+ const canonical = normalizeMtToCanonical(padded);
71
+ if (!canonical.startsWith(IE_MT_PREFIX)) {
72
+ return failure2("UNSUPPORTED_FORMAT", "MT Inscri\xE7\xE3o Estadual must start with prefix 13");
207
73
  }
208
- const rest = sum % 11;
209
- let digit = 11 - rest;
210
- if (digit >= 10) {
211
- digit = 0;
74
+ const expectedDv = computeIeMtCheckDigit(padded.slice(0, 10));
75
+ if (Number(padded.charAt(10)) !== expectedDv) {
76
+ return failure2("INVALID_CHECK_DIGIT", "MT Inscri\xE7\xE3o Estadual check digit is invalid");
212
77
  }
213
- return digit;
78
+ return {
79
+ ok: true,
80
+ value: brandInscricaoEstadual(canonical),
81
+ uf: "MT",
82
+ format: "inscricao-estadual"
83
+ };
214
84
  }
215
- function computeIeAcCheckDigit(body) {
216
- let weight = body.length - 7;
217
- let sum = 0;
218
- for (let i = 0; i < body.length; i++) {
219
- sum += Number(body[i]) * weight;
220
- weight--;
221
- if (weight === 1) {
222
- weight = 9;
223
- }
224
- }
225
- const rest = sum % 11;
226
- let digit = 11 - rest;
227
- if (digit >= 10) {
228
- digit = 0;
229
- }
230
- return digit;
85
+
86
+ // src/core/inscricao-estadual/sp.ts
87
+ var SP_MASK_PATTERN = /^[0-9.]+$/;
88
+ function failure3(code, message) {
89
+ return { ok: false, code, message, uf: "SP" };
231
90
  }
232
- function computeIeBaModule(ie) {
233
- const refIndex = ie.length === 9 ? 1 : 0;
234
- const refDigit = Number(ie[refIndex]);
235
- const mod10Digits = [0, 1, 2, 3, 4, 5, 8];
236
- return mod10Digits.includes(refDigit) ? 10 : 11;
91
+ function stripIeSp(input) {
92
+ return input.replace(/\D/g, "");
237
93
  }
238
- function computeIeBaCheckDigit(body, mod) {
239
- let weight = body.length + 1;
240
- let sum = 0;
241
- for (let i = 0; i < body.length; i++) {
242
- sum += Number(body[i]) * weight;
243
- weight--;
244
- }
245
- const rest = sum % mod;
246
- let digit = mod - rest;
247
- if (digit >= 10) {
248
- digit = 0;
94
+ function validateIeSp(input) {
95
+ const trimmed = input.trim();
96
+ if (trimmed.length === 0) {
97
+ return { ok: false, code: "EMPTY_INPUT", message: "Inscri\xE7\xE3o Estadual input is empty", uf: "SP" };
249
98
  }
250
- return digit;
251
- }
252
- function computeIePeCheckDigit(body) {
253
- let weight = body.length + 1;
254
- let sum = 0;
255
- for (let i = 0; i < body.length; i++) {
256
- sum += Number(body[i]) * weight;
257
- weight--;
99
+ if (/[Pp]/.test(trimmed)) {
100
+ return failure3("UNSUPPORTED_FORMAT", "SP rural IE format (P\u2026) requires validateIeProdutorRural");
258
101
  }
259
- const rest = sum % 11;
260
- let digit = 11 - rest;
261
- if (digit >= 10) {
262
- digit = 0;
102
+ if (!SP_MASK_PATTERN.test(trimmed)) {
103
+ return failure3("INVALID_CHARACTER", "SP Inscri\xE7\xE3o Estadual contains invalid characters");
263
104
  }
264
- return digit;
265
- }
266
- function computeIeCyclicMod11CheckDigit(body, startWeight, resetWeight) {
267
- let weight = startWeight;
268
- let sum = 0;
269
- for (let i = 0; i < body.length; i++) {
270
- sum += Number(body[i]) * weight;
271
- weight--;
272
- if (weight === 1) {
273
- weight = resetWeight;
274
- }
105
+ const stripped = stripIeSp(trimmed);
106
+ if (stripped.length !== IE_SP_LENGTH) {
107
+ return failure3("INVALID_LENGTH", `SP Inscri\xE7\xE3o Estadual must have ${IE_SP_LENGTH} digits after normalization`);
275
108
  }
276
- const rest = sum % 11;
277
- let digit = 11 - rest;
278
- if (digit >= 10) {
279
- digit = 0;
109
+ const dv1 = computeIeSpCheckDigit(stripped, IE_SP_DV1_WEIGHTS);
110
+ const dv2 = computeIeSpCheckDigit(stripped, IE_SP_DV2_WEIGHTS);
111
+ if (Number(stripped.charAt(8)) !== dv1 || Number(stripped.charAt(11)) !== dv2) {
112
+ return failure3("INVALID_CHECK_DIGIT", "SP Inscri\xE7\xE3o Estadual check digits are invalid");
280
113
  }
281
- return digit;
114
+ return {
115
+ ok: true,
116
+ value: brandInscricaoEstadual(stripped),
117
+ uf: "SP",
118
+ format: "inscricao-estadual"
119
+ };
282
120
  }
283
- function computeIeRoCheckDigit(body) {
284
- let weight = 6;
285
- let sum = 0;
286
- for (let i = 0; i < body.length; i++) {
287
- sum += Number(body[i]) * weight;
288
- weight--;
289
- if (weight === 1) {
290
- weight = 9;
291
- }
292
- }
293
- const rest = sum % 11;
294
- let digit = 11 - rest;
295
- if (digit >= 10) {
296
- digit -= 10;
297
- }
298
- return digit;
121
+
122
+ // src/core/inscricao-estadual/ie-common.ts
123
+ function stripIeDigits(input) {
124
+ return input.replace(/\D/g, "");
299
125
  }
300
- function computeIeGoCheckDigit(body8) {
301
- let weight = 9;
302
- let sum = 0;
303
- for (let i = 0; i < 8; i++) {
304
- sum += Number(body8[i]) * weight;
305
- weight--;
306
- }
307
- const rest = sum % 11;
308
- let digit = 11 - rest;
309
- const bodyInt = Number(body8);
310
- if (digit >= 10) {
311
- if (digit === 11 && bodyInt >= 10103105 && bodyInt <= 10119997) {
312
- digit = 1;
313
- } else {
314
- digit = 0;
315
- }
316
- }
317
- return digit;
318
- }
319
- function computeIeApCheckDigit(body8) {
320
- const bodyInt = Number(body8);
321
- let p = 0;
322
- let d = 0;
323
- if (bodyInt >= 3000001 && bodyInt <= 3017e3) {
324
- p = 5;
325
- d = 0;
326
- } else if (bodyInt >= 3017001 && bodyInt <= 3019022) {
327
- p = 9;
328
- d = 1;
329
- }
330
- let weight = 9;
331
- let sum = p;
332
- for (let i = 0; i < 8; i++) {
333
- sum += Number(body8[i]) * weight;
334
- weight--;
335
- }
336
- let digit = 11 - sum % 11;
337
- if (digit === 10) {
338
- digit = 0;
339
- } else if (digit === 11) {
340
- digit = d;
341
- }
342
- return digit;
126
+ function ieFailure(uf, code, message) {
127
+ return { ok: false, code, message, uf };
343
128
  }
344
- function computeIeRrCheckDigit(body8) {
345
- let weight = 1;
346
- let sum = 0;
347
- for (let i = 0; i < 8; i++) {
348
- sum += Number(body8[i]) * weight;
349
- weight++;
350
- }
351
- return sum % 9;
129
+ function ieEmptyInput(uf) {
130
+ return { ok: false, code: "EMPTY_INPUT", message: "Inscri\xE7\xE3o Estadual input is empty", uf };
352
131
  }
353
- function computeIeToCheckDigit(body) {
354
- let weight = 9;
355
- let sum = 0;
356
- for (let i = 0; i < body.length; i++) {
357
- sum += Number(body[i]) * weight;
358
- weight--;
359
- }
360
- const rest = sum % 11;
361
- if (rest < 2) {
362
- return 0;
363
- }
364
- return 11 - rest;
132
+ function ieSuccess(stripped, uf) {
133
+ return {
134
+ ok: true,
135
+ value: brandInscricaoEstadual(stripped),
136
+ uf,
137
+ format: "inscricao-estadual"
138
+ };
365
139
  }
366
- function computeIeMgFirstCheckDigit(body11) {
367
- const bodyWithZero = `${body11.slice(0, 3)}0${body11.slice(3)}`;
368
- let weightedSum = "";
369
- for (let i = 0; i < bodyWithZero.length; i++) {
370
- const w = (i + 1) % 2 === 0 ? 2 : 1;
371
- weightedSum += (Number(bodyWithZero[i]) * w).toString();
372
- }
373
- let sum = 0;
374
- for (let i = 0; i < weightedSum.length; i++) {
375
- sum += Number(weightedSum[i]);
140
+ function checkTrimmedEmpty(trimmed, uf) {
141
+ if (trimmed.length === 0) {
142
+ return ieEmptyInput(uf);
376
143
  }
377
- const lastDigit = Number(sum.toString().slice(-1));
378
- return lastDigit === 0 ? 0 : 10 - lastDigit;
144
+ return null;
379
145
  }
380
- function computeIeMgSecondCheckDigit(body12) {
381
- let weight = 3;
382
- let sum = 0;
383
- for (let i = 0; i < body12.length; i++) {
384
- sum += Number(body12[i]) * weight;
385
- weight--;
386
- if (weight === 1) {
387
- weight = 11;
388
- }
389
- }
390
- const rest = sum % 11;
391
- let digit = 11 - rest;
392
- if (digit >= 10) {
393
- digit = 0;
146
+ function checkDigitChars(trimmed, uf, pattern = /^[0-9.\-\s/]+$/) {
147
+ if (!pattern.test(trimmed)) {
148
+ return ieFailure(uf, "INVALID_CHARACTER", `${uf} Inscri\xE7\xE3o Estadual contains invalid characters`);
394
149
  }
395
- return digit;
150
+ return null;
396
151
  }
397
152
 
398
153
  // src/core/inscricao-estadual/ac.ts
@@ -552,45 +307,6 @@ function validateIeCe(input) {
552
307
  return ieSuccess(stripped, UF6);
553
308
  }
554
309
 
555
- // src/core/inscricao-estadual/df.ts
556
- var DF_MASK_PATTERN = /^[0-9.-]+$/;
557
- function failure(code, message) {
558
- return { ok: false, code, message, uf: "DF" };
559
- }
560
- function stripIeDf(input) {
561
- return input.replace(/\D/g, "");
562
- }
563
- function validateIeDf(input) {
564
- const trimmed = input.trim();
565
- if (trimmed.length === 0) {
566
- return { ok: false, code: "EMPTY_INPUT", message: "Inscri\xE7\xE3o Estadual input is empty", uf: "DF" };
567
- }
568
- if (!DF_MASK_PATTERN.test(trimmed)) {
569
- return failure("INVALID_CHARACTER", "DF Inscri\xE7\xE3o Estadual contains invalid characters");
570
- }
571
- const stripped = stripIeDf(trimmed);
572
- if (stripped.length === 12) {
573
- return failure("INVALID_LENGTH", "DF Inscri\xE7\xE3o Estadual legacy 12-digit format is not supported; use 13 digits");
574
- }
575
- if (stripped.length !== IE_DF_LENGTH) {
576
- return failure("INVALID_LENGTH", `DF Inscri\xE7\xE3o Estadual must have ${IE_DF_LENGTH} digits after normalization`);
577
- }
578
- if (!stripped.startsWith(IE_DF_PREFIX)) {
579
- return failure("UNSUPPORTED_FORMAT", "DF Inscri\xE7\xE3o Estadual must start with prefix 07");
580
- }
581
- const dv1 = computeIeDfCheckDigit(stripped.slice(0, 11), IE_DF_DV1_WEIGHTS);
582
- const dv2 = computeIeDfCheckDigit(stripped.slice(0, 11), IE_DF_DV2_WEIGHTS, true, dv1);
583
- if (Number(stripped.charAt(11)) !== dv1 || Number(stripped.charAt(12)) !== dv2) {
584
- return failure("INVALID_CHECK_DIGIT", "DF Inscri\xE7\xE3o Estadual check digits are invalid");
585
- }
586
- return {
587
- ok: true,
588
- value: brandInscricaoEstadual(stripped),
589
- uf: "DF",
590
- format: "inscricao-estadual"
591
- };
592
- }
593
-
594
310
  // src/core/inscricao-estadual/es.ts
595
311
  var UF7 = "ES";
596
312
  function stripIeEs(input) {
@@ -707,63 +423,6 @@ function validateIeMs(input) {
707
423
  return { ...ceResult, uf: UF11 };
708
424
  }
709
425
 
710
- // src/core/inscricao-estadual/mt.ts
711
- function failure2(code, message) {
712
- return { ok: false, code, message, uf: "MT" };
713
- }
714
- function stripIeMt(input) {
715
- return input.replace(/\D/g, "");
716
- }
717
- function normalizeMtToCanonical(padded11) {
718
- const trimmed = padded11.replace(/^0+/, "");
719
- return trimmed.length === IE_MT_CANONICAL_LENGTH ? trimmed : padded11.slice(-IE_MT_CANONICAL_LENGTH);
720
- }
721
- function validateIeMt(input) {
722
- const trimmed = input.trim();
723
- if (trimmed.length === 0) {
724
- return { ok: false, code: "EMPTY_INPUT", message: "Inscri\xE7\xE3o Estadual input is empty", uf: "MT" };
725
- }
726
- if (/[^0-9.\-\s]/.test(trimmed)) {
727
- return failure2("INVALID_CHARACTER", "MT Inscri\xE7\xE3o Estadual contains invalid characters");
728
- }
729
- const stripped = stripIeMt(trimmed);
730
- if (stripped.length < IE_MT_CANONICAL_LENGTH || stripped.length > IE_MT_LEGACY_LENGTH) {
731
- return failure2(
732
- "INVALID_LENGTH",
733
- `MT Inscri\xE7\xE3o Estadual must have ${IE_MT_CANONICAL_LENGTH} or ${IE_MT_LEGACY_LENGTH} digits after normalization`
734
- );
735
- }
736
- const padded = stripped.length === IE_MT_LEGACY_LENGTH ? stripped : stripped.padStart(IE_MT_LEGACY_LENGTH, "0");
737
- const canonical = normalizeMtToCanonical(padded);
738
- if (!canonical.startsWith(IE_MT_PREFIX)) {
739
- return failure2("UNSUPPORTED_FORMAT", "MT Inscri\xE7\xE3o Estadual must start with prefix 13");
740
- }
741
- const expectedDv = computeIeMtCheckDigit(padded.slice(0, 10));
742
- if (Number(padded.charAt(10)) !== expectedDv) {
743
- return failure2("INVALID_CHECK_DIGIT", "MT Inscri\xE7\xE3o Estadual check digit is invalid");
744
- }
745
- return {
746
- ok: true,
747
- value: brandInscricaoEstadual(canonical),
748
- uf: "MT",
749
- format: "inscricao-estadual"
750
- };
751
- }
752
-
753
- // src/core/inscricao-estadual/mask.ts
754
- function applyIeSpMask(stripped) {
755
- if (stripped.length !== IE_SP_LENGTH) {
756
- throw new Error("SP IE must have exactly 12 digits to apply mask");
757
- }
758
- return `${stripped.slice(0, 3)}.${stripped.slice(3, 6)}.${stripped.slice(6, 9)}.${stripped.slice(9)}`;
759
- }
760
- function applyIeDfMask(stripped) {
761
- if (stripped.length !== IE_DF_LENGTH) {
762
- throw new Error("DF IE must have exactly 13 digits to apply mask");
763
- }
764
- return `${stripped.slice(0, 3)}.${stripped.slice(3, 8)}.${stripped.slice(8, 11)}-${stripped.slice(11)}`;
765
- }
766
-
767
426
  // src/core/inscricao-estadual/pa.ts
768
427
  var UF12 = "PA";
769
428
  function stripIePa(input) {
@@ -1037,42 +696,6 @@ function validateIeSe(input) {
1037
696
  return { ...ceResult, uf: UF23 };
1038
697
  }
1039
698
 
1040
- // src/core/inscricao-estadual/sp.ts
1041
- var SP_MASK_PATTERN = /^[0-9.]+$/;
1042
- function failure3(code, message) {
1043
- return { ok: false, code, message, uf: "SP" };
1044
- }
1045
- function stripIeSp(input) {
1046
- return input.replace(/\D/g, "");
1047
- }
1048
- function validateIeSp(input) {
1049
- const trimmed = input.trim();
1050
- if (trimmed.length === 0) {
1051
- return { ok: false, code: "EMPTY_INPUT", message: "Inscri\xE7\xE3o Estadual input is empty", uf: "SP" };
1052
- }
1053
- if (/[Pp]/.test(trimmed)) {
1054
- return failure3("UNSUPPORTED_FORMAT", "SP rural IE format (P\u2026) is not supported in v1");
1055
- }
1056
- if (!SP_MASK_PATTERN.test(trimmed)) {
1057
- return failure3("INVALID_CHARACTER", "SP Inscri\xE7\xE3o Estadual contains invalid characters");
1058
- }
1059
- const stripped = stripIeSp(trimmed);
1060
- if (stripped.length !== IE_SP_LENGTH) {
1061
- return failure3("INVALID_LENGTH", `SP Inscri\xE7\xE3o Estadual must have ${IE_SP_LENGTH} digits after normalization`);
1062
- }
1063
- const dv1 = computeIeSpCheckDigit(stripped, IE_SP_DV1_WEIGHTS);
1064
- const dv2 = computeIeSpCheckDigit(stripped, IE_SP_DV2_WEIGHTS);
1065
- if (Number(stripped.charAt(8)) !== dv1 || Number(stripped.charAt(11)) !== dv2) {
1066
- return failure3("INVALID_CHECK_DIGIT", "SP Inscri\xE7\xE3o Estadual check digits are invalid");
1067
- }
1068
- return {
1069
- ok: true,
1070
- value: brandInscricaoEstadual(stripped),
1071
- uf: "SP",
1072
- format: "inscricao-estadual"
1073
- };
1074
- }
1075
-
1076
699
  // src/core/inscricao-estadual/to.ts
1077
700
  var UF24 = "TO";
1078
701
  function stripIeTo(input) {
@@ -1175,6 +798,6 @@ function formatInscricaoEstadual(input, options) {
1175
798
  }
1176
799
  }
1177
800
 
1178
- export { IE_DF_GOLDEN, IE_DF_GOLDEN_MASKED, IE_DF_LENGTH, IE_DF_OFFICIAL_SOURCE_URL, IE_MT_GOLDEN_CANONICAL, IE_MT_GOLDEN_LEGACY, IE_MT_OFFICIAL_SOURCE_URL, IE_OFFICIAL_SOURCE_URLS, IE_SP_GOLDEN, IE_SP_GOLDEN_MASKED, IE_SP_OFFICIAL_SOURCE_URL, IE_SUPPORTED_UFS, formatInscricaoEstadual, getIeOfficialSourceUrl, isValidInscricaoEstadual, stripInscricaoEstadual, validateIeDf, validateIeMt, validateIeSp, validateInscricaoEstadual };
1179
- //# sourceMappingURL=chunk-FLZ6IHOD.js.map
1180
- //# sourceMappingURL=chunk-FLZ6IHOD.js.map
801
+ export { formatInscricaoEstadual, getIeOfficialSourceUrl, isValidInscricaoEstadual, stripInscricaoEstadual, validateIeDf, validateIeMt, validateIeSp, validateInscricaoEstadual };
802
+ //# sourceMappingURL=chunk-3QP6R46N.js.map
803
+ //# sourceMappingURL=chunk-3QP6R46N.js.map