@ripwords/myinvois-client 0.2.10 → 0.2.12

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 (285) hide show
  1. package/dist/api/documentManagement.d.ts +60 -60
  2. package/dist/api/documentSubmission.d.ts +60 -60
  3. package/dist/api/documentSubmission.js +1 -1
  4. package/dist/api/documentTypeManagement.d.ts +60 -60
  5. package/dist/api/notificationManagement.d.ts +60 -60
  6. package/dist/api/platformLogin.d.ts +60 -60
  7. package/dist/api/taxpayerValidation.d.ts +60 -60
  8. package/dist/apiQueue-4pQwCc0e.js +138 -0
  9. package/dist/apiQueue-sL4mNlVz.cjs +151 -0
  10. package/dist/apiQueue-sL4mNlVz.cjs.map +1 -0
  11. package/dist/{documentSubmission-vPY3crsr.js → documentSubmission-BPDiODUd.js} +14 -2
  12. package/dist/{documentSubmission-l0FndSjm.cjs → documentSubmission-DvCgvq28.cjs} +15 -3
  13. package/dist/documentSubmission-DvCgvq28.cjs.map +1 -0
  14. package/dist/{documents-ByWRZZfd.d.ts → documents-BPawWCi-.d.ts} +8 -8
  15. package/dist/index.cjs +5 -3
  16. package/dist/index.cjs.map +1 -1
  17. package/dist/index.d.ts +60 -60
  18. package/dist/index.js +5 -3
  19. package/dist/index10.cjs +16 -187
  20. package/dist/index10.cjs.map +1 -1
  21. package/dist/index12.cjs +25 -16
  22. package/dist/index12.cjs.map +1 -1
  23. package/dist/index13.cjs +24 -0
  24. package/dist/{index19.cjs.map → index13.cjs.map} +1 -1
  25. package/dist/index15.cjs +0 -29
  26. package/dist/index16.cjs +0 -25
  27. package/dist/index17.cjs +5 -0
  28. package/dist/index18.cjs +6 -33
  29. package/dist/index19.cjs +4 -23
  30. package/dist/index2.cjs +61 -4
  31. package/dist/{index8.cjs.map → index2.cjs.map} +1 -1
  32. package/dist/index20.cjs +3 -0
  33. package/dist/index21.cjs +3 -0
  34. package/dist/index22.cjs +6 -0
  35. package/dist/index23.cjs +3 -12
  36. package/dist/index24.cjs +12 -3
  37. package/dist/{index23.cjs.map → index24.cjs.map} +1 -1
  38. package/dist/index25.cjs +3 -19
  39. package/dist/index26.cjs +19 -2
  40. package/dist/index27.cjs +2 -2
  41. package/dist/index28.cjs +2 -329
  42. package/dist/index29.cjs +309 -172
  43. package/dist/index29.cjs.map +1 -1
  44. package/dist/index3.cjs +531 -6
  45. package/dist/index3.cjs.map +1 -0
  46. package/dist/index30.cjs +189 -204
  47. package/dist/index30.cjs.map +1 -1
  48. package/dist/index31.cjs +203 -104
  49. package/dist/index31.cjs.map +1 -1
  50. package/dist/index32.cjs +104 -132
  51. package/dist/index32.cjs.map +1 -1
  52. package/dist/index33.cjs +132 -59
  53. package/dist/index33.cjs.map +1 -1
  54. package/dist/index34.cjs +59 -262
  55. package/dist/index34.cjs.map +1 -1
  56. package/dist/index35.cjs +262 -74
  57. package/dist/index35.cjs.map +1 -1
  58. package/dist/index36.cjs +74 -102
  59. package/dist/index36.cjs.map +1 -1
  60. package/dist/index37.cjs +102 -68
  61. package/dist/index37.cjs.map +1 -1
  62. package/dist/index38.cjs +68 -107
  63. package/dist/index38.cjs.map +1 -1
  64. package/dist/index39.cjs +107 -95
  65. package/dist/index39.cjs.map +1 -1
  66. package/dist/index4.cjs +195 -4
  67. package/dist/index4.cjs.map +1 -0
  68. package/dist/index40.cjs +95 -13
  69. package/dist/index40.cjs.map +1 -1
  70. package/dist/index41.cjs +11 -31
  71. package/dist/index41.cjs.map +1 -1
  72. package/dist/index42.cjs +31 -12
  73. package/dist/index42.cjs.map +1 -1
  74. package/dist/index43.cjs +12 -22
  75. package/dist/index43.cjs.map +1 -1
  76. package/dist/index44.cjs +22 -13
  77. package/dist/index44.cjs.map +1 -1
  78. package/dist/index45.cjs +13 -7
  79. package/dist/index45.cjs.map +1 -1
  80. package/dist/index46.cjs +7 -7
  81. package/dist/index46.cjs.map +1 -1
  82. package/dist/index47.cjs +7 -10
  83. package/dist/index47.cjs.map +1 -1
  84. package/dist/index48.cjs +10 -6
  85. package/dist/index48.cjs.map +1 -1
  86. package/dist/index49.cjs +6 -101
  87. package/dist/index49.cjs.map +1 -1
  88. package/dist/index5.cjs +0 -3
  89. package/dist/index50.cjs +101 -106
  90. package/dist/index50.cjs.map +1 -1
  91. package/dist/index51.cjs +106 -119
  92. package/dist/index51.cjs.map +1 -1
  93. package/dist/index52.cjs +119 -106
  94. package/dist/index52.cjs.map +1 -1
  95. package/dist/index53.cjs +106 -98
  96. package/dist/index53.cjs.map +1 -1
  97. package/dist/index54.cjs +98 -118
  98. package/dist/index54.cjs.map +1 -1
  99. package/dist/index55.cjs +118 -127
  100. package/dist/index55.cjs.map +1 -1
  101. package/dist/index56.cjs +127 -117
  102. package/dist/index56.cjs.map +1 -1
  103. package/dist/index57.cjs +117 -14
  104. package/dist/index57.cjs.map +1 -1
  105. package/dist/index58.cjs +14 -95
  106. package/dist/index58.cjs.map +1 -1
  107. package/dist/index59.cjs +95 -142
  108. package/dist/index59.cjs.map +1 -1
  109. package/dist/index6.cjs +24 -2
  110. package/dist/index6.cjs.map +1 -0
  111. package/dist/index60.cjs +142 -114
  112. package/dist/index60.cjs.map +1 -1
  113. package/dist/index61.cjs +114 -144
  114. package/dist/index61.cjs.map +1 -1
  115. package/dist/index62.cjs +144 -113
  116. package/dist/index62.cjs.map +1 -1
  117. package/dist/index63.cjs +113 -17
  118. package/dist/index63.cjs.map +1 -1
  119. package/dist/index64.cjs +17 -112
  120. package/dist/index64.cjs.map +1 -1
  121. package/dist/index65.cjs +112 -47
  122. package/dist/index65.cjs.map +1 -1
  123. package/dist/index66.cjs +47 -14
  124. package/dist/index66.cjs.map +1 -1
  125. package/dist/index67.cjs +14 -28
  126. package/dist/index67.cjs.map +1 -1
  127. package/dist/index68.cjs +28 -22
  128. package/dist/index68.cjs.map +1 -1
  129. package/dist/index68.cts.map +1 -1
  130. package/dist/index69.cjs +22 -9
  131. package/dist/index69.cjs.map +1 -1
  132. package/dist/index69.cts.map +1 -1
  133. package/dist/index7.cjs +0 -6
  134. package/dist/index70.cjs +9 -8
  135. package/dist/index70.cjs.map +1 -1
  136. package/dist/index70.cts.map +1 -1
  137. package/dist/index71.cjs +8 -17
  138. package/dist/index71.cjs.map +1 -1
  139. package/dist/index71.cts.map +1 -1
  140. package/dist/index72.cjs +17 -412
  141. package/dist/index72.cjs.map +1 -1
  142. package/dist/index72.cts.map +1 -1
  143. package/dist/index73.cjs +412 -8
  144. package/dist/index73.cjs.map +1 -1
  145. package/dist/index73.cts.map +1 -1
  146. package/dist/index74.cjs +8 -9
  147. package/dist/index74.cjs.map +1 -1
  148. package/dist/index74.cts.map +1 -1
  149. package/dist/index75.cjs +16 -0
  150. package/dist/index75.cjs.map +1 -0
  151. package/dist/index75.cts.map +1 -0
  152. package/dist/index8.cjs +0 -62
  153. package/dist/index9.cjs +23 -526
  154. package/dist/index9.cjs.map +1 -1
  155. package/dist/{msic-codes-bYv0T5WJ.d.ts → msic-codes-CjrrJmzb.d.ts} +10 -10
  156. package/dist/{taxpayer-yqCbpaJy.d.ts → taxpayer-SC6Tu_nN.d.ts} +2 -2
  157. package/dist/types/classification-codes.d.ts +1 -1
  158. package/dist/types/country-code.d.ts +1 -1
  159. package/dist/types/currencies.d.ts +1 -1
  160. package/dist/types/documents.d.ts +54 -54
  161. package/dist/types/e-invoice.d.ts +1 -1
  162. package/dist/types/index.d.ts +60 -60
  163. package/dist/types/msic/0X.d.ts +1 -1
  164. package/dist/types/msic/1X.d.ts +1 -1
  165. package/dist/types/msic/2X.d.ts +1 -1
  166. package/dist/types/msic/3X.d.ts +1 -1
  167. package/dist/types/msic/4X.d.ts +1 -1
  168. package/dist/types/msic/5X.d.ts +1 -1
  169. package/dist/types/msic/6X.d.ts +1 -1
  170. package/dist/types/msic/7X.d.ts +1 -1
  171. package/dist/types/msic/8X.d.ts +1 -1
  172. package/dist/types/msic/9X.d.ts +1 -1
  173. package/dist/types/msic-codes.d.ts +11 -11
  174. package/dist/types/notifications.d.ts +1 -1
  175. package/dist/types/payment-modes.d.ts +1 -1
  176. package/dist/types/signatures.d.ts +1 -1
  177. package/dist/types/state-codes.d.ts +1 -1
  178. package/dist/types/tax-types.d.ts +1 -1
  179. package/dist/types/taxpayer.d.ts +55 -55
  180. package/dist/types/unit/1X.d.ts +1 -1
  181. package/dist/types/unit/2X.d.ts +1 -1
  182. package/dist/types/unit/3X.d.ts +1 -1
  183. package/dist/types/unit/4X.d.ts +1 -1
  184. package/dist/types/unit/5X.d.ts +1 -1
  185. package/dist/types/unit/6X.d.ts +1 -1
  186. package/dist/types/unit/7X.d.ts +1 -1
  187. package/dist/types/unit/8X.d.ts +1 -1
  188. package/dist/types/unit/9X.d.ts +1 -1
  189. package/dist/types/unit/AX.d.ts +1 -1
  190. package/dist/types/unit/BX.d.ts +1 -1
  191. package/dist/types/unit/CX.d.ts +1 -1
  192. package/dist/types/unit/DX.d.ts +1 -1
  193. package/dist/types/unit/EX.d.ts +1 -1
  194. package/dist/types/unit/FX.d.ts +1 -1
  195. package/dist/types/unit/GX.d.ts +1 -1
  196. package/dist/types/unit/HX.d.ts +1 -1
  197. package/dist/types/unit/IX.d.ts +1 -1
  198. package/dist/types/unit/JX.d.ts +1 -1
  199. package/dist/types/unit/KX.d.ts +1 -1
  200. package/dist/types/unit/LX.d.ts +1 -1
  201. package/dist/types/unit/MX.d.ts +1 -1
  202. package/dist/types/unit/NX.d.ts +1 -1
  203. package/dist/types/unit/OX.d.ts +1 -1
  204. package/dist/types/unit/PX.d.ts +1 -1
  205. package/dist/types/unit/QX.d.ts +1 -1
  206. package/dist/types/unit/RX.d.ts +1 -1
  207. package/dist/types/unit/SX.d.ts +1 -1
  208. package/dist/types/unit/TX.d.ts +1 -1
  209. package/dist/types/unit/UX.d.ts +1 -1
  210. package/dist/types/unit/VX.d.ts +1 -1
  211. package/dist/types/unit/WX.d.ts +1 -1
  212. package/dist/types/unit/XX.d.ts +1 -1
  213. package/dist/types/unit/YX.d.ts +1 -1
  214. package/dist/types/unit/ZX.d.ts +1 -1
  215. package/dist/types/unit-types.d.ts +36 -36
  216. package/dist/types/utils.d.ts +1 -1
  217. package/dist/unit-types-VgYXIwTT.d.ts +55 -0
  218. package/dist/utils/apiQueue.d.ts +35 -0
  219. package/dist/utils/apiQueue.js +3 -0
  220. package/dist/utils/document.d.ts +60 -60
  221. package/dist/utils/signature-diagnostics.d.ts +60 -60
  222. package/dist/utils/validation.d.ts +60 -60
  223. package/package.json +1 -1
  224. package/dist/documentSubmission-l0FndSjm.cjs.map +0 -1
  225. package/dist/index15.cjs.map +0 -1
  226. package/dist/index16.cjs.map +0 -1
  227. package/dist/index18.cjs.map +0 -1
  228. package/dist/index28.cjs.map +0 -1
  229. package/dist/unit-types-BDqcMY-6.d.ts +0 -55
  230. /package/dist/{0X-Dd1CNvh-.d.ts → 0X-qj3c_vAo.d.ts} +0 -0
  231. /package/dist/{1X-CCvwRRue.d.ts → 1X-B-lyAVC4.d.ts} +0 -0
  232. /package/dist/{1X-tlQZHXWg.d.ts → 1X-C72Wa4pk.d.ts} +0 -0
  233. /package/dist/{2X-BNzH9sOi.d.ts → 2X-BfCK614i.d.ts} +0 -0
  234. /package/dist/{2X-Dpj2ruTC.d.ts → 2X-CH89y3Af.d.ts} +0 -0
  235. /package/dist/{3X-DGRZOL1h.d.ts → 3X-DryrwYRf.d.ts} +0 -0
  236. /package/dist/{3X-Dgh7ek-L.d.ts → 3X-Du10Ix_V.d.ts} +0 -0
  237. /package/dist/{4X-C2YvBCto.d.ts → 4X-BPMLRoDv.d.ts} +0 -0
  238. /package/dist/{4X-JEzpzgfD.d.ts → 4X-x3cRFuSM.d.ts} +0 -0
  239. /package/dist/{5X-Dh-FPoAo.d.ts → 5X-B52AKeTz.d.ts} +0 -0
  240. /package/dist/{5X-CLwXLO_A.d.ts → 5X-Bv7M6KyG.d.ts} +0 -0
  241. /package/dist/{6X-Bj2BTA-B.d.ts → 6X-DBwpWPQ6.d.ts} +0 -0
  242. /package/dist/{6X-DKI9x-xV.d.ts → 6X-ZeZ8OB57.d.ts} +0 -0
  243. /package/dist/{7X-CqUyxXiA.d.ts → 7X-C_XGDSpE.d.ts} +0 -0
  244. /package/dist/{7X-CfbV7a2x.d.ts → 7X-Dvw2Z2VN.d.ts} +0 -0
  245. /package/dist/{8X-LeWjhVT-.d.ts → 8X-BkgoX8dg.d.ts} +0 -0
  246. /package/dist/{8X-BiBd9Sgc.d.ts → 8X-Di_0wuRX.d.ts} +0 -0
  247. /package/dist/{9X-CPUAZZzu.d.ts → 9X-8ZnvvViY.d.ts} +0 -0
  248. /package/dist/{9X-DlQI2H7P.d.ts → 9X-Du0e44cq.d.ts} +0 -0
  249. /package/dist/{AX-LnjRRsXP.d.ts → AX-BSPLpkVT.d.ts} +0 -0
  250. /package/dist/{BX-BEB5dvmG.d.ts → BX-u4yMaIkz.d.ts} +0 -0
  251. /package/dist/{CX-DbUPhejT.d.ts → CX-BKZG0pVE.d.ts} +0 -0
  252. /package/dist/{DX-CQQRUzAX.d.ts → DX-CwA9WJAf.d.ts} +0 -0
  253. /package/dist/{EX-mr76RLy0.d.ts → EX-BRNu1Ooi.d.ts} +0 -0
  254. /package/dist/{FX-CsnNcgsB.d.ts → FX-DBxjq6xY.d.ts} +0 -0
  255. /package/dist/{GX-BdkB6I_6.d.ts → GX-B3CvWNrP.d.ts} +0 -0
  256. /package/dist/{HX-GMf5i5So.d.ts → HX-D7FABgTv.d.ts} +0 -0
  257. /package/dist/{IX-Duj6eppk.d.ts → IX-D3ZknsAB.d.ts} +0 -0
  258. /package/dist/{JX-Daa9spZ7.d.ts → JX-BRaZM3Gc.d.ts} +0 -0
  259. /package/dist/{KX-tnQXTKgl.d.ts → KX-B1K0OWoi.d.ts} +0 -0
  260. /package/dist/{LX-DZobJ-WG.d.ts → LX-CKRefinL.d.ts} +0 -0
  261. /package/dist/{MX-BVPhHIvx.d.ts → MX-DKmaeO9r.d.ts} +0 -0
  262. /package/dist/{NX-DEc1tsw0.d.ts → NX-CJL2Gn1U.d.ts} +0 -0
  263. /package/dist/{OX-CT_Dg5Xc.d.ts → OX-Do2ap5v_.d.ts} +0 -0
  264. /package/dist/{PX-BqEPcioe.d.ts → PX-_DOr_rm9.d.ts} +0 -0
  265. /package/dist/{QX-PkkdCvsL.d.ts → QX-HlXLkIki.d.ts} +0 -0
  266. /package/dist/{RX-DCff5kVD.d.ts → RX-DVPGOVES.d.ts} +0 -0
  267. /package/dist/{SX-B0U-jv6V.d.ts → SX-OGT3qwlS.d.ts} +0 -0
  268. /package/dist/{TX-UoXkAqwz.d.ts → TX-cPDINmZ5.d.ts} +0 -0
  269. /package/dist/{UX-CCbo58UC.d.ts → UX-Be3sqvPV.d.ts} +0 -0
  270. /package/dist/{VX-DhNvZGZW.d.ts → VX-CoEuBNDK.d.ts} +0 -0
  271. /package/dist/{WX-BNhx__qq.d.ts → WX-DMvw__jH.d.ts} +0 -0
  272. /package/dist/{XX-BohzIxEW.d.ts → XX-DOA-10JW.d.ts} +0 -0
  273. /package/dist/{YX-DNZeyxw3.d.ts → YX-F34sJ7Ik.d.ts} +0 -0
  274. /package/dist/{ZX-CLCrJ7Mg.d.ts → ZX-CDQOfsHh.d.ts} +0 -0
  275. /package/dist/{classification-codes-DLO4QazM.d.ts → classification-codes-C2X4xW5-.d.ts} +0 -0
  276. /package/dist/{country-code-DqhONNiC.d.ts → country-code-DsI8Mbzx.d.ts} +0 -0
  277. /package/dist/{currencies-Dgzd5iCT.d.ts → currencies-DKuDflOO.d.ts} +0 -0
  278. /package/dist/{e-invoice-Bbd2oyzZ.d.ts → e-invoice-C2TxhyrK.d.ts} +0 -0
  279. /package/dist/{index-Cvns0Vxq.d.ts → index-CygwSf0x.d.ts} +0 -0
  280. /package/dist/{notifications-CBKMhBtd.d.ts → notifications-sFhgh3rJ.d.ts} +0 -0
  281. /package/dist/{payment-modes-SbrTHOfF.d.ts → payment-modes-g3DzLmWb.d.ts} +0 -0
  282. /package/dist/{signatures-BjqNaINR.d.ts → signatures-CerHUrj3.d.ts} +0 -0
  283. /package/dist/{state-codes-B9___UB-.d.ts → state-codes-Ow4oehYT.d.ts} +0 -0
  284. /package/dist/{tax-types-ieqw5Ze7.d.ts → tax-types-ClyLgydM.d.ts} +0 -0
  285. /package/dist/{utils-BTAitDVa.d.ts → utils-C4FoVKLq.d.ts} +0 -0
