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,256 @@
1
+ /**
2
+ * Payroll in the books (RFC 0024 §2.3, `payroll_account`): each rule may name its account; an approved run is
3
+ * **booked** as one posted entry in the Payroll journal (`PAY`) — basic, allowances and company contributions to
4
+ * their expense accounts (Salaries, 6000, by default), deductions to their payables (Payroll deductions payable,
5
+ * 2191), contributions against Payroll contributions payable (2192), the net to Salaries payable (2190) — and its
6
+ * **payment** clears Salaries payable against the bank or cash journal chosen on the run. A correction books only
7
+ * its differences, line by line, against the payslips it corrects. Accounts and the journal are made when missing.
8
+ */
9
+ import { accountingShutro } from '../accounting/index.js';
10
+ import { payrollShutro } from '../payroll/index.js';
11
+ import { orm } from '../server/orm.js';
12
+ import { defineModule, extendModel, f } from './.kosh/bindings.js';
13
+ const ZERO = orm.toDecimal(0);
14
+ export const PAYROLL_ACCOUNTS = {
15
+ salaries: { code: '6000', name: 'Salaries', type: 'expense', reconcile: false },
16
+ payable: { code: '2190', name: 'Salaries payable', type: 'liability_current', reconcile: true },
17
+ deductions: {
18
+ code: '2191',
19
+ name: 'Payroll deductions payable',
20
+ type: 'liability_current',
21
+ reconcile: true,
22
+ },
23
+ contributions: {
24
+ code: '2192',
25
+ name: 'Payroll contributions payable',
26
+ type: 'liability_current',
27
+ reconcile: true,
28
+ },
29
+ };
30
+ /** The company's payroll accounts and the Payroll journal (`PAY`); `null` without a chart. */
31
+ export async function payrollAccountsOf(env, company) {
32
+ const chart = await env.model('account.account').search({ where: { company }, limit: 1 });
33
+ if (chart.length === 0)
34
+ return null;
35
+ const out = {};
36
+ for (const [key, spec] of Object.entries(PAYROLL_ACCOUNTS))
37
+ out[key] =
38
+ (await env.model('account.account').search({ where: { company, code: spec.code }, limit: 1 }))
39
+ .ids[0] ??
40
+ (await env.model('account.account').create([{ ...spec, company }]))
41
+ .ids[0];
42
+ out.journal = ((await env.model('account.journal').search({ where: { company, code: 'PAY' }, limit: 1 })).ids[0] ??
43
+ (await env
44
+ .model('account.journal')
45
+ .create([{ company, code: 'PAY', name: 'Payroll', type: 'general' }])).ids[0]);
46
+ return out;
47
+ }
48
+ async function post(env, company, journal, ref, lines) {
49
+ const kept = lines
50
+ .map((l) => {
51
+ // A negative amount on one side is a positive one on the other.
52
+ const net = l.debit.minus(l.credit);
53
+ return { ...l, debit: net.gt(0) ? net : ZERO, credit: net.lt(0) ? net.neg() : ZERO };
54
+ })
55
+ .filter((l) => !l.debit.isZero() || !l.credit.isZero());
56
+ if (kept.length === 0)
57
+ return null;
58
+ const [c] = await env.model('res.company').browse([company]).load({});
59
+ const made = await env.model('account.move').create([
60
+ {
61
+ kind: 'entry',
62
+ journal,
63
+ company,
64
+ currency: c?.currency.id,
65
+ date: env.today(),
66
+ ref,
67
+ lines: {
68
+ create: kept.map((l) => ({
69
+ account: l.account,
70
+ name: l.name,
71
+ debit: l.debit.toDecimalPlaces(2).toString(),
72
+ credit: l.credit.toDecimalPlaces(2).toString(),
73
+ })),
74
+ },
75
+ },
76
+ ]);
77
+ await env.withGrants({ grants: ['account.post'], reason: `payroll ${ref}` }, (e) => e.model('account.move').browse(made.ids).post());
78
+ return made.ids[0];
79
+ }
80
+ const noChart = () => new orm.ValidationError('payroll.run', ['state'], 'The company has no chart of accounts yet.', 'Install a chart in Accounting first.');
81
+ /** Each payslip's line amounts by rule (a correction: less the corrected payslip's), with the rule's account. */
82
+ async function amountsOf(env, runId) {
83
+ const [run] = await env
84
+ .model('payroll.run')
85
+ .browse([runId])
86
+ .load({ company: true, correctionOf: true });
87
+ if (run === undefined)
88
+ return null;
89
+ const linesOf = async (where) => [
90
+ ...(await (await env.model('payroll.slip.line').search({ where: where })).load({ rule: true, slip: true })),
91
+ ];
92
+ const current = await linesOf({ 'slip.run': run.id });
93
+ const before = run.correctionOf === null ? [] : await linesOf({ 'slip.run': run.correctionOf.id });
94
+ const key = (l) => `${l.slip.employee.id}:${l.code}`;
95
+ const out = new Map();
96
+ for (const l of current)
97
+ out.set(key(l), {
98
+ category: l.category,
99
+ name: l.name,
100
+ account: l.rule?.account?.id ?? null,
101
+ amount: (out.get(key(l))?.amount ?? ZERO).plus(l.amount),
102
+ });
103
+ for (const l of before) {
104
+ const slot = out.get(key(l)) ?? {
105
+ category: l.category,
106
+ name: l.name,
107
+ account: l.rule?.account?.id ?? null,
108
+ amount: ZERO,
109
+ };
110
+ slot.amount = slot.amount.minus(l.amount);
111
+ out.set(key(l), slot);
112
+ }
113
+ return { run, amounts: [...out.values()] };
114
+ }
115
+ export const RuleAccount = extendModel('payroll.rule', {
116
+ fields: {
117
+ account: f.many2one('account.account', {
118
+ ondelete: 'restrict',
119
+ label: 'Account',
120
+ help: 'Basic, allowances and contributions: the expense; deductions: the payable. Empty: Salaries (6000) or Payroll deductions payable (2191).',
121
+ }),
122
+ },
123
+ });
124
+ export const RunBooks = extendModel('payroll.run', {
125
+ fields: {
126
+ entry: f.many2one('account.move', { ondelete: 'restrict', label: 'Journal entry' }),
127
+ paymentJournal: f.many2one('account.journal', {
128
+ ondelete: 'restrict',
129
+ label: 'Paid from',
130
+ help: 'The bank or cash journal the net pay leaves from.',
131
+ }),
132
+ paymentEntry: f.many2one('account.move', { ondelete: 'restrict', label: 'Payment entry' }),
133
+ },
134
+ overrides: {
135
+ approvedOut: async function (next) {
136
+ await next();
137
+ const runs = this;
138
+ const env = runs.env;
139
+ await env.asSuperuser({ reason: 'book payroll' }, async (su) => {
140
+ for (const id of runs.ids) {
141
+ const found = await amountsOf(su, id);
142
+ if (found === null)
143
+ continue;
144
+ const accounts = await payrollAccountsOf(su, found.run.company.id);
145
+ if (accounts === null)
146
+ throw noChart();
147
+ const lines = [];
148
+ let net = ZERO;
149
+ let contributions = ZERO;
150
+ for (const a of found.amounts) {
151
+ if (a.category === 'info' || a.amount.isZero())
152
+ continue;
153
+ if (a.category === 'deduction') {
154
+ lines.push({
155
+ account: a.account ?? accounts.deductions,
156
+ debit: ZERO,
157
+ credit: a.amount,
158
+ name: a.name,
159
+ });
160
+ net = net.minus(a.amount);
161
+ }
162
+ else {
163
+ lines.push({
164
+ account: a.account ?? accounts.salaries,
165
+ debit: a.amount,
166
+ credit: ZERO,
167
+ name: a.name,
168
+ });
169
+ if (a.category === 'contribution')
170
+ contributions = contributions.plus(a.amount);
171
+ else
172
+ net = net.plus(a.amount);
173
+ }
174
+ }
175
+ lines.push({
176
+ account: accounts.contributions,
177
+ debit: ZERO,
178
+ credit: contributions,
179
+ name: `${found.run.name} contributions`,
180
+ });
181
+ lines.push({
182
+ account: accounts.payable,
183
+ debit: ZERO,
184
+ credit: net,
185
+ name: `${found.run.name} net pay`,
186
+ });
187
+ // Same accounts and names summed: one line each.
188
+ const merged = new Map();
189
+ for (const l of lines) {
190
+ const k = `${l.account}:${l.name}`;
191
+ const m = merged.get(k);
192
+ if (m === undefined)
193
+ merged.set(k, { ...l });
194
+ else {
195
+ m.debit = m.debit.plus(l.debit);
196
+ m.credit = m.credit.plus(l.credit);
197
+ }
198
+ }
199
+ const entry = await post(su, found.run.company.id, accounts.journal, found.run.name, [
200
+ ...merged.values(),
201
+ ]);
202
+ if (entry !== null)
203
+ await su
204
+ .model('payroll.run')
205
+ .browse([found.run.id])
206
+ .write({ entry });
207
+ }
208
+ });
209
+ },
210
+ paidOut: async function (next) {
211
+ await next();
212
+ const runs = this;
213
+ const env = runs.env;
214
+ await env.asSuperuser({ reason: 'pay payroll' }, async (su) => {
215
+ for (const run of await su
216
+ .model('payroll.run')
217
+ .browse(runs.ids)
218
+ .load({ company: true, slips: true })) {
219
+ const accounts = await payrollAccountsOf(su, run.company.id);
220
+ if (accounts === null)
221
+ throw noChart();
222
+ if (run.paymentJournal === null)
223
+ throw new orm.ValidationError('payroll.run', ['paymentJournal'], 'Choose the bank or cash journal the pay leaves from.', 'Set “Paid from” on the run, then mark it as paid.');
224
+ const [j] = await su.model('account.journal').browse([run.paymentJournal.id]).load({});
225
+ const money = j?.defaultAccount?.id;
226
+ if (j === undefined || money === undefined || (j.type !== 'bank' && j.type !== 'cash'))
227
+ throw new orm.ValidationError('payroll.run', ['paymentJournal'], 'Pay from a bank or cash journal with its account.', 'Choose a bank or cash journal.');
228
+ const total = [...run.slips].reduce((s, x) => s.plus(run.kind === 'correction' ? (x.difference ?? ZERO) : x.net), ZERO);
229
+ const entry = await post(su, run.company.id, run.paymentJournal.id, `${run.name} paid`, [
230
+ { account: accounts.payable, debit: total, credit: ZERO, name: `${run.name} net pay` },
231
+ { account: money, debit: ZERO, credit: total, name: `${run.name} net pay` },
232
+ ]);
233
+ if (entry !== null)
234
+ await su
235
+ .model('payroll.run')
236
+ .browse([run.id])
237
+ .write({ paymentEntry: entry });
238
+ }
239
+ });
240
+ },
241
+ },
242
+ });
243
+ export const payrollAccountShutro = defineModule({
244
+ name: 'payroll_account',
245
+ version: '0.1.0',
246
+ depends: [payrollShutro, accountingShutro],
247
+ groups: [
248
+ orm.defineGroup({
249
+ code: 'payroll_account.user',
250
+ label: 'Payroll in the books',
251
+ implies: ['payroll.user'],
252
+ }),
253
+ ],
254
+ models: [],
255
+ extensions: [RuleAccount, RunBooks],
256
+ });
@@ -10,10 +10,14 @@
10
10
  * ```
11
11
  *
12
12
  * `requestApprovals` creates one request per policy level whose condition (a Shutro domain) matches the record.
13
- * Levels are decided in order (a level waits for the lower ones), by holders of the level's role in the record's
14
- * company; the requester never approves their own record (separation of duties, administrators included). The
15
- * last approval runs the policy's `onApproved` transition, a rejection its `onRejected` one, as the system
16
- * (attributed to the approver in the audit log). Every step is audited and emitted as an event for notifications.
13
+ * Levels are decided in order (a level waits for the lower ones; levels with the same sequence side by side), by
14
+ * the level's approvers in the record's company — a role's holders, named people, the requester's manager
15
+ * (Workforce; the level's role when there is none) or the person in a field of the record —, by any one of them,
16
+ * all of them or a number (RFC 0025): each decision is a vote. The requester never approves their own record
17
+ * (separation of duties, administrators included). The last approval runs the policy's `onApproved` transition, a
18
+ * rejection its `onRejected` one, sending back for changes its `onSentBack` one (a reason required unless the policy
19
+ * says otherwise), a withdrawal by the requester its `onWithdrawn` one — as the system, attributed in the audit log.
20
+ * A resubmission is the next round; earlier rounds stay as history. Every step is audited and emitted as an event.
17
21
  */
18
22
  import type { KoshModule } from '../modules-sdk/index.js';
19
23
  import type { Env } from '../server/orm.js';
@@ -27,7 +31,16 @@ export interface ApprovalRequestInfo {
27
31
  readonly targetId: number;
28
32
  readonly company: number | null;
29
33
  readonly approverRole: string;
30
- readonly state: 'pending' | 'approved' | 'rejected' | 'cancelled';
34
+ /** The people who decide (empty: the role's holders). */
35
+ readonly approvers: readonly number[];
36
+ /** How many approvals it needs, and how many it has. */
37
+ readonly required: number;
38
+ readonly approvals: number;
39
+ readonly round: number;
40
+ /** When it should be decided by, and the role it was escalated to once late. */
41
+ readonly dueAt: string | null;
42
+ readonly escalatedTo: string | null;
43
+ readonly state: 'pending' | 'approved' | 'rejected' | 'sent_back' | 'cancelled';
31
44
  readonly requestedBy: number | null;
32
45
  readonly decidedBy: number | null;
33
46
  readonly decidedAt: string | null;
@@ -40,14 +53,123 @@ export interface ApprovalRequestInfo {
40
53
  */
41
54
  export declare function requestApprovals(records: unknown): Promise<number>;
42
55
  /** `none` (no level applied), `pending`, `approved` or `rejected`, for the record's current round. */
43
- export declare function approvalState(env: Env, model: string, id: number): Promise<'none' | 'pending' | 'approved' | 'rejected'>;
56
+ export declare function approvalState(env: Env, model: string, id: number): Promise<'none' | 'pending' | 'approved' | 'rejected' | 'sent_back'>;
44
57
  /** Transition guard: the records whose approvals are pending or rejected (records no level applied to may go). */
45
58
  export declare function approvalGuard(records: unknown): Promise<number[]>;
59
+ /** A user deciding: their groups, and who delegated their approvals to them today (with those people's roles). */
60
+ export interface Who {
61
+ readonly uid: number;
62
+ readonly administrator: boolean;
63
+ readonly groups: ReadonlySet<string>;
64
+ readonly companyId: number | null;
65
+ readonly delegators: readonly {
66
+ readonly user: number;
67
+ readonly roles: readonly {
68
+ readonly group: string;
69
+ readonly company: number | null;
70
+ }[];
71
+ }[];
72
+ }
73
+ /** `env`'s user as a decider (RFC 0025 §3.3: delegations active today count). */
74
+ export declare function whoIs(su: Env, env: Env): Promise<Who>;
75
+ export type Decision = 'approve' | 'reject' | 'send_back';
76
+ /**
77
+ * Decides a request as `env`'s user: approves (the request is approved once it has the approvals it needs), rejects
78
+ * or sends back for changes (with a reason, unless the policy says otherwise; the other open requests of the round are
79
+ * cancelled). @throws {HttpProblem} 404 unknown, 409 decided / not its turn / decided by them already, 403 not an
80
+ * approver, the requester, or another company, 422 a reason missing
81
+ */
82
+ export declare function decide(env: Env, requestId: number, decision: Decision, comment?: string, from?: {
83
+ readonly ip?: string;
84
+ }): Promise<ApprovalRequestInfo>;
85
+ /**
86
+ * The requester withdraws the pending requests of their record's current round; the policy's `onWithdrawn`
87
+ * transition runs. @throws {HttpProblem} 404 when nothing is pending, 403 when they did not ask
88
+ */
89
+ export declare function withdraw(env: Env, model: string, id: number): Promise<number>;
90
+ /** A request as the Approvals app shows it (RFC 0025 §3.1): the record, who asked, since when, every level. */
91
+ export interface ApprovalCard {
92
+ readonly id: number;
93
+ readonly levelName: string;
94
+ readonly state: ApprovalRequestInfo['state'];
95
+ readonly round: number;
96
+ readonly approvals: number;
97
+ readonly required: number;
98
+ readonly waitingSince: string;
99
+ readonly decidedAt: string | null;
100
+ /** When it should be decided by, and the role it was escalated to once late. */
101
+ readonly dueAt: string | null;
102
+ readonly escalatedTo: string | null;
103
+ readonly comment: string | null;
104
+ readonly record: {
105
+ readonly model: string;
106
+ readonly id: number;
107
+ readonly name: string;
108
+ readonly label: string;
109
+ };
110
+ readonly requester: {
111
+ readonly id: number;
112
+ readonly name: string;
113
+ } | null;
114
+ readonly steps: readonly {
115
+ id: number;
116
+ levelName: string;
117
+ sequence: number;
118
+ state: ApprovalRequestInfo['state'];
119
+ approvals: number;
120
+ required: number;
121
+ }[];
122
+ }
123
+ /**
124
+ * The Approvals app's lists (RFC 0025 §3.1): `inbox` — what waits for the user's decision, oldest first —, `mine`
125
+ * — the records they asked approvals for, the latest round of each, where it stands —, `history` — what they decided,
126
+ * newest first.
127
+ */
128
+ export declare function approvalCards(env: Env, list: 'inbox' | 'mine' | 'history'): Promise<ApprovalCard[]>;
129
+ /** Approves many requests (each checked as one decision); the ones refused say why. */
130
+ export declare function approveMany(env: Env, ids: readonly number[], comment?: string): Promise<{
131
+ approved: number;
132
+ failed: {
133
+ id: number;
134
+ reason: string;
135
+ }[];
136
+ }>;
137
+ /** The inbox's header: waiting, waiting over three days, decided this month, the median hours to decide them. */
138
+ export declare function approvalStats(env: Env): Promise<{
139
+ waiting: number;
140
+ overdue: number;
141
+ decidedThisMonth: number;
142
+ medianHours: number | null;
143
+ }>;
144
+ /** The people who may decide `request` now: its approvers (or its role's holders), the escalation role's once late,
145
+ * and whoever they delegated to today; never the requester. */
146
+ export declare function decidersOf(su: Env, request: ApprovalRequestInfo, today: string): Promise<number[]>;
147
+ /** The pending requests of a record whose turn it is (every lower level approved). */
148
+ export declare function turnOf(su: Env, model: string, id: number): Promise<ApprovalRequestInfo[]>;
46
149
  /**
47
- * Approves or rejects a request as `env`'s user. @throws {HttpProblem} 404 unknown, 409 decided / not its turn,
48
- * 403 not an approver, the requester, or another company
150
+ * Deadlines (RFC 0025 §3.3), as the system: each pending request with a deadline is reminded once at half of it and,
151
+ * once late, escalated to its level's role (who may then decide too), audited; returns what was done, with who to
152
+ * tell.
49
153
  */
50
- export declare function decide(env: Env, requestId: number, decision: 'approve' | 'reject', comment?: string): Promise<ApprovalRequestInfo>;
154
+ export declare function sweepDeadlines(su: Env, now?: Date): Promise<{
155
+ kind: 'reminded' | 'escalated';
156
+ request: ApprovalRequestInfo;
157
+ }[]>;
158
+ /** One-time links deciding `request` from an email, one per person who may decide it now (7 days). */
159
+ export declare function issueLinks(su: Env, request: ApprovalRequestInfo, today: string, newToken: () => string, digestOf: (token: string) => string): Promise<{
160
+ user: number;
161
+ token: string;
162
+ }[]>;
163
+ /** The link of a token, while it is unused and not expired: who decides, which request. */
164
+ export declare function linkOf(su: Env, tokenHash: string): Promise<{
165
+ id: number;
166
+ user: number;
167
+ request: ApprovalRequestInfo;
168
+ } | null>;
169
+ /** Marks a link used (as the system). */
170
+ export declare function useLink(su: Env, id: number): Promise<void>;
171
+ /** A user's groups in a company (direct grants), to act as them from a link. */
172
+ export declare function groupsOf(su: Env, user: number, company: number | null): Promise<string[]>;
51
173
  /** The pending requests `env`'s user may decide now, in the current company. */
52
174
  export declare function inbox(env: Env): Promise<ApprovalRequestInfo[]>;
53
175
  /** The requests of a record, when `env` may read the record (record rules apply: 404 otherwise). */