@ketvietlab/ketsuite 0.1.20 → 0.1.24

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 (245) hide show
  1. package/dist/cli.js +9 -3
  2. package/dist/cli.js.map +1 -1
  3. package/dist/demo/crm.d.ts +3 -0
  4. package/dist/demo/crm.d.ts.map +1 -0
  5. package/dist/demo/crm.js +418 -0
  6. package/dist/demo/crm.js.map +1 -0
  7. package/dist/demo/partner.d.ts +8 -0
  8. package/dist/demo/partner.d.ts.map +1 -0
  9. package/dist/demo/partner.js +179 -0
  10. package/dist/demo/partner.js.map +1 -0
  11. package/dist/demo/product.d.ts +25 -0
  12. package/dist/demo/product.d.ts.map +1 -0
  13. package/dist/demo/product.js +579 -0
  14. package/dist/demo/product.js.map +1 -0
  15. package/dist/demo/purchase.d.ts +4 -0
  16. package/dist/demo/purchase.d.ts.map +1 -0
  17. package/dist/demo/purchase.js +58 -0
  18. package/dist/demo/purchase.js.map +1 -0
  19. package/dist/demo/sale.d.ts +4 -0
  20. package/dist/demo/sale.d.ts.map +1 -0
  21. package/dist/demo/sale.js +52 -0
  22. package/dist/demo/sale.js.map +1 -0
  23. package/dist/demo/seed.d.ts +14 -0
  24. package/dist/demo/seed.d.ts.map +1 -0
  25. package/dist/demo/seed.js +88 -0
  26. package/dist/demo/seed.js.map +1 -0
  27. package/dist/demo/stock.d.ts +7 -0
  28. package/dist/demo/stock.d.ts.map +1 -0
  29. package/dist/demo/stock.js +26 -0
  30. package/dist/demo/stock.js.map +1 -0
  31. package/dist/demo/user.d.ts +4 -0
  32. package/dist/demo/user.d.ts.map +1 -0
  33. package/dist/demo/user.js +41 -0
  34. package/dist/demo/user.js.map +1 -0
  35. package/dist/demo/util.d.ts +7 -0
  36. package/dist/demo/util.d.ts.map +1 -0
  37. package/dist/demo/util.js +19 -0
  38. package/dist/demo/util.js.map +1 -0
  39. package/dist/modules/backend/design/client/backend-shell.d.mts +2 -2
  40. package/dist/modules/backend/design/client/backend-shell.d.mts.map +1 -1
  41. package/dist/modules/backend/design/client/backend-shell.mjs +1 -1
  42. package/dist/modules/backend/design/client/backend-shell.mjs.map +3 -3
  43. package/dist/modules/backend/design/content.css +9 -9
  44. package/dist/modules/backend/design/controls.css +5 -5
  45. package/dist/modules/backend/design/forms.css +12 -5
  46. package/dist/modules/backend/design/foundation.css +3 -3
  47. package/dist/modules/backend/design/lists.css +23 -24
  48. package/dist/modules/backend/design/user-workflow.css +2 -2
  49. package/dist/modules/backend/screen.d.ts.map +1 -1
  50. package/dist/modules/backend/screen.js +11 -2
  51. package/dist/modules/backend/screen.js.map +1 -1
  52. package/dist/modules/crm/functions/access.d.ts +3 -0
  53. package/dist/modules/crm/functions/access.d.ts.map +1 -0
  54. package/dist/modules/crm/functions/access.js +89 -0
  55. package/dist/modules/crm/functions/access.js.map +1 -0
  56. package/dist/modules/crm/functions/activities.d.ts +3 -0
  57. package/dist/modules/crm/functions/activities.d.ts.map +1 -0
  58. package/dist/modules/crm/functions/activities.js +174 -0
  59. package/dist/modules/crm/functions/activities.js.map +1 -0
  60. package/dist/modules/crm/functions/cases.d.ts +3 -0
  61. package/dist/modules/crm/functions/cases.d.ts.map +1 -0
  62. package/dist/modules/crm/functions/cases.js +585 -0
  63. package/dist/modules/crm/functions/cases.js.map +1 -0
  64. package/dist/modules/crm/functions/configuration.d.ts +3 -0
  65. package/dist/modules/crm/functions/configuration.d.ts.map +1 -0
  66. package/dist/modules/crm/functions/configuration.js +331 -0
  67. package/dist/modules/crm/functions/configuration.js.map +1 -0
  68. package/dist/modules/crm/functions/gamification.d.ts +3 -0
  69. package/dist/modules/crm/functions/gamification.d.ts.map +1 -0
  70. package/dist/modules/crm/functions/gamification.js +58 -0
  71. package/dist/modules/crm/functions/gamification.js.map +1 -0
  72. package/dist/modules/crm/functions/index.d.ts +4 -0
  73. package/dist/modules/crm/functions/index.d.ts.map +1 -0
  74. package/dist/modules/crm/functions/index.js +33 -0
  75. package/dist/modules/crm/functions/index.js.map +1 -0
  76. package/dist/modules/crm/functions/modal-context.d.ts +3 -0
  77. package/dist/modules/crm/functions/modal-context.d.ts.map +1 -0
  78. package/dist/modules/crm/functions/modal-context.js +248 -0
  79. package/dist/modules/crm/functions/modal-context.js.map +1 -0
  80. package/dist/modules/crm/functions/previews.d.ts +3 -0
  81. package/dist/modules/crm/functions/previews.d.ts.map +1 -0
  82. package/dist/modules/crm/functions/previews.js +20 -0
  83. package/dist/modules/crm/functions/previews.js.map +1 -0
  84. package/dist/modules/crm/functions/shared.d.ts +31 -0
  85. package/dist/modules/crm/functions/shared.d.ts.map +1 -0
  86. package/dist/modules/crm/functions/shared.js +194 -0
  87. package/dist/modules/crm/functions/shared.js.map +1 -0
  88. package/dist/modules/crm/index.d.ts +1 -1
  89. package/dist/modules/crm/index.d.ts.map +1 -1
  90. package/dist/modules/crm/index.js +2 -2
  91. package/dist/modules/crm/index.js.map +1 -1
  92. package/dist/modules/crm/messages.d.ts +4 -1
  93. package/dist/modules/crm/messages.d.ts.map +1 -1
  94. package/dist/modules/crm/messages.js +6 -0
  95. package/dist/modules/crm/messages.js.map +1 -1
  96. package/dist/modules/crm/record-modal-labels.d.ts +9 -0
  97. package/dist/modules/crm/record-modal-labels.d.ts.map +1 -0
  98. package/dist/modules/crm/record-modal-labels.js +36 -0
  99. package/dist/modules/crm/record-modal-labels.js.map +1 -0
  100. package/dist/modules/crm/types.d.ts +5 -0
  101. package/dist/modules/crm/types.d.ts.map +1 -1
  102. package/dist/modules/crm/types.js +9 -0
  103. package/dist/modules/crm/types.js.map +1 -1
  104. package/dist/modules/crm_backend/client/crm-configuration-modal.d.mts +352 -0
  105. package/dist/modules/crm_backend/client/crm-configuration-modal.d.mts.map +1 -0
  106. package/dist/modules/crm_backend/client/crm-configuration-modal.mjs +2 -0
  107. package/dist/modules/crm_backend/client/crm-configuration-modal.mjs.map +7 -0
  108. package/dist/modules/crm_backend/index.d.ts.map +1 -1
  109. package/dist/modules/crm_backend/index.js +5 -1
  110. package/dist/modules/crm_backend/index.js.map +1 -1
  111. package/dist/modules/crm_backend/islands.d.ts +27 -0
  112. package/dist/modules/crm_backend/islands.d.ts.map +1 -1
  113. package/dist/modules/crm_backend/islands.js +22 -0
  114. package/dist/modules/crm_backend/islands.js.map +1 -1
  115. package/dist/modules/crm_backend/messages.d.ts +30 -0
  116. package/dist/modules/crm_backend/messages.d.ts.map +1 -1
  117. package/dist/modules/crm_backend/messages.js +30 -0
  118. package/dist/modules/crm_backend/messages.js.map +1 -1
  119. package/dist/modules/crm_backend/modal/configuration-modal-view.d.ts +55 -0
  120. package/dist/modules/crm_backend/modal/configuration-modal-view.d.ts.map +1 -0
  121. package/dist/modules/crm_backend/modal/configuration-modal-view.js +601 -0
  122. package/dist/modules/crm_backend/modal/configuration-modal-view.js.map +1 -0
  123. package/dist/modules/crm_backend/routes.d.ts.map +1 -1
  124. package/dist/modules/crm_backend/routes.js +107 -368
  125. package/dist/modules/crm_backend/routes.js.map +1 -1
  126. package/dist/modules/crm_backend/screens/configuration.d.ts +24 -32
  127. package/dist/modules/crm_backend/screens/configuration.d.ts.map +1 -1
  128. package/dist/modules/crm_backend/screens/configuration.js +183 -274
  129. package/dist/modules/crm_backend/screens/configuration.js.map +1 -1
  130. package/dist/modules/crm_backend/screens/index.d.ts +2 -2
  131. package/dist/modules/crm_backend/screens/index.d.ts.map +1 -1
  132. package/dist/modules/crm_backend/screens/index.js +1 -1
  133. package/dist/modules/crm_backend/screens/index.js.map +1 -1
  134. package/dist/modules/product/functions.d.ts +14 -1
  135. package/dist/modules/product/functions.d.ts.map +1 -1
  136. package/dist/modules/product/functions.js +36 -31
  137. package/dist/modules/product/functions.js.map +1 -1
  138. package/dist/modules/product/product-modal-context.d.ts +3 -0
  139. package/dist/modules/product/product-modal-context.d.ts.map +1 -0
  140. package/dist/modules/product/product-modal-context.js +171 -0
  141. package/dist/modules/product/product-modal-context.js.map +1 -0
  142. package/dist/modules/product_backend/client/product-modal.d.mts +143 -0
  143. package/dist/modules/product_backend/client/product-modal.d.mts.map +1 -0
  144. package/dist/modules/product_backend/client/product-modal.mjs +2 -0
  145. package/dist/modules/product_backend/client/product-modal.mjs.map +7 -0
  146. package/dist/modules/product_backend/index.d.ts.map +1 -1
  147. package/dist/modules/product_backend/index.js +16 -0
  148. package/dist/modules/product_backend/index.js.map +1 -1
  149. package/dist/modules/product_backend/islands.d.ts +1 -0
  150. package/dist/modules/product_backend/islands.d.ts.map +1 -1
  151. package/dist/modules/product_backend/islands.js +9 -0
  152. package/dist/modules/product_backend/islands.js.map +1 -1
  153. package/dist/modules/product_backend/modal/product-modal-view.d.ts +43 -0
  154. package/dist/modules/product_backend/modal/product-modal-view.d.ts.map +1 -0
  155. package/dist/modules/product_backend/modal/product-modal-view.js +602 -0
  156. package/dist/modules/product_backend/modal/product-modal-view.js.map +1 -0
  157. package/dist/modules/product_backend/routes.d.ts.map +1 -1
  158. package/dist/modules/product_backend/routes.js +44 -330
  159. package/dist/modules/product_backend/routes.js.map +1 -1
  160. package/dist/modules/product_backend/screens/detail.d.ts.map +1 -1
  161. package/dist/modules/product_backend/screens/detail.js +6 -108
  162. package/dist/modules/product_backend/screens/detail.js.map +1 -1
  163. package/dist/modules/product_backend/screens/index.d.ts +0 -1
  164. package/dist/modules/product_backend/screens/index.d.ts.map +1 -1
  165. package/dist/modules/product_backend/screens/index.js +0 -1
  166. package/dist/modules/product_backend/screens/index.js.map +1 -1
  167. package/dist/modules/product_backend/screens/list.d.ts +3 -1
  168. package/dist/modules/product_backend/screens/list.d.ts.map +1 -1
  169. package/dist/modules/product_backend/screens/list.js +6 -5
  170. package/dist/modules/product_backend/screens/list.js.map +1 -1
  171. package/dist/modules/user/authorization.d.ts.map +1 -1
  172. package/dist/modules/user/authorization.js +114 -0
  173. package/dist/modules/user/authorization.js.map +1 -1
  174. package/dist/modules/user/functions.d.ts.map +1 -1
  175. package/dist/modules/user/functions.js +2 -0
  176. package/dist/modules/user/functions.js.map +1 -1
  177. package/dist/modules/user/user-modal-context.d.ts +3 -0
  178. package/dist/modules/user/user-modal-context.d.ts.map +1 -0
  179. package/dist/modules/user/user-modal-context.js +151 -0
  180. package/dist/modules/user/user-modal-context.js.map +1 -0
  181. package/dist/modules/user_backend/client/user-modal.d.mts +72 -0
  182. package/dist/modules/user_backend/client/user-modal.d.mts.map +1 -0
  183. package/dist/modules/user_backend/client/user-modal.mjs +2 -0
  184. package/dist/modules/user_backend/client/user-modal.mjs.map +7 -0
  185. package/dist/modules/user_backend/index.d.ts.map +1 -1
  186. package/dist/modules/user_backend/index.js +9 -0
  187. package/dist/modules/user_backend/index.js.map +1 -1
  188. package/dist/modules/user_backend/islands.d.ts +15 -0
  189. package/dist/modules/user_backend/islands.d.ts.map +1 -0
  190. package/dist/modules/user_backend/islands.js +14 -0
  191. package/dist/modules/user_backend/islands.js.map +1 -0
  192. package/dist/modules/user_backend/messages.d.ts +30 -0
  193. package/dist/modules/user_backend/messages.d.ts.map +1 -1
  194. package/dist/modules/user_backend/messages.js +30 -0
  195. package/dist/modules/user_backend/messages.js.map +1 -1
  196. package/dist/modules/user_backend/modal/user-modal-view.d.ts +26 -0
  197. package/dist/modules/user_backend/modal/user-modal-view.d.ts.map +1 -0
  198. package/dist/modules/user_backend/modal/user-modal-view.js +320 -0
  199. package/dist/modules/user_backend/modal/user-modal-view.js.map +1 -0
  200. package/dist/modules/user_backend/routes.d.ts.map +1 -1
  201. package/dist/modules/user_backend/routes.js +15 -3
  202. package/dist/modules/user_backend/routes.js.map +1 -1
  203. package/dist/permission-catalogue.d.ts.map +1 -1
  204. package/dist/permission-catalogue.js +8 -0
  205. package/dist/permission-catalogue.js.map +1 -1
  206. package/dist/scaffold/index.js +1 -1
  207. package/dist/ui/client/activity.css +6 -6
  208. package/dist/ui/client/calendar.css +6 -6
  209. package/dist/ui/client/flow-app.css +1 -1
  210. package/dist/ui/client/mail.css +6 -6
  211. package/dist/ui/client/record-modal-form.d.ts +67 -0
  212. package/dist/ui/client/record-modal-form.d.ts.map +1 -0
  213. package/dist/ui/client/record-modal-form.js +45 -0
  214. package/dist/ui/client/record-modal-form.js.map +1 -0
  215. package/dist/ui/client/record-modal.d.ts +97 -6
  216. package/dist/ui/client/record-modal.d.ts.map +1 -1
  217. package/dist/ui/client/record-modal.js +330 -64
  218. package/dist/ui/client/record-modal.js.map +1 -1
  219. package/dist/ui/index.d.ts +2 -1
  220. package/dist/ui/index.d.ts.map +1 -1
  221. package/dist/ui/index.js +2 -1
  222. package/dist/ui/index.js.map +1 -1
  223. package/dist/ui/layout.d.ts.map +1 -1
  224. package/dist/ui/layout.js +5 -3
  225. package/dist/ui/layout.js.map +1 -1
  226. package/dist/ui/nav.d.ts +7 -0
  227. package/dist/ui/nav.d.ts.map +1 -1
  228. package/dist/ui/nav.js +1 -1
  229. package/dist/ui/nav.js.map +1 -1
  230. package/dist/ui/record-modal.d.ts +15 -0
  231. package/dist/ui/record-modal.d.ts.map +1 -1
  232. package/dist/ui/record-modal.js +12 -0
  233. package/dist/ui/record-modal.js.map +1 -1
  234. package/dist/ui/table.d.ts.map +1 -1
  235. package/dist/ui/table.js +1 -1
  236. package/dist/ui/table.js.map +1 -1
  237. package/package.json +4 -4
  238. package/dist/modules/crm/functions.d.ts +0 -10
  239. package/dist/modules/crm/functions.d.ts.map +0 -1
  240. package/dist/modules/crm/functions.js +0 -1394
  241. package/dist/modules/crm/functions.js.map +0 -1
  242. package/dist/modules/product_backend/screens/create.d.ts +0 -16
  243. package/dist/modules/product_backend/screens/create.d.ts.map +0 -1
  244. package/dist/modules/product_backend/screens/create.js +0 -86
  245. package/dist/modules/product_backend/screens/create.js.map +0 -1