package/dist/index30.cjs CHANGED
@@ -1,208 +1,193 @@
1
1
 
2
- //#region src/types/msic/0X.d.ts
3
- let MSIC_0X = /* @__PURE__ */ function(MSIC_0X$1) {
4
- MSIC_0X$1["NOT_APPLICABLE"] = "00000";
5
- MSIC_0X$1["GROWING_OF_MAIZE"] = "01111";
6
- MSIC_0X$1["GROWING_OF_LEGUMINOUS_CROPS"] = "01112";
7
- MSIC_0X$1["GROWING_OF_OIL_SEEDS"] = "01113";
8
- MSIC_0X$1["GROWING_OF_OTHER_CEREALS"] = "01119";
9
- MSIC_0X$1["GROWING_OF_PADDY"] = "01120";
10
- MSIC_0X$1["GROWING_OF_LEAFY_OR_STEM_VEGETABLES"] = "01131";
11
- MSIC_0X$1["GROWING_OF_FRUITS_BEARING_VEGETABLES"] = "01132";
12
- MSIC_0X$1["GROWING_OF_MELONS"] = "01133";
13
- MSIC_0X$1["GROWING_OF_MUSHROOMS_AND_TRUFFLES"] = "01134";
14
- MSIC_0X$1["GROWING_OF_VEGETABLES_SEEDS"] = "01135";
15
- MSIC_0X$1["GROWING_OF_OTHER_VEGETABLES"] = "01136";
16
- MSIC_0X$1["GROWING_OF_SUGAR_BEET"] = "01137";
17
- MSIC_0X$1["GROWING_OF_ROOTS_TUBERS"] = "01138";
18
- MSIC_0X$1["GROWING_OF_SUGAR_CANE"] = "01140";
19
- MSIC_0X$1["GROWING_OF_TOBACCO"] = "01150";
20
- MSIC_0X$1["GROWING_OF_FIBRE_CROPS"] = "01160";
21
- MSIC_0X$1["GROWING_OF_FLOWERS"] = "01191";
22
- MSIC_0X$1["GROWING_OF_FLOWER_SEEDS"] = "01192";
23
- MSIC_0X$1["GROWING_OF_SAGO"] = "01193";
24
- MSIC_0X$1["GROWING_OF_OTHER_NON_PERENNIAL_CROPS"] = "01199";
25
- MSIC_0X$1["GROWING_OF_GRAPES"] = "01210";
26
- MSIC_0X$1["GROWING_OF_BANANA"] = "01221";
27
- MSIC_0X$1["GROWING_OF_MANGO"] = "01222";
28
- MSIC_0X$1["GROWING_OF_DURIAN"] = "01223";
29
- MSIC_0X$1["GROWING_OF_RAMBUTAN"] = "01224";
30
- MSIC_0X$1["GROWING_OF_STAR_FRUIT"] = "01225";
31
- MSIC_0X$1["GROWING_OF_PAPAYA"] = "01226";
32
- MSIC_0X$1["GROWING_OF_PINEAPPLE"] = "01227";
33
- MSIC_0X$1["GROWING_OF_PITAYA"] = "01228";
34
- MSIC_0X$1["GROWING_OF_OTHER_TROPICAL_FRUITS"] = "01229";
35
- MSIC_0X$1["GROWING_OF_POMELO"] = "01231";
36
- MSIC_0X$1["GROWING_OF_LEMON_AND_LIMES"] = "01232";
37
- MSIC_0X$1["GROWING_OF_TANGERINES_AND_MANDARIN"] = "01233";
38
- MSIC_0X$1["GROWING_OF_OTHER_CITRUS_FRUITS"] = "01239";
39
- MSIC_0X$1["GROWING_OF_GUAVA"] = "01241";
40
- MSIC_0X$1["GROWING_OF_OTHER_POME_FRUITS"] = "01249";
41
- MSIC_0X$1["GROWING_OF_BERRIES"] = "01251";
42
- MSIC_0X$1["GROWING_OF_FRUIT_SEEDS"] = "01252";
43
- MSIC_0X$1["GROWING_OF_EDIBLE_NUTS"] = "01253";
44
- MSIC_0X$1["GROWING_OF_OTHER_TREE_AND_BUSH_FRUITS"] = "01259";
45
- MSIC_0X$1["GROWING_OF_OIL_PALM_ESTATE"] = "01261";
46
- MSIC_0X$1["GROWING_OF_OIL_PALM_SMALLHOLDINGS"] = "01262";
47
- MSIC_0X$1["GROWING_OF_COCONUT"] = "01263";
48
- MSIC_0X$1["GROWING_OF_OTHER_OLEAGINOUS_FRUITS"] = "01269";
49
- MSIC_0X$1["GROWING_OF_COFFEE"] = "01271";
50
- MSIC_0X$1["GROWING_OF_TEA"] = "01272";
51
- MSIC_0X$1["GROWING_OF_COCOA"] = "01273";
52
- MSIC_0X$1["GROWING_OF_OTHER_BEVERAGE_CROPS"] = "01279";
53
- MSIC_0X$1["GROWING_OF_PEPPER"] = "01281";
54
- MSIC_0X$1["GROWING_OF_CHILIES"] = "01282";
55
- MSIC_0X$1["GROWING_OF_NUTMEG"] = "01283";
56
- MSIC_0X$1["GROWING_OF_GINGER"] = "01284";
57
- MSIC_0X$1["GROWING_OF_PLANTS_FOR_PHARMACY"] = "01285";
58
- MSIC_0X$1["GROWING_OF_OTHER_SPICES"] = "01289";
59
- MSIC_0X$1["GROWING_OF_RUBBER_TREES_ESTATE"] = "01291";
60
- MSIC_0X$1["GROWING_OF_RUBBER_TREES_SMALLHOLDINGS"] = "01292";
61
- MSIC_0X$1["GROWING_OF_TREES_FOR_SAP"] = "01293";
62
- MSIC_0X$1["GROWING_OF_NIPA_PALM"] = "01294";
63
- MSIC_0X$1["GROWING_OF_ARECA"] = "01295";
64
- MSIC_0X$1["GROWING_OF_ROSELLE"] = "01296";
65
- MSIC_0X$1["GROWING_OF_OTHER_PERENNIAL_CROPS"] = "01299";
66
- MSIC_0X$1["GROWING_OF_PLANTS_FOR_PLANTING"] = "01301";
67
- MSIC_0X$1["GROWING_OF_PLANTS_FOR_ORNAMENTAL"] = "01302";
68
- MSIC_0X$1["GROWING_OF_LIVE_PLANTS"] = "01303";
69
- MSIC_0X$1["OPERATION_OF_TREE_NURSERIES"] = "01304";
70
- MSIC_0X$1["RAISING_CATTLE_OR_BUFFALOES"] = "01411";
71
- MSIC_0X$1["PRODUCTION_OF_RAW_MILK"] = "01412";
72
- MSIC_0X$1["PRODUCTION_OF_BOVINE_SEMEN"] = "01413";
73
- MSIC_0X$1["RAISING_OF_HORSES"] = "01420";
74
- MSIC_0X$1["RAISING_OF_CAMELS"] = "01430";
75
- MSIC_0X$1["RAISING_OF_SHEEP_AND_GOATS"] = "01441";
76
- MSIC_0X$1["PRODUCTION_OF_SHEEP_MILK"] = "01442";
77
- MSIC_0X$1["PRODUCTION_OF_RAW_WOOL"] = "01443";
78
- MSIC_0X$1["RAISING_OF_SWINE"] = "01450";
79
- MSIC_0X$1["RAISING_OF_CHICKEN"] = "01461";
80
- MSIC_0X$1["RAISING_OF_DUCKS"] = "01462";
81
- MSIC_0X$1["RAISING_OF_GEESE"] = "01463";
82
- MSIC_0X$1["RAISING_OF_QUAILS"] = "01464";
83
- MSIC_0X$1["RAISING_OF_OTHER_POULTRY"] = "01465";
84
- MSIC_0X$1["PRODUCTION_OF_CHICKEN_EGGS"] = "01466";
85
- MSIC_0X$1["PRODUCTION_OF_DUCK_EGGS"] = "01467";
86
- MSIC_0X$1["PRODUCTION_OF_OTHER_POULTRY_EGGS"] = "01468";
87
- MSIC_0X$1["OPERATION_OF_POULTRY_HATCHERIES"] = "01469";
88
- MSIC_0X$1["RAISING_OF_SEMI_DOMESTICATED"] = "01491";
89
- MSIC_0X$1["PRODUCTION_OF_FUR_SKINS"] = "01492";
90
- MSIC_0X$1["OPERATION_OF_WORM_FARMS"] = "01493";
91
- MSIC_0X$1["RAISING_OF_SILK_WORMS"] = "01494";
92
- MSIC_0X$1["BEE_KEEPING"] = "01495";
93
- MSIC_0X$1["RAISING_OF_PET_ANIMALS"] = "01496";
94
- MSIC_0X$1["RAISING_OF_SWIFLET"] = "01497";
95
- MSIC_0X$1["RAISING_OF_DIVERSE_ANIMALS"] = "01499";
96
- MSIC_0X$1["MIXED_FARMING"] = "01500";
97
- MSIC_0X$1["AGRICULTURAL_ACTIVITIES_FOR_CROPS"] = "01610";
98
- MSIC_0X$1["AGRICULTURAL_ACTIVITIES_FOR_ANIMALS"] = "01620";
99
- MSIC_0X$1["PREPARATION_OF_CROPS"] = "01631";
100
- MSIC_0X$1["PREPARATION_OF_TOBACCO_LEAVES"] = "01632";
101
- MSIC_0X$1["PREPARATION_OF_COCOA_BEANS"] = "01633";
102
- MSIC_0X$1["SUN_DRYING_OF_FRUITS"] = "01634";
103
- MSIC_0X$1["SEED_PROCESSING"] = "01640";
104
- MSIC_0X$1["HUNTING_AND_TRAPPING"] = "01701";
105
- MSIC_0X$1["TAKING_OF_ANIMALS"] = "01702";
106
- MSIC_0X$1["PLANTING_OF_FORESTS"] = "02101";
107
- MSIC_0X$1["GROWING_OF_COPPICE"] = "02102";
108
- MSIC_0X$1["OPERATION_OF_FOREST_NURSERIES"] = "02103";
109
- MSIC_0X$1["COLLECTION_OF_WILDINGS"] = "02104";
110
- MSIC_0X$1["FOREST_PLANTATION"] = "02105";
111
- MSIC_0X$1["PRODUCTION_OF_ROUND_WOOD"] = "02201";
112
- MSIC_0X$1["PRODUCTION_OF_UNPROCESSED_WOOD"] = "02202";
113
- MSIC_0X$1["PRODUCTION_OF_CHARCOAL"] = "02203";
114
- MSIC_0X$1["RUBBER_WOOD_LOGGING"] = "02204";
115
- MSIC_0X$1["COLLECTION_OF_RATTAN"] = "02301";
116
- MSIC_0X$1["BIRDS_NEST_COLLECTION"] = "02302";
117
- MSIC_0X$1["WILD_SAGO_PALM_COLLECTION"] = "02303";
118
- MSIC_0X$1["GATHERING_OF_NON_WOOD_FOREST"] = "02309";
119
- MSIC_0X$1["FORESTRY_SERVICE_ACTIVITIES"] = "02401";
120
- MSIC_0X$1["LOGGING_SERVICE_ACTIVITIES"] = "02402";
121
- MSIC_0X$1["COMMERCIAL_OCEAN_FISHING"] = "03111";
122
- MSIC_0X$1["COLLECTION_OF_MARINE_CRUSTACEANS"] = "03112";
123
- MSIC_0X$1["TAKING_OF_AQUATIC_ANIMALS"] = "03113";
124
- MSIC_0X$1["VESSELS_FOR_FISHING"] = "03114";
125
- MSIC_0X$1["GATHERING_OF_MARINE_ORGANISMS"] = "03115";
126
- MSIC_0X$1["MARINE_FISHING"] = "03119";
127
- MSIC_0X$1["COMMERCIAL_INLAND_FISHING"] = "03121";
128
- MSIC_0X$1["TAKING_OF_FRESHWATER_CRUSTACEANS"] = "03122";
129
- MSIC_0X$1["TAKING_OF_FRESHWATER_ANIMALS"] = "03123";
130
- MSIC_0X$1["GATHERING_OF_FRESHWATER_FLORA"] = "03124";
131
- MSIC_0X$1["FRESHWATER_FISHING"] = "03129";
132
- MSIC_0X$1["FISH_FARMING_SEA_WATER"] = "03211";
133
- MSIC_0X$1["PRODUCTION_OF_BIVALVE_SPAT"] = "03212";
134
- MSIC_0X$1["GROWING_OF_SEAWEEDS"] = "03213";
135
- MSIC_0X$1["CULTURE_OF_CRUSTACEANS"] = "03214";
136
- MSIC_0X$1["AQUACULTURE_IN_BRACKISH"] = "03215";
137
- MSIC_0X$1["AQUACULTURE_IN_SALT_WATER"] = "03216";
138
- MSIC_0X$1["OPERATION_OF_MARINE_HATCHERIES"] = "03217";
139
- MSIC_0X$1["OPERATION_OF_MARINE_WORM_FARMS"] = "03218";
140
- MSIC_0X$1["MARINE_AQUACULTURE"] = "03219";
141
- MSIC_0X$1["FISH_FARMING_FRESHWATER"] = "03221";
142
- MSIC_0X$1["SHRIMP_FARMING_FRESHWATER"] = "03222";
143
- MSIC_0X$1["CULTURE_OF_FRESHWATER_CRUSTACEANS"] = "03223";
144
- MSIC_0X$1["OPERATION_OF_FRESHWATER_HATCHERIES"] = "03224";
145
- MSIC_0X$1["FARMING_OF_FROGS"] = "03225";
146
- MSIC_0X$1["FRESHWATER_AQUACULTURE"] = "03229";
147
- MSIC_0X$1["MINING_OF_HARD_COAL"] = "05100";
148
- MSIC_0X$1["MINING_OF_LIGNITE"] = "05200";
149
- MSIC_0X$1["EXTRACTION_OF_CRUDE_PETROLEUM"] = "06101";
150
- MSIC_0X$1["EXTRACTION_OF_BITUMINOUS"] = "06102";
151
- MSIC_0X$1["PRODUCTION_OF_CRUDE_PETROLEUM"] = "06103";
152
- MSIC_0X$1["PROCESSES_TO_OBTAIN_CRUDE_OILS"] = "06104";
153
- MSIC_0X$1["PRODUCTION_OF_NATURAL_GAS"] = "06201";
154
- MSIC_0X$1["EXTRACTION_OF_CONDENSATES"] = "06202";
155
- MSIC_0X$1["DRAINING_OF_HYDROCARBON"] = "06203";
156
- MSIC_0X$1["GAS_DESULPHURIZATION"] = "06204";
157
- MSIC_0X$1["MINING_OF_HYDROCARBON_LIQUIDS"] = "06205";
158
- MSIC_0X$1["MINING_OF_IRON_ORES"] = "07101";
159
- MSIC_0X$1["BENEFICIATION_OF_IRON_ORES"] = "07102";
160
- MSIC_0X$1["MINING_OF_URANIUM"] = "07210";
161
- MSIC_0X$1["MINING_OF_TIN"] = "07291";
162
- MSIC_0X$1["MINING_OF_COPPER"] = "07292";
163
- MSIC_0X$1["MINING_OF_BAUXITE"] = "07293";
164
- MSIC_0X$1["MINING_OF_ILMENITE"] = "07294";
165
- MSIC_0X$1["MINING_OF_GOLD"] = "07295";
166
- MSIC_0X$1["MINING_OF_SILVER"] = "07296";
167
- MSIC_0X$1["MINING_OF_PLATINUM"] = "07297";
168
- MSIC_0X$1["AMANG_RETREATMENT"] = "07298";
169
- MSIC_0X$1["MINING_OF_OTHER_NON_FERROUS"] = "07299";
170
- MSIC_0X$1["QUARRYING_OF_STONE"] = "08101";
171
- MSIC_0X$1["QUARRYING_OF_LIMESTONE"] = "08102";
172
- MSIC_0X$1["MINING_OF_GYPSUM"] = "08103";
173
- MSIC_0X$1["MINING_OF_CHALK"] = "08104";
174
- MSIC_0X$1["EXTRACTION_OF_SAND"] = "08105";
175
- MSIC_0X$1["BREAKING_OF_STONE"] = "08106";
176
- MSIC_0X$1["QUARRYING_OF_SAND"] = "08107";
177
- MSIC_0X$1["MINING_OF_CLAYS"] = "08108";
178
- MSIC_0X$1["QUARRYING_OF_GRANITE"] = "08109";
179
- MSIC_0X$1["MINING_OF_PHOSPHATES"] = "08911";
180
- MSIC_0X$1["MINING_OF_POTASSIUM"] = "08912";
181
- MSIC_0X$1["MINING_OF_SULPHUR"] = "08913";
182
- MSIC_0X$1["EXTRACTION_OF_PYRITES"] = "08914";
183
- MSIC_0X$1["MINING_OF_BARIUM"] = "08915";
184
- MSIC_0X$1["MINING_OF_BORATES"] = "08916";
185
- MSIC_0X$1["MINING_OF_EARTH_COLOURS"] = "08917";
186
- MSIC_0X$1["GUANO_MINING"] = "08918";
187
- MSIC_0X$1["PEAT_DIGGING"] = "08921";
188
- MSIC_0X$1["PEAT_AGGLOMERATION"] = "08922";
189
- MSIC_0X$1["PREPARATION_OF_PEAT"] = "08923";
190
- MSIC_0X$1["EXTRACTION_OF_UNDERGROUND_SALT"] = "08931";
191
- MSIC_0X$1["SALT_PRODUCTION"] = "08932";
192
- MSIC_0X$1["CRUSHING_OF_SALT"] = "08933";
193
- MSIC_0X$1["MINING_OF_ABRASIVE_MATERIALS"] = "08991";
194
- MSIC_0X$1["MINING_OF_ASBESTOS"] = "08992";
195
- MSIC_0X$1["MINING_OF_SILICEOUS"] = "08993";
196
- MSIC_0X$1["MINING_OF_GRAPHITE"] = "08994";
197
- MSIC_0X$1["MINING_OF_STEATITE"] = "08995";
198
- MSIC_0X$1["MINING_OF_GEMSTONES"] = "08996";
199
- MSIC_0X$1["OTHER_MINING"] = "08999";
200
- MSIC_0X$1["OIL_AND_GAS_EXTRACTION"] = "09101";
201
- MSIC_0X$1["OIL_AND_GAS_FIREFIGHTING"] = "09102";
202
- MSIC_0X$1["SUPPORT_FOR_MINING"] = "09900";
203
- return MSIC_0X$1;
204
- }({});
2
+ //#region src/utils/validation.ts
3
+ /**
4
+ * Validates TIN format based on registration type
5
+ */
6
+ const validateTIN = (tin, registrationType) => {
7
+ const errors = [];
8
+ if (!tin) {
9
+ errors.push({
10
+ field: "tin",
11
+ code: "TIN_REQUIRED",
12
+ message: "TIN is required",
13
+ severity: "error"
14
+ });
15
+ return errors;
16
+ }
17
+ if (registrationType === "BRN" && !tin.startsWith("C")) errors.push({
18
+ field: "tin",
19
+ code: "TIN_FORMAT_INVALID",
20
+ message: "Company TIN should start with \"C\" for BRN registration",
21
+ severity: "warning"
22
+ });
23
+ if (registrationType === "NRIC" && !tin.startsWith("IG")) errors.push({
24
+ field: "tin",
25
+ code: "TIN_FORMAT_INVALID",
26
+ message: "Individual TIN should start with \"IG\" for NRIC registration",
27
+ severity: "warning"
28
+ });
29
+ if (tin.length > 14) errors.push({
30
+ field: "tin",
31
+ code: "TIN_LENGTH_INVALID",
32
+ message: "TIN cannot exceed 14 characters",
33
+ severity: "error"
34
+ });
35
+ return errors;
36
+ };
37
+ /**
38
+ * Validates contact number format (E.164 standard)
39
+ */
40
+ const validateContactNumber = (contactNumber) => {
41
+ const errors = [];
42
+ if (!contactNumber || contactNumber === "NA") return errors;
43
+ const e164Regex = /^\+[1-9]\d{1,14}$/;
44
+ if (!e164Regex.test(contactNumber)) errors.push({
45
+ field: "contactNumber",
46
+ code: "CONTACT_FORMAT_INVALID",
47
+ message: "Contact number must be in E.164 format (e.g., +60123456789)",
48
+ severity: "error"
49
+ });
50
+ if (contactNumber.length < 8) errors.push({
51
+ field: "contactNumber",
52
+ code: "CONTACT_LENGTH_INVALID",
53
+ message: "Contact number must be at least 8 characters",
54
+ severity: "error"
55
+ });
56
+ return errors;
57
+ };
58
+ /**
59
+ * Validates monetary amounts
60
+ */
61
+ const validateMonetaryAmount = (amount, fieldName, maxDigits = 18, maxDecimals = 2) => {
62
+ const errors = [];
63
+ if (amount < 0) errors.push({
64
+ field: fieldName,
65
+ code: "AMOUNT_NEGATIVE",
66
+ message: `${fieldName} cannot be negative`,
67
+ severity: "error"
68
+ });
69
+ const amountStr = amount.toString();
70
+ const [integerPart, decimalPart] = amountStr.split(".");
71
+ if (integerPart && integerPart.length > maxDigits - maxDecimals) errors.push({
72
+ field: fieldName,
73
+ code: "AMOUNT_DIGITS_EXCEEDED",
74
+ message: `${fieldName} exceeds maximum ${maxDigits} digits`,
75
+ severity: "error"
76
+ });
77
+ if (decimalPart && decimalPart.length > maxDecimals) errors.push({
78
+ field: fieldName,
79
+ code: "AMOUNT_DECIMALS_EXCEEDED",
80
+ message: `${fieldName} exceeds maximum ${maxDecimals} decimal places`,
81
+ severity: "error"
82
+ });
83
+ return errors;
84
+ };
85
+ /**
86
+ * Validates line item tax calculation consistency for both fixed rate and percentage taxation
87
+ */
88
+ const validateLineItemTax = (item, index) => {
89
+ const errors = [];
90
+ const tolerance = .01;
91
+ const hasFixedRate = item.taxPerUnitAmount !== void 0 && item.baseUnitMeasure !== void 0;
92
+ const hasPercentageRate = item.taxRate !== void 0;
93
+ if (!hasFixedRate && !hasPercentageRate) {
94
+ errors.push({
95
+ field: `lineItem[${index}]`,
96
+ code: "TAX_METHOD_MISSING",
97
+ message: `Line item ${index + 1} must specify either taxRate (for percentage) or taxPerUnitAmount + baseUnitMeasure (for fixed rate)`,
98
+ severity: "error"
99
+ });
100
+ return errors;
101
+ }
102
+ if (hasFixedRate && hasPercentageRate) errors.push({
103
+ field: `lineItem[${index}]`,
104
+ code: "TAX_METHOD_CONFLICT",
105
+ message: `Line item ${index + 1} cannot have both percentage and fixed rate tax methods`,
106
+ severity: "error"
107
+ });
108
+ if (hasFixedRate) {
109
+ if (item.baseUnitMeasureCode === void 0) errors.push({
110
+ field: `lineItem[${index}].baseUnitMeasureCode`,
111
+ code: "UNIT_CODE_MISSING",
112
+ message: `Line item ${index + 1} with fixed rate tax must specify baseUnitMeasureCode`,
113
+ severity: "error"
114
+ });
115
+ const expectedTaxAmount = item.taxPerUnitAmount * item.baseUnitMeasure;
116
+ if (Math.abs(item.taxAmount - expectedTaxAmount) > tolerance) errors.push({
117
+ field: `lineItem[${index}].taxAmount`,
118
+ code: "FIXED_TAX_CALCULATION_MISMATCH",
119
+ message: `Line item ${index + 1} tax amount (${item.taxAmount}) doesn't match fixed rate calculation (${item.taxPerUnitAmount} × ${item.baseUnitMeasure} = ${expectedTaxAmount})`,
120
+ severity: "error"
121
+ });
122
+ }
123
+ if (hasPercentageRate && !hasFixedRate) {
124
+ const expectedTaxAmount = item.totalTaxableAmountPerLine * item.taxRate / 100;
125
+ if (Math.abs(item.taxAmount - expectedTaxAmount) > tolerance) errors.push({
126
+ field: `lineItem[${index}].taxAmount`,
127
+ code: "PERCENTAGE_TAX_CALCULATION_MISMATCH",
128
+ message: `Line item ${index + 1} tax amount (${item.taxAmount}) doesn't match percentage calculation (${item.totalTaxableAmountPerLine} × ${item.taxRate}% = ${expectedTaxAmount})`,
129
+ severity: "error"
130
+ });
131
+ }
132
+ return errors;
133
+ };
134
+ /**
135
+ * Validates tax calculation consistency
136
+ */
137
+ const validateTaxCalculations = (invoice) => {
138
+ const errors = [];
139
+ invoice.invoiceLineItems.forEach((item, index) => {
140
+ errors.push(...validateLineItemTax(item, index));
141
+ });
142
+ const expectedTaxExclusive = invoice.invoiceLineItems.reduce((sum, item) => sum + item.totalTaxableAmountPerLine, 0);
143
+ const expectedTaxAmount = invoice.invoiceLineItems.reduce((sum, item) => sum + item.taxAmount, 0);
144
+ const tolerance = .01;
145
+ if (Math.abs(invoice.legalMonetaryTotal.taxExclusiveAmount - expectedTaxExclusive) > tolerance) errors.push({
146
+ field: "legalMonetaryTotal.taxExclusiveAmount",
147
+ code: "TAX_EXCLUSIVE_MISMATCH",
148
+ message: `Tax exclusive amount (${invoice.legalMonetaryTotal.taxExclusiveAmount}) doesn't match sum of line items (${expectedTaxExclusive})`,
149
+ severity: "error"
150
+ });
151
+ if (Math.abs(invoice.taxTotal.taxAmount - expectedTaxAmount) > tolerance) errors.push({
152
+ field: "taxTotal.taxAmount",
153
+ code: "TAX_AMOUNT_MISMATCH",
154
+ message: `Tax amount (${invoice.taxTotal.taxAmount}) doesn't match sum of line item taxes (${expectedTaxAmount})`,
155
+ severity: "error"
156
+ });
157
+ return errors;
158
+ };
159
+ /**
160
+ * Main validation function for complete invoice
161
+ */
162
+ const validateInvoice = (invoice) => {
163
+ const allErrors = [];
164
+ allErrors.push(...validateTIN(invoice.supplier.tin, invoice.supplier.registrationType));
165
+ allErrors.push(...validateTIN(invoice.buyer.tin, invoice.buyer.registrationType));
166
+ allErrors.push(...validateContactNumber(invoice.supplier.contactNumber));
167
+ allErrors.push(...validateContactNumber(invoice.buyer.contactNumber));
168
+ allErrors.push(...validateMonetaryAmount(invoice.legalMonetaryTotal.taxExclusiveAmount, "taxExclusiveAmount"));
169
+ allErrors.push(...validateMonetaryAmount(invoice.legalMonetaryTotal.payableAmount, "payableAmount"));
170
+ allErrors.push(...validateMonetaryAmount(invoice.taxTotal.taxAmount, "taxAmount"));
171
+ invoice.invoiceLineItems.forEach((item, index) => {
172
+ allErrors.push(...validateMonetaryAmount(item.unitPrice, `lineItem[${index}].unitPrice`));
173
+ allErrors.push(...validateMonetaryAmount(item.taxAmount, `lineItem[${index}].taxAmount`));
174
+ allErrors.push(...validateMonetaryAmount(item.totalTaxableAmountPerLine, `lineItem[${index}].totalTaxableAmountPerLine`));
175
+ });
176
+ allErrors.push(...validateTaxCalculations(invoice));
177
+ const errors = allErrors.filter((e) => e.severity === "error");
178
+ const warnings = allErrors.filter((e) => e.severity === "warning");
179
+ return {
180
+ isValid: errors.length === 0,
181
+ errors,
182
+ warnings
183
+ };
184
+ };
205
185
 
206
186
  //#endregion
207
- exports.MSIC_0X = MSIC_0X;
187
+ exports.validateContactNumber = validateContactNumber;
188
+ exports.validateInvoice = validateInvoice;
189
+ exports.validateLineItemTax = validateLineItemTax;
190
+ exports.validateMonetaryAmount = validateMonetaryAmount;
191
+ exports.validateTIN = validateTIN;
192
+ exports.validateTaxCalculations = validateTaxCalculations;
208
193
  //# sourceMappingURL=index30.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index30.cjs","names":[],"sources":["../src/types/msic/0X.d.ts"],"sourcesContent":["export type MSICCode = {\n code: string\n description: string\n msicCategoryReference: string\n}\n\nexport type MSIC_0X_CODE =\n | '00000'\n | '01111'\n | '01112'\n | '01113'\n | '01119'\n | '01120'\n | '01131'\n | '01132'\n | '01133'\n | '01134'\n | '01135'\n | '01136'\n | '01137'\n | '01138'\n | '01140'\n | '01150'\n | '01160'\n | '01191'\n | '01192'\n | '01193'\n | '01199'\n | '01210'\n | '01221'\n | '01222'\n | '01223'\n | '01224'\n | '01225'\n | '01226'\n | '01227'\n | '01228'\n | '01229'\n | '01231'\n | '01232'\n | '01233'\n | '01239'\n | '01241'\n | '01249'\n | '01251'\n | '01252'\n | '01253'\n | '01259'\n | '01261'\n | '01262'\n | '01263'\n | '01269'\n | '01271'\n | '01272'\n | '01273'\n | '01279'\n | '01281'\n | '01282'\n | '01283'\n | '01284'\n | '01285'\n | '01289'\n | '01291'\n | '01292'\n | '01293'\n | '01294'\n | '01295'\n | '01296'\n | '01299'\n | '01301'\n | '01302'\n | '01303'\n | '01304'\n | '01411'\n | '01412'\n | '01413'\n | '01420'\n | '01430'\n | '01441'\n | '01442'\n | '01443'\n | '01450'\n | '01461'\n | '01462'\n | '01463'\n | '01464'\n | '01465'\n | '01466'\n | '01467'\n | '01468'\n | '01469'\n | '01491'\n | '01492'\n | '01493'\n | '01494'\n | '01495'\n | '01496'\n | '01497'\n | '01499'\n | '01500'\n | '01610'\n | '01620'\n | '01631'\n | '01632'\n | '01633'\n | '01634'\n | '01640'\n | '01701'\n | '01702'\n | '02101'\n | '02102'\n | '02103'\n | '02104'\n | '02105'\n | '02201'\n | '02202'\n | '02203'\n | '02204'\n | '02301'\n | '02302'\n | '02303'\n | '02309'\n | '02401'\n | '02402'\n | '03111'\n | '03112'\n | '03113'\n | '03114'\n | '03115'\n | '03119'\n | '03121'\n | '03122'\n | '03123'\n | '03124'\n | '03129'\n | '03211'\n | '03212'\n | '03213'\n | '03214'\n | '03215'\n | '03216'\n | '03217'\n | '03218'\n | '03219'\n | '03221'\n | '03222'\n | '03223'\n | '03224'\n | '03225'\n | '03229'\n | '05100'\n | '05200'\n | '06101'\n | '06102'\n | '06103'\n | '06104'\n | '06201'\n | '06202'\n | '06203'\n | '06204'\n | '06205'\n | '07101'\n | '07102'\n | '07210'\n | '07291'\n | '07292'\n | '07293'\n | '07294'\n | '07295'\n | '07296'\n | '07297'\n | '07298'\n | '07299'\n | '08101'\n | '08102'\n | '08103'\n | '08104'\n | '08105'\n | '08106'\n | '08107'\n | '08108'\n | '08109'\n | '08911'\n | '08912'\n | '08913'\n | '08914'\n | '08915'\n | '08916'\n | '08917'\n | '08918'\n | '08921'\n | '08922'\n | '08923'\n | '08931'\n | '08932'\n | '08933'\n | '08991'\n | '08992'\n | '08993'\n | '08994'\n | '08995'\n | '08996'\n | '08999'\n | '09101'\n | '09102'\n | '09900'\n\nexport enum MSIC_0X {\n NOT_APPLICABLE = '00000',\n GROWING_OF_MAIZE = '01111',\n GROWING_OF_LEGUMINOUS_CROPS = '01112',\n GROWING_OF_OIL_SEEDS = '01113',\n GROWING_OF_OTHER_CEREALS = '01119',\n GROWING_OF_PADDY = '01120',\n GROWING_OF_LEAFY_OR_STEM_VEGETABLES = '01131',\n GROWING_OF_FRUITS_BEARING_VEGETABLES = '01132',\n GROWING_OF_MELONS = '01133',\n GROWING_OF_MUSHROOMS_AND_TRUFFLES = '01134',\n GROWING_OF_VEGETABLES_SEEDS = '01135',\n GROWING_OF_OTHER_VEGETABLES = '01136',\n GROWING_OF_SUGAR_BEET = '01137',\n GROWING_OF_ROOTS_TUBERS = '01138',\n GROWING_OF_SUGAR_CANE = '01140',\n GROWING_OF_TOBACCO = '01150',\n GROWING_OF_FIBRE_CROPS = '01160',\n GROWING_OF_FLOWERS = '01191',\n GROWING_OF_FLOWER_SEEDS = '01192',\n GROWING_OF_SAGO = '01193',\n GROWING_OF_OTHER_NON_PERENNIAL_CROPS = '01199',\n GROWING_OF_GRAPES = '01210',\n GROWING_OF_BANANA = '01221',\n GROWING_OF_MANGO = '01222',\n GROWING_OF_DURIAN = '01223',\n GROWING_OF_RAMBUTAN = '01224',\n GROWING_OF_STAR_FRUIT = '01225',\n GROWING_OF_PAPAYA = '01226',\n GROWING_OF_PINEAPPLE = '01227',\n GROWING_OF_PITAYA = '01228',\n GROWING_OF_OTHER_TROPICAL_FRUITS = '01229',\n GROWING_OF_POMELO = '01231',\n GROWING_OF_LEMON_AND_LIMES = '01232',\n GROWING_OF_TANGERINES_AND_MANDARIN = '01233',\n GROWING_OF_OTHER_CITRUS_FRUITS = '01239',\n GROWING_OF_GUAVA = '01241',\n GROWING_OF_OTHER_POME_FRUITS = '01249',\n GROWING_OF_BERRIES = '01251',\n GROWING_OF_FRUIT_SEEDS = '01252',\n GROWING_OF_EDIBLE_NUTS = '01253',\n GROWING_OF_OTHER_TREE_AND_BUSH_FRUITS = '01259',\n GROWING_OF_OIL_PALM_ESTATE = '01261',\n GROWING_OF_OIL_PALM_SMALLHOLDINGS = '01262',\n GROWING_OF_COCONUT = '01263',\n GROWING_OF_OTHER_OLEAGINOUS_FRUITS = '01269',\n GROWING_OF_COFFEE = '01271',\n GROWING_OF_TEA = '01272',\n GROWING_OF_COCOA = '01273',\n GROWING_OF_OTHER_BEVERAGE_CROPS = '01279',\n GROWING_OF_PEPPER = '01281',\n GROWING_OF_CHILIES = '01282',\n GROWING_OF_NUTMEG = '01283',\n GROWING_OF_GINGER = '01284',\n GROWING_OF_PLANTS_FOR_PHARMACY = '01285',\n GROWING_OF_OTHER_SPICES = '01289',\n GROWING_OF_RUBBER_TREES_ESTATE = '01291',\n GROWING_OF_RUBBER_TREES_SMALLHOLDINGS = '01292',\n GROWING_OF_TREES_FOR_SAP = '01293',\n GROWING_OF_NIPA_PALM = '01294',\n GROWING_OF_ARECA = '01295',\n GROWING_OF_ROSELLE = '01296',\n GROWING_OF_OTHER_PERENNIAL_CROPS = '01299',\n GROWING_OF_PLANTS_FOR_PLANTING = '01301',\n GROWING_OF_PLANTS_FOR_ORNAMENTAL = '01302',\n GROWING_OF_LIVE_PLANTS = '01303',\n OPERATION_OF_TREE_NURSERIES = '01304',\n RAISING_CATTLE_OR_BUFFALOES = '01411',\n PRODUCTION_OF_RAW_MILK = '01412',\n PRODUCTION_OF_BOVINE_SEMEN = '01413',\n RAISING_OF_HORSES = '01420',\n RAISING_OF_CAMELS = '01430',\n RAISING_OF_SHEEP_AND_GOATS = '01441',\n PRODUCTION_OF_SHEEP_MILK = '01442',\n PRODUCTION_OF_RAW_WOOL = '01443',\n RAISING_OF_SWINE = '01450',\n RAISING_OF_CHICKEN = '01461',\n RAISING_OF_DUCKS = '01462',\n RAISING_OF_GEESE = '01463',\n RAISING_OF_QUAILS = '01464',\n RAISING_OF_OTHER_POULTRY = '01465',\n PRODUCTION_OF_CHICKEN_EGGS = '01466',\n PRODUCTION_OF_DUCK_EGGS = '01467',\n PRODUCTION_OF_OTHER_POULTRY_EGGS = '01468',\n OPERATION_OF_POULTRY_HATCHERIES = '01469',\n RAISING_OF_SEMI_DOMESTICATED = '01491',\n PRODUCTION_OF_FUR_SKINS = '01492',\n OPERATION_OF_WORM_FARMS = '01493',\n RAISING_OF_SILK_WORMS = '01494',\n BEE_KEEPING = '01495',\n RAISING_OF_PET_ANIMALS = '01496',\n RAISING_OF_SWIFLET = '01497',\n RAISING_OF_DIVERSE_ANIMALS = '01499',\n MIXED_FARMING = '01500',\n AGRICULTURAL_ACTIVITIES_FOR_CROPS = '01610',\n AGRICULTURAL_ACTIVITIES_FOR_ANIMALS = '01620',\n PREPARATION_OF_CROPS = '01631',\n PREPARATION_OF_TOBACCO_LEAVES = '01632',\n PREPARATION_OF_COCOA_BEANS = '01633',\n SUN_DRYING_OF_FRUITS = '01634',\n SEED_PROCESSING = '01640',\n HUNTING_AND_TRAPPING = '01701',\n TAKING_OF_ANIMALS = '01702',\n PLANTING_OF_FORESTS = '02101',\n GROWING_OF_COPPICE = '02102',\n OPERATION_OF_FOREST_NURSERIES = '02103',\n COLLECTION_OF_WILDINGS = '02104',\n FOREST_PLANTATION = '02105',\n PRODUCTION_OF_ROUND_WOOD = '02201',\n PRODUCTION_OF_UNPROCESSED_WOOD = '02202',\n PRODUCTION_OF_CHARCOAL = '02203',\n RUBBER_WOOD_LOGGING = '02204',\n COLLECTION_OF_RATTAN = '02301',\n BIRDS_NEST_COLLECTION = '02302',\n WILD_SAGO_PALM_COLLECTION = '02303',\n GATHERING_OF_NON_WOOD_FOREST = '02309',\n FORESTRY_SERVICE_ACTIVITIES = '02401',\n LOGGING_SERVICE_ACTIVITIES = '02402',\n COMMERCIAL_OCEAN_FISHING = '03111',\n COLLECTION_OF_MARINE_CRUSTACEANS = '03112',\n TAKING_OF_AQUATIC_ANIMALS = '03113',\n VESSELS_FOR_FISHING = '03114',\n GATHERING_OF_MARINE_ORGANISMS = '03115',\n MARINE_FISHING = '03119',\n COMMERCIAL_INLAND_FISHING = '03121',\n TAKING_OF_FRESHWATER_CRUSTACEANS = '03122',\n TAKING_OF_FRESHWATER_ANIMALS = '03123',\n GATHERING_OF_FRESHWATER_FLORA = '03124',\n FRESHWATER_FISHING = '03129',\n FISH_FARMING_SEA_WATER = '03211',\n PRODUCTION_OF_BIVALVE_SPAT = '03212',\n GROWING_OF_SEAWEEDS = '03213',\n CULTURE_OF_CRUSTACEANS = '03214',\n AQUACULTURE_IN_BRACKISH = '03215',\n AQUACULTURE_IN_SALT_WATER = '03216',\n OPERATION_OF_MARINE_HATCHERIES = '03217',\n OPERATION_OF_MARINE_WORM_FARMS = '03218',\n MARINE_AQUACULTURE = '03219',\n FISH_FARMING_FRESHWATER = '03221',\n SHRIMP_FARMING_FRESHWATER = '03222',\n CULTURE_OF_FRESHWATER_CRUSTACEANS = '03223',\n OPERATION_OF_FRESHWATER_HATCHERIES = '03224',\n FARMING_OF_FROGS = '03225',\n FRESHWATER_AQUACULTURE = '03229',\n MINING_OF_HARD_COAL = '05100',\n MINING_OF_LIGNITE = '05200',\n EXTRACTION_OF_CRUDE_PETROLEUM = '06101',\n EXTRACTION_OF_BITUMINOUS = '06102',\n PRODUCTION_OF_CRUDE_PETROLEUM = '06103',\n PROCESSES_TO_OBTAIN_CRUDE_OILS = '06104',\n PRODUCTION_OF_NATURAL_GAS = '06201',\n EXTRACTION_OF_CONDENSATES = '06202',\n DRAINING_OF_HYDROCARBON = '06203',\n GAS_DESULPHURIZATION = '06204',\n MINING_OF_HYDROCARBON_LIQUIDS = '06205',\n MINING_OF_IRON_ORES = '07101',\n BENEFICIATION_OF_IRON_ORES = '07102',\n MINING_OF_URANIUM = '07210',\n MINING_OF_TIN = '07291',\n MINING_OF_COPPER = '07292',\n MINING_OF_BAUXITE = '07293',\n MINING_OF_ILMENITE = '07294',\n MINING_OF_GOLD = '07295',\n MINING_OF_SILVER = '07296',\n MINING_OF_PLATINUM = '07297',\n AMANG_RETREATMENT = '07298',\n MINING_OF_OTHER_NON_FERROUS = '07299',\n QUARRYING_OF_STONE = '08101',\n QUARRYING_OF_LIMESTONE = '08102',\n MINING_OF_GYPSUM = '08103',\n MINING_OF_CHALK = '08104',\n EXTRACTION_OF_SAND = '08105',\n BREAKING_OF_STONE = '08106',\n QUARRYING_OF_SAND = '08107',\n MINING_OF_CLAYS = '08108',\n QUARRYING_OF_GRANITE = '08109',\n MINING_OF_PHOSPHATES = '08911',\n MINING_OF_POTASSIUM = '08912',\n MINING_OF_SULPHUR = '08913',\n EXTRACTION_OF_PYRITES = '08914',\n MINING_OF_BARIUM = '08915',\n MINING_OF_BORATES = '08916',\n MINING_OF_EARTH_COLOURS = '08917',\n GUANO_MINING = '08918',\n PEAT_DIGGING = '08921',\n PEAT_AGGLOMERATION = '08922',\n PREPARATION_OF_PEAT = '08923',\n EXTRACTION_OF_UNDERGROUND_SALT = '08931',\n SALT_PRODUCTION = '08932',\n CRUSHING_OF_SALT = '08933',\n MINING_OF_ABRASIVE_MATERIALS = '08991',\n MINING_OF_ASBESTOS = '08992',\n MINING_OF_SILICEOUS = '08993',\n MINING_OF_GRAPHITE = '08994',\n MINING_OF_STEATITE = '08995',\n MINING_OF_GEMSTONES = '08996',\n OTHER_MINING = '08999',\n OIL_AND_GAS_EXTRACTION = '09101',\n OIL_AND_GAS_FIREFIGHTING = '09102',\n SUPPORT_FOR_MINING = '09900',\n}\n"],"mappings":";;AA+MA,IAAY,8CAAL;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACD"}
