@feedmepos/mf-connect 0.1.98-beta.8 → 0.1.98-beta.80

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 (167) hide show
  1. package/dist/{App-DsB2o1oB.js → App-DievprEi.js} +853 -683
  2. package/dist/{AuditLogs-BcfgiYnJ.js → AuditLogs-DrdqOhZL.js} +16 -13
  3. package/dist/{Bin-DMr7K8Kj.js → Bin-Ci2k3z77.js} +8 -8
  4. package/dist/Broadcast-CpDMAG1o.js +306 -0
  5. package/dist/CampaignAnalytic-uRyGaLaN.js +1830 -0
  6. package/dist/{CampaignTypeDialog.vue_vue_type_script_setup_true_lang-CwGoEBsW.js → CampaignTypeDialog.vue_vue_type_script_setup_true_lang-DtGe2Og1.js} +8 -5
  7. package/dist/Card-tb98Kyr-.js +1086 -0
  8. package/dist/{Collections-B0uGC2FE.js → Collections-P1S5WjnJ.js} +14 -13
  9. package/dist/Credit-DwK7JYf-.js +286 -0
  10. package/dist/DateRangeChip.vue_vue_type_script_setup_true_lang-Cyk0iIsd.js +53 -0
  11. package/dist/EditCampaignSheet.vue_vue_type_script_setup_true_lang-8r29jKh9.js +4432 -0
  12. package/dist/{EffectSheet.vue_vue_type_style_index_0_lang-DJLxGk7W.js → EffectSheet.vue_vue_type_style_index_0_lang-BML_-v8I.js} +36 -36
  13. package/dist/Experience-BejtRlOj.js +288 -0
  14. package/dist/{FileSaver.min-BlA0oZEC.js → FileSaver.min-C-hmBaHm.js} +1 -1
  15. package/dist/FilterChip.vue_vue_type_script_setup_true_lang-3bH-tZAm.js +138 -0
  16. package/dist/Game-n8qL896g.js +356 -0
  17. package/dist/GiftCardSetup-Bgsfcu7N.js +736 -0
  18. package/dist/GoalPickerPanel.vue_vue_type_script_setup_true_lang-CzL68PPP.js +424 -0
  19. package/dist/Goals-BB8LJlq3.js +247 -0
  20. package/dist/{Grab-DmmwrGzk.js → Grab-COq3Ujst.js} +33 -32
  21. package/dist/{ImageInput.vue_vue_type_script_setup_true_lang-DNtLW0yQ.js → ImageInput.vue_vue_type_script_setup_true_lang-BmLclEyi.js} +1 -1
  22. package/dist/{Index-m7l4insz.js → Index-BdkIinaE.js} +10 -10
  23. package/dist/{LocationPicker.vue_vue_type_script_setup_true_lang-B9sJ-M20.js → LocationPicker.vue_vue_type_script_setup_true_lang-DsWv3DVb.js} +1 -1
  24. package/dist/{LottieAnimation.vue_vue_type_script_setup_true_lang-Dsg2sWjF.js → LottieAnimation.vue_vue_type_script_setup_true_lang-DvOzGF8c.js} +1 -1
  25. package/dist/LoyaltyDashboard-D4Jtpw0n.js +2911 -0
  26. package/dist/MainLayout-Ca-Xm3eZ.js +143 -0
  27. package/dist/{Marketing-C9pSIdBU.js → Marketing-Cpe4s7NZ.js} +7 -6
  28. package/dist/{MarketingMaterialEdit-BEF2T9LR.js → MarketingMaterialEdit-nTeS9VVx.js} +15 -14
  29. package/dist/Member-DgGZ4Cdg.js +654 -0
  30. package/dist/MemberDetailSheet.vue_vue_type_script_setup_true_lang-_O3B-FIA.js +1281 -0
  31. package/dist/MemberImportHistory-rdlbDVWU.js +187 -0
  32. package/dist/MemberList-BC4aRJTt.js +334 -0
  33. package/dist/{MemberTransactions-CAut1TQb.js → MemberTransactions-BFfdTttp.js} +1 -1
  34. package/dist/{MessageInput.vue_vue_type_script_setup_true_lang-1AuHixPC.js → MessageInput.vue_vue_type_script_setup_true_lang-DXajAQy9.js} +5928 -5644
  35. package/dist/MetricInfoTooltip.vue_vue_type_script_setup_true_lang-8xVDzdO3.js +40 -0
  36. package/dist/Mission-BWCNKTjU.js +363 -0
  37. package/dist/Overview--Q7vzhNK.js +1316 -0
  38. package/dist/{Overview-DOJj4XvO.js → Overview-i02Wnyjn.js} +23 -20
  39. package/dist/Point-CiWxqny5.js +297 -0
  40. package/dist/Promotion-B0G9qfBm.js +426 -0
  41. package/dist/{Queue-55G2gtP5.js → Queue-YfwgYmzH.js} +16 -13
  42. package/dist/{Record-DNPI02c6.js → Record-CCuwrPKW.js} +9 -9
  43. package/dist/Review-ymsfdh7Q.js +45 -0
  44. package/dist/ReviewFacebookCallback-DyDExWvP.js +238 -0
  45. package/dist/ReviewGoogleCallback-DNyg3n2S.js +213 -0
  46. package/dist/{Reward-CnP8R2pS.js → Reward-BKIb0ezH.js} +28 -28
  47. package/dist/{RewardGroup.vue_vue_type_script_setup_true_lang-BN71h9IK.js → RewardGroup.vue_vue_type_script_setup_true_lang-DPaaNgpr.js} +26 -23
  48. package/dist/{RuleGroup.vue_vue_type_script_setup_true_lang-CtB9Ls5-.js → RuleGroup.vue_vue_type_script_setup_true_lang-BLFLybFn.js} +198 -186
  49. package/dist/{Segment-CxiQnnyj.js → Segment-D5_pp7fh.js} +278 -276
  50. package/dist/{SendCollectionSheet.vue_vue_type_script_setup_true_lang-B1vj5f7T.js → SendCollectionSheet.vue_vue_type_script_setup_true_lang-BLLjIA-D.js} +45 -42
  51. package/dist/{SendVoucherSheet.vue_vue_type_script_setup_true_lang-cWx0G3nM.js → SendVoucherSheet.vue_vue_type_script_setup_true_lang-BRIcZwnU.js} +4 -4
  52. package/dist/Setting-CD78gIMU.js +574 -0
  53. package/dist/{SettingAdvertisements-Vt7w1WN3.js → SettingAdvertisements-C2AIT4s4.js} +12 -12
  54. package/dist/Settings-DI_tryQV.js +230 -0
  55. package/dist/Store-BV2JTRNZ.js +2615 -0
  56. package/dist/{StoreRewards-DILeipMG.js → StoreRewards-Bk55YXyO.js} +15 -15
  57. package/dist/StoreTransactions.vue_vue_type_script_setup_true_lang-BZZ1fqwg.js +1331 -0
  58. package/dist/{TargetLocationInput.vue_vue_type_script_setup_true_lang-C7lVeybl.js → TargetLocationInput.vue_vue_type_script_setup_true_lang-BrEzWVrH.js} +2 -2
  59. package/dist/{Tier-BAZ1xuKL.js → Tier-CO2K30Ew.js} +2576 -757
  60. package/dist/{Title-CcNAt47f.js → Title-qProQh3T.js} +41 -37
  61. package/dist/Transaction-qL5L-fE_.js +45 -0
  62. package/dist/{UserRuleGroup.vue_vue_type_script_setup_true_lang-hUjQVZ_U.js → UserRuleGroup.vue_vue_type_script_setup_true_lang-Co1BPScS.js} +26 -26
  63. package/dist/Voucher-VFD1LY9Y.js +837 -0
  64. package/dist/{VoucherEditor.vue_vue_type_script_setup_true_lang-CTQDxc5l.js → VoucherEditor.vue_vue_type_script_setup_true_lang-9QyTl7iq.js} +118 -124
  65. package/dist/WhatsappAccount-CxSGqm7H.js +325 -0
  66. package/dist/WhatsappAccountStatusLabel.vue_vue_type_script_setup_true_lang-D8L6izf0.js +96 -0
  67. package/dist/WhatsappBot-C4Oz7Xwv.js +441 -0
  68. package/dist/WhatsappBotSettings-CKqaWzwE.js +136 -0
  69. package/dist/{ZodTextField.vue_vue_type_script_setup_true_lang-DuRKA4cj.js → ZodTextField.vue_vue_type_script_setup_true_lang-Bcsi94dw.js} +2 -2
  70. package/dist/{app-Z-UKRG5V.js → app-BEYzXWZO.js} +50954 -42517
  71. package/dist/app.js +1 -1
  72. package/dist/base.export-S_82Elmg.js +75 -0
  73. package/dist/browser-BSAOEeIM.js +1478 -0
  74. package/dist/{business-C7EF6cKC.js → business-DH7djUl8.js} +5 -5
  75. package/dist/campaign-DlHDgoFX.js +100 -0
  76. package/dist/campaign-k_WHxsOR.js +400 -0
  77. package/dist/{campaign.enum-BNN2gLFY.js → campaign.enum-Dx-Zo68Q.js} +1 -1
  78. package/dist/{campaign.fn-Bd34dVnx.js → campaign.fn-B-4JRzft.js} +67 -67
  79. package/dist/{collectible.enum-DO9HdJGH.js → collectible.enum-Liy2wH3s.js} +1 -1
  80. package/dist/collection.fn-zQwWDzZT.js +26 -0
  81. package/dist/currency-CQVHXBFe.js +7 -0
  82. package/dist/{duplicateCampaign-2ODeDw3a.js → duplicateCampaign-YTXMbJTj.js} +11 -11
  83. package/dist/{effect-BcB8IlTI.js → effect-CQkVLHWi.js} +1 -1
  84. package/dist/{email-addresses-BcTeU4Sh.js → email-addresses-BIoVbPGC.js} +209 -201
  85. package/dist/google-C3S8u0mT.js +4 -0
  86. package/dist/{helper-BSgrCJRv.js → helper-BCkTvF4m.js} +1 -1
  87. package/dist/{index-CoHWpylO.js → index-B-bQnb0_.js} +2115 -2557
  88. package/dist/index-BAJOC43K.js +14550 -0
  89. package/dist/{index-HXiYGO4_.js → index-BFIHEBnX.js} +6343 -7693
  90. package/dist/{index-VlFWaBrg.js → index-BJIQe3QJ.js} +1 -1
  91. package/dist/{index-BpI-BI4H.js → index-BJkRTH5T.js} +4 -4
  92. package/dist/index-BOJogkKQ.js +172 -0
  93. package/dist/{index-BoYEqLif.js → index-BRPajAkE.js} +1517 -263
  94. package/dist/{index-CsoBDon4.js → index-BTkxgos0.js} +1590 -1523
  95. package/dist/index-BUP4aHq8.js +32438 -0
  96. package/dist/index-BYvnqARr.js +902 -0
  97. package/dist/{index-hlyg-wxV.js → index-Bonq819P.js} +1 -1
  98. package/dist/{index-CIBPhxlC.js → index-C6mOI2Pp.js} +105 -123
  99. package/dist/{index-Bf6jNZit.js → index-CDIe15AY.js} +24 -9
  100. package/dist/index-CTrcdIkt.js +137 -0
  101. package/dist/index-C_H8jFYf.js +2743 -0
  102. package/dist/index-CpnchVe1.js +74 -0
  103. package/dist/index-D5AR7A5e.js +151 -0
  104. package/dist/index-D7-Q86HI.js +54 -0
  105. package/dist/index-DdOj8Hew.js +53 -0
  106. package/dist/{index-iMPtFp54.js → index-Dvqguh2B.js} +10 -9
  107. package/dist/{index-Bm0QPucw.js → index-hAKRfE-4.js} +14 -14
  108. package/dist/index-o2Ga_qaX.js +39 -0
  109. package/dist/{index.esm2017-CM7OnEyP.js → index.esm2017-D0fhMMPG.js} +128 -128
  110. package/dist/{loading-CSXr0Yqz.js → loading-C686AMVG.js} +1 -1
  111. package/dist/{lodash-Bh7XKI-R.js → lodash-CANlWUWW.js} +1 -1
  112. package/dist/member-import-UzJ6ByIS.js +188 -0
  113. package/dist/membership-DCVzFaFy.js +274 -0
  114. package/dist/{money-BZIST_m9.js → money-DuazwoX7.js} +1 -1
  115. package/dist/{number-DXLR2w95.js → number-B2HFiV0g.js} +1 -1
  116. package/dist/objectid-Bq-oVMdP.js +145 -0
  117. package/dist/onboarding-BxvNxz-9.js +131 -0
  118. package/dist/onboardingSetup-CcvKmyx8.js +17 -0
  119. package/dist/{plugins-4FlbwoES.js → plugins-C39O5j42.js} +13 -12
  120. package/dist/remy-Qz_pNsUS.js +13 -0
  121. package/dist/{reward-DUbl79bZ.js → reward-HYt-2nxt.js} +1 -1
  122. package/dist/{rule-BQUoZ4l_.js → rule-3xNIYM7z.js} +337 -275
  123. package/dist/style.css +1 -1
  124. package/dist/{template-BoiSG7G7.js → template-D37Z_b0m.js} +6 -6
  125. package/dist/timezone-JwnQgpaU.js +20 -0
  126. package/dist/transaction.fn-C5vswLI_.js +71 -0
  127. package/dist/{trigger-D5g5m6tT.js → trigger-Bc6s2cvq.js} +17 -17
  128. package/dist/useMarketingMaterialActions-DMGyAXcy.js +96 -0
  129. package/dist/{usePagination-DHePBBoR.js → usePagination-DLOOwiiY.js} +1 -1
  130. package/dist/{user-C_ToSo-g.js → user-CTIGugVF.js} +1 -1
  131. package/dist/{vue-i18n-BcYh6_51.js → vue-i18n-Dpic36zz.js} +287 -287
  132. package/dist/{xlsx-h4G1C-xj.js → xlsx-CT9_1SFr.js} +786 -786
  133. package/dist/{zod-CgigfJar.js → zod-CGVrMcDl.js} +1 -1
  134. package/package.json +10 -6
  135. package/dist/Broadcast-C9akM-TB.js +0 -266
  136. package/dist/Card-DRkIYs0M.js +0 -910
  137. package/dist/Credit-V5YA_hGx.js +0 -260
  138. package/dist/DateRangeChip.vue_vue_type_script_setup_true_lang-eIoPtgO5.js +0 -58
  139. package/dist/EditCampaignSheet.vue_vue_type_script_setup_true_lang-CYQMXARx.js +0 -3377
  140. package/dist/Experience-WTWy5yY6.js +0 -259
  141. package/dist/FilterChip.vue_vue_type_script_setup_true_lang-DaU-9GzO.js +0 -129
  142. package/dist/Game-BwOfTCW5.js +0 -330
  143. package/dist/LoyaltyDashboard-CJdhYiea.js +0 -1082
  144. package/dist/MainLayout-Du5kZOtA.js +0 -41
  145. package/dist/Member-DUV_vbPI.js +0 -280
  146. package/dist/MemberList-Ye4nOk-i.js +0 -1601
  147. package/dist/Mission-BBmCGpt8.js +0 -334
  148. package/dist/Point-Bzg6hi6o.js +0 -262
  149. package/dist/Promotion-BMXIp_ef.js +0 -397
  150. package/dist/Review-CYNPPxYU.js +0 -1141
  151. package/dist/ReviewFacebookCallback-0SUkKAaC.js +0 -243
  152. package/dist/ReviewGoogleCallback-BZEzx68n.js +0 -208
  153. package/dist/SelectItems.vue_vue_type_script_setup_true_lang-C4vohf6c.js +0 -181
  154. package/dist/Setting-jHAjccod.js +0 -2047
  155. package/dist/Store-Cu-hKmVa.js +0 -1996
  156. package/dist/StoreTransactions.vue_vue_type_script_setup_true_lang-CGz6CTWA.js +0 -1130
  157. package/dist/Transaction-D7DO3dKQ.js +0 -39
  158. package/dist/Voucher-Cq-n1CaC.js +0 -421
  159. package/dist/campaign--MjoY1Mn.js +0 -219
  160. package/dist/campaign-DHBuP4UA.js +0 -277
  161. package/dist/export-CjB7qxZ9.js +0 -97
  162. package/dist/index-BIAjmMga.js +0 -85
  163. package/dist/index-Bv4MBLQ5.js +0 -52
  164. package/dist/index-hbyCVNa7.js +0 -30289
  165. package/dist/membership-CfredTm3.js +0 -255
  166. package/dist/objectid-Dg4ZodlT.js +0 -145
  167. package/dist/useMarketingMaterialActions-B-Jlw2Z9.js +0 -107