@@ -0,0 +1,585 @@
1
+ import { defineFn, deleteFrom, eq, from, inArray } from '@ketvietlab/ketjs';
2
+ import { activeStage, addCaseMessage, addTimeline, assignCase, canEditCase, caseDetail, duplicateCases, firstStage, invalid, issue, groupCases, listCases, moveCase, n, now, refreshCaseScore, pipelineSummary, reassignCase, saveCase, serializeCaseList, visibleCases, } from '../operations.js';
3
+ import { CASE_KINDS } from '../types.js';
4
+ import { caseReadEffects, command, ensureCase, moveToTerminal, caseWriteEffects } from './shared.js';
5
+ export const caseFunctions = {
6
+ 'case.list': defineFn({
7
+ input: {
8
+ kind: 'text?',
9
+ stageId: 'id?',
10
+ teamId: 'id?',
11
+ assigneeUserId: 'id?',
12
+ /** Only the cases assigned to the caller. Resolved from the session, not the URL. */
13
+ mine: 'bool?',
14
+ terminalState: 'text?',
15
+ search: 'text?',
16
+ includeArchived: 'bool?',
17
+ cursor: 'text?',
18
+ limit: 'int?',
19
+ listState: 'json?',
20
+ path: 'json?',
21
+ timezone: 'text?',
22
+ },
23
+ output: { rows: 'json', total: 'int', nextCursor: 'text?' },
24
+ effects: [...caseReadEffects],
25
+ agent: true,
26
+ handler: (ctx, args) => listCases(ctx, args),
27
+ }),
28
+ 'pipeline.summary': defineFn({
29
+ input: {
30
+ kind: 'text?',
31
+ teamId: 'id?',
32
+ mine: 'bool?',
33
+ search: 'text?',
34
+ timezone: 'text?',
35
+ },
36
+ output: {
37
+ stages: 'json',
38
+ openCount: 'int',
39
+ expectedRevenue: 'decimal',
40
+ weightedRevenue: 'decimal',
41
+ overdueActivityCount: 'int',
42
+ partial: 'bool',
43
+ },
44
+ effects: [...caseReadEffects],
45
+ agent: true,
46
+ handler: (ctx, args) => pipelineSummary(ctx, args),
47
+ }),
48
+ overview: defineFn({
49
+ input: { today: 'date' },
50
+ output: {
51
+ leadCount: 'int',
52
+ opportunityCount: 'int',
53
+ openOpportunityCount: 'int',
54
+ overdueActivityCount: 'int',
55
+ expectedRevenue: 'decimal',
56
+ },
57
+ effects: [...caseReadEffects],
58
+ agent: true,
59
+ handler: async (ctx, args) => {
60
+ const C = ctx.table('crm.Case');
61
+ const owned = await ctx.db.all(from(C).where(eq(C.active, true), inArray(C.kind, [...CASE_KINDS])));
62
+ const visible = await visibleCases(ctx, owned);
63
+ const rows = await serializeCaseList(ctx, visible);
64
+ const openOpportunities = rows.filter((row) => row.kind === 'opportunity' && row.terminalState === 'open');
65
+ const visibleIds = [...new Set(rows.map((row) => String(row.id)))];
66
+ // Reading every link in the tenant to keep the handful that belong to
67
+ // these cases is work the query can do instead.
68
+ const L = ctx.table('crm.ActivityLink');
69
+ const links = visibleIds.length ? await ctx.db.all(from(L).where(inArray(L.caseId, visibleIds))) : [];
70
+ const activityIds = [...new Set(links.map((link) => String(link.activityId)))];
71
+ const activities = activityIds.length
72
+ ? await ctx.db.all(from(ctx.table('activity.Activity')).where(inArray(ctx.table('activity.Activity').id, activityIds)))
73
+ : [];
74
+ return {
75
+ leadCount: rows.filter((row) => row.kind === 'lead').length,
76
+ opportunityCount: rows.filter((row) => row.kind === 'opportunity').length,
77
+ openOpportunityCount: openOpportunities.length,
78
+ overdueActivityCount: activities.filter((activity) => activity.active !== false &&
79
+ activity.doneAt == null &&
80
+ activity.canceledAt == null &&
81
+ String(activity.dueDate) < String(args.today)).length,
82
+ expectedRevenue: String(openOpportunities.reduce((total, row) => total + n(row.expectedRevenue), 0)),
83
+ };
84
+ },
85
+ }),
86
+ 'case.count': defineFn({
87
+ input: {
88
+ kind: 'text?',
89
+ stageId: 'id?',
90
+ teamId: 'id?',
91
+ assigneeUserId: 'id?',
92
+ terminalState: 'text?',
93
+ search: 'text?',
94
+ includeArchived: 'bool?',
95
+ listState: 'json?',
96
+ timezone: 'text?',
97
+ },
98
+ output: { count: 'int' },
99
+ effects: [...caseReadEffects],
100
+ agent: true,
101
+ handler: async (ctx, args) => ({ count: (await listCases(ctx, { ...args, limit: 1 })).total }),
102
+ }),
103
+ 'case.group': defineFn({
104
+ input: {
105
+ kind: 'text?',
106
+ listState: 'json',
107
+ path: 'json?',
108
+ timezone: 'text?',
109
+ limit: 'int?',
110
+ offset: 'int?',
111
+ },
112
+ effects: [...caseReadEffects],
113
+ agent: true,
114
+ handler: (ctx, args) => groupCases(ctx, args),
115
+ }),
116
+ 'case.get': defineFn({
117
+ input: { id: 'id' },
118
+ effects: [...caseReadEffects],
119
+ agent: true,
120
+ handler: (ctx, args) => caseDetail(ctx, String(args.id)),
121
+ }),
122
+ 'case.save': defineFn({
123
+ input: {
124
+ id: 'id',
125
+ kind: 'text',
126
+ name: 'text',
127
+ partnerId: 'id?',
128
+ contactName: 'text?',
129
+ email: 'text?',
130
+ phone: 'text?',
131
+ teamId: 'id?',
132
+ assigneeUserId: 'id?',
133
+ stageId: 'id?',
134
+ priority: 'text?',
135
+ description: 'text?',
136
+ utmSource: 'text?',
137
+ utmMedium: 'text?',
138
+ utmCampaign: 'text?',
139
+ expectedRevenue: 'decimal?',
140
+ recurringRevenue: 'decimal?',
141
+ probability: 'decimal?',
142
+ expectedClosing: 'date?',
143
+ forecastCategory: 'text?',
144
+ tagIds: 'json?',
145
+ expectedVersion: 'int?',
146
+ idempotencyKey: 'text',
147
+ },
148
+ output: { ok: 'bool', id: 'id?', version: 'int?', errors: 'json?' },
149
+ effects: [...caseWriteEffects],
150
+ idempotent: true,
151
+ agent: true,
152
+ handler: (ctx, args) => saveCase(ctx, {
153
+ ...args,
154
+ id: String(args.id),
155
+ kind: String(args.kind),
156
+ name: String(args.name),
157
+ idempotencyKey: String(args.idempotencyKey),
158
+ tagIds: Array.isArray(args.tagIds) ? args.tagIds.map(String) : undefined,
159
+ }),
160
+ }),
161
+ 'case.move': defineFn({
162
+ input: { id: 'id', stageId: 'id', expectedVersion: 'int', idempotencyKey: 'text' },
163
+ output: { ok: 'bool', id: 'id?', version: 'int?', terminalState: 'text?', errors: 'json?' },
164
+ effects: [
165
+ 'read:crm.Case',
166
+ 'write:crm.Case',
167
+ 'read:crm.AccessGrant',
168
+ 'read:crm.Team',
169
+ 'read:crm.Stage',
170
+ 'read:crm.TeamMember',
171
+ 'read:user.User',
172
+ 'write:crm.TimelineEntry',
173
+ 'enqueue:crm.gamification',
174
+ ],
175
+ idempotent: true,
176
+ agent: true,
177
+ handler: (ctx, args) => moveCase(ctx, {
178
+ id: String(args.id),
179
+ stageId: String(args.stageId),
180
+ expectedVersion: Number(args.expectedVersion),
181
+ idempotencyKey: String(args.idempotencyKey),
182
+ }),
183
+ }),
184
+ 'case.assign': defineFn({
185
+ input: {
186
+ id: 'id',
187
+ teamId: 'id?',
188
+ assigneeUserId: 'id?',
189
+ expectedVersion: 'int?',
190
+ force: 'bool?',
191
+ idempotencyKey: 'text',
192
+ },
193
+ output: {
194
+ ok: 'bool',
195
+ id: 'id?',
196
+ teamId: 'id?',
197
+ assigneeUserId: 'id?',
198
+ version: 'int?',
199
+ errors: 'json?',
200
+ },
201
+ effects: [
202
+ 'read:crm.Case',
203
+ 'write:crm.Case',
204
+ 'read:crm.AccessGrant',
205
+ 'read:crm.Team',
206
+ 'write:crm.Team',
207
+ 'read:crm.TeamMember',
208
+ 'write:crm.TeamMember',
209
+ 'read:crm.AssignmentRule',
210
+ 'read:user.User',
211
+ 'write:crm.TimelineEntry',
212
+ ],
213
+ idempotent: true,
214
+ agent: true,
215
+ handler: (ctx, args) => assignCase(ctx, args),
216
+ }),
217
+ 'case.reassign': defineFn({
218
+ input: {
219
+ id: 'id',
220
+ teamId: 'id',
221
+ assigneeUserId: 'id?',
222
+ reasonCode: 'text',
223
+ reasonNote: 'text?',
224
+ expectedVersion: 'int',
225
+ idempotencyKey: 'text',
226
+ },
227
+ output: {
228
+ ok: 'bool',
229
+ id: 'id?',
230
+ teamId: 'id?',
231
+ assigneeUserId: 'id?',
232
+ version: 'int?',
233
+ errors: 'json?',
234
+ },
235
+ effects: [
236
+ 'read:crm.Case',
237
+ 'write:crm.Case',
238
+ 'read:crm.AccessGrant',
239
+ 'read:crm.Team',
240
+ 'read:crm.TeamMember',
241
+ 'read:user.User',
242
+ 'read:crm.TimelineEntry',
243
+ 'write:crm.TimelineEntry',
244
+ ],
245
+ idempotent: true,
246
+ agent: true,
247
+ handler: (ctx, args) => reassignCase(ctx, args),
248
+ }),
249
+ 'case.convertLead': defineFn({
250
+ input: {
251
+ id: 'id',
252
+ expectedVersion: 'int',
253
+ stageId: 'id?',
254
+ expectedRevenue: 'decimal?',
255
+ expectedClosing: 'date?',
256
+ idempotencyKey: 'text',
257
+ },
258
+ output: { ok: 'bool', id: 'id?', version: 'int?', errors: 'json?' },
259
+ effects: [
260
+ 'read:crm.Case',
261
+ 'write:crm.Case',
262
+ 'read:crm.AccessGrant',
263
+ 'read:crm.Team',
264
+ 'read:crm.Stage',
265
+ 'read:crm.SalesDetail',
266
+ 'write:crm.SalesDetail',
267
+ 'write:crm.TimelineEntry',
268
+ 'read:user.User',
269
+ 'read:crm.TeamMember',
270
+ ],
271
+ idempotent: true,
272
+ agent: true,
273
+ handler: async (ctx, args) => {
274
+ const error = command(ctx, args.idempotencyKey);
275
+ if (error)
276
+ return error;
277
+ return ctx.tx(async (tx) => {
278
+ const held = await ensureCase(tx, args.id);
279
+ if (!held || !(await canEditCase(tx, held)))
280
+ return invalid(issue('id', 'crm.error.notFound'));
281
+ if (held.kind !== 'lead') {
282
+ if (held.kind === 'opportunity')
283
+ return { ok: true, id: held.id, version: held.version };
284
+ return invalid(issue('kind', 'crm.error.leadConversion'));
285
+ }
286
+ const stage = args.stageId
287
+ ? await activeStage(tx, args.stageId, 'opportunity')
288
+ : await firstStage(tx, 'opportunity');
289
+ if (!stage)
290
+ return invalid(issue('stageId', 'crm.error.invalidStage'));
291
+ const timestamp = now();
292
+ const changed = await tx.db.compareAndSet('crm.Case', { id: args.id }, { version: args.expectedVersion }, {
293
+ kind: 'opportunity',
294
+ stageId: stage.id,
295
+ terminalState: stage.terminalState,
296
+ convertedAt: timestamp,
297
+ version: n(held.version) + 1,
298
+ updatedAt: timestamp,
299
+ });
300
+ if (!('dryRun' in changed) && !changed.matched)
301
+ return invalid(issue('version', 'crm.error.stageConflict', { current: held.version }));
302
+ const detail = (await tx.db.select('crm.SalesDetail', { caseId: args.id }))[0];
303
+ const salesValues = {
304
+ sourceLeadId: args.id,
305
+ ...(args.expectedRevenue === undefined ? {} : { expectedRevenue: String(args.expectedRevenue) }),
306
+ ...(args.expectedClosing === undefined ? {} : { expectedClosing: args.expectedClosing }),
307
+ };
308
+ if (detail)
309
+ await tx.db.update('crm.SalesDetail', { id: detail.id }, salesValues);
310
+ else
311
+ await tx.db.insert('crm.SalesDetail', {
312
+ id: `sales:${String(args.id)}`,
313
+ caseId: args.id,
314
+ expectedRevenue: String(args.expectedRevenue ?? '0'),
315
+ recurringRevenue: '0',
316
+ probability: '0',
317
+ expectedClosing: args.expectedClosing ?? null,
318
+ forecastCategory: 'pipeline',
319
+ lostReason: null,
320
+ ...salesValues,
321
+ });
322
+ await addTimeline(tx, {
323
+ id: `timeline:${String(args.id)}:convert:${String(args.idempotencyKey)}`,
324
+ caseId: String(args.id),
325
+ eventType: 'converted',
326
+ body: 'crm.timeline.converted',
327
+ });
328
+ return { ok: true, id: args.id, version: n(held.version) + 1 };
329
+ });
330
+ },
331
+ }),
332
+ 'case.merge': defineFn({
333
+ input: { targetId: 'id', sourceId: 'id', expectedTargetVersion: 'int', idempotencyKey: 'text' },
334
+ output: { ok: 'bool', id: 'id?', version: 'int?', errors: 'json?' },
335
+ effects: [
336
+ 'read:crm.Case',
337
+ 'write:crm.Case',
338
+ 'read:crm.AccessGrant',
339
+ 'read:crm.Team',
340
+ 'read:crm.CaseTag',
341
+ 'write:crm.CaseTag',
342
+ 'read:crm.Message',
343
+ 'write:crm.Message',
344
+ 'read:crm.ActivityLink',
345
+ 'write:crm.ActivityLink',
346
+ 'read:crm.CalendarLink',
347
+ 'write:crm.CalendarLink',
348
+ 'read:crm.SalesDetail',
349
+ 'write:crm.SalesDetail',
350
+ 'read:crm.TimelineEntry',
351
+ 'write:crm.TimelineEntry',
352
+ 'read:crm.TeamMember',
353
+ 'read:user.User',
354
+ ],
355
+ idempotent: true,
356
+ agent: true,
357
+ handler: async (ctx, args) => {
358
+ const error = command(ctx, args.idempotencyKey);
359
+ if (error)
360
+ return error;
361
+ if (args.targetId === args.sourceId)
362
+ return invalid(issue('sourceId', 'crm.error.required'));
363
+ return ctx.tx(async (tx) => {
364
+ const [target, source] = await Promise.all([
365
+ ensureCase(tx, args.targetId),
366
+ ensureCase(tx, args.sourceId),
367
+ ]);
368
+ if (!target || !source)
369
+ return invalid(issue('id', 'crm.error.notFound'));
370
+ if (!(await canEditCase(tx, target)))
371
+ return invalid(issue('targetId', 'crm.error.notFound'));
372
+ if (!(await canEditCase(tx, source)))
373
+ return invalid(issue('sourceId', 'crm.error.notFound'));
374
+ if (target.kind !== source.kind)
375
+ return invalid(issue('sourceId', 'crm.error.invalidKind'));
376
+ // Merging a record that is already folded into a third one would strand
377
+ // the history it carries, and merging into an archived target hides the
378
+ // result the moment it is written.
379
+ if (source.mergedIntoId || source.active === false)
380
+ return invalid(issue('sourceId', 'crm.error.alreadyMerged'));
381
+ if (target.mergedIntoId || target.active === false)
382
+ return invalid(issue('targetId', 'crm.error.alreadyMerged'));
383
+ const timestamp = now();
384
+ const changed = await tx.db.compareAndSet('crm.Case', { id: args.targetId }, { version: args.expectedTargetVersion }, { version: n(target.version) + 1, updatedAt: timestamp });
385
+ if (!('dryRun' in changed) && !changed.matched)
386
+ return invalid(issue('version', 'crm.error.stageConflict', { current: target.version }));
387
+ for (const join of await tx.db.select('crm.CaseTag', { caseId: args.sourceId }))
388
+ await tx.db.insertIfAbsent('crm.CaseTag', {
389
+ id: `${String(args.targetId)}:${String(join.tagId)}`,
390
+ caseId: args.targetId,
391
+ tagId: join.tagId,
392
+ });
393
+ // Everything the source carries moves with it. A merge that left the
394
+ // timeline and the meetings behind buried them on an archived record
395
+ // nobody opens again.
396
+ for (const model of ['crm.Message', 'crm.ActivityLink', 'crm.TimelineEntry'])
397
+ for (const row of await tx.db.select(model, { caseId: args.sourceId }))
398
+ await tx.db.update(model, { id: row.id }, { caseId: args.targetId });
399
+ for (const link of await tx.db.select('crm.CalendarLink', { caseId: args.sourceId })) {
400
+ const held = (await tx.db.select('crm.CalendarLink', { caseId: args.targetId, eventId: link.eventId }))[0];
401
+ if (held)
402
+ await tx.db.del(deleteFrom(tx.table('crm.CalendarLink')).where(eq(tx.table('crm.CalendarLink').id, link.id)));
403
+ else
404
+ await tx.db.update('crm.CalendarLink', { id: link.id }, { caseId: args.targetId });
405
+ }
406
+ const [targetDetail, sourceDetail] = await Promise.all([
407
+ tx.db.select('crm.SalesDetail', { caseId: args.targetId }),
408
+ tx.db.select('crm.SalesDetail', { caseId: args.sourceId }),
409
+ ]);
410
+ const kept = targetDetail[0];
411
+ const dropped = sourceDetail[0];
412
+ // The target's own figures win; the source only fills a blank, which is
413
+ // what makes merging a bare duplicate into a qualified record safe.
414
+ if (kept && dropped) {
415
+ const carried = {};
416
+ if (!Number(kept.expectedRevenue) && Number(dropped.expectedRevenue))
417
+ carried.expectedRevenue = dropped.expectedRevenue;
418
+ if (!Number(kept.recurringRevenue) && Number(dropped.recurringRevenue))
419
+ carried.recurringRevenue = dropped.recurringRevenue;
420
+ if (!Number(kept.probability) && Number(dropped.probability))
421
+ carried.probability = dropped.probability;
422
+ if (!kept.expectedClosing && dropped.expectedClosing)
423
+ carried.expectedClosing = dropped.expectedClosing;
424
+ if (Object.keys(carried).length)
425
+ await tx.db.update('crm.SalesDetail', { id: kept.id }, carried);
426
+ }
427
+ await tx.db.update('crm.Case', { id: args.sourceId }, {
428
+ active: false,
429
+ terminalState: source.terminalState,
430
+ mergedIntoId: args.targetId,
431
+ closedAt: source.closedAt ?? timestamp,
432
+ version: n(source.version) + 1,
433
+ updatedAt: timestamp,
434
+ });
435
+ await addTimeline(tx, {
436
+ id: `timeline:${String(args.targetId)}:merge:${String(args.idempotencyKey)}`,
437
+ caseId: String(args.targetId),
438
+ eventType: 'merged',
439
+ body: 'crm.timeline.merged',
440
+ metadata: { sourceId: args.sourceId, sourceName: source.name },
441
+ occurredAt: timestamp,
442
+ });
443
+ return { ok: true, id: args.targetId, version: n(target.version) + 1 };
444
+ });
445
+ },
446
+ }),
447
+ 'case.markWon': defineFn({
448
+ input: { id: 'id', expectedVersion: 'int', closeReason: 'text?', idempotencyKey: 'text' },
449
+ output: { ok: 'bool', id: 'id?', version: 'int?', terminalState: 'text?', errors: 'json?' },
450
+ effects: [
451
+ 'read:crm.Case',
452
+ 'write:crm.Case',
453
+ 'read:crm.AccessGrant',
454
+ 'read:crm.Team',
455
+ 'read:crm.Stage',
456
+ 'write:crm.TimelineEntry',
457
+ 'read:crm.TeamMember',
458
+ 'read:user.User',
459
+ 'enqueue:crm.gamification',
460
+ ],
461
+ idempotent: true,
462
+ agent: true,
463
+ handler: (ctx, args) => moveToTerminal(ctx, {
464
+ id: String(args.id),
465
+ expectedVersion: Number(args.expectedVersion),
466
+ idempotencyKey: String(args.idempotencyKey),
467
+ terminal: 'won',
468
+ closeReason: args.closeReason ? String(args.closeReason) : undefined,
469
+ }),
470
+ }),
471
+ 'case.markLost': defineFn({
472
+ input: {
473
+ id: 'id',
474
+ expectedVersion: 'int',
475
+ lostReason: 'text',
476
+ closeReason: 'text?',
477
+ idempotencyKey: 'text',
478
+ },
479
+ output: { ok: 'bool', id: 'id?', version: 'int?', terminalState: 'text?', errors: 'json?' },
480
+ effects: [
481
+ 'read:crm.Case',
482
+ 'write:crm.Case',
483
+ 'read:crm.AccessGrant',
484
+ 'read:crm.Team',
485
+ 'read:crm.Stage',
486
+ 'read:crm.SalesDetail',
487
+ 'write:crm.SalesDetail',
488
+ 'write:crm.TimelineEntry',
489
+ 'read:crm.TeamMember',
490
+ 'read:user.User',
491
+ 'enqueue:crm.gamification',
492
+ ],
493
+ idempotent: true,
494
+ agent: true,
495
+ handler: (ctx, args) => moveToTerminal(ctx, {
496
+ id: String(args.id),
497
+ expectedVersion: Number(args.expectedVersion),
498
+ lostReason: String(args.lostReason),
499
+ closeReason: args.closeReason ? String(args.closeReason) : undefined,
500
+ idempotencyKey: String(args.idempotencyKey),
501
+ terminal: 'lost',
502
+ }),
503
+ }),
504
+ 'case.detectDuplicates': defineFn({
505
+ input: { id: 'id?', email: 'text?', phone: 'text?', name: 'text?', limit: 'int?' },
506
+ output: { rows: 'json' },
507
+ effects: [...caseReadEffects],
508
+ agent: true,
509
+ handler: async (ctx, args) => ({
510
+ rows: await duplicateCases(ctx, args, n(args.limit ?? 20) || 20),
511
+ }),
512
+ }),
513
+ 'case.addMessage': defineFn({
514
+ input: { id: 'id', caseId: 'id', body: 'text', visibility: 'text', idempotencyKey: 'text' },
515
+ output: { ok: 'bool', id: 'id?', errors: 'json?' },
516
+ effects: [
517
+ 'read:crm.Case',
518
+ 'read:crm.Message',
519
+ 'write:crm.Message',
520
+ 'write:crm.TimelineEntry',
521
+ 'read:crm.TeamMember',
522
+ 'read:user.User',
523
+ ],
524
+ idempotent: true,
525
+ agent: true,
526
+ handler: async (ctx, args) => {
527
+ const error = command(ctx, args.idempotencyKey);
528
+ if (error)
529
+ return error;
530
+ return addCaseMessage(ctx, {
531
+ id: String(args.id),
532
+ caseId: String(args.caseId),
533
+ body: String(args.body),
534
+ visibility: String(args.visibility),
535
+ });
536
+ },
537
+ }),
538
+ 'case.refreshScore': defineFn({
539
+ input: { id: 'id', idempotencyKey: 'text' },
540
+ output: { ok: 'bool', id: 'id?', score: 'decimal?', reasons: 'json?', errors: 'json?' },
541
+ effects: [
542
+ 'read:crm.Case',
543
+ 'write:crm.Case',
544
+ 'read:crm.SalesDetail',
545
+ 'read:crm.ScoreRule',
546
+ 'read:crm.ScoreHistory',
547
+ 'write:crm.ScoreHistory',
548
+ 'read:crm.TeamMember',
549
+ 'read:user.User',
550
+ ],
551
+ idempotent: true,
552
+ agent: true,
553
+ handler: async (ctx, args) => {
554
+ const error = command(ctx, args.idempotencyKey);
555
+ return error ?? refreshCaseScore(ctx, String(args.id), String(args.idempotencyKey));
556
+ },
557
+ }),
558
+ /**
559
+ * Cases as picker rows, for the fields that point at another case — today the
560
+ * merge source. `case.list` answers a paged envelope, which the picker cannot
561
+ * read, so this returns the array it expects under the same audience filter.
562
+ */
563
+ 'case.options': defineFn({
564
+ input: { search: 'text?', limit: 'int?', kind: 'text?', excludeId: 'id?' },
565
+ output: { id: 'id', name: 'text', ref: 'text?', kind: 'text' },
566
+ effects: [...caseReadEffects],
567
+ agent: true,
568
+ handler: async (ctx, args) => {
569
+ const found = await listCases(ctx, {
570
+ ...(args.search ? { search: args.search } : {}),
571
+ ...(args.kind ? { kind: args.kind } : {}),
572
+ limit: Math.max(1, Math.min(100, n(args.limit ?? 40))),
573
+ });
574
+ return found.rows
575
+ .filter((row) => !args.excludeId || row.id !== args.excludeId)
576
+ .map((row) => ({
577
+ id: row.id,
578
+ name: row.name,
579
+ kind: row.kind,
580
+ ref: [row.stageName, row.partnerName ?? row.email ?? row.phone].filter(Boolean).join(' · '),
581
+ }));
582
+ },
583
+ }),
584
+ };
585
+ //# sourceMappingURL=cases.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cases.js","sourceRoot":"","sources":["../../../../../../../../packages/ketsuite/src/modules/crm/functions/cases.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAE3E,OAAO,EACL,WAAW,EACX,cAAc,EACd,WAAW,EACX,UAAU,EACV,WAAW,EACX,UAAU,EACV,cAAc,EACd,UAAU,EACV,OAAO,EACP,KAAK,EACL,UAAU,EACV,SAAS,EACT,QAAQ,EACR,CAAC,EACD,GAAG,EACH,gBAAgB,EAChB,eAAe,EACf,YAAY,EACZ,QAAQ,EACR,iBAAiB,EACjB,YAAY,GACb,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAEpG,MAAM,CAAC,MAAM,aAAa,GAA2B;IACnD,WAAW,EAAE,QAAQ,CAAC;QACpB,KAAK,EAAE;YACL,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,KAAK;YACb,cAAc,EAAE,KAAK;YACrB,qFAAqF;YACrF,IAAI,EAAE,OAAO;YACb,aAAa,EAAE,OAAO;YACtB,MAAM,EAAE,OAAO;YACf,eAAe,EAAE,OAAO;YACxB,MAAM,EAAE,OAAO;YACf,KAAK,EAAE,MAAM;YACb,SAAS,EAAE,OAAO;YAClB,IAAI,EAAE,OAAO;YACb,QAAQ,EAAE,OAAO;SAClB;QACD,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE;QAC3D,OAAO,EAAE,CAAC,GAAG,eAAe,CAAC;QAC7B,KAAK,EAAE,IAAI;QACX,OAAO,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC;KAC7C,CAAC;IAEF,kBAAkB,EAAE,QAAQ,CAAC;QAC3B,KAAK,EAAE;YACL,IAAI,EAAE,OAAO;YACb,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,OAAO;YACb,MAAM,EAAE,OAAO;YACf,QAAQ,EAAE,OAAO;SAClB;QACD,MAAM,EAAE;YACN,MAAM,EAAE,MAAM;YACd,SAAS,EAAE,KAAK;YAChB,eAAe,EAAE,SAAS;YAC1B,eAAe,EAAE,SAAS;YAC1B,oBAAoB,EAAE,KAAK;YAC3B,OAAO,EAAE,MAAM;SAChB;QACD,OAAO,EAAE,CAAC,GAAG,eAAe,CAAC;QAC7B,KAAK,EAAE,IAAI;QACX,OAAO,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,GAAG,EAAE,IAAI,CAAC;KACnD,CAAC;IAEF,QAAQ,EAAE,QAAQ,CAAC;QACjB,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE;QACxB,MAAM,EAAE;YACN,SAAS,EAAE,KAAK;YAChB,gBAAgB,EAAE,KAAK;YACvB,oBAAoB,EAAE,KAAK;YAC3B,oBAAoB,EAAE,KAAK;YAC3B,eAAe,EAAE,SAAS;SAC3B;QACD,OAAO,EAAE,CAAC,GAAG,eAAe,CAAC;QAC7B,KAAK,EAAE,IAAI;QACX,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;YAC3B,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;YAC/B,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;YACnG,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;YAC9C,MAAM,IAAI,GAAG,MAAM,iBAAiB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;YAClD,MAAM,iBAAiB,GAAG,IAAI,CAAC,MAAM,CACnC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,aAAa,IAAI,GAAG,CAAC,aAAa,KAAK,MAAM,CACpE,CAAA;YACD,MAAM,UAAU,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;YAClE,sEAAsE;YACtE,gDAAgD;YAChD,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAA;YACvC,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;YACrG,MAAM,WAAW,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;YAC9E,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM;gBACnC,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CACd,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,CACxC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,EAAE,EAAE,WAAW,CAAC,CACxD,CACF;gBACH,CAAC,CAAC,EAAE,CAAA;YACN,OAAO;gBACL,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,MAAM;gBAC3D,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC,MAAM;gBACzE,oBAAoB,EAAE,iBAAiB,CAAC,MAAM;gBAC9C,oBAAoB,EAAE,UAAU,CAAC,MAAM,CACrC,CAAC,QAAQ,EAAE,EAAE,CACX,QAAQ,CAAC,MAAM,KAAK,KAAK;oBACzB,QAAQ,CAAC,MAAM,IAAI,IAAI;oBACvB,QAAQ,CAAC,UAAU,IAAI,IAAI;oBAC3B,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAChD,CAAC,MAAM;gBACR,eAAe,EAAE,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC;aACrG,CAAA;QACH,CAAC;KACF,CAAC;IAEF,YAAY,EAAE,QAAQ,CAAC;QACrB,KAAK,EAAE;YACL,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,KAAK;YACb,cAAc,EAAE,KAAK;YACrB,aAAa,EAAE,OAAO;YACtB,MAAM,EAAE,OAAO;YACf,eAAe,EAAE,OAAO;YACxB,SAAS,EAAE,OAAO;YAClB,QAAQ,EAAE,OAAO;SAClB;QACD,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE;QACxB,OAAO,EAAE,CAAC,GAAG,eAAe,CAAC;QAC7B,KAAK,EAAE,IAAI;QACX,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,MAAM,SAAS,CAAC,GAAG,EAAE,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;KAC/F,CAAC;IAEF,YAAY,EAAE,QAAQ,CAAC;QACrB,KAAK,EAAE;YACL,IAAI,EAAE,OAAO;YACb,SAAS,EAAE,MAAM;YACjB,IAAI,EAAE,OAAO;YACb,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,MAAM;YACb,MAAM,EAAE,MAAM;SACf;QACD,OAAO,EAAE,CAAC,GAAG,eAAe,CAAC;QAC7B,KAAK,EAAE,IAAI;QACX,OAAO,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC;KAC9C,CAAC;IAEF,UAAU,EAAE,QAAQ,CAAC;QACnB,KAAK,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE;QACnB,OAAO,EAAE,CAAC,GAAG,eAAe,CAAC;QAC7B,KAAK,EAAE,IAAI;QACX,OAAO,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;KACzD,CAAC;IAEF,WAAW,EAAE,QAAQ,CAAC;QACpB,KAAK,EAAE;YACL,EAAE,EAAE,IAAI;YACR,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,MAAM;YACZ,SAAS,EAAE,KAAK;YAChB,WAAW,EAAE,OAAO;YACpB,KAAK,EAAE,OAAO;YACd,KAAK,EAAE,OAAO;YACd,MAAM,EAAE,KAAK;YACb,cAAc,EAAE,KAAK;YACrB,OAAO,EAAE,KAAK;YACd,QAAQ,EAAE,OAAO;YACjB,WAAW,EAAE,OAAO;YACpB,SAAS,EAAE,OAAO;YAClB,SAAS,EAAE,OAAO;YAClB,WAAW,EAAE,OAAO;YACpB,eAAe,EAAE,UAAU;YAC3B,gBAAgB,EAAE,UAAU;YAC5B,WAAW,EAAE,UAAU;YACvB,eAAe,EAAE,OAAO;YACxB,gBAAgB,EAAE,OAAO;YACzB,MAAM,EAAE,OAAO;YACf,eAAe,EAAE,MAAM;YACvB,cAAc,EAAE,MAAM;SACvB;QACD,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE;QACnE,OAAO,EAAE,CAAC,GAAG,gBAAgB,CAAC;QAC9B,UAAU,EAAE,IAAI;QAChB,KAAK,EAAE,IAAI;QACX,OAAO,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CACrB,QAAQ,CAAC,GAAG,EAAE;YACZ,GAAI,IAAgC;YACpC,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YACnB,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;YACvB,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;YACvB,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC;YAC3C,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;SACzE,CAAC;KACL,CAAC;IAEF,WAAW,EAAE,QAAQ,CAAC;QACpB,KAAK,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE;QAClF,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;QAC3F,OAAO,EAAE;YACP,eAAe;YACf,gBAAgB;YAChB,sBAAsB;YACtB,eAAe;YACf,gBAAgB;YAChB,qBAAqB;YACrB,gBAAgB;YAChB,yBAAyB;YACzB,0BAA0B;SAC3B;QACD,UAAU,EAAE,IAAI;QAChB,KAAK,EAAE,IAAI;QACX,OAAO,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CACrB,QAAQ,CAAC,GAAG,EAAE;YACZ,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YACnB,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;YAC7B,eAAe,EAAE,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC;YAC7C,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC;SAC5C,CAAC;KACL,CAAC;IAEF,aAAa,EAAE,QAAQ,CAAC;QACtB,KAAK,EAAE;YACL,EAAE,EAAE,IAAI;YACR,MAAM,EAAE,KAAK;YACb,cAAc,EAAE,KAAK;YACrB,eAAe,EAAE,MAAM;YACvB,KAAK,EAAE,OAAO;YACd,cAAc,EAAE,MAAM;SACvB;QACD,MAAM,EAAE;YACN,EAAE,EAAE,MAAM;YACV,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,KAAK;YACb,cAAc,EAAE,KAAK;YACrB,OAAO,EAAE,MAAM;YACf,MAAM,EAAE,OAAO;SAChB;QACD,OAAO,EAAE;YACP,eAAe;YACf,gBAAgB;YAChB,sBAAsB;YACtB,eAAe;YACf,gBAAgB;YAChB,qBAAqB;YACrB,sBAAsB;YACtB,yBAAyB;YACzB,gBAAgB;YAChB,yBAAyB;SAC1B;QACD,UAAU,EAAE,IAAI;QAChB,KAAK,EAAE,IAAI;QACX,OAAO,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,IAAa,CAAC;KACvD,CAAC;IAEF,eAAe,EAAE,QAAQ,CAAC;QACxB,KAAK,EAAE;YACL,EAAE,EAAE,IAAI;YACR,MAAM,EAAE,IAAI;YACZ,cAAc,EAAE,KAAK;YACrB,UAAU,EAAE,MAAM;YAClB,UAAU,EAAE,OAAO;YACnB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,MAAM;SACvB;QACD,MAAM,EAAE;YACN,EAAE,EAAE,MAAM;YACV,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,KAAK;YACb,cAAc,EAAE,KAAK;YACrB,OAAO,EAAE,MAAM;YACf,MAAM,EAAE,OAAO;SAChB;QACD,OAAO,EAAE;YACP,eAAe;YACf,gBAAgB;YAChB,sBAAsB;YACtB,eAAe;YACf,qBAAqB;YACrB,gBAAgB;YAChB,wBAAwB;YACxB,yBAAyB;SAC1B;QACD,UAAU,EAAE,IAAI;QAChB,KAAK,EAAE,IAAI;QACX,OAAO,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,IAAa,CAAC;KACzD,CAAC;IAEF,kBAAkB,EAAE,QAAQ,CAAC;QAC3B,KAAK,EAAE;YACL,EAAE,EAAE,IAAI;YACR,eAAe,EAAE,KAAK;YACtB,OAAO,EAAE,KAAK;YACd,eAAe,EAAE,UAAU;YAC3B,eAAe,EAAE,OAAO;YACxB,cAAc,EAAE,MAAM;SACvB;QACD,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE;QACnE,OAAO,EAAE;YACP,eAAe;YACf,gBAAgB;YAChB,sBAAsB;YACtB,eAAe;YACf,gBAAgB;YAChB,sBAAsB;YACtB,uBAAuB;YACvB,yBAAyB;YACzB,gBAAgB;YAChB,qBAAqB;SACtB;QACD,UAAU,EAAE,IAAI;QAChB,KAAK,EAAE,IAAI;QACX,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;YAC3B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,CAAC,CAAA;YAC/C,IAAI,KAAK;gBAAE,OAAO,KAAK,CAAA;YACvB,OAAO,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;gBACzB,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,CAAA;gBAC1C,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,MAAM,WAAW,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;oBAAE,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC,CAAA;gBAC9F,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;oBACzB,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa;wBAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAA;oBACxF,OAAO,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAC,CAAA;gBAC3D,CAAC;gBACD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO;oBACxB,CAAC,CAAC,MAAM,WAAW,CAAC,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC;oBACpD,CAAC,CAAC,MAAM,UAAU,CAAC,EAAE,EAAE,aAAa,CAAC,CAAA;gBACvC,IAAI,CAAC,KAAK;oBAAE,OAAO,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,wBAAwB,CAAC,CAAC,CAAA;gBACtE,MAAM,SAAS,GAAG,GAAG,EAAE,CAAA;gBACvB,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,EAAE,CAAC,aAAa,CACvC,UAAU,EACV,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,EACf,EAAE,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,EACjC;oBACE,IAAI,EAAE,aAAa;oBACnB,OAAO,EAAE,KAAK,CAAC,EAAE;oBACjB,aAAa,EAAE,KAAK,CAAC,aAAa;oBAClC,WAAW,EAAE,SAAS;oBACtB,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;oBAC5B,SAAS,EAAE,SAAS;iBACrB,CACF,CAAA;gBACD,IAAI,CAAC,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO;oBAC5C,OAAO,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,yBAAyB,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;gBACxF,MAAM,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,iBAAiB,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;gBAC9E,MAAM,WAAW,GAAG;oBAClB,YAAY,EAAE,IAAI,CAAC,EAAE;oBACrB,GAAG,CAAC,IAAI,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;oBAChG,GAAG,CAAC,IAAI,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC;iBACzF,CAAA;gBACD,IAAI,MAAM;oBAAE,MAAM,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,iBAAiB,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,WAAW,CAAC,CAAA;;oBAE/E,MAAM,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,iBAAiB,EAAE;wBACpC,EAAE,EAAE,SAAS,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;wBAC9B,MAAM,EAAE,IAAI,CAAC,EAAE;wBACf,eAAe,EAAE,MAAM,CAAC,IAAI,CAAC,eAAe,IAAI,GAAG,CAAC;wBACpD,gBAAgB,EAAE,GAAG;wBACrB,WAAW,EAAE,GAAG;wBAChB,eAAe,EAAE,IAAI,CAAC,eAAe,IAAI,IAAI;wBAC7C,gBAAgB,EAAE,UAAU;wBAC5B,UAAU,EAAE,IAAI;wBAChB,GAAG,WAAW;qBACf,CAAC,CAAA;gBACJ,MAAM,WAAW,CAAC,EAAE,EAAE;oBACpB,EAAE,EAAE,YAAY,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE;oBACxE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;oBACvB,SAAS,EAAE,WAAW;oBACtB,IAAI,EAAE,wBAAwB;iBAC/B,CAAC,CAAA;gBACF,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAA;YAChE,CAAC,CAAC,CAAA;QACJ,CAAC;KACF,CAAC;IAEF,YAAY,EAAE,QAAQ,CAAC;QACrB,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,qBAAqB,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE;QAC/F,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE;QACnE,OAAO,EAAE;YACP,eAAe;YACf,gBAAgB;YAChB,sBAAsB;YACtB,eAAe;YACf,kBAAkB;YAClB,mBAAmB;YACnB,kBAAkB;YAClB,mBAAmB;YACnB,uBAAuB;YACvB,wBAAwB;YACxB,uBAAuB;YACvB,wBAAwB;YACxB,sBAAsB;YACtB,uBAAuB;YACvB,wBAAwB;YACxB,yBAAyB;YACzB,qBAAqB;YACrB,gBAAgB;SACjB;QACD,UAAU,EAAE,IAAI;QAChB,KAAK,EAAE,IAAI;QACX,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;YAC3B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,CAAC,CAAA;YAC/C,IAAI,KAAK;gBAAE,OAAO,KAAK,CAAA;YACvB,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ;gBAAE,OAAO,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,oBAAoB,CAAC,CAAC,CAAA;YAC5F,OAAO,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;gBACzB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;oBACzC,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC;oBAC7B,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC;iBAC9B,CAAC,CAAA;gBACF,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM;oBAAE,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC,CAAA;gBACzE,IAAI,CAAC,CAAC,MAAM,WAAW,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;oBAAE,OAAO,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,oBAAoB,CAAC,CAAC,CAAA;gBAC7F,IAAI,CAAC,CAAC,MAAM,WAAW,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;oBAAE,OAAO,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,oBAAoB,CAAC,CAAC,CAAA;gBAC7F,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI;oBAAE,OAAO,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,uBAAuB,CAAC,CAAC,CAAA;gBAC3F,wEAAwE;gBACxE,wEAAwE;gBACxE,mCAAmC;gBACnC,IAAI,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,MAAM,KAAK,KAAK;oBAChD,OAAO,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,yBAAyB,CAAC,CAAC,CAAA;gBAC9D,IAAI,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,MAAM,KAAK,KAAK;oBAChD,OAAO,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,yBAAyB,CAAC,CAAC,CAAA;gBAC9D,MAAM,SAAS,GAAG,GAAG,EAAE,CAAA;gBACvB,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,EAAE,CAAC,aAAa,CACvC,UAAU,EACV,EAAE,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,EACrB,EAAE,OAAO,EAAE,IAAI,CAAC,qBAAqB,EAAE,EACvC,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CACzD,CAAA;gBACD,IAAI,CAAC,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO;oBAC5C,OAAO,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,yBAAyB,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;gBAC1F,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAC7E,MAAM,EAAE,CAAC,EAAE,CAAC,cAAc,CAAC,aAAa,EAAE;wBACxC,EAAE,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;wBACpD,MAAM,EAAE,IAAI,CAAC,QAAQ;wBACrB,KAAK,EAAE,IAAI,CAAC,KAAK;qBAClB,CAAC,CAAA;gBACJ,qEAAqE;gBACrE,qEAAqE;gBACrE,sBAAsB;gBACtB,KAAK,MAAM,KAAK,IAAI,CAAC,aAAa,EAAE,kBAAkB,EAAE,mBAAmB,CAAU;oBACnF,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;wBACpE,MAAM,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAA;gBACxE,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,kBAAkB,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC;oBACrF,MAAM,IAAI,GAAG,CACX,MAAM,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,kBAAkB,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CACzF,CAAC,CAAC,CAAC,CAAA;oBACJ,IAAI,IAAI;wBACN,MAAM,EAAE,CAAC,EAAE,CAAC,GAAG,CACb,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAC7F,CAAA;;wBACE,MAAM,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,kBAAkB,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAA;gBACzF,CAAC;gBACD,MAAM,CAAC,YAAY,EAAE,YAAY,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;oBACrD,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,iBAAiB,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAC1D,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,iBAAiB,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;iBAC3D,CAAC,CAAA;gBACF,MAAM,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,CAAA;gBAC5B,MAAM,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,CAAA;gBAC/B,wEAAwE;gBACxE,oEAAoE;gBACpE,IAAI,IAAI,IAAI,OAAO,EAAE,CAAC;oBACpB,MAAM,OAAO,GAAQ,EAAE,CAAA;oBACvB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC;wBAClE,OAAO,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,CAAA;oBACnD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC;wBACpE,OAAO,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAA;oBACrD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC;wBAC1D,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAA;oBAC3C,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,OAAO,CAAC,eAAe;wBAClD,OAAO,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,CAAA;oBACnD,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM;wBAAE,MAAM,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,iBAAiB,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,CAAA;gBAClG,CAAC;gBACD,MAAM,EAAE,CAAC,EAAE,CAAC,MAAM,CAChB,UAAU,EACV,EAAE,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,EACrB;oBACE,MAAM,EAAE,KAAK;oBACb,aAAa,EAAE,MAAM,CAAC,aAAa;oBACnC,YAAY,EAAE,IAAI,CAAC,QAAQ;oBAC3B,QAAQ,EAAG,MAAM,CAAC,QAA0B,IAAI,SAAS;oBACzD,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;oBAC9B,SAAS,EAAE,SAAS;iBACrB,CACF,CAAA;gBACD,MAAM,WAAW,CAAC,EAAE,EAAE;oBACpB,EAAE,EAAE,YAAY,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE;oBAC5E,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;oBAC7B,SAAS,EAAE,QAAQ;oBACnB,IAAI,EAAE,qBAAqB;oBAC3B,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE;oBAC9D,UAAU,EAAE,SAAS;iBACtB,CAAC,CAAA;gBACF,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAA;YACxE,CAAC,CAAC,CAAA;QACJ,CAAC;KACF,CAAC;IAEF,cAAc,EAAE,QAAQ,CAAC;QACvB,KAAK,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE;QACzF,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;QAC3F,OAAO,EAAE;YACP,eAAe;YACf,gBAAgB;YAChB,sBAAsB;YACtB,eAAe;YACf,gBAAgB;YAChB,yBAAyB;YACzB,qBAAqB;YACrB,gBAAgB;YAChB,0BAA0B;SAC3B;QACD,UAAU,EAAE,IAAI;QAChB,KAAK,EAAE,IAAI;QACX,OAAO,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CACrB,cAAc,CAAC,GAAG,EAAE;YAClB,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YACnB,eAAe,EAAE,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC;YAC7C,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC;YAC3C,QAAQ,EAAE,KAAK;YACf,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS;SACrE,CAAC;KACL,CAAC;IAEF,eAAe,EAAE,QAAQ,CAAC;QACxB,KAAK,EAAE;YACL,EAAE,EAAE,IAAI;YACR,eAAe,EAAE,KAAK;YACtB,UAAU,EAAE,MAAM;YAClB,WAAW,EAAE,OAAO;YACpB,cAAc,EAAE,MAAM;SACvB;QACD,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;QAC3F,OAAO,EAAE;YACP,eAAe;YACf,gBAAgB;YAChB,sBAAsB;YACtB,eAAe;YACf,gBAAgB;YAChB,sBAAsB;YACtB,uBAAuB;YACvB,yBAAyB;YACzB,qBAAqB;YACrB,gBAAgB;YAChB,0BAA0B;SAC3B;QACD,UAAU,EAAE,IAAI;QAChB,KAAK,EAAE,IAAI;QACX,OAAO,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CACrB,cAAc,CAAC,GAAG,EAAE;YAClB,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YACnB,eAAe,EAAE,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC;YAC7C,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;YACnC,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS;YACpE,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC;YAC3C,QAAQ,EAAE,MAAM;SACjB,CAAC;KACL,CAAC;IAEF,uBAAuB,EAAE,QAAQ,CAAC;QAChC,KAAK,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE;QAClF,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;QACxB,OAAO,EAAE,CAAC,GAAG,eAAe,CAAC;QAC7B,KAAK,EAAE,IAAI;QACX,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;YAC7B,IAAI,EAAE,MAAM,cAAc,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;SACjE,CAAC;KACH,CAAC;IAEF,iBAAiB,EAAE,QAAQ,CAAC;QAC1B,KAAK,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE;QAC3F,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE;QAClD,OAAO,EAAE;YACP,eAAe;YACf,kBAAkB;YAClB,mBAAmB;YACnB,yBAAyB;YACzB,qBAAqB;YACrB,gBAAgB;SACjB;QACD,UAAU,EAAE,IAAI;QAChB,KAAK,EAAE,IAAI;QACX,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;YAC3B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,CAAC,CAAA;YAC/C,IAAI,KAAK;gBAAE,OAAO,KAAK,CAAA;YACvB,OAAO,cAAc,CAAC,GAAG,EAAE;gBACzB,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnB,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;gBAC3B,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;gBACvB,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;aACpC,CAAC,CAAA;QACJ,CAAC;KACF,CAAC;IAEF,mBAAmB,EAAE,QAAQ,CAAC;QAC5B,KAAK,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE;QAC3C,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;QACvF,OAAO,EAAE;YACP,eAAe;YACf,gBAAgB;YAChB,sBAAsB;YACtB,oBAAoB;YACpB,uBAAuB;YACvB,wBAAwB;YACxB,qBAAqB;YACrB,gBAAgB;SACjB;QACD,UAAU,EAAE,IAAI;QAChB,KAAK,EAAE,IAAI;QACX,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;YAC3B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,CAAC,CAAA;YAC/C,OAAO,KAAK,IAAI,gBAAgB,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAA;QACrF,CAAC;KACF,CAAC;IAEF;;;;OAIG;IACH,cAAc,EAAE,QAAQ,CAAC;QACvB,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE;QAC1E,MAAM,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE;QAC9D,OAAO,EAAE,CAAC,GAAG,eAAe,CAAC;QAC7B,KAAK,EAAE,IAAI;QACX,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;YAC3B,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE;gBACjC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC/C,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;aACvD,CAAC,CAAA;YACF,OAAO,KAAK,CAAC,IAAI;iBACd,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,SAAS,CAAC;iBAC7D,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBACb,EAAE,EAAE,GAAG,CAAC,EAAE;gBACV,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,GAAG,EAAE,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;aAC5F,CAAC,CAAC,CAAA;QACP,CAAC;KACF,CAAC;CACH,CAAA"}
@@ -0,0 +1,3 @@
1
+ import type { FnSpec } from '@ketvietlab/ketjs';
2
+ export declare const configurationFunctions: Record<string, FnSpec>;
3
+ //# sourceMappingURL=configuration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configuration.d.ts","sourceRoot":"","sources":["../../../../../../../packages/ketsuite/src/modules/crm/functions/configuration.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAO,MAAM,mBAAmB,CAAA;AAKpD,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA+UzD,CAAA"}