1
+ {"version":3,"file":"index30.cjs","names":["tin: string","registrationType?: string","errors: ValidationError[]","contactNumber: string","amount: number","fieldName: string","item: InvoiceLineItem","index: number","invoice: InvoiceV1_1","allErrors: ValidationError[]"],"sources":["../src/utils/validation.ts"],"sourcesContent":["import type { InvoiceV1_1, InvoiceLineItem } from '../types'\n\n/**\n * MyInvois Invoice Validation Utilities\n *\n * Provides comprehensive validation for invoice data before document generation\n * and submission to ensure compliance with MyInvois business rules and format requirements.\n */\n\nexport interface ValidationResult {\n isValid: boolean\n errors: ValidationError[]\n warnings: ValidationWarning[]\n}\n\nexport interface ValidationError {\n field: string\n code: string\n message: string\n severity: 'error' | 'warning'\n}\n\nexport interface ValidationWarning extends ValidationError {\n severity: 'warning'\n}\n\n/**\n * Validates TIN format based on registration type\n */\nexport const validateTIN = (\n tin: string,\n registrationType?: string,\n): ValidationError[] => {\n const errors: ValidationError[] = []\n\n if (!tin) {\n errors.push({\n field: 'tin',\n code: 'TIN_REQUIRED',\n message: 'TIN is required',\n severity: 'error',\n })\n return errors\n }\n\n // TIN format validation based on type\n if (registrationType === 'BRN' && !tin.startsWith('C')) {\n errors.push({\n field: 'tin',\n code: 'TIN_FORMAT_INVALID',\n message: 'Company TIN should start with \"C\" for BRN registration',\n severity: 'warning',\n })\n }\n\n if (registrationType === 'NRIC' && !tin.startsWith('IG')) {\n errors.push({\n field: 'tin',\n code: 'TIN_FORMAT_INVALID',\n message: 'Individual TIN should start with \"IG\" for NRIC registration',\n severity: 'warning',\n })\n }\n\n // Length validation\n if (tin.length > 14) {\n errors.push({\n field: 'tin',\n code: 'TIN_LENGTH_INVALID',\n message: 'TIN cannot exceed 14 characters',\n severity: 'error',\n })\n }\n\n return errors\n}\n\n/**\n * Validates contact number format (E.164 standard)\n */\nexport const validateContactNumber = (\n contactNumber: string,\n): ValidationError[] => {\n const errors: ValidationError[] = []\n\n if (!contactNumber || contactNumber === 'NA') {\n return errors // Allow NA for consolidated e-invoices\n }\n\n // E.164 format validation\n const e164Regex = /^\\+[1-9]\\d{1,14}$/\n if (!e164Regex.test(contactNumber)) {\n errors.push({\n field: 'contactNumber',\n code: 'CONTACT_FORMAT_INVALID',\n message: 'Contact number must be in E.164 format (e.g., +60123456789)',\n severity: 'error',\n })\n }\n\n if (contactNumber.length < 8) {\n errors.push({\n field: 'contactNumber',\n code: 'CONTACT_LENGTH_INVALID',\n message: 'Contact number must be at least 8 characters',\n severity: 'error',\n })\n }\n\n return errors\n}\n\n/**\n * Validates monetary amounts\n */\nexport const validateMonetaryAmount = (\n amount: number,\n fieldName: string,\n maxDigits = 18,\n maxDecimals = 2,\n): ValidationError[] => {\n const errors: ValidationError[] = []\n\n if (amount < 0) {\n errors.push({\n field: fieldName,\n code: 'AMOUNT_NEGATIVE',\n message: `${fieldName} cannot be negative`,\n severity: 'error',\n })\n }\n\n // Check total digits\n const amountStr = amount.toString()\n const [integerPart, decimalPart] = amountStr.split('.')\n\n if (integerPart && integerPart.length > maxDigits - maxDecimals) {\n errors.push({\n field: fieldName,\n code: 'AMOUNT_DIGITS_EXCEEDED',\n message: `${fieldName} exceeds maximum ${maxDigits} digits`,\n severity: 'error',\n })\n }\n\n if (decimalPart && decimalPart.length > maxDecimals) {\n errors.push({\n field: fieldName,\n code: 'AMOUNT_DECIMALS_EXCEEDED',\n message: `${fieldName} exceeds maximum ${maxDecimals} decimal places`,\n severity: 'error',\n })\n }\n\n return errors\n}\n\n/**\n * Validates line item tax calculation consistency for both fixed rate and percentage taxation\n */\nexport const validateLineItemTax = (\n item: InvoiceLineItem,\n index: number,\n): ValidationError[] => {\n const errors: ValidationError[] = []\n const tolerance = 0.01\n\n // Check if tax calculation method is specified\n const hasFixedRate =\n item.taxPerUnitAmount !== undefined && item.baseUnitMeasure !== undefined\n const hasPercentageRate = item.taxRate !== undefined\n\n if (!hasFixedRate && !hasPercentageRate) {\n errors.push({\n field: `lineItem[${index}]`,\n code: 'TAX_METHOD_MISSING',\n message: `Line item ${index + 1} must specify either taxRate (for percentage) or taxPerUnitAmount + baseUnitMeasure (for fixed rate)`,\n severity: 'error',\n })\n return errors\n }\n\n if (hasFixedRate && hasPercentageRate) {\n errors.push({\n field: `lineItem[${index}]`,\n code: 'TAX_METHOD_CONFLICT',\n message: `Line item ${index + 1} cannot have both percentage and fixed rate tax methods`,\n severity: 'error',\n })\n }\n\n // Validate fixed rate tax calculation\n if (hasFixedRate) {\n if (item.baseUnitMeasureCode === undefined) {\n errors.push({\n field: `lineItem[${index}].baseUnitMeasureCode`,\n code: 'UNIT_CODE_MISSING',\n message: `Line item ${index + 1} with fixed rate tax must specify baseUnitMeasureCode`,\n severity: 'error',\n })\n }\n\n const expectedTaxAmount = item.taxPerUnitAmount! * item.baseUnitMeasure!\n if (Math.abs(item.taxAmount - expectedTaxAmount) > tolerance) {\n errors.push({\n field: `lineItem[${index}].taxAmount`,\n code: 'FIXED_TAX_CALCULATION_MISMATCH',\n message: `Line item ${index + 1} tax amount (${item.taxAmount}) doesn't match fixed rate calculation (${item.taxPerUnitAmount} × ${item.baseUnitMeasure} = ${expectedTaxAmount})`,\n severity: 'error',\n })\n }\n }\n\n // Validate percentage tax calculation\n if (hasPercentageRate && !hasFixedRate) {\n const expectedTaxAmount =\n (item.totalTaxableAmountPerLine * item.taxRate!) / 100\n if (Math.abs(item.taxAmount - expectedTaxAmount) > tolerance) {\n errors.push({\n field: `lineItem[${index}].taxAmount`,\n code: 'PERCENTAGE_TAX_CALCULATION_MISMATCH',\n message: `Line item ${index + 1} tax amount (${item.taxAmount}) doesn't match percentage calculation (${item.totalTaxableAmountPerLine} × ${item.taxRate}% = ${expectedTaxAmount})`,\n severity: 'error',\n })\n }\n }\n\n return errors\n}\n\n/**\n * Validates tax calculation consistency\n */\nexport const validateTaxCalculations = (\n invoice: InvoiceV1_1,\n): ValidationError[] => {\n const errors: ValidationError[] = []\n\n // Validate individual line item tax calculations\n invoice.invoiceLineItems.forEach((item, index) => {\n errors.push(...validateLineItemTax(item, index))\n })\n\n // Calculate expected totals from line items\n const expectedTaxExclusive = invoice.invoiceLineItems.reduce(\n (sum, item) => sum + item.totalTaxableAmountPerLine,\n 0,\n )\n const expectedTaxAmount = invoice.invoiceLineItems.reduce(\n (sum, item) => sum + item.taxAmount,\n 0,\n )\n\n // Allow small rounding differences (0.01)\n const tolerance = 0.01\n\n if (\n Math.abs(\n invoice.legalMonetaryTotal.taxExclusiveAmount - expectedTaxExclusive,\n ) > tolerance\n ) {\n errors.push({\n field: 'legalMonetaryTotal.taxExclusiveAmount',\n code: 'TAX_EXCLUSIVE_MISMATCH',\n message: `Tax exclusive amount (${invoice.legalMonetaryTotal.taxExclusiveAmount}) doesn't match sum of line items (${expectedTaxExclusive})`,\n severity: 'error',\n })\n }\n\n if (Math.abs(invoice.taxTotal.taxAmount - expectedTaxAmount) > tolerance) {\n errors.push({\n field: 'taxTotal.taxAmount',\n code: 'TAX_AMOUNT_MISMATCH',\n message: `Tax amount (${invoice.taxTotal.taxAmount}) doesn't match sum of line item taxes (${expectedTaxAmount})`,\n severity: 'error',\n })\n }\n\n return errors\n}\n\n/**\n * Main validation function for complete invoice\n */\nexport const validateInvoice = (invoice: InvoiceV1_1): ValidationResult => {\n const allErrors: ValidationError[] = []\n\n // Core field validations\n allErrors.push(\n ...validateTIN(invoice.supplier.tin, invoice.supplier.registrationType),\n )\n allErrors.push(\n ...validateTIN(invoice.buyer.tin, invoice.buyer.registrationType),\n )\n\n allErrors.push(...validateContactNumber(invoice.supplier.contactNumber))\n allErrors.push(...validateContactNumber(invoice.buyer.contactNumber))\n\n // Monetary validations\n allErrors.push(\n ...validateMonetaryAmount(\n invoice.legalMonetaryTotal.taxExclusiveAmount,\n 'taxExclusiveAmount',\n ),\n )\n allErrors.push(\n ...validateMonetaryAmount(\n invoice.legalMonetaryTotal.payableAmount,\n 'payableAmount',\n ),\n )\n allErrors.push(\n ...validateMonetaryAmount(invoice.taxTotal.taxAmount, 'taxAmount'),\n )\n\n // Line item validations\n invoice.invoiceLineItems.forEach((item, index) => {\n allErrors.push(\n ...validateMonetaryAmount(item.unitPrice, `lineItem[${index}].unitPrice`),\n )\n allErrors.push(\n ...validateMonetaryAmount(item.taxAmount, `lineItem[${index}].taxAmount`),\n )\n allErrors.push(\n ...validateMonetaryAmount(\n item.totalTaxableAmountPerLine,\n `lineItem[${index}].totalTaxableAmountPerLine`,\n ),\n )\n })\n\n // Business rule validations\n allErrors.push(...validateTaxCalculations(invoice))\n\n // Separate errors and warnings\n const errors = allErrors.filter(e => e.severity === 'error')\n const warnings = allErrors.filter(\n e => e.severity === 'warning',\n ) as ValidationWarning[]\n\n return {\n isValid: errors.length === 0,\n errors,\n warnings,\n }\n}\n"],"mappings":"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"}