@@ -0,0 +1,902 @@
1
+ import { z as e } from "./index-C_H8jFYf.js";
2
+ import { F as t, b as _, m as g, d as X } from "./index-BFIHEBnX.js";
3
+ import { F as M } from "./campaign.enum-Dx-Zo68Q.js";
4
+ import { f as T, F as L, g as c, i as ee, j as O, k as u, m as x, e as te } from "./index-BTkxgos0.js";
5
+ import { u as P, s as S, t as ne, v as oe, w as ie } from "./index-B-bQnb0_.js";
6
+ import { c as p, f as ae } from "./index-BAJOC43K.js";
7
+ e.object({
8
+ location: t,
9
+ memberId: t,
10
+ nettTotal: _,
11
+ remark: e.string().optional()
12
+ });
13
+ const le = e.enum(["COUNTER", "POS"]);
14
+ e.object({
15
+ id: e.string(),
16
+ userId: e.string(),
17
+ name: e.string().nullish(),
18
+ birthday: e.string().nullish(),
19
+ phoneNumber: e.string().nullish(),
20
+ balance: e.number().nullish(),
21
+ level: e.number().nullish(),
22
+ mostPurchasedItems: e.array(e.string()).nullish()
23
+ });
24
+ const se = {
25
+ collectionName: "Bills"
26
+ }, j = e.object({
27
+ _id: e.string(),
28
+ items: e.record(e.string(), e.number()).nullish(),
29
+ // business: z.string(),
30
+ // adjustments: z.record(FdoBillAdjustment),
31
+ // refundedFrom: z.string().nullish(),
32
+ user: e.string().nullish(),
33
+ memberid: e.string().nullish(),
34
+ // roundToNearest: z.number().nullish(),
35
+ nettTotal: _,
36
+ adjustedTotal: _.optional(),
37
+ // activeItems: z.array(z.string()),
38
+ remark: e.string().nullish(),
39
+ createdAt: e.coerce.date(),
40
+ completedAt: e.coerce.date(),
41
+ refunded: e.boolean().nullish(),
42
+ refundRecord: e.array(e.string()).nullish(),
43
+ location: e.string(),
44
+ channel: le.optional()
45
+ }).transform((i) => ({
46
+ ...i,
47
+ createdTime: i.createdAt,
48
+ completedTime: i.completedAt,
49
+ get amount() {
50
+ return i.nettTotal.amount / 10 ** i.nettTotal.precision;
51
+ },
52
+ get adjustmentAmount() {
53
+ return i.adjustedTotal ? i.adjustedTotal.amount / 10 ** i.adjustedTotal.precision : void 0;
54
+ }
55
+ })).describe(g.describe(se)), re = e.object({
56
+ _id: e.string(),
57
+ rating: e.coerce.number(),
58
+ user: e.string().optional(),
59
+ restaurant: e.string(),
60
+ message: e.string(),
61
+ submittedAt: e.coerce.date()
62
+ }), o = e.enum([
63
+ "SIMPLE_CLAIM",
64
+ "LINK_CLAIM",
65
+ "BILL_COMPLETED",
66
+ "BILL_REFUNDED",
67
+ "SCHEDULE",
68
+ "BIRTHDAY",
69
+ "FEEDBACK",
70
+ "ENTER_SEGMENT",
71
+ "MEMBERSHIP_JOINED",
72
+ "TIER_UPGRADED",
73
+ "MAKING_ORDER",
74
+ "ISSUE_REWARD",
75
+ "MEMBER_REWARD",
76
+ "GAME_COMPLETED",
77
+ "PAGINATE_SCHEDULE",
78
+ "REFERRAL_ADDED",
79
+ "MEMBER_IMPORTED",
80
+ "SEGMENTATION_IMPORTED"
81
+ ]), Ze = o.extract([
82
+ "BILL_COMPLETED",
83
+ "FEEDBACK",
84
+ "GAME_COMPLETED",
85
+ "MAKING_ORDER",
86
+ "MEMBERSHIP_JOINED",
87
+ "SCHEDULE",
88
+ "SIMPLE_CLAIM",
89
+ "TIER_UPGRADED",
90
+ "ISSUE_REWARD"
91
+ ]);
92
+ e.enum(["START_OF", "BEFORE"]);
93
+ e.enum(["WEEK", "MONTH"]);
94
+ const de = e.enum([
95
+ "WAITING",
96
+ "ACTIVE",
97
+ "COMPLETED",
98
+ "FAILED"
99
+ ]), a = e.object({
100
+ // type: F_EVENT_TYPE,
101
+ rule: T.optional()
102
+ }), ce = a.extend({
103
+ type: e.literal(o.enum.BILL_COMPLETED)
104
+ }), me = a.extend({
105
+ type: e.literal(o.enum.FEEDBACK)
106
+ }), ue = a.extend({
107
+ type: e.literal(o.enum.SIMPLE_CLAIM)
108
+ });
109
+ a.extend({
110
+ type: e.literal(o.enum.ENTER_SEGMENT),
111
+ segment: e.string()
112
+ });
113
+ const pe = a.extend({
114
+ type: e.literal(o.enum.MEMBER_REWARD)
115
+ }), Ee = a.extend({
116
+ type: e.literal(o.enum.SCHEDULE)
117
+ // option: FdoCronRule,
118
+ }), ge = a.extend({
119
+ type: e.literal(o.enum.MEMBERSHIP_JOINED)
120
+ }), be = a.extend({
121
+ type: e.literal(o.enum.TIER_UPGRADED)
122
+ }), ye = a.extend({
123
+ type: e.literal(o.enum.MAKING_ORDER)
124
+ }), Ce = a.extend({
125
+ type: e.literal(o.enum.ISSUE_REWARD)
126
+ }), Re = a.extend({
127
+ type: e.literal(o.enum.GAME_COMPLETED)
128
+ });
129
+ a.extend({
130
+ type: e.literal(o.enum.REFERRAL_ADDED)
131
+ });
132
+ a.extend({
133
+ type: e.literal(o.enum.MEMBER_IMPORTED)
134
+ });
135
+ const Ie = e.discriminatedUnion("type", [
136
+ ue,
137
+ ce,
138
+ Ee,
139
+ me,
140
+ ge,
141
+ be,
142
+ ye,
143
+ Ce,
144
+ pe,
145
+ Re
146
+ ]);
147
+ e.object({
148
+ _id: t,
149
+ type: o,
150
+ ref: e.string(),
151
+ status: de.optional(),
152
+ context: e.record(e.string(), e.any()).optional(),
153
+ failedReason: e.any().optional()
154
+ }).describe(JSON.stringify({ collectionName: "EventLogs" }));
155
+ const l = e.object({
156
+ type: o,
157
+ context: e.any(),
158
+ businessIds: e.array(t).optional(),
159
+ campaignIds: e.array(t).optional(),
160
+ slackWebhookUrl: e.string().optional(),
161
+ emittedAt: e.coerce.date().default(/* @__PURE__ */ new Date())
162
+ }), _e = l.extend({
163
+ type: e.literal(o.enum.BILL_COMPLETED),
164
+ context: e.object({
165
+ bill: j,
166
+ rawBill: e.any()
167
+ })
168
+ }), he = l.extend({
169
+ type: e.literal(o.enum.BILL_REFUNDED),
170
+ context: e.object({
171
+ bill: j,
172
+ rawBill: e.any()
173
+ })
174
+ }), fe = l.extend({
175
+ type: e.literal(o.enum.SCHEDULE),
176
+ context: e.object({
177
+ triggeredAt: e.coerce.date()
178
+ })
179
+ }), Fe = l.extend({
180
+ type: e.literal(o.enum.PAGINATE_SCHEDULE),
181
+ context: e.object({
182
+ triggeredAt: e.coerce.date(),
183
+ business: t,
184
+ skip: e.coerce.number(),
185
+ limit: e.coerce.number()
186
+ })
187
+ }), De = l.extend({
188
+ type: e.literal(o.enum.FEEDBACK),
189
+ context: e.object({
190
+ feedback: re
191
+ })
192
+ }), Ae = l.extend({
193
+ type: e.literal(o.enum.MEMBERSHIP_JOINED),
194
+ context: e.object({
195
+ user: P
196
+ })
197
+ }), Me = l.extend({
198
+ type: e.literal(o.enum.TIER_UPGRADED),
199
+ context: e.object({
200
+ transaction: S
201
+ })
202
+ }), Te = l.extend({
203
+ type: e.literal(o.enum.ISSUE_REWARD),
204
+ context: e.object({
205
+ transaction: S,
206
+ collection: ne
207
+ })
208
+ }), Le = l.extend({
209
+ type: e.literal(o.enum.REFERRAL_ADDED),
210
+ context: e.object({
211
+ user: P
212
+ })
213
+ }), N = e.object({
214
+ ref: t,
215
+ originalName: e.string(),
216
+ mimeType: e.string(),
217
+ size: e.number(),
218
+ fbFilePath: e.string(),
219
+ isFbFileDeleted: e.boolean().nullish()
220
+ }), Oe = e.object({
221
+ resetCollectionExpiryBalance: e.boolean().nullish()
222
+ }), xe = l.extend({
223
+ type: e.literal(o.enum.MEMBER_IMPORTED),
224
+ context: e.object({
225
+ business: e.string(),
226
+ file: N,
227
+ config: Oe.optional()
228
+ })
229
+ }), Pe = l.extend({
230
+ type: e.literal(o.enum.SEGMENTATION_IMPORTED),
231
+ context: e.object({
232
+ business: e.string(),
233
+ segment: e.string(),
234
+ file: N
235
+ })
236
+ });
237
+ e.discriminatedUnion("type", [
238
+ _e,
239
+ he,
240
+ fe,
241
+ De,
242
+ Ae,
243
+ Me,
244
+ Te,
245
+ Fe,
246
+ Le,
247
+ xe,
248
+ Pe
249
+ ]);
250
+ const Se = {
251
+ collectionName: "Locations",
252
+ transform: {
253
+ _id: "oid",
254
+ business: "oid"
255
+ }
256
+ }, B = e.object({
257
+ _id: t,
258
+ business: t,
259
+ name: e.string(),
260
+ code: e.string().nullish(),
261
+ otp: e.string().nullish(),
262
+ otpExpiredAt: e.coerce.date().nullish(),
263
+ apiToken: e.string().nullish(),
264
+ customAttribute: e.record(e.any()).nullish()
265
+ }).describe(g.describe(Se));
266
+ e.object({
267
+ _id: t,
268
+ name: e.string(),
269
+ location: t,
270
+ os: e.string(),
271
+ apiToken: e.string().nullish()
272
+ }).describe(
273
+ g.describe({
274
+ collectionName: "LocationDevices",
275
+ transform: {
276
+ _id: "oid",
277
+ location: "oid"
278
+ }
279
+ })
280
+ );
281
+ e.object({
282
+ _id: e.string(),
283
+ name: e.string()
284
+ });
285
+ const h = e.enum(["NO_REWARD", "VOUCHER", "LOYALTY"]), f = e.number().min(0, "Weight need to be at least 0"), F = e.number().int("Must be integer").min(0, "Threshold need to be at least 0"), G = e.object({
286
+ type: e.literal(h.enum.NO_REWARD),
287
+ collectible: e.null(),
288
+ weight: f
289
+ }), U = e.object({
290
+ type: e.literal(h.enum.VOUCHER),
291
+ collectible: t,
292
+ collectibleConfig: e.lazy(() => L._def.right.options[0]),
293
+ earningOption: e.lazy(() => c)
294
+ }), y = e.object({
295
+ type: e.literal(h.enum.LOYALTY),
296
+ collectible: t,
297
+ earningOption: e.lazy(() => c),
298
+ validityOption: e.lazy(() => ee)
299
+ }), w = U.extend({
300
+ weight: f
301
+ }), v = y.extend({
302
+ weight: e.number().min(0, "Weight need to be at least 0")
303
+ }), Qe = y.extend({
304
+ validityOption: O,
305
+ weight: f
306
+ }), je = e.discriminatedUnion("type", [
307
+ w,
308
+ v,
309
+ G
310
+ ]), D = e.discriminatedUnion("type", [
311
+ w.extend({
312
+ collectible: t.nullish(),
313
+ business: t.nullish()
314
+ }),
315
+ v.extend({
316
+ collectible: t.nullish(),
317
+ business: t.nullish()
318
+ }),
319
+ G
320
+ ]), z = U.extend({
321
+ threshold: F
322
+ }), H = y.extend({
323
+ threshold: F
324
+ }), $e = y.extend({
325
+ validityOption: O,
326
+ threshold: F
327
+ }), k = e.discriminatedUnion("type", [
328
+ z,
329
+ H
330
+ ]), Ne = e.discriminatedUnion("type", [
331
+ z.extend({
332
+ collectible: t.nullish(),
333
+ business: t.nullish()
334
+ }),
335
+ H.extend({
336
+ collectible: t.nullish(),
337
+ collectibleConfig: L.nullish(),
338
+ business: t.nullish()
339
+ })
340
+ ]), Be = e.enum(["PROGRESSIVE", "STAMP"]), Ge = e.object({
341
+ type: Be,
342
+ end: e.number().int().min(0, "Threshold need to be at least 1"),
343
+ rewards: e.array(e.lazy(() => k)).nullish()
344
+ }).superRefine((i, d) => {
345
+ i.type == "STAMP" && i.end > 40 && (d.addIssue({
346
+ code: "custom",
347
+ path: [],
348
+ message: "Stamp mission can have at most 40 threshold"
349
+ }), d.addIssue({
350
+ code: "custom",
351
+ path: ["end"],
352
+ message: "Stamp mission can have at most 40 threshold"
353
+ }));
354
+ }), C = e.object({
355
+ totalCount: e.number().optional(),
356
+ totalCountPerUser: e.number().optional()
357
+ }), m = e.object({
358
+ periods: e.array(
359
+ e.object({
360
+ startTime: e.string(),
361
+ endTime: e.string()
362
+ })
363
+ )
364
+ }), R = e.object({
365
+ startTime: e.string(),
366
+ // ISO 8601 date string
367
+ endTime: e.string(),
368
+ // ISO 8601 date string
369
+ eaterType: e.enum(["all", "new", "existing"]),
370
+ minBasketAmount: e.number().optional(),
371
+ bundleQuantity: e.number().optional(),
372
+ workingHour: e.object({
373
+ mon: m.optional(),
374
+ tue: m.optional(),
375
+ wed: m.optional(),
376
+ thu: m.optional(),
377
+ fri: m.optional(),
378
+ sat: m.optional(),
379
+ sun: m.optional()
380
+ }).optional()
381
+ }), Ue = e.object({
382
+ type: e.enum(["items", "category", "order"]),
383
+ objectIDs: e.array(e.string()).optional()
384
+ }), I = e.object({
385
+ type: e.enum([
386
+ "net",
387
+ // dollar off
388
+ "percentage",
389
+ // percentage off
390
+ "bundleSameFixPrice",
391
+ // bundle fix price (same item)
392
+ "bundleDiffFixPrice",
393
+ // bundle fix price (different items)
394
+ "bundleSameNet",
395
+ // bundle dollar off (same item)
396
+ "bundleDiffNet",
397
+ // bundle dollar off (different items)
398
+ "bundleSamePercentage",
399
+ // bundle percentage off (same item)
400
+ "bundleDiffPercentage",
401
+ // bundle percentage off (different items)
402
+ "delivery",
403
+ // delivery fee off
404
+ "freeItem"
405
+ // free item
406
+ ]),
407
+ value: e.number(),
408
+ cap: e.number().optional(),
409
+ // for percentage off campaigns
410
+ scope: Ue
411
+ });
412
+ e.object({
413
+ merchantID: e.string().optional(),
414
+ name: e.string().max(256),
415
+ quotas: C.optional(),
416
+ conditions: R,
417
+ discount: I,
418
+ customTag: e.string().max(22).optional()
419
+ });
420
+ e.object({
421
+ id: e.string()
422
+ });
423
+ e.object({
424
+ merchantID: e.string().optional(),
425
+ name: e.string().max(256).optional(),
426
+ quotas: C.optional(),
427
+ conditions: R.optional(),
428
+ discount: I.optional(),
429
+ customTag: e.string().max(22).optional()
430
+ });
431
+ const A = e.object({
432
+ id: e.string(),
433
+ merchantID: e.string(),
434
+ name: e.string(),
435
+ quotas: C.optional(),
436
+ conditions: R,
437
+ discount: I,
438
+ customTag: e.string().optional(),
439
+ status: e.enum(["ongoing", "upcoming", "expired", "cancelled"]).optional(),
440
+ createdAt: e.string().optional(),
441
+ updatedAt: e.string().optional()
442
+ });
443
+ e.object({
444
+ ongoing: e.array(A),
445
+ upcoming: e.array(A)
446
+ });
447
+ e.object({
448
+ merchantID: e.string()
449
+ });
450
+ e.object({
451
+ target: e.string(),
452
+ reason: e.string(),
453
+ message: e.string()
454
+ });
455
+ const we = {
456
+ collectionName: "Groups",
457
+ transform: {
458
+ _id: "oid",
459
+ business: "oid"
460
+ },
461
+ lookups: {
462
+ business: {
463
+ fromCollection: "Businesses",
464
+ as: "pf_business"
465
+ },
466
+ pf_campaigns: {
467
+ fromCollection: "Campaigns",
468
+ as: "pf_campaigns",
469
+ localField: "_id",
470
+ foreignField: "group"
471
+ }
472
+ }
473
+ }, Xe = e.object({
474
+ _id: t,
475
+ name: e.string().min(1).max(300),
476
+ business: t,
477
+ pf_campaigns: e.array(e.any()).optional()
478
+ }).describe(g.describe(we)), ve = e.object({
479
+ from: e.string().email().nullish(),
480
+ name: e.string().min(1).max(50).nullish()
481
+ }), ze = e.object({
482
+ _id: e.string(),
483
+ url: e.string(),
484
+ targetLocation: e.array(t).nullish(),
485
+ // null/empty = all locations
486
+ order: e.number().optional()
487
+ }), W = e.object({
488
+ type: e.literal(M.enum.MEMBERSHIP),
489
+ business: t,
490
+ name: e.string().min(1).max(50),
491
+ image: e.string().nullish(),
492
+ url: e.string().nullish(),
493
+ tiers: e.array(e.lazy(() => oe)),
494
+ titles: e.array(t),
495
+ tierCycleEnable: e.boolean().optional(),
496
+ tierCycle: e.lazy(() => T).nullish(),
497
+ tierRules: e.array(e.lazy(() => ie)).nullish(),
498
+ migrated: e.boolean().optional(),
499
+ welcomeMessage: p.optional(),
500
+ advertisements: e.union([e.array(e.string()), e.array(ze)]).optional(),
501
+ cardEnable: e.boolean().optional(),
502
+ autoRevertReward: e.boolean().optional(),
503
+ design: e.array(
504
+ e.object({
505
+ _id: t,
506
+ image: e.string()
507
+ })
508
+ ).optional(),
509
+ targetLocation: e.array(t).nullish(),
510
+ brand: e.string().nullish(),
511
+ email: ve.nullish(),
512
+ freeCreditAsDiscount: e.boolean().optional(),
513
+ pf_title: e.array(e.lazy(() => u)).optional(),
514
+ pf_targetLocation: e.array(e.lazy(() => B)).optional(),
515
+ allowedPhoneCountries: e.union([e.array(e.string().regex(/^\+\d{1,4}$/)), e.null()]).optional(),
516
+ // new structure
517
+ group: e.string().nullish(),
518
+ templateId: t.nullish()
519
+ }), n = M.exclude(["MEMBERSHIP"]), s = e.object({
520
+ _id: t.nullish(),
521
+ type: n,
522
+ // common information
523
+ business: t,
524
+ name: e.string().min(1).max(50),
525
+ image: e.string().nullish(),
526
+ description: e.string().max(500).nullish(),
527
+ timeframeOptions: x.superRefine((i, d) => {
528
+ i.start && i.end && i.end < i.start && d.addIssue({
529
+ code: "custom",
530
+ path: [],
531
+ params: {
532
+ i18n: "connectZodCustom:timeframe.end_before_start"
533
+ }
534
+ });
535
+ }).nullish(),
536
+ targetLocation: e.array(t).nullish(),
537
+ event: Ie,
538
+ config: te.nullish(),
539
+ currentReceive: e.coerce.number().optional(),
540
+ // new group structure
541
+ group: t.nullish(),
542
+ templateId: t.nullish(),
543
+ pf_targetLocation: e.array(e.lazy(() => B)).optional(),
544
+ deletedAt: e.coerce.date().optional()
545
+ }), r = {
546
+ [n.enum.VOUCHER]: [
547
+ "BILL_COMPLETED",
548
+ "FEEDBACK",
549
+ "MEMBERSHIP_JOINED",
550
+ "TIER_UPGRADED",
551
+ "SCHEDULE",
552
+ "SIMPLE_CLAIM"
553
+ ],
554
+ [n.enum.PROMOTION]: ["MAKING_ORDER"],
555
+ [n.enum.GRAB]: ["MAKING_ORDER"],
556
+ [n.enum.POINT]: [
557
+ "BILL_COMPLETED",
558
+ "FEEDBACK",
559
+ "MEMBERSHIP_JOINED",
560
+ "TIER_UPGRADED",
561
+ "SCHEDULE"
562
+ ],
563
+ [n.enum.CREDIT]: [
564
+ "BILL_COMPLETED",
565
+ "FEEDBACK",
566
+ "MEMBERSHIP_JOINED",
567
+ "TIER_UPGRADED",
568
+ "SCHEDULE"
569
+ ],
570
+ [n.enum.BROADCAST]: [
571
+ "SCHEDULE",
572
+ "ISSUE_REWARD",
573
+ "FEEDBACK"
574
+ ],
575
+ [n.enum.COIN]: [
576
+ "BILL_COMPLETED",
577
+ "FEEDBACK",
578
+ "MEMBERSHIP_JOINED",
579
+ "TIER_UPGRADED",
580
+ "SCHEDULE"
581
+ ],
582
+ [n.enum.REWARD_POOL]: ["GAME_COMPLETED"],
583
+ [n.enum.GAME]: [
584
+ "BILL_COMPLETED",
585
+ "FEEDBACK",
586
+ "MEMBERSHIP_JOINED",
587
+ "TIER_UPGRADED",
588
+ "SCHEDULE",
589
+ "SIMPLE_CLAIM"
590
+ ],
591
+ [n.enum.MISSION]: [
592
+ "BILL_COMPLETED",
593
+ "FEEDBACK",
594
+ "SCHEDULE"
595
+ ]
596
+ }, K = s.extend({
597
+ type: e.literal(n.enum.VOUCHER),
598
+ // event
599
+ code: e.string().min(0).max(15).regex(/^[A-Za-z0-9\-_.@]*$/, {
600
+ message: "Code can only contain letters, numbers, and - _ . @"
601
+ }).optional(),
602
+ event: a.merge(
603
+ e.object({
604
+ type: e.enum(r[n.enum.VOUCHER])
605
+ })
606
+ ),
607
+ earningOption: c.default({
608
+ amount: 1,
609
+ type: "FIXED"
610
+ }),
611
+ collectible: t,
612
+ hideInApp: e.boolean().optional(),
613
+ notify: e.boolean().optional(),
614
+ notifyMessage: e.lazy(() => p).optional(),
615
+ notifyCampaign: t.nullish(),
616
+ pf_collectible: e.lazy(() => u).optional(),
617
+ pf_notifyCampaign: e.lazy(() => E).optional()
618
+ }), He = e.object({
619
+ gameType: e.string()
620
+ }), V = s.extend({
621
+ type: e.literal(n.enum.PROMOTION),
622
+ // event
623
+ event: a.merge(
624
+ e.object({
625
+ type: e.enum(r[n.enum.PROMOTION])
626
+ })
627
+ ),
628
+ effect: e.custom().superRefine((i, d) => {
629
+ i || d.addIssue({
630
+ code: "custom",
631
+ path: [],
632
+ params: {
633
+ i18n: "connectZodCustom:campaign.effect_required"
634
+ }
635
+ });
636
+ }),
637
+ gameConfig: He.nullish()
638
+ }), J = s.extend({
639
+ type: e.literal(n.enum.POINT),
640
+ // event
641
+ event: a.merge(
642
+ e.object({
643
+ type: e.enum(r[n.enum.POINT])
644
+ })
645
+ ),
646
+ earningOption: c,
647
+ collectible: t,
648
+ notify: e.boolean().optional(),
649
+ notifyMessage: e.lazy(() => p).optional(),
650
+ notifyCampaign: t.nullish(),
651
+ pf_collectible: e.lazy(() => u).optional(),
652
+ pf_notifyCampaign: e.lazy(() => E).optional()
653
+ }), q = s.extend({
654
+ type: e.literal(n.enum.CREDIT),
655
+ // event
656
+ event: a.merge(
657
+ e.object({
658
+ type: e.enum(r[n.enum.CREDIT])
659
+ })
660
+ ),
661
+ earningOption: c,
662
+ collectible: t,
663
+ notify: e.boolean().optional(),
664
+ notifyMessage: e.lazy(() => p).optional(),
665
+ notifyCampaign: t.nullish(),
666
+ pf_collectible: e.lazy(() => u).optional(),
667
+ pf_notifyCampaign: e.lazy(() => E).optional()
668
+ }), E = s.extend({
669
+ type: e.literal(n.enum.BROADCAST),
670
+ // event
671
+ event: a.merge(
672
+ e.object({
673
+ type: e.enum(r[n.enum.BROADCAST])
674
+ })
675
+ ),
676
+ // Optional so a campaign can use only channels the legacy sender cannot
677
+ // route (App Inbox, Push). Campaigns with `delivery` take the multi-channel
678
+ // path, which never reads `message`; it is still mirrored when a routable
679
+ // channel exists (see toLegacyMessage) so an older reader degrades to
680
+ // sending one real message rather than nothing.
681
+ message: p.nullish(),
682
+ delivery: e.lazy(() => ae).nullish(),
683
+ linkedCampaign: t.nullish()
684
+ }), Y = s.extend({
685
+ type: e.literal(n.enum.COIN),
686
+ // event
687
+ event: a.merge(
688
+ e.object({
689
+ type: e.enum(r[n.enum.COIN])
690
+ })
691
+ ),
692
+ earningOption: c,
693
+ collectible: t,
694
+ notify: e.boolean().optional(),
695
+ notifyMessage: e.lazy(() => p).optional(),
696
+ notifyCampaign: t.nullish(),
697
+ pf_collectible: e.lazy(() => u).optional(),
698
+ pf_notifyCampaign: e.lazy(() => E).optional()
699
+ }), b = s.extend({
700
+ type: e.literal(n.enum.REWARD_POOL),
701
+ // event
702
+ event: a.merge(
703
+ e.object({
704
+ type: e.enum(r[n.enum.REWARD_POOL])
705
+ })
706
+ ),
707
+ rewards: e.array(e.lazy(() => je)).min(1, "Requires at least 1 reward")
708
+ }), Z = s.extend({
709
+ type: e.literal(n.enum.GAME),
710
+ // event
711
+ event: a.merge(
712
+ e.object({
713
+ type: e.enum(r[n.enum.GAME])
714
+ })
715
+ ),
716
+ earningOption: c,
717
+ collectible: t,
718
+ game: e.lazy(() => b).optional(),
719
+ pf_collectible: e.lazy(() => u).optional(),
720
+ rewardPool: t.optional()
721
+ }), Q = s.extend({
722
+ type: e.literal(n.enum.MISSION),
723
+ event: a.merge(
724
+ e.object({
725
+ type: e.enum(r[n.enum.MISSION])
726
+ })
727
+ ),
728
+ earningOption: c,
729
+ collectible: t,
730
+ pf_collectible: e.lazy(() => u).optional(),
731
+ mission: e.lazy(() => Ge),
732
+ rewards: e.array(e.lazy(() => k)).min(1, "Requires at least 1 reward")
733
+ }), $ = s.omit({
734
+ timeframeOptions: !0
735
+ }).extend({
736
+ type: e.literal(n.enum.GRAB),
737
+ event: a.merge(
738
+ e.object({
739
+ type: e.enum(r[n.enum.GRAB])
740
+ })
741
+ ),
742
+ business: t,
743
+ name: e.string().min(1).max(50),
744
+ targetLocation: e.array(t).nullish(),
745
+ group: e.string().nullish(),
746
+ templateId: t.nullish(),
747
+ // Grab specific fields
748
+ conditions: R,
749
+ quotas: C,
750
+ discount: I,
751
+ grabCampaignMeta: e.array(
752
+ e.object({
753
+ locationId: e.string(),
754
+ campaignId: e.string()
755
+ })
756
+ ).optional(),
757
+ // Make timeframeOptions required (remove .nullish() from parent)
758
+ timeframeOptions: x.superRefine((i, d) => {
759
+ (!i.start || !i.end) && d.addIssue({
760
+ code: "custom",
761
+ path: [],
762
+ params: {
763
+ i18n: { key: "timeframe.required" }
764
+ }
765
+ }), i.start && i.end && i.end < i.start && d.addIssue({
766
+ code: "custom",
767
+ path: [],
768
+ params: {
769
+ i18n: { key: "timeframe.end_before_start" }
770
+ }
771
+ });
772
+ })
773
+ }), ke = {
774
+ collectionName: "Campaigns",
775
+ transform: {
776
+ _id: "oid",
777
+ business: "oid",
778
+ collectible: "oid",
779
+ templateId: "oid",
780
+ group: "oid",
781
+ notifyCampaign: "oid",
782
+ linkedCampaign: "oid",
783
+ rewardPool: "oid"
784
+ },
785
+ lookups: {
786
+ business: {
787
+ fromCollection: "Businesses",
788
+ as: "pf_business"
789
+ },
790
+ targetLocation: {
791
+ fromCollection: "Locations",
792
+ as: "pf_targetLocation"
793
+ },
794
+ collectible: {
795
+ fromCollection: "CollectibleConfigs",
796
+ as: "pf_collectible"
797
+ },
798
+ titles: {
799
+ fromCollection: "CollectibleConfigs",
800
+ as: "pf_title"
801
+ },
802
+ templateId: {
803
+ fromCollection: "Templates",
804
+ as: "template"
805
+ },
806
+ notifyCampaign: {
807
+ fromCollection: "Campaigns",
808
+ as: "pf_notifyCampaign"
809
+ },
810
+ rewardPool: {
811
+ fromCollection: "Campaigns",
812
+ as: "game"
813
+ }
814
+ }
815
+ }, et = e.object({ _id: t }).and(
816
+ e.discriminatedUnion("type", [
817
+ W,
818
+ K,
819
+ V,
820
+ J,
821
+ q,
822
+ E,
823
+ Y,
824
+ b,
825
+ Z,
826
+ Q,
827
+ $
828
+ ])
829
+ ).describe(g.describe(ke)), tt = e.discriminatedUnion("type", [
830
+ K.extend({
831
+ business: t.nullish()
832
+ }),
833
+ V.extend({
834
+ business: t.nullish()
835
+ }),
836
+ J.extend({
837
+ business: t.nullish()
838
+ }),
839
+ q.extend({
840
+ business: t.nullish()
841
+ }),
842
+ E.extend({
843
+ business: t.nullish()
844
+ }),
845
+ Y.extend({
846
+ business: t.nullish()
847
+ }),
848
+ b.extend({
849
+ rewards: e.array(e.lazy(() => D)).min(1, "Requires at least 1 reward")
850
+ }),
851
+ Z.extend({
852
+ business: t.nullish(),
853
+ game: b.extend({
854
+ business: t.nullish(),
855
+ rewards: e.array(e.lazy(() => D)).min(1, "Requires at least 1 reward")
856
+ })
857
+ }),
858
+ Q.extend({
859
+ business: t.nullish(),
860
+ rewards: e.array(e.lazy(() => Ne)).min(1, "Requires at least 1 reward")
861
+ }),
862
+ $.extend({
863
+ business: t.nullish()
864
+ })
865
+ ]);
866
+ W.pick({
867
+ business: !0,
868
+ name: !0,
869
+ image: !0,
870
+ // url: true,
871
+ tiers: !0,
872
+ // titles: true,
873
+ cardEnable: !0,
874
+ // design: true,
875
+ targetLocation: !0,
876
+ brand: !0,
877
+ email: !0,
878
+ freeCreditAsDiscount: !0,
879
+ allowedPhoneCountries: !0,
880
+ pf_title: !0,
881
+ pf_targetLocation: !0
882
+ }).extend({
883
+ allowedPhoneCountryDetails: e.array(X).nullish()
884
+ });
885
+ export {
886
+ r as C,
887
+ n as F,
888
+ o as a,
889
+ et as b,
890
+ Ze as c,
891
+ Ie as d,
892
+ Xe as e,
893
+ tt as f,
894
+ Qe as g,
895
+ D as h,
896
+ Be as i,
897
+ $e as j,
898
+ Ne as k,
899
+ Ge as l,
900
+ W as m,
901
+ de as n
902
+ };