shutro-erp 0.3.4 → 0.3.6

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 (618) hide show
  1. package/dist/account_asset/.kosh/bindings.d.ts +22 -0
  2. package/dist/account_asset/.kosh/bindings.js +15 -0
  3. package/dist/account_asset/.kosh/schema.d.ts +1755 -0
  4. package/dist/account_asset/board.d.ts +61 -0
  5. package/dist/account_asset/board.js +86 -0
  6. package/dist/account_asset/books.d.ts +42 -0
  7. package/dist/account_asset/books.js +398 -0
  8. package/dist/account_asset/demo.d.ts +7 -0
  9. package/dist/account_asset/demo.js +72 -0
  10. package/dist/account_asset/index.d.ts +9 -0
  11. package/dist/account_asset/index.js +335 -0
  12. package/dist/account_asset/module.d.ts +7622 -0
  13. package/dist/account_asset/module.js +230 -0
  14. package/dist/account_budget/.kosh/bindings.d.ts +22 -0
  15. package/dist/account_budget/.kosh/bindings.js +15 -0
  16. package/dist/account_budget/.kosh/schema.d.ts +1767 -0
  17. package/dist/account_budget/budget.d.ts +5 -0
  18. package/dist/account_budget/budget.js +142 -0
  19. package/dist/account_budget/demo.d.ts +6 -0
  20. package/dist/account_budget/demo.js +30 -0
  21. package/dist/account_budget/index.d.ts +4 -0
  22. package/dist/account_budget/index.js +223 -0
  23. package/dist/account_budget/module.d.ts +13863 -0
  24. package/dist/account_budget/module.js +167 -0
  25. package/dist/account_portal/.kosh/bindings.js +1 -1
  26. package/dist/account_portal/.kosh/schema.d.ts +176 -6
  27. package/dist/account_portal/module.d.ts +505 -6
  28. package/dist/accounting/.kosh/bindings.js +1 -1
  29. package/dist/accounting/.kosh/schema.d.ts +176 -6
  30. package/dist/accounting/index.d.ts +1 -1
  31. package/dist/accounting/index.js +344 -4
  32. package/dist/accounting/module.d.ts +513 -5
  33. package/dist/accounting/module.js +55 -3
  34. package/dist/approvals/.kosh/bindings.d.ts +22 -0
  35. package/dist/approvals/.kosh/bindings.js +15 -0
  36. package/dist/approvals/.kosh/schema.d.ts +611 -0
  37. package/dist/approvals/index.d.ts +18 -0
  38. package/dist/approvals/index.js +302 -0
  39. package/dist/approvals/mails.d.ts +25 -0
  40. package/dist/approvals/mails.js +82 -0
  41. package/dist/approvals/module.d.ts +1 -0
  42. package/dist/approvals/module.js +12 -0
  43. package/dist/approvals/web/History.d.ts +4 -0
  44. package/dist/approvals/web/History.js +13 -0
  45. package/dist/approvals/web/Inbox.d.ts +9 -0
  46. package/dist/approvals/web/Inbox.js +114 -0
  47. package/dist/approvals/web/Mine.d.ts +7 -0
  48. package/dist/approvals/web/Mine.js +27 -0
  49. package/dist/approvals/web/index.d.ts +13 -0
  50. package/dist/approvals/web/index.js +22 -0
  51. package/dist/approvals/web/messages.d.ts +2 -0
  52. package/dist/approvals/web/messages.js +119 -0
  53. package/dist/approvals/web/shared.d.ts +59 -0
  54. package/dist/approvals/web/shared.js +46 -0
  55. package/dist/attendance/.kosh/bindings.d.ts +22 -0
  56. package/dist/attendance/.kosh/bindings.js +15 -0
  57. package/dist/attendance/.kosh/schema.d.ts +1048 -0
  58. package/dist/attendance/days.d.ts +96 -0
  59. package/dist/attendance/days.js +430 -0
  60. package/dist/attendance/demo.d.ts +7 -0
  61. package/dist/attendance/demo.js +58 -0
  62. package/dist/attendance/index.d.ts +4 -0
  63. package/dist/attendance/index.js +513 -0
  64. package/dist/attendance/module.d.ts +3969 -0
  65. package/dist/attendance/module.js +412 -0
  66. package/dist/attendance/routes.d.ts +16 -0
  67. package/dist/attendance/routes.js +266 -0
  68. package/dist/attendance/web/Check.d.ts +8 -0
  69. package/dist/attendance/web/Check.js +40 -0
  70. package/dist/attendance/web/Kiosk.d.ts +8 -0
  71. package/dist/attendance/web/Kiosk.js +62 -0
  72. package/dist/attendance/web/PinButton.d.ts +7 -0
  73. package/dist/attendance/web/PinButton.js +29 -0
  74. package/dist/attendance/web/index.d.ts +13 -0
  75. package/dist/attendance/web/index.js +22 -0
  76. package/dist/attendance/web/messages.d.ts +2 -0
  77. package/dist/attendance/web/messages.js +61 -0
  78. package/dist/calendar/.kosh/bindings.d.ts +22 -0
  79. package/dist/calendar/.kosh/bindings.js +15 -0
  80. package/dist/calendar/.kosh/schema.d.ts +795 -0
  81. package/dist/calendar/demo.d.ts +6 -0
  82. package/dist/calendar/demo.js +24 -0
  83. package/dist/calendar/index.d.ts +3 -0
  84. package/dist/calendar/index.js +291 -0
  85. package/dist/calendar/module.d.ts +1705 -0
  86. package/dist/calendar/module.js +180 -0
  87. package/dist/cli/init.js +80 -0
  88. package/dist/cli/templates.d.ts +1 -1
  89. package/dist/cli/templates.js +226 -0
  90. package/dist/contacts/.kosh/bindings.js +1 -1
  91. package/dist/contacts/.kosh/schema.d.ts +78 -3
  92. package/dist/contacts/demo.js +30 -1
  93. package/dist/contacts/index.d.ts +1 -1
  94. package/dist/contacts/index.js +155 -9
  95. package/dist/contacts/module.d.ts +338 -2
  96. package/dist/contacts/module.js +93 -5
  97. package/dist/crm/.kosh/bindings.d.ts +22 -0
  98. package/dist/crm/.kosh/bindings.js +15 -0
  99. package/dist/crm/.kosh/schema.d.ts +800 -0
  100. package/dist/crm/demo.d.ts +6 -0
  101. package/dist/crm/demo.js +45 -0
  102. package/dist/crm/index.d.ts +3 -0
  103. package/dist/crm/index.js +361 -0
  104. package/dist/crm/module.d.ts +1845 -0
  105. package/dist/crm/module.js +208 -0
  106. package/dist/documents/.kosh/bindings.d.ts +22 -0
  107. package/dist/documents/.kosh/bindings.js +15 -0
  108. package/dist/documents/.kosh/schema.d.ts +862 -0
  109. package/dist/documents/demo.d.ts +6 -0
  110. package/dist/documents/demo.js +22 -0
  111. package/dist/documents/documents.d.ts +98 -0
  112. package/dist/documents/documents.js +318 -0
  113. package/dist/documents/index.d.ts +30 -0
  114. package/dist/documents/index.js +442 -0
  115. package/dist/documents/module.d.ts +2781 -0
  116. package/dist/documents/module.js +214 -0
  117. package/dist/documents/web/Versions.d.ts +7 -0
  118. package/dist/documents/web/Versions.js +45 -0
  119. package/dist/documents/web/index.d.ts +11 -0
  120. package/dist/documents/web/index.js +16 -0
  121. package/dist/documents/web/messages.d.ts +2 -0
  122. package/dist/documents/web/messages.js +21 -0
  123. package/dist/event/.kosh/bindings.d.ts +22 -0
  124. package/dist/event/.kosh/bindings.js +15 -0
  125. package/dist/event/.kosh/schema.d.ts +843 -0
  126. package/dist/event/demo.d.ts +6 -0
  127. package/dist/event/demo.js +65 -0
  128. package/dist/event/index.d.ts +14 -0
  129. package/dist/event/index.js +333 -0
  130. package/dist/event/mails.d.ts +15 -0
  131. package/dist/event/mails.js +112 -0
  132. package/dist/event/module.d.ts +2800 -0
  133. package/dist/event/module.js +323 -0
  134. package/dist/event/web/CheckInBox.d.ts +9 -0
  135. package/dist/event/web/CheckInBox.js +87 -0
  136. package/dist/event/web/index.d.ts +11 -0
  137. package/dist/event/web/index.js +16 -0
  138. package/dist/event/web/messages.d.ts +2 -0
  139. package/dist/event/web/messages.js +23 -0
  140. package/dist/event_account/.kosh/bindings.d.ts +22 -0
  141. package/dist/event_account/.kosh/bindings.js +15 -0
  142. package/dist/event_account/.kosh/schema.d.ts +1758 -0
  143. package/dist/event_account/index.d.ts +3 -0
  144. package/dist/event_account/index.js +28 -0
  145. package/dist/event_account/module.d.ts +7114 -0
  146. package/dist/event_account/module.js +90 -0
  147. package/dist/expense/.kosh/bindings.d.ts +22 -0
  148. package/dist/expense/.kosh/bindings.js +15 -0
  149. package/dist/expense/.kosh/schema.d.ts +1299 -0
  150. package/dist/expense/demo.d.ts +7 -0
  151. package/dist/expense/demo.js +69 -0
  152. package/dist/expense/index.d.ts +3 -0
  153. package/dist/expense/index.js +495 -0
  154. package/dist/expense/module.d.ts +4747 -0
  155. package/dist/expense/module.js +647 -0
  156. package/dist/expense_account/.kosh/bindings.d.ts +22 -0
  157. package/dist/expense_account/.kosh/bindings.js +15 -0
  158. package/dist/expense_account/.kosh/schema.d.ts +1936 -0
  159. package/dist/expense_account/index.d.ts +3 -0
  160. package/dist/expense_account/index.js +74 -0
  161. package/dist/expense_account/module.d.ts +9153 -0
  162. package/dist/expense_account/module.js +318 -0
  163. package/dist/helpdesk/.kosh/bindings.d.ts +22 -0
  164. package/dist/helpdesk/.kosh/bindings.js +15 -0
  165. package/dist/helpdesk/.kosh/schema.d.ts +885 -0
  166. package/dist/helpdesk/demo.d.ts +7 -0
  167. package/dist/helpdesk/demo.js +65 -0
  168. package/dist/helpdesk/hours.d.ts +17 -0
  169. package/dist/helpdesk/hours.js +94 -0
  170. package/dist/helpdesk/index.d.ts +10 -0
  171. package/dist/helpdesk/index.js +461 -0
  172. package/dist/helpdesk/module.d.ts +2940 -0
  173. package/dist/helpdesk/module.js +326 -0
  174. package/dist/helpdesk/routes.d.ts +12 -0
  175. package/dist/helpdesk/routes.js +132 -0
  176. package/dist/helpdesk/sla.d.ts +37 -0
  177. package/dist/helpdesk/sla.js +226 -0
  178. package/dist/hr/.kosh/bindings.d.ts +22 -0
  179. package/dist/hr/.kosh/bindings.js +15 -0
  180. package/dist/hr/.kosh/schema.d.ts +878 -0
  181. package/dist/hr/demo.d.ts +6 -0
  182. package/dist/hr/demo.js +60 -0
  183. package/dist/hr/index.d.ts +3 -0
  184. package/dist/hr/index.js +483 -0
  185. package/dist/hr/module.d.ts +2611 -0
  186. package/dist/hr/module.js +350 -0
  187. package/dist/l10n_bd/.kosh/bindings.js +1 -1
  188. package/dist/l10n_bd/.kosh/schema.d.ts +176 -6
  189. package/dist/l10n_bd/module.d.ts +505 -6
  190. package/dist/l10n_bd_payroll/.kosh/bindings.d.ts +22 -0
  191. package/dist/l10n_bd_payroll/.kosh/bindings.js +15 -0
  192. package/dist/l10n_bd_payroll/.kosh/schema.d.ts +2312 -0
  193. package/dist/l10n_bd_payroll/data.d.ts +47 -0
  194. package/dist/l10n_bd_payroll/data.js +347 -0
  195. package/dist/l10n_bd_payroll/index.d.ts +4 -0
  196. package/dist/l10n_bd_payroll/index.js +24 -0
  197. package/dist/l10n_bd_payroll/module.d.ts +12932 -0
  198. package/dist/l10n_bd_payroll/module.js +86 -0
  199. package/dist/l10n_in/.kosh/bindings.js +1 -1
  200. package/dist/l10n_in/.kosh/schema.d.ts +176 -6
  201. package/dist/l10n_in/module.d.ts +527 -7
  202. package/dist/mail/inbound/handle.js +6 -1
  203. package/dist/maintenance/.kosh/bindings.d.ts +22 -0
  204. package/dist/maintenance/.kosh/bindings.js +15 -0
  205. package/dist/maintenance/.kosh/schema.d.ts +911 -0
  206. package/dist/maintenance/demo.d.ts +6 -0
  207. package/dist/maintenance/demo.js +60 -0
  208. package/dist/maintenance/index.d.ts +3 -0
  209. package/dist/maintenance/index.js +422 -0
  210. package/dist/maintenance/module.d.ts +3545 -0
  211. package/dist/maintenance/module.js +446 -0
  212. package/dist/maintenance_stock/.kosh/bindings.d.ts +22 -0
  213. package/dist/maintenance_stock/.kosh/bindings.js +15 -0
  214. package/dist/maintenance_stock/.kosh/schema.d.ts +1446 -0
  215. package/dist/maintenance_stock/index.d.ts +9 -0
  216. package/dist/maintenance_stock/index.js +52 -0
  217. package/dist/maintenance_stock/module.d.ts +7675 -0
  218. package/dist/maintenance_stock/module.js +192 -0
  219. package/dist/modules-sdk/index.d.ts +1 -1
  220. package/dist/modules-sdk/manifest.d.ts +109 -2
  221. package/dist/modules-sdk/manifest.js +35 -1
  222. package/dist/mrp/.kosh/bindings.d.ts +22 -0
  223. package/dist/mrp/.kosh/bindings.js +15 -0
  224. package/dist/mrp/.kosh/schema.d.ts +1453 -0
  225. package/dist/mrp/demo.d.ts +7 -0
  226. package/dist/mrp/demo.js +42 -0
  227. package/dist/mrp/index.d.ts +3 -0
  228. package/dist/mrp/index.js +393 -0
  229. package/dist/mrp/module.d.ts +9335 -0
  230. package/dist/mrp/module.js +757 -0
  231. package/dist/mrp_account/.kosh/bindings.d.ts +22 -0
  232. package/dist/mrp_account/.kosh/bindings.js +15 -0
  233. package/dist/mrp_account/.kosh/schema.d.ts +2299 -0
  234. package/dist/mrp_account/index.d.ts +3 -0
  235. package/dist/mrp_account/index.js +22 -0
  236. package/dist/mrp_account/module.d.ts +23151 -0
  237. package/dist/mrp_account/module.js +123 -0
  238. package/dist/payment/.kosh/bindings.js +1 -1
  239. package/dist/payment/.kosh/schema.d.ts +178 -7
  240. package/dist/payment/index.d.ts +41 -0
  241. package/dist/payment/index.js +131 -74
  242. package/dist/payment/module.d.ts +569 -12
  243. package/dist/payment/module.js +19 -3
  244. package/dist/payment/settle.js +10 -1
  245. package/dist/payroll/.kosh/bindings.d.ts +22 -0
  246. package/dist/payroll/.kosh/bindings.js +15 -0
  247. package/dist/payroll/.kosh/schema.d.ts +1390 -0
  248. package/dist/payroll/compute.d.ts +35 -0
  249. package/dist/payroll/compute.js +398 -0
  250. package/dist/payroll/demo.d.ts +55 -0
  251. package/dist/payroll/demo.js +121 -0
  252. package/dist/payroll/formula.d.ts +62 -0
  253. package/dist/payroll/formula.js +320 -0
  254. package/dist/payroll/index.d.ts +230 -0
  255. package/dist/payroll/index.js +713 -0
  256. package/dist/payroll/module.d.ts +9390 -0
  257. package/dist/payroll/module.js +606 -0
  258. package/dist/payroll/routes.d.ts +10 -0
  259. package/dist/payroll/routes.js +112 -0
  260. package/dist/payroll_account/.kosh/bindings.d.ts +22 -0
  261. package/dist/payroll_account/.kosh/bindings.js +15 -0
  262. package/dist/payroll_account/.kosh/schema.d.ts +2308 -0
  263. package/dist/payroll_account/index.d.ts +3 -0
  264. package/dist/payroll_account/index.js +40 -0
  265. package/dist/payroll_account/module.d.ts +12396 -0
  266. package/dist/payroll_account/module.js +256 -0
  267. package/dist/permissions/approvals.d.ts +131 -9
  268. package/dist/permissions/approvals.js +662 -57
  269. package/dist/permissions/index.d.ts +1 -1
  270. package/dist/permissions/index.js +2 -2
  271. package/dist/permissions/models.js +191 -12
  272. package/dist/permissions/routes.d.ts +6 -1
  273. package/dist/permissions/routes.js +37 -4
  274. package/dist/permissions/web/ApprovalPanel.d.ts +5 -4
  275. package/dist/permissions/web/ApprovalPanel.js +39 -13
  276. package/dist/permissions/web/index.d.ts +6 -4
  277. package/dist/permissions/web/index.js +13 -4
  278. package/dist/permissions/web/messages.d.ts +2 -0
  279. package/dist/permissions/web/messages.js +43 -0
  280. package/dist/portal/.kosh/bindings.js +1 -1
  281. package/dist/portal/.kosh/schema.d.ts +78 -3
  282. package/dist/portal/index.js +1 -1
  283. package/dist/portal/module.d.ts +166 -2
  284. package/dist/pos/.kosh/bindings.d.ts +22 -0
  285. package/dist/pos/.kosh/bindings.js +15 -0
  286. package/dist/pos/.kosh/schema.d.ts +1809 -0
  287. package/dist/pos/accounting.d.ts +10 -0
  288. package/dist/pos/accounting.js +149 -0
  289. package/dist/pos/demo.d.ts +6 -0
  290. package/dist/pos/demo.js +90 -0
  291. package/dist/pos/index.d.ts +9 -0
  292. package/dist/pos/index.js +353 -0
  293. package/dist/pos/module.d.ts +9783 -0
  294. package/dist/pos/module.js +423 -0
  295. package/dist/pos/routes.d.ts +39 -0
  296. package/dist/pos/routes.js +368 -0
  297. package/dist/pos/web/Register.d.ts +9 -0
  298. package/dist/pos/web/Register.js +252 -0
  299. package/dist/pos/web/index.d.ts +11 -0
  300. package/dist/pos/web/index.js +16 -0
  301. package/dist/pos/web/messages.d.ts +2 -0
  302. package/dist/pos/web/messages.js +87 -0
  303. package/dist/pos_stock/.kosh/bindings.d.ts +22 -0
  304. package/dist/pos_stock/.kosh/bindings.js +15 -0
  305. package/dist/pos_stock/.kosh/schema.d.ts +2208 -0
  306. package/dist/pos_stock/index.d.ts +9 -0
  307. package/dist/pos_stock/index.js +35 -0
  308. package/dist/pos_stock/module.d.ts +12803 -0
  309. package/dist/pos_stock/module.js +115 -0
  310. package/dist/product/.kosh/bindings.js +1 -1
  311. package/dist/product/.kosh/schema.d.ts +52 -1
  312. package/dist/product/index.js +94 -4
  313. package/dist/product/module.d.ts +45 -1
  314. package/dist/product/module.js +11 -3
  315. package/dist/project/.kosh/bindings.js +1 -1
  316. package/dist/project/.kosh/schema.d.ts +725 -3
  317. package/dist/project/index.d.ts +3 -1
  318. package/dist/project/index.js +1045 -18
  319. package/dist/project/module.d.ts +10168 -458
  320. package/dist/project/module.js +1578 -14
  321. package/dist/project/routes.d.ts +44 -0
  322. package/dist/project/routes.js +314 -0
  323. package/dist/project/schedule.d.ts +72 -0
  324. package/dist/project/schedule.js +192 -0
  325. package/dist/project/web/Refresh.d.ts +8 -0
  326. package/dist/project/web/Refresh.js +29 -0
  327. package/dist/project/web/Schedule.d.ts +9 -0
  328. package/dist/project/web/Schedule.js +93 -0
  329. package/dist/project/web/Structure.d.ts +8 -0
  330. package/dist/project/web/Structure.js +86 -0
  331. package/dist/project/web/Workload.d.ts +8 -0
  332. package/dist/project/web/Workload.js +43 -0
  333. package/dist/project/web/index.d.ts +14 -0
  334. package/dist/project/web/index.js +25 -0
  335. package/dist/project/web/messages.d.ts +2 -0
  336. package/dist/project/web/messages.js +85 -0
  337. package/dist/project_account/.kosh/bindings.d.ts +22 -0
  338. package/dist/project_account/.kosh/bindings.js +15 -0
  339. package/dist/project_account/.kosh/schema.d.ts +2241 -0
  340. package/dist/project_account/index.d.ts +3 -0
  341. package/dist/project_account/index.js +27 -0
  342. package/dist/project_account/module.d.ts +11539 -0
  343. package/dist/project_account/module.js +76 -0
  344. package/dist/project_portal/.kosh/bindings.js +1 -1
  345. package/dist/project_portal/.kosh/schema.d.ts +725 -3
  346. package/dist/project_portal/module.d.ts +5137 -119
  347. package/dist/project_purchase/.kosh/bindings.d.ts +22 -0
  348. package/dist/project_purchase/.kosh/bindings.js +15 -0
  349. package/dist/project_purchase/.kosh/schema.d.ts +2320 -0
  350. package/dist/project_purchase/index.d.ts +9 -0
  351. package/dist/project_purchase/index.js +22 -0
  352. package/dist/project_purchase/module.d.ts +25147 -0
  353. package/dist/project_purchase/module.js +56 -0
  354. package/dist/purchase/.kosh/bindings.js +1 -1
  355. package/dist/purchase/.kosh/schema.d.ts +150 -6
  356. package/dist/purchase/index.js +163 -3
  357. package/dist/purchase/module.d.ts +228 -5
  358. package/dist/purchase/module.js +30 -3
  359. package/dist/purchase_account/.kosh/bindings.js +1 -1
  360. package/dist/purchase_account/.kosh/schema.d.ts +180 -8
  361. package/dist/purchase_account/index.js +27 -1
  362. package/dist/purchase_account/module.d.ts +591 -30
  363. package/dist/purchase_account/module.js +13 -2
  364. package/dist/purchase_portal/.kosh/bindings.js +1 -1
  365. package/dist/purchase_portal/.kosh/schema.d.ts +150 -6
  366. package/dist/purchase_portal/module.d.ts +372 -6
  367. package/dist/purchase_stock/.kosh/bindings.d.ts +22 -0
  368. package/dist/purchase_stock/.kosh/bindings.js +15 -0
  369. package/dist/purchase_stock/.kosh/schema.d.ts +1479 -0
  370. package/dist/purchase_stock/index.d.ts +7 -0
  371. package/dist/purchase_stock/index.js +98 -0
  372. package/dist/purchase_stock/module.d.ts +7535 -0
  373. package/dist/purchase_stock/module.js +380 -0
  374. package/dist/purchase_stock_account/.kosh/bindings.d.ts +22 -0
  375. package/dist/purchase_stock_account/.kosh/bindings.js +15 -0
  376. package/dist/purchase_stock_account/.kosh/schema.d.ts +2155 -0
  377. package/dist/purchase_stock_account/index.d.ts +3 -0
  378. package/dist/purchase_stock_account/index.js +24 -0
  379. package/dist/purchase_stock_account/module.d.ts +38015 -0
  380. package/dist/purchase_stock_account/module.js +168 -0
  381. package/dist/recruitment/.kosh/bindings.d.ts +22 -0
  382. package/dist/recruitment/.kosh/bindings.js +15 -0
  383. package/dist/recruitment/.kosh/schema.d.ts +991 -0
  384. package/dist/recruitment/demo.d.ts +6 -0
  385. package/dist/recruitment/demo.js +45 -0
  386. package/dist/recruitment/index.d.ts +3 -0
  387. package/dist/recruitment/index.js +385 -0
  388. package/dist/recruitment/module.d.ts +3249 -0
  389. package/dist/recruitment/module.js +194 -0
  390. package/dist/recruitment/web/HireButton.d.ts +9 -0
  391. package/dist/recruitment/web/HireButton.js +32 -0
  392. package/dist/recruitment/web/index.d.ts +11 -0
  393. package/dist/recruitment/web/index.js +16 -0
  394. package/dist/recruitment/web/messages.d.ts +2 -0
  395. package/dist/recruitment/web/messages.js +19 -0
  396. package/dist/reporting/documents.d.ts +5 -0
  397. package/dist/reporting/documents.js +28 -1
  398. package/dist/reporting/index.d.ts +1 -1
  399. package/dist/reporting/index.js +4 -2
  400. package/dist/reporting/models.js +9 -0
  401. package/dist/reporting/overviews.d.ts +16 -0
  402. package/dist/reporting/overviews.js +56 -0
  403. package/dist/reporting/routes-documents.js +1 -1
  404. package/dist/reporting/routes.js +138 -80
  405. package/dist/reporting/web/DashboardView.d.ts +11 -0
  406. package/dist/reporting/web/DashboardView.js +2 -2
  407. package/dist/reporting/web/DesignerView.js +5 -0
  408. package/dist/reporting/web/Overview.d.ts +9 -0
  409. package/dist/reporting/web/Overview.js +53 -0
  410. package/dist/reporting/web/index.d.ts +1 -0
  411. package/dist/reporting/web/index.js +4 -1
  412. package/dist/reporting/web/messages.js +9 -0
  413. package/dist/sale_account/.kosh/bindings.js +1 -1
  414. package/dist/sale_account/.kosh/schema.d.ts +181 -6
  415. package/dist/sale_account/index.js +22 -1
  416. package/dist/sale_account/module.d.ts +639 -38
  417. package/dist/sale_portal/.kosh/bindings.js +1 -1
  418. package/dist/sale_portal/.kosh/schema.d.ts +59 -3
  419. package/dist/sale_portal/module.d.ts +435 -5
  420. package/dist/sale_project/.kosh/bindings.js +1 -1
  421. package/dist/sale_project/.kosh/schema.d.ts +732 -3
  422. package/dist/sale_project/module.d.ts +5349 -208
  423. package/dist/sale_project/module.js +17 -1
  424. package/dist/sale_stock/.kosh/bindings.d.ts +22 -0
  425. package/dist/sale_stock/.kosh/bindings.js +15 -0
  426. package/dist/sale_stock/.kosh/schema.d.ts +1303 -0
  427. package/dist/sale_stock/index.d.ts +7 -0
  428. package/dist/sale_stock/index.js +84 -0
  429. package/dist/sale_stock/module.d.ts +7514 -0
  430. package/dist/sale_stock/module.js +146 -0
  431. package/dist/sales/.kosh/bindings.js +1 -1
  432. package/dist/sales/.kosh/schema.d.ts +59 -3
  433. package/dist/sales/index.js +195 -4
  434. package/dist/sales/module.d.ts +356 -3
  435. package/dist/sales/module.js +78 -3
  436. package/dist/server/api/metadata.d.ts +5 -0
  437. package/dist/server/api/metadata.js +5 -0
  438. package/dist/server/api/rest.js +64 -1
  439. package/dist/server/api/views.js +1 -0
  440. package/dist/server/app-settings.d.ts +7 -0
  441. package/dist/server/app-settings.js +10 -0
  442. package/dist/server/auth/base.js +9 -0
  443. package/dist/server/index.d.ts +1 -0
  444. package/dist/server/index.js +1 -0
  445. package/dist/settings/app-settings.d.ts +2 -0
  446. package/dist/settings/app-settings.js +518 -0
  447. package/dist/settings/index.d.ts +1 -0
  448. package/dist/settings/index.js +15 -0
  449. package/dist/settings/people.js +29 -5
  450. package/dist/settings/web/AppSettingsPage.d.ts +11 -0
  451. package/dist/settings/web/AppSettingsPage.js +210 -0
  452. package/dist/settings/web/OverviewPage.js +16 -3
  453. package/dist/settings/web/PeoplePage.js +20 -6
  454. package/dist/settings/web/index.d.ts +1 -0
  455. package/dist/settings/web/index.js +3 -0
  456. package/dist/settings/web/messages.js +118 -2
  457. package/dist/sign/.kosh/bindings.d.ts +22 -0
  458. package/dist/sign/.kosh/bindings.js +15 -0
  459. package/dist/sign/.kosh/schema.d.ts +990 -0
  460. package/dist/sign/index.d.ts +14 -0
  461. package/dist/sign/index.js +350 -0
  462. package/dist/sign/module.d.ts +4478 -0
  463. package/dist/sign/module.js +158 -0
  464. package/dist/sign/sign.d.ts +82 -0
  465. package/dist/sign/sign.js +474 -0
  466. package/dist/stock/.kosh/bindings.d.ts +22 -0
  467. package/dist/stock/.kosh/bindings.js +15 -0
  468. package/dist/stock/.kosh/schema.d.ts +1222 -0
  469. package/dist/stock/demo.d.ts +8 -0
  470. package/dist/stock/demo.js +82 -0
  471. package/dist/stock/index.d.ts +4 -0
  472. package/dist/stock/index.js +903 -0
  473. package/dist/stock/module.d.ts +7856 -0
  474. package/dist/stock/module.js +1880 -0
  475. package/dist/stock/replenish.d.ts +38 -0
  476. package/dist/stock/replenish.js +176 -0
  477. package/dist/stock/web/Replenishment.d.ts +8 -0
  478. package/dist/stock/web/Replenishment.js +84 -0
  479. package/dist/stock/web/ScanBox.d.ts +8 -0
  480. package/dist/stock/web/ScanBox.js +90 -0
  481. package/dist/stock/web/index.d.ts +13 -0
  482. package/dist/stock/web/index.js +20 -0
  483. package/dist/stock/web/messages.d.ts +2 -0
  484. package/dist/stock/web/messages.js +77 -0
  485. package/dist/stock_account/.kosh/bindings.d.ts +22 -0
  486. package/dist/stock_account/.kosh/bindings.js +15 -0
  487. package/dist/stock_account/.kosh/schema.d.ts +2068 -0
  488. package/dist/stock_account/index.d.ts +3 -0
  489. package/dist/stock_account/index.js +140 -0
  490. package/dist/stock_account/module.d.ts +11523 -0
  491. package/dist/stock_account/module.js +339 -0
  492. package/dist/storage/attachments.d.ts +5 -0
  493. package/dist/storage/attachments.js +12 -1
  494. package/dist/storage/models.js +3 -0
  495. package/dist/storage/routes.js +13 -2
  496. package/dist/todo/.kosh/bindings.d.ts +22 -0
  497. package/dist/todo/.kosh/bindings.js +15 -0
  498. package/dist/todo/.kosh/schema.d.ts +732 -0
  499. package/dist/todo/demo.d.ts +6 -0
  500. package/dist/todo/demo.js +35 -0
  501. package/dist/todo/index.d.ts +3 -0
  502. package/dist/todo/index.js +187 -0
  503. package/dist/todo/module.d.ts +1180 -0
  504. package/dist/todo/module.js +130 -0
  505. package/dist/trade_finance/.kosh/bindings.d.ts +22 -0
  506. package/dist/trade_finance/.kosh/bindings.js +15 -0
  507. package/dist/trade_finance/.kosh/schema.d.ts +884 -0
  508. package/dist/trade_finance/demo.d.ts +6 -0
  509. package/dist/trade_finance/demo.js +63 -0
  510. package/dist/trade_finance/index.d.ts +3 -0
  511. package/dist/trade_finance/index.js +415 -0
  512. package/dist/trade_finance/module.d.ts +3779 -0
  513. package/dist/trade_finance/module.js +507 -0
  514. package/dist/trade_finance_account/.kosh/bindings.d.ts +22 -0
  515. package/dist/trade_finance_account/.kosh/bindings.js +15 -0
  516. package/dist/trade_finance_account/.kosh/schema.d.ts +1830 -0
  517. package/dist/trade_finance_account/index.d.ts +3 -0
  518. package/dist/trade_finance_account/index.js +93 -0
  519. package/dist/trade_finance_account/module.d.ts +8074 -0
  520. package/dist/trade_finance_account/module.js +245 -0
  521. package/dist/trade_finance_purchase/.kosh/bindings.d.ts +22 -0
  522. package/dist/trade_finance_purchase/.kosh/bindings.js +15 -0
  523. package/dist/trade_finance_purchase/.kosh/schema.d.ts +1246 -0
  524. package/dist/trade_finance_purchase/index.d.ts +8 -0
  525. package/dist/trade_finance_purchase/index.js +50 -0
  526. package/dist/trade_finance_purchase/module.d.ts +4257 -0
  527. package/dist/trade_finance_purchase/module.js +44 -0
  528. package/dist/trade_finance_sale/.kosh/bindings.d.ts +22 -0
  529. package/dist/trade_finance_sale/.kosh/bindings.js +15 -0
  530. package/dist/trade_finance_sale/.kosh/schema.d.ts +1072 -0
  531. package/dist/trade_finance_sale/index.d.ts +8 -0
  532. package/dist/trade_finance_sale/index.js +50 -0
  533. package/dist/trade_finance_sale/module.d.ts +4281 -0
  534. package/dist/trade_finance_sale/module.js +44 -0
  535. package/dist/ui/api.d.ts +2 -1
  536. package/dist/ui/api.js +2 -1
  537. package/dist/ui/app.js +26 -13
  538. package/dist/ui/components/AppIcon.js +30 -1
  539. package/dist/ui/components/primitives.d.ts +2 -0
  540. package/dist/ui/components/primitives.js +7 -1
  541. package/dist/ui/i18n/messages.d.ts +27 -0
  542. package/dist/ui/i18n/messages.js +46 -0
  543. package/dist/ui/index.d.ts +1 -0
  544. package/dist/ui/index.js +1 -0
  545. package/dist/ui/offline/queue.d.ts +5 -1
  546. package/dist/ui/offline/queue.js +2 -0
  547. package/dist/ui/registry.d.ts +5 -0
  548. package/dist/ui/shell/Home.js +55 -4
  549. package/dist/ui/views/FormView.js +102 -19
  550. package/dist/ui/views/KanbanView.d.ts +2 -0
  551. package/dist/ui/views/KanbanView.js +40 -3
  552. package/dist/ui/views/ListView.js +110 -11
  553. package/dist/ui/views/StatsRow.d.ts +14 -0
  554. package/dist/ui/views/StatsRow.js +88 -0
  555. package/dist/ui/views/widgets.d.ts +2 -1
  556. package/dist/ui/views/widgets.js +200 -1
  557. package/dist/views/builders.d.ts +19 -2
  558. package/dist/views/builders.js +21 -1
  559. package/dist/views/condition.d.ts +6 -0
  560. package/dist/views/condition.js +20 -0
  561. package/dist/views/documents.d.ts +8 -0
  562. package/dist/views/extend.d.ts +2 -2
  563. package/dist/views/extend.js +11 -1
  564. package/dist/views/index.d.ts +2 -2
  565. package/dist/views/index.js +2 -2
  566. package/dist/views/types.d.ts +52 -5
  567. package/dist/views/validate.js +39 -1
  568. package/dist/website/.kosh/bindings.d.ts +22 -0
  569. package/dist/website/.kosh/bindings.js +15 -0
  570. package/dist/website/.kosh/schema.d.ts +881 -0
  571. package/dist/website/demo.d.ts +6 -0
  572. package/dist/website/demo.js +115 -0
  573. package/dist/website/index.d.ts +9 -0
  574. package/dist/website/index.js +251 -0
  575. package/dist/website/module.d.ts +2987 -0
  576. package/dist/website/module.js +282 -0
  577. package/dist/website/render.d.ts +45 -0
  578. package/dist/website/render.js +102 -0
  579. package/dist/website/routes.d.ts +12 -0
  580. package/dist/website/routes.js +246 -0
  581. package/dist/website/web/PagePreview.d.ts +7 -0
  582. package/dist/website/web/PagePreview.js +33 -0
  583. package/dist/website/web/index.d.ts +11 -0
  584. package/dist/website/web/index.js +16 -0
  585. package/dist/website/web/messages.d.ts +2 -0
  586. package/dist/website/web/messages.js +15 -0
  587. package/dist/website_crm/.kosh/bindings.d.ts +22 -0
  588. package/dist/website_crm/.kosh/bindings.js +15 -0
  589. package/dist/website_crm/.kosh/schema.d.ts +967 -0
  590. package/dist/website_crm/index.d.ts +3 -0
  591. package/dist/website_crm/index.js +39 -0
  592. package/dist/website_crm/module.d.ts +2956 -0
  593. package/dist/website_crm/module.js +44 -0
  594. package/dist/website_sale/.kosh/bindings.d.ts +22 -0
  595. package/dist/website_sale/.kosh/bindings.js +15 -0
  596. package/dist/website_sale/.kosh/schema.d.ts +2284 -0
  597. package/dist/website_sale/couriers.d.ts +50 -0
  598. package/dist/website_sale/couriers.js +59 -0
  599. package/dist/website_sale/demo.d.ts +7 -0
  600. package/dist/website_sale/demo.js +90 -0
  601. package/dist/website_sale/growth.d.ts +31 -0
  602. package/dist/website_sale/growth.js +163 -0
  603. package/dist/website_sale/index.d.ts +49 -0
  604. package/dist/website_sale/index.js +538 -0
  605. package/dist/website_sale/module.d.ts +22027 -0
  606. package/dist/website_sale/module.js +397 -0
  607. package/dist/website_sale/shipments.d.ts +16 -0
  608. package/dist/website_sale/shipments.js +113 -0
  609. package/dist/website_sale/shop.d.ts +81 -0
  610. package/dist/website_sale/shop.js +649 -0
  611. package/dist/website_sale_stock/.kosh/bindings.d.ts +22 -0
  612. package/dist/website_sale_stock/.kosh/bindings.js +15 -0
  613. package/dist/website_sale_stock/.kosh/schema.d.ts +2681 -0
  614. package/dist/website_sale_stock/index.d.ts +9 -0
  615. package/dist/website_sale_stock/index.js +20 -0
  616. package/dist/website_sale_stock/module.d.ts +24998 -0
  617. package/dist/website_sale_stock/module.js +28 -0
  618. package/package.json +200 -2
@@ -0,0 +1,320 @@
1
+ /**
2
+ * The payroll formula language (RFC 0024 §2.3): small, safe and exact — never `eval`. Numbers are Shutro Decimals;
3
+ * names in capitals are variables (`WAGE`, `ABSENT_DAYS`, `INPUT_BONUS`, `P_HOUSE_RENT_PCT`, an earlier rule's code);
4
+ * functions are `min`, `max`, `abs`, `round(x, places)`, `floor`, `ceil`, `if(condition, then, else)` and
5
+ * `slab('TABLE', amount)` (a progressive table, such as income tax). Comparisons (`< <= > >= == !=`) and `and`, `or`,
6
+ * `not` give 1 or 0. A formula is at most 500 characters.
7
+ *
8
+ * `evaluate` returns the value and the formula with the values written in, for the payslip's explanation.
9
+ */
10
+ import { orm } from '../server/orm.js';
11
+ export class FormulaError extends Error {
12
+ name = 'FormulaError';
13
+ }
14
+ const OPS = ['<=', '>=', '==', '!=', '<', '>', '+', '-', '*', '/', '(', ')', ','];
15
+ function tokenize(text) {
16
+ if (text.length > 500)
17
+ throw new FormulaError('A formula is at most 500 characters.');
18
+ const out = [];
19
+ let i = 0;
20
+ while (i < text.length) {
21
+ const c = text[i];
22
+ if (/\s/.test(c)) {
23
+ i += 1;
24
+ continue;
25
+ }
26
+ const num = /^\d+(\.\d+)?/.exec(text.slice(i));
27
+ if (num !== null) {
28
+ out.push({ t: 'num', v: num[0] });
29
+ i += num[0].length;
30
+ continue;
31
+ }
32
+ const name = /^[A-Za-z_][A-Za-z0-9_]*/.exec(text.slice(i));
33
+ if (name !== null) {
34
+ out.push({ t: 'name', v: name[0] });
35
+ i += name[0].length;
36
+ continue;
37
+ }
38
+ if (c === "'") {
39
+ const end = text.indexOf("'", i + 1);
40
+ if (end < 0)
41
+ throw new FormulaError('A quoted name is not closed.');
42
+ out.push({ t: 'str', v: text.slice(i + 1, end) });
43
+ i = end + 1;
44
+ continue;
45
+ }
46
+ const op = OPS.find((o) => text.startsWith(o, i));
47
+ if (op === undefined)
48
+ throw new FormulaError(`Unexpected “${c}”.`);
49
+ out.push({ t: 'op', v: op });
50
+ i += op.length;
51
+ }
52
+ return out;
53
+ }
54
+ const FUNCTIONS = {
55
+ min: [1, 20],
56
+ max: [1, 20],
57
+ abs: [1, 1],
58
+ round: [1, 2],
59
+ floor: [1, 1],
60
+ ceil: [1, 1],
61
+ if: [3, 3],
62
+ slab: [2, 2],
63
+ };
64
+ /** Parses a formula. @throws {FormulaError} on a mistake, saying where */
65
+ export function parse(text) {
66
+ const tokens = tokenize(text);
67
+ let p = 0;
68
+ const peek = () => tokens[p];
69
+ const isOp = (v) => peek()?.t === 'op' && peek()?.v === v;
70
+ const isWord = (v) => peek()?.t === 'name' && peek()?.v === v;
71
+ const expect = (v) => {
72
+ if (!isOp(v))
73
+ throw new FormulaError(`“${v}” expected${peek() === undefined ? ' at the end' : ` before “${peek()?.v}”`}.`);
74
+ p += 1;
75
+ };
76
+ const or = () => {
77
+ let a = and();
78
+ while (isWord('or')) {
79
+ p += 1;
80
+ a = { k: 'bin', op: 'or', a, b: and() };
81
+ }
82
+ return a;
83
+ };
84
+ const and = () => {
85
+ let a = not();
86
+ while (isWord('and')) {
87
+ p += 1;
88
+ a = { k: 'bin', op: 'and', a, b: not() };
89
+ }
90
+ return a;
91
+ };
92
+ const not = () => {
93
+ if (isWord('not')) {
94
+ p += 1;
95
+ return { k: 'not', a: not() };
96
+ }
97
+ return compare();
98
+ };
99
+ const compare = () => {
100
+ const a = add();
101
+ const t = peek();
102
+ if (t?.t === 'op' && ['<', '<=', '>', '>=', '==', '!='].includes(t.v)) {
103
+ p += 1;
104
+ return { k: 'bin', op: t.v, a, b: add() };
105
+ }
106
+ return a;
107
+ };
108
+ const add = () => {
109
+ let a = mul();
110
+ while (isOp('+') || isOp('-')) {
111
+ const op = tokens[p].v;
112
+ p += 1;
113
+ a = { k: 'bin', op, a, b: mul() };
114
+ }
115
+ return a;
116
+ };
117
+ const mul = () => {
118
+ let a = unary();
119
+ while (isOp('*') || isOp('/')) {
120
+ const op = tokens[p].v;
121
+ p += 1;
122
+ a = { k: 'bin', op, a, b: unary() };
123
+ }
124
+ return a;
125
+ };
126
+ const unary = () => {
127
+ if (isOp('-')) {
128
+ p += 1;
129
+ return { k: 'neg', a: unary() };
130
+ }
131
+ return primary();
132
+ };
133
+ const primary = () => {
134
+ const t = peek();
135
+ if (t === undefined)
136
+ throw new FormulaError('The formula ends too early.');
137
+ p += 1;
138
+ if (t.t === 'num')
139
+ return { k: 'num', v: t.v };
140
+ if (t.t === 'str')
141
+ return { k: 'str', v: t.v };
142
+ if (t.t === 'op' && t.v === '(') {
143
+ const inner = or();
144
+ expect(')');
145
+ return inner;
146
+ }
147
+ if (t.t === 'name') {
148
+ if (isOp('(')) {
149
+ const arity = FUNCTIONS[t.v];
150
+ if (arity === undefined)
151
+ throw new FormulaError(`There is no function “${t.v}”.`);
152
+ p += 1;
153
+ const args = [];
154
+ if (!isOp(')')) {
155
+ args.push(or());
156
+ while (isOp(',')) {
157
+ p += 1;
158
+ args.push(or());
159
+ }
160
+ }
161
+ expect(')');
162
+ if (args.length < arity[0] || args.length > arity[1])
163
+ throw new FormulaError(`${t.v} takes ${arity[0] === arity[1] ? arity[0] : `${arity[0]} to ${arity[1]}`} values.`);
164
+ return { k: 'call', f: t.v, args };
165
+ }
166
+ if (!/^[A-Z][A-Z0-9_]*$/.test(t.v))
167
+ throw new FormulaError(`“${t.v}”: variables are written in capitals (WAGE, ABSENT_DAYS…).`);
168
+ return { k: 'var', v: t.v };
169
+ }
170
+ throw new FormulaError(`Unexpected “${t.v}”.`);
171
+ };
172
+ const node = or();
173
+ if (p < tokens.length)
174
+ throw new FormulaError(`Unexpected “${tokens[p].v}”.`);
175
+ return node;
176
+ }
177
+ /** The variables a formula reads. */
178
+ export function variablesOf(node) {
179
+ switch (node.k) {
180
+ case 'var':
181
+ return [node.v];
182
+ case 'neg':
183
+ case 'not':
184
+ return variablesOf(node.a);
185
+ case 'bin':
186
+ return [...variablesOf(node.a), ...variablesOf(node.b)];
187
+ case 'call':
188
+ return node.args.flatMap(variablesOf);
189
+ default:
190
+ return [];
191
+ }
192
+ }
193
+ const ZERO = orm.toDecimal(0);
194
+ const ONE = orm.toDecimal(1);
195
+ const truth = (b) => (b ? ONE : ZERO);
196
+ /** The tax of `amount` by a progressive table: each band at its rate. */
197
+ export function slabTax(slab, amount) {
198
+ let left = amount;
199
+ let floor = ZERO;
200
+ let tax = ZERO;
201
+ for (const band of slab.bands) {
202
+ if (left.lte(0))
203
+ break;
204
+ const width = band.upTo === null ? left : band.upTo.minus(floor);
205
+ const part = left.lt(width) ? left : width;
206
+ if (part.gt(0))
207
+ tax = tax.plus(part.times(band.rate).div(100));
208
+ left = left.minus(part);
209
+ if (band.upTo !== null)
210
+ floor = band.upTo;
211
+ }
212
+ return tax;
213
+ }
214
+ /** Evaluates a parsed formula. @throws {FormulaError} for an unknown variable or table, or a division by zero */
215
+ export function evaluate(node, scope) {
216
+ const value = (n) => {
217
+ switch (n.k) {
218
+ case 'num':
219
+ return orm.toDecimal(n.v);
220
+ case 'str':
221
+ throw new FormulaError(`“${n.v}” is a name, not a number.`);
222
+ case 'var': {
223
+ const v = scope.variables.get(n.v);
224
+ if (v !== undefined)
225
+ return v;
226
+ if (scope.zero?.(n.v) === true)
227
+ return ZERO;
228
+ throw new FormulaError(`Unknown variable ${n.v}.`);
229
+ }
230
+ case 'neg':
231
+ return value(n.a).neg();
232
+ case 'not':
233
+ return truth(value(n.a).isZero());
234
+ case 'bin': {
235
+ if (n.op === 'and')
236
+ return truth(!value(n.a).isZero() && !value(n.b).isZero());
237
+ if (n.op === 'or')
238
+ return truth(!value(n.a).isZero() || !value(n.b).isZero());
239
+ const a = value(n.a);
240
+ const b = value(n.b);
241
+ switch (n.op) {
242
+ case '+':
243
+ return a.plus(b);
244
+ case '-':
245
+ return a.minus(b);
246
+ case '*':
247
+ return a.times(b);
248
+ case '/':
249
+ if (b.isZero())
250
+ throw new FormulaError('A division by zero.');
251
+ return a.div(b);
252
+ case '<':
253
+ return truth(a.lt(b));
254
+ case '<=':
255
+ return truth(a.lte(b));
256
+ case '>':
257
+ return truth(a.gt(b));
258
+ case '>=':
259
+ return truth(a.gte(b));
260
+ case '==':
261
+ return truth(a.eq(b));
262
+ default:
263
+ return truth(!a.eq(b));
264
+ }
265
+ }
266
+ case 'call': {
267
+ const args = n.args;
268
+ switch (n.f) {
269
+ case 'if':
270
+ return value(args[0]).isZero()
271
+ ? value(args[2])
272
+ : value(args[1]);
273
+ case 'slab': {
274
+ const table = args[0];
275
+ if (table.k !== 'str')
276
+ throw new FormulaError("slab takes the table's code in quotes: slab('TAX', amount).");
277
+ const slab = scope.slabs.get(table.v);
278
+ if (slab === undefined)
279
+ throw new FormulaError(`No slab table ${table.v} for this period.`);
280
+ return slabTax(slab, value(args[1]));
281
+ }
282
+ case 'round': {
283
+ const places = args.length > 1 ? Number(value(args[1]).toString()) : 0;
284
+ return value(args[0]).toDecimalPlaces(places);
285
+ }
286
+ case 'floor':
287
+ return value(args[0]).floor();
288
+ case 'ceil':
289
+ return value(args[0]).ceil();
290
+ case 'abs':
291
+ return value(args[0]).abs();
292
+ default: {
293
+ const vs = args.map(value);
294
+ return vs.reduce((m, v) => ((n.f === 'min' ? v.lt(m) : v.gt(m)) ? v : m));
295
+ }
296
+ }
297
+ }
298
+ }
299
+ };
300
+ return value(node);
301
+ }
302
+ /** The formula with its variables' values written in: `WAGE * 0.6` → `50000 × 0.6`. */
303
+ export function explain(text, scope) {
304
+ return tokenize(text)
305
+ .map((t) => {
306
+ if (t.t === 'name' && /^[A-Z][A-Z0-9_]*$/.test(t.v)) {
307
+ const v = scope.variables.get(t.v) ?? (scope.zero?.(t.v) === true ? ZERO : undefined);
308
+ return v === undefined ? t.v : v.toDecimalPlaces(2).toString();
309
+ }
310
+ if (t.t === 'str')
311
+ return `'${t.v}'`;
312
+ if (t.t === 'op')
313
+ return t.v === '*' ? '×' : t.v === '/' ? '÷' : t.v;
314
+ return t.v;
315
+ })
316
+ .join(' ')
317
+ .replace(/\( /g, '(')
318
+ .replace(/ \)/g, ')')
319
+ .replace(/ ,/g, ',');
320
+ }
@@ -0,0 +1,230 @@
1
+ import { defineModule } from '../modules-sdk/index.js';
2
+ export { computeRuns, fiscalStartOf, fiscalYearStart, isoDate, PAYMENT_FORMATS, type PaymentFormat, type PaymentRow, paymentRows, recordRepayments, } from './compute.js';
3
+ export { evaluate, explain, FormulaError, parse, type Scope, type Slab, slabTax, variablesOf, } from './formula.js';
4
+ export { CATEGORIES, ContractStructure, EmployeePay, PayrollEmployeeValue, PayrollInput, PayrollLoan, PayrollLoanRepayment, PayrollParameter, PayrollRule, PayrollRun, PayrollSlab, PayrollSlabBand, PayrollSlip, PayrollSlipLine, PayrollStructure, payrollShutro, } from './module.js';
5
+ export declare const payroll: ReturnType<typeof defineModule>;
6
+ /** The line model, for those who extend payslips. */
7
+ export declare const PAYSLIP_LINE: import("shutro").Model<"payroll.slip.line", {
8
+ readonly id: import("shutro").IdField<"payroll.slip.line">;
9
+ readonly createdAt: import("shutro").ScalarField<'datetime', Date, Date, {
10
+ required: true;
11
+ readonly: true;
12
+ computed: false;
13
+ inverse: false;
14
+ hasDefault: false;
15
+ sequence: false;
16
+ }>;
17
+ readonly updatedAt: import("shutro").ScalarField<'datetime', Date, Date, {
18
+ required: true;
19
+ readonly: true;
20
+ computed: false;
21
+ inverse: false;
22
+ hasDefault: false;
23
+ sequence: false;
24
+ }>;
25
+ readonly createdBy: import("shutro").Many2oneField<'res.users', {
26
+ required: false;
27
+ readonly: true;
28
+ computed: false;
29
+ inverse: false;
30
+ hasDefault: false;
31
+ sequence: false;
32
+ }>;
33
+ readonly updatedBy: import("shutro").Many2oneField<'res.users', {
34
+ required: false;
35
+ readonly: true;
36
+ computed: false;
37
+ inverse: false;
38
+ hasDefault: false;
39
+ sequence: false;
40
+ }>;
41
+ readonly displayName: import("shutro").CharField<{
42
+ required: true;
43
+ readonly: true;
44
+ computed: true;
45
+ inverse: false;
46
+ hasDefault: false;
47
+ sequence: false;
48
+ }>;
49
+ readonly slip: import("shutro").Many2oneField<"payroll.slip", {
50
+ readonly required: true;
51
+ readonly computed: false;
52
+ readonly inverse: false;
53
+ readonly sequence: false;
54
+ readonly computeName: undefined;
55
+ readonly store: true;
56
+ readonly hasDefault: false;
57
+ readonly readonly: false;
58
+ }>;
59
+ readonly rule: import("shutro").Many2oneField<"payroll.rule", {
60
+ readonly required: false;
61
+ readonly computed: false;
62
+ readonly inverse: false;
63
+ readonly sequence: false;
64
+ readonly computeName: undefined;
65
+ readonly store: true;
66
+ readonly hasDefault: false;
67
+ readonly readonly: false;
68
+ }>;
69
+ readonly sequence: import("shutro").ScalarField<"integer", number, number, {
70
+ readonly required: true;
71
+ readonly computed: false;
72
+ readonly inverse: false;
73
+ readonly sequence: false;
74
+ readonly computeName: undefined;
75
+ readonly store: true;
76
+ readonly hasDefault: true;
77
+ readonly readonly: false;
78
+ }>;
79
+ readonly code: import("shutro").CharField<{
80
+ readonly required: true;
81
+ readonly computed: false;
82
+ readonly inverse: false;
83
+ readonly sequence: false;
84
+ readonly computeName: undefined;
85
+ readonly store: true;
86
+ readonly hasDefault: false;
87
+ readonly readonly: false;
88
+ }, string>;
89
+ readonly name: import("shutro").CharField<{
90
+ readonly required: true;
91
+ readonly computed: false;
92
+ readonly inverse: false;
93
+ readonly sequence: false;
94
+ readonly computeName: undefined;
95
+ readonly store: true;
96
+ readonly hasDefault: false;
97
+ readonly readonly: false;
98
+ }, string>;
99
+ readonly category: import("shutro").SelectionField<"allowance" | "basic" | "contribution" | "deduction" | "info", {
100
+ readonly required: true;
101
+ readonly computed: false;
102
+ readonly inverse: false;
103
+ readonly sequence: false;
104
+ readonly computeName: undefined;
105
+ readonly store: true;
106
+ readonly hasDefault: true;
107
+ readonly readonly: false;
108
+ }>;
109
+ readonly amount: import("shutro").DecimalField<{
110
+ readonly required: true;
111
+ readonly computed: false;
112
+ readonly inverse: false;
113
+ readonly sequence: false;
114
+ readonly computeName: undefined;
115
+ readonly store: true;
116
+ readonly hasDefault: true;
117
+ readonly readonly: false;
118
+ }>;
119
+ readonly explanation: import("shutro").CharField<{
120
+ readonly required: false;
121
+ readonly computed: false;
122
+ readonly inverse: false;
123
+ readonly sequence: false;
124
+ readonly computeName: undefined;
125
+ readonly store: true;
126
+ readonly hasDefault: false;
127
+ readonly readonly: false;
128
+ }, string>;
129
+ readonly appearsOnSlip: import("shutro").ScalarField<"boolean", boolean, boolean, {
130
+ readonly required: true;
131
+ readonly computed: false;
132
+ readonly inverse: false;
133
+ readonly sequence: false;
134
+ readonly computeName: undefined;
135
+ readonly store: true;
136
+ readonly hasDefault: true;
137
+ readonly readonly: false;
138
+ }>;
139
+ }, {} & import("shutro").TransitionMethods<{
140
+ readonly slip: import("shutro").Many2oneField<"payroll.slip", {
141
+ readonly required: true;
142
+ readonly computed: false;
143
+ readonly inverse: false;
144
+ readonly sequence: false;
145
+ readonly computeName: undefined;
146
+ readonly store: true;
147
+ readonly hasDefault: false;
148
+ readonly readonly: false;
149
+ }>;
150
+ readonly rule: import("shutro").Many2oneField<"payroll.rule", {
151
+ readonly required: false;
152
+ readonly computed: false;
153
+ readonly inverse: false;
154
+ readonly sequence: false;
155
+ readonly computeName: undefined;
156
+ readonly store: true;
157
+ readonly hasDefault: false;
158
+ readonly readonly: false;
159
+ }>;
160
+ readonly sequence: import("shutro").ScalarField<"integer", number, number, {
161
+ readonly required: true;
162
+ readonly computed: false;
163
+ readonly inverse: false;
164
+ readonly sequence: false;
165
+ readonly computeName: undefined;
166
+ readonly store: true;
167
+ readonly hasDefault: true;
168
+ readonly readonly: false;
169
+ }>;
170
+ readonly code: import("shutro").CharField<{
171
+ readonly required: true;
172
+ readonly computed: false;
173
+ readonly inverse: false;
174
+ readonly sequence: false;
175
+ readonly computeName: undefined;
176
+ readonly store: true;
177
+ readonly hasDefault: false;
178
+ readonly readonly: false;
179
+ }, string>;
180
+ readonly name: import("shutro").CharField<{
181
+ readonly required: true;
182
+ readonly computed: false;
183
+ readonly inverse: false;
184
+ readonly sequence: false;
185
+ readonly computeName: undefined;
186
+ readonly store: true;
187
+ readonly hasDefault: false;
188
+ readonly readonly: false;
189
+ }, string>;
190
+ readonly category: import("shutro").SelectionField<"allowance" | "basic" | "contribution" | "deduction" | "info", {
191
+ readonly required: true;
192
+ readonly computed: false;
193
+ readonly inverse: false;
194
+ readonly sequence: false;
195
+ readonly computeName: undefined;
196
+ readonly store: true;
197
+ readonly hasDefault: true;
198
+ readonly readonly: false;
199
+ }>;
200
+ readonly amount: import("shutro").DecimalField<{
201
+ readonly required: true;
202
+ readonly computed: false;
203
+ readonly inverse: false;
204
+ readonly sequence: false;
205
+ readonly computeName: undefined;
206
+ readonly store: true;
207
+ readonly hasDefault: true;
208
+ readonly readonly: false;
209
+ }>;
210
+ readonly explanation: import("shutro").CharField<{
211
+ readonly required: false;
212
+ readonly computed: false;
213
+ readonly inverse: false;
214
+ readonly sequence: false;
215
+ readonly computeName: undefined;
216
+ readonly store: true;
217
+ readonly hasDefault: false;
218
+ readonly readonly: false;
219
+ }, string>;
220
+ readonly appearsOnSlip: import("shutro").ScalarField<"boolean", boolean, boolean, {
221
+ readonly required: true;
222
+ readonly computed: false;
223
+ readonly inverse: false;
224
+ readonly sequence: false;
225
+ readonly computeName: undefined;
226
+ readonly store: true;
227
+ readonly hasDefault: true;
228
+ readonly readonly: false;
229
+ }>;
230
+ }>>;