@classytic/loyalty 0.4.0 → 0.6.0

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.
@@ -0,0 +1,692 @@
1
+ import { a as ModelName, n as LoyaltyModelName, t as IndexDefinition } from "./config-CtkGj3xZ.mjs";
2
+ import { ModelBlueprint } from "@classytic/mongokit";
3
+ import { ResolvedTenantConfig } from "@classytic/repo-core/tenant";
4
+ import mongoose, { InferSchemaType, Model } from "mongoose";
5
+ //#region src/models/schemas/earning-rule.schema.d.ts
6
+ declare function createEarningRuleSchema(): mongoose.Schema<any, mongoose.Model<any, any, any, any, any, any, any>, {}, {}, {}, {}, {
7
+ timestamps: true;
8
+ }, {
9
+ programId: string;
10
+ type: "order" | "action" | "category" | "tier_bonus";
11
+ name: string;
12
+ status: "active" | "paused" | "expired";
13
+ priority: number;
14
+ description?: string | null;
15
+ conditions?: {
16
+ categories: string[];
17
+ tiers: string[];
18
+ actions: string[];
19
+ dayOfWeek: number[];
20
+ minOrderAmount?: number | null;
21
+ dateRange?: {
22
+ start?: NativeDate | null;
23
+ end?: NativeDate | null;
24
+ } | null;
25
+ } | null;
26
+ reward?: {
27
+ roundingMode: "floor" | "round" | "ceil";
28
+ pointsPerAmount?: number | null;
29
+ rateBasis?: number | null;
30
+ amountPerPoint?: number | null;
31
+ fixedPoints?: number | null;
32
+ multiplier?: number | null;
33
+ maxPointsPerTransaction?: number | null;
34
+ } | null;
35
+ startsAt?: NativeDate | null;
36
+ endsAt?: NativeDate | null;
37
+ metadata?: any;
38
+ } & mongoose.DefaultTimestampProps, mongoose.Document<unknown, {}, {
39
+ programId: string;
40
+ type: "order" | "action" | "category" | "tier_bonus";
41
+ name: string;
42
+ status: "active" | "paused" | "expired";
43
+ priority: number;
44
+ description?: string | null;
45
+ conditions?: {
46
+ categories: string[];
47
+ tiers: string[];
48
+ actions: string[];
49
+ dayOfWeek: number[];
50
+ minOrderAmount?: number | null;
51
+ dateRange?: {
52
+ start?: NativeDate | null;
53
+ end?: NativeDate | null;
54
+ } | null;
55
+ } | null;
56
+ reward?: {
57
+ roundingMode: "floor" | "round" | "ceil";
58
+ pointsPerAmount?: number | null;
59
+ rateBasis?: number | null;
60
+ amountPerPoint?: number | null;
61
+ fixedPoints?: number | null;
62
+ multiplier?: number | null;
63
+ maxPointsPerTransaction?: number | null;
64
+ } | null;
65
+ startsAt?: NativeDate | null;
66
+ endsAt?: NativeDate | null;
67
+ metadata?: any;
68
+ } & mongoose.DefaultTimestampProps, {
69
+ id: string;
70
+ }, Omit<mongoose.DefaultSchemaOptions, "timestamps"> & {
71
+ timestamps: true;
72
+ }> & Omit<{
73
+ programId: string;
74
+ type: "order" | "action" | "category" | "tier_bonus";
75
+ name: string;
76
+ status: "active" | "paused" | "expired";
77
+ priority: number;
78
+ description?: string | null;
79
+ conditions?: {
80
+ categories: string[];
81
+ tiers: string[];
82
+ actions: string[];
83
+ dayOfWeek: number[];
84
+ minOrderAmount?: number | null;
85
+ dateRange?: {
86
+ start?: NativeDate | null;
87
+ end?: NativeDate | null;
88
+ } | null;
89
+ } | null;
90
+ reward?: {
91
+ roundingMode: "floor" | "round" | "ceil";
92
+ pointsPerAmount?: number | null;
93
+ rateBasis?: number | null;
94
+ amountPerPoint?: number | null;
95
+ fixedPoints?: number | null;
96
+ multiplier?: number | null;
97
+ maxPointsPerTransaction?: number | null;
98
+ } | null;
99
+ startsAt?: NativeDate | null;
100
+ endsAt?: NativeDate | null;
101
+ metadata?: any;
102
+ } & mongoose.DefaultTimestampProps & {
103
+ _id: mongoose.Types.ObjectId;
104
+ } & {
105
+ __v: number;
106
+ }, "id"> & mongoose.HydratedDocumentOverrides<{
107
+ id: string;
108
+ }>, unknown, {
109
+ programId: string;
110
+ type: "order" | "action" | "category" | "tier_bonus";
111
+ name: string;
112
+ status: "active" | "paused" | "expired";
113
+ priority: number;
114
+ description?: string | null;
115
+ conditions?: {
116
+ categories: string[];
117
+ tiers: string[];
118
+ actions: string[];
119
+ dayOfWeek: number[];
120
+ minOrderAmount?: number | null;
121
+ dateRange?: {
122
+ start?: NativeDate | null;
123
+ end?: NativeDate | null;
124
+ } | null;
125
+ } | null;
126
+ reward?: {
127
+ roundingMode: "floor" | "round" | "ceil";
128
+ pointsPerAmount?: number | null;
129
+ rateBasis?: number | null;
130
+ amountPerPoint?: number | null;
131
+ fixedPoints?: number | null;
132
+ multiplier?: number | null;
133
+ maxPointsPerTransaction?: number | null;
134
+ } | null;
135
+ startsAt?: NativeDate | null;
136
+ endsAt?: NativeDate | null;
137
+ metadata?: any;
138
+ createdAt: NativeDate;
139
+ updatedAt: NativeDate;
140
+ } & {
141
+ _id: mongoose.Types.ObjectId;
142
+ } & {
143
+ __v: number;
144
+ }>;
145
+ //#endregion
146
+ //#region src/models/schemas/member.schema.d.ts
147
+ declare function createMemberSchema(): mongoose.Schema<any, mongoose.Model<any, any, any, any, any, any, any>, {}, {}, {}, {}, {
148
+ timestamps: true;
149
+ }, {
150
+ programId: string;
151
+ status: "active" | "inactive" | "suspended";
152
+ externalId: string;
153
+ externalType: string;
154
+ enrolledAt: NativeDate;
155
+ metadata?: any;
156
+ cardId?: string | null;
157
+ referralCode?: string | null;
158
+ tier?: string | null;
159
+ tierOverride?: string | null;
160
+ tierOverrideReason?: string | null;
161
+ tierOverrideExpiresAt?: NativeDate | null;
162
+ referredBy?: string | null;
163
+ tierQualifiedAt?: NativeDate | null;
164
+ tierExpiresAt?: NativeDate | null;
165
+ balance?: {
166
+ expired: number;
167
+ current: number;
168
+ lifetime: number;
169
+ redeemed: number;
170
+ } | null;
171
+ deactivatedAt?: NativeDate | null;
172
+ } & mongoose.DefaultTimestampProps, mongoose.Document<unknown, {}, {
173
+ programId: string;
174
+ status: "active" | "inactive" | "suspended";
175
+ externalId: string;
176
+ externalType: string;
177
+ enrolledAt: NativeDate;
178
+ metadata?: any;
179
+ cardId?: string | null;
180
+ referralCode?: string | null;
181
+ tier?: string | null;
182
+ tierOverride?: string | null;
183
+ tierOverrideReason?: string | null;
184
+ tierOverrideExpiresAt?: NativeDate | null;
185
+ referredBy?: string | null;
186
+ tierQualifiedAt?: NativeDate | null;
187
+ tierExpiresAt?: NativeDate | null;
188
+ balance?: {
189
+ expired: number;
190
+ current: number;
191
+ lifetime: number;
192
+ redeemed: number;
193
+ } | null;
194
+ deactivatedAt?: NativeDate | null;
195
+ } & mongoose.DefaultTimestampProps, {
196
+ id: string;
197
+ }, Omit<mongoose.DefaultSchemaOptions, "timestamps"> & {
198
+ timestamps: true;
199
+ }> & Omit<{
200
+ programId: string;
201
+ status: "active" | "inactive" | "suspended";
202
+ externalId: string;
203
+ externalType: string;
204
+ enrolledAt: NativeDate;
205
+ metadata?: any;
206
+ cardId?: string | null;
207
+ referralCode?: string | null;
208
+ tier?: string | null;
209
+ tierOverride?: string | null;
210
+ tierOverrideReason?: string | null;
211
+ tierOverrideExpiresAt?: NativeDate | null;
212
+ referredBy?: string | null;
213
+ tierQualifiedAt?: NativeDate | null;
214
+ tierExpiresAt?: NativeDate | null;
215
+ balance?: {
216
+ expired: number;
217
+ current: number;
218
+ lifetime: number;
219
+ redeemed: number;
220
+ } | null;
221
+ deactivatedAt?: NativeDate | null;
222
+ } & mongoose.DefaultTimestampProps & {
223
+ _id: mongoose.Types.ObjectId;
224
+ } & {
225
+ __v: number;
226
+ }, "id"> & mongoose.HydratedDocumentOverrides<{
227
+ id: string;
228
+ }>, unknown, {
229
+ programId: string;
230
+ status: "active" | "inactive" | "suspended";
231
+ externalId: string;
232
+ externalType: string;
233
+ enrolledAt: NativeDate;
234
+ metadata?: any;
235
+ cardId?: string | null;
236
+ referralCode?: string | null;
237
+ tier?: string | null;
238
+ tierOverride?: string | null;
239
+ tierOverrideReason?: string | null;
240
+ tierOverrideExpiresAt?: NativeDate | null;
241
+ referredBy?: string | null;
242
+ tierQualifiedAt?: NativeDate | null;
243
+ tierExpiresAt?: NativeDate | null;
244
+ balance?: {
245
+ expired: number;
246
+ current: number;
247
+ lifetime: number;
248
+ redeemed: number;
249
+ } | null;
250
+ deactivatedAt?: NativeDate | null;
251
+ createdAt: NativeDate;
252
+ updatedAt: NativeDate;
253
+ } & {
254
+ _id: mongoose.Types.ObjectId;
255
+ } & {
256
+ __v: number;
257
+ }>;
258
+ //#endregion
259
+ //#region src/models/schemas/point-transaction.schema.d.ts
260
+ declare function createPointTransactionSchema(): mongoose.Schema<any, mongoose.Model<any, any, any, any, any, any, any>, {}, {}, {}, {}, {
261
+ timestamps: {
262
+ createdAt: true;
263
+ updatedAt: false;
264
+ };
265
+ }, {
266
+ programId: string;
267
+ type: "earn" | "redeem" | "adjust" | "expire" | "transfer" | "referral_bonus";
268
+ description: string;
269
+ memberId: mongoose.Types.ObjectId;
270
+ points: number;
271
+ balanceAfter: number;
272
+ actorId: string;
273
+ metadata?: any;
274
+ expiresAt?: NativeDate | null;
275
+ approvals?: any;
276
+ approvalPolicyId?: string | null;
277
+ approvalPolicyVersion?: number | null;
278
+ referenceType?: string | null;
279
+ referenceId?: string | null;
280
+ idempotencyKey?: string | null;
281
+ earningRuleId?: mongoose.Types.ObjectId | null;
282
+ expiredAt?: NativeDate | null;
283
+ createdAt: NativeDate;
284
+ }, mongoose.Document<unknown, {}, {
285
+ programId: string;
286
+ type: "earn" | "redeem" | "adjust" | "expire" | "transfer" | "referral_bonus";
287
+ description: string;
288
+ memberId: mongoose.Types.ObjectId;
289
+ points: number;
290
+ balanceAfter: number;
291
+ actorId: string;
292
+ metadata?: any;
293
+ expiresAt?: NativeDate | null;
294
+ approvals?: any;
295
+ approvalPolicyId?: string | null;
296
+ approvalPolicyVersion?: number | null;
297
+ referenceType?: string | null;
298
+ referenceId?: string | null;
299
+ idempotencyKey?: string | null;
300
+ earningRuleId?: mongoose.Types.ObjectId | null;
301
+ expiredAt?: NativeDate | null;
302
+ createdAt: NativeDate;
303
+ }, {
304
+ id: string;
305
+ }, Omit<mongoose.DefaultSchemaOptions, "timestamps"> & {
306
+ timestamps: {
307
+ createdAt: true;
308
+ updatedAt: false;
309
+ };
310
+ }> & Omit<{
311
+ programId: string;
312
+ type: "earn" | "redeem" | "adjust" | "expire" | "transfer" | "referral_bonus";
313
+ description: string;
314
+ memberId: mongoose.Types.ObjectId;
315
+ points: number;
316
+ balanceAfter: number;
317
+ actorId: string;
318
+ metadata?: any;
319
+ expiresAt?: NativeDate | null;
320
+ approvals?: any;
321
+ approvalPolicyId?: string | null;
322
+ approvalPolicyVersion?: number | null;
323
+ referenceType?: string | null;
324
+ referenceId?: string | null;
325
+ idempotencyKey?: string | null;
326
+ earningRuleId?: mongoose.Types.ObjectId | null;
327
+ expiredAt?: NativeDate | null;
328
+ createdAt: NativeDate;
329
+ } & {
330
+ _id: mongoose.Types.ObjectId;
331
+ } & {
332
+ __v: number;
333
+ }, "id"> & mongoose.HydratedDocumentOverrides<{
334
+ id: string;
335
+ }>, unknown, {
336
+ programId: string;
337
+ type: "earn" | "redeem" | "adjust" | "expire" | "transfer" | "referral_bonus";
338
+ description: string;
339
+ memberId: mongoose.Types.ObjectId;
340
+ points: number;
341
+ balanceAfter: number;
342
+ actorId: string;
343
+ metadata?: any;
344
+ expiresAt?: NativeDate | null;
345
+ approvals?: any;
346
+ approvalPolicyId?: string | null;
347
+ approvalPolicyVersion?: number | null;
348
+ referenceType?: string | null;
349
+ referenceId?: string | null;
350
+ idempotencyKey?: string | null;
351
+ earningRuleId?: mongoose.Types.ObjectId | null;
352
+ expiredAt?: NativeDate | null;
353
+ createdAt: NativeDate;
354
+ } & {
355
+ _id: mongoose.Types.ObjectId;
356
+ } & {
357
+ __v: number;
358
+ }>;
359
+ //#endregion
360
+ //#region src/models/schemas/redemption.schema.d.ts
361
+ declare function createRedemptionSchema(): mongoose.Schema<any, mongoose.Model<any, any, any, any, any, any, any>, {}, {}, {}, {}, {
362
+ timestamps: true;
363
+ }, {
364
+ programId: string;
365
+ status: "expired" | "reserved" | "confirmed" | "released" | "reversed";
366
+ memberId: mongoose.Types.ObjectId;
367
+ pointsReserved: number;
368
+ pointsConfirmed: number;
369
+ discountAmount: number;
370
+ pointValueMinor: number;
371
+ ownerType: string;
372
+ ownerId: string;
373
+ expiresAt?: NativeDate | null;
374
+ confirmedAt?: NativeDate | null;
375
+ releasedAt?: NativeDate | null;
376
+ reversedAt?: NativeDate | null;
377
+ reversalReason?: string | null;
378
+ reversalTransactionId?: mongoose.Types.ObjectId | null;
379
+ transactionId?: mongoose.Types.ObjectId | null;
380
+ initialBalance?: number | null;
381
+ remainingBalance?: number | null;
382
+ approvals?: any;
383
+ approvalPolicyId?: string | null;
384
+ approvalPolicyVersion?: number | null;
385
+ } & mongoose.DefaultTimestampProps, mongoose.Document<unknown, {}, {
386
+ programId: string;
387
+ status: "expired" | "reserved" | "confirmed" | "released" | "reversed";
388
+ memberId: mongoose.Types.ObjectId;
389
+ pointsReserved: number;
390
+ pointsConfirmed: number;
391
+ discountAmount: number;
392
+ pointValueMinor: number;
393
+ ownerType: string;
394
+ ownerId: string;
395
+ expiresAt?: NativeDate | null;
396
+ confirmedAt?: NativeDate | null;
397
+ releasedAt?: NativeDate | null;
398
+ reversedAt?: NativeDate | null;
399
+ reversalReason?: string | null;
400
+ reversalTransactionId?: mongoose.Types.ObjectId | null;
401
+ transactionId?: mongoose.Types.ObjectId | null;
402
+ initialBalance?: number | null;
403
+ remainingBalance?: number | null;
404
+ approvals?: any;
405
+ approvalPolicyId?: string | null;
406
+ approvalPolicyVersion?: number | null;
407
+ } & mongoose.DefaultTimestampProps, {
408
+ id: string;
409
+ }, Omit<mongoose.DefaultSchemaOptions, "timestamps"> & {
410
+ timestamps: true;
411
+ }> & Omit<{
412
+ programId: string;
413
+ status: "expired" | "reserved" | "confirmed" | "released" | "reversed";
414
+ memberId: mongoose.Types.ObjectId;
415
+ pointsReserved: number;
416
+ pointsConfirmed: number;
417
+ discountAmount: number;
418
+ pointValueMinor: number;
419
+ ownerType: string;
420
+ ownerId: string;
421
+ expiresAt?: NativeDate | null;
422
+ confirmedAt?: NativeDate | null;
423
+ releasedAt?: NativeDate | null;
424
+ reversedAt?: NativeDate | null;
425
+ reversalReason?: string | null;
426
+ reversalTransactionId?: mongoose.Types.ObjectId | null;
427
+ transactionId?: mongoose.Types.ObjectId | null;
428
+ initialBalance?: number | null;
429
+ remainingBalance?: number | null;
430
+ approvals?: any;
431
+ approvalPolicyId?: string | null;
432
+ approvalPolicyVersion?: number | null;
433
+ } & mongoose.DefaultTimestampProps & {
434
+ _id: mongoose.Types.ObjectId;
435
+ } & {
436
+ __v: number;
437
+ }, "id"> & mongoose.HydratedDocumentOverrides<{
438
+ id: string;
439
+ }>, unknown, {
440
+ programId: string;
441
+ status: "expired" | "reserved" | "confirmed" | "released" | "reversed";
442
+ memberId: mongoose.Types.ObjectId;
443
+ pointsReserved: number;
444
+ pointsConfirmed: number;
445
+ discountAmount: number;
446
+ pointValueMinor: number;
447
+ ownerType: string;
448
+ ownerId: string;
449
+ expiresAt?: NativeDate | null;
450
+ confirmedAt?: NativeDate | null;
451
+ releasedAt?: NativeDate | null;
452
+ reversedAt?: NativeDate | null;
453
+ reversalReason?: string | null;
454
+ reversalTransactionId?: mongoose.Types.ObjectId | null;
455
+ transactionId?: mongoose.Types.ObjectId | null;
456
+ initialBalance?: number | null;
457
+ remainingBalance?: number | null;
458
+ approvals?: any;
459
+ approvalPolicyId?: string | null;
460
+ approvalPolicyVersion?: number | null;
461
+ createdAt: NativeDate;
462
+ updatedAt: NativeDate;
463
+ } & {
464
+ _id: mongoose.Types.ObjectId;
465
+ } & {
466
+ __v: number;
467
+ }>;
468
+ //#endregion
469
+ //#region src/models/schemas/referral.schema.d.ts
470
+ declare function createReferralSchema(): mongoose.Schema<any, mongoose.Model<any, any, any, any, any, any, any>, {}, {}, {}, {}, {
471
+ timestamps: true;
472
+ }, {
473
+ programId: string;
474
+ status: "expired" | "pending" | "approved" | "rejected";
475
+ referralCode: string;
476
+ referrerId: mongoose.Types.ObjectId;
477
+ refereeId: mongoose.Types.ObjectId;
478
+ metadata?: any;
479
+ expiresAt?: NativeDate | null;
480
+ referrerRewardPoints?: number | null;
481
+ refereeRewardPoints?: number | null;
482
+ referrerTransactionId?: mongoose.Types.ObjectId | null;
483
+ refereeTransactionId?: mongoose.Types.ObjectId | null;
484
+ approvedAt?: NativeDate | null;
485
+ rejectedAt?: NativeDate | null;
486
+ rejectionReason?: string | null;
487
+ } & mongoose.DefaultTimestampProps, mongoose.Document<unknown, {}, {
488
+ programId: string;
489
+ status: "expired" | "pending" | "approved" | "rejected";
490
+ referralCode: string;
491
+ referrerId: mongoose.Types.ObjectId;
492
+ refereeId: mongoose.Types.ObjectId;
493
+ metadata?: any;
494
+ expiresAt?: NativeDate | null;
495
+ referrerRewardPoints?: number | null;
496
+ refereeRewardPoints?: number | null;
497
+ referrerTransactionId?: mongoose.Types.ObjectId | null;
498
+ refereeTransactionId?: mongoose.Types.ObjectId | null;
499
+ approvedAt?: NativeDate | null;
500
+ rejectedAt?: NativeDate | null;
501
+ rejectionReason?: string | null;
502
+ } & mongoose.DefaultTimestampProps, {
503
+ id: string;
504
+ }, Omit<mongoose.DefaultSchemaOptions, "timestamps"> & {
505
+ timestamps: true;
506
+ }> & Omit<{
507
+ programId: string;
508
+ status: "expired" | "pending" | "approved" | "rejected";
509
+ referralCode: string;
510
+ referrerId: mongoose.Types.ObjectId;
511
+ refereeId: mongoose.Types.ObjectId;
512
+ metadata?: any;
513
+ expiresAt?: NativeDate | null;
514
+ referrerRewardPoints?: number | null;
515
+ refereeRewardPoints?: number | null;
516
+ referrerTransactionId?: mongoose.Types.ObjectId | null;
517
+ refereeTransactionId?: mongoose.Types.ObjectId | null;
518
+ approvedAt?: NativeDate | null;
519
+ rejectedAt?: NativeDate | null;
520
+ rejectionReason?: string | null;
521
+ } & mongoose.DefaultTimestampProps & {
522
+ _id: mongoose.Types.ObjectId;
523
+ } & {
524
+ __v: number;
525
+ }, "id"> & mongoose.HydratedDocumentOverrides<{
526
+ id: string;
527
+ }>, unknown, {
528
+ programId: string;
529
+ status: "expired" | "pending" | "approved" | "rejected";
530
+ referralCode: string;
531
+ referrerId: mongoose.Types.ObjectId;
532
+ refereeId: mongoose.Types.ObjectId;
533
+ metadata?: any;
534
+ expiresAt?: NativeDate | null;
535
+ referrerRewardPoints?: number | null;
536
+ refereeRewardPoints?: number | null;
537
+ referrerTransactionId?: mongoose.Types.ObjectId | null;
538
+ refereeTransactionId?: mongoose.Types.ObjectId | null;
539
+ approvedAt?: NativeDate | null;
540
+ rejectedAt?: NativeDate | null;
541
+ rejectionReason?: string | null;
542
+ createdAt: NativeDate;
543
+ updatedAt: NativeDate;
544
+ } & {
545
+ _id: mongoose.Types.ObjectId;
546
+ } & {
547
+ __v: number;
548
+ }>;
549
+ //#endregion
550
+ //#region src/models/schemas/tier-definition.schema.d.ts
551
+ declare function createTierDefinitionSchema(): mongoose.Schema<any, mongoose.Model<any, any, any, any, any, any, any>, {}, {}, {}, {}, {
552
+ timestamps: true;
553
+ }, {
554
+ programId: string;
555
+ name: string;
556
+ rank: number;
557
+ metadata?: any;
558
+ qualificationCriteria?: {
559
+ minLifetimePoints?: number | null;
560
+ minLifetimeSpend?: number | null;
561
+ evaluationPeriodDays?: number | null;
562
+ } | null;
563
+ benefits?: {
564
+ pointsMultiplier?: number | null;
565
+ discountPercent?: number | null;
566
+ freeShipping?: boolean | null;
567
+ customBenefits?: any;
568
+ } | null;
569
+ downgrade?: {
570
+ enabled: boolean;
571
+ gracePeriodDays: number;
572
+ } | null;
573
+ color?: string | null;
574
+ } & mongoose.DefaultTimestampProps, mongoose.Document<unknown, {}, {
575
+ programId: string;
576
+ name: string;
577
+ rank: number;
578
+ metadata?: any;
579
+ qualificationCriteria?: {
580
+ minLifetimePoints?: number | null;
581
+ minLifetimeSpend?: number | null;
582
+ evaluationPeriodDays?: number | null;
583
+ } | null;
584
+ benefits?: {
585
+ pointsMultiplier?: number | null;
586
+ discountPercent?: number | null;
587
+ freeShipping?: boolean | null;
588
+ customBenefits?: any;
589
+ } | null;
590
+ downgrade?: {
591
+ enabled: boolean;
592
+ gracePeriodDays: number;
593
+ } | null;
594
+ color?: string | null;
595
+ } & mongoose.DefaultTimestampProps, {
596
+ id: string;
597
+ }, Omit<mongoose.DefaultSchemaOptions, "timestamps"> & {
598
+ timestamps: true;
599
+ }> & Omit<{
600
+ programId: string;
601
+ name: string;
602
+ rank: number;
603
+ metadata?: any;
604
+ qualificationCriteria?: {
605
+ minLifetimePoints?: number | null;
606
+ minLifetimeSpend?: number | null;
607
+ evaluationPeriodDays?: number | null;
608
+ } | null;
609
+ benefits?: {
610
+ pointsMultiplier?: number | null;
611
+ discountPercent?: number | null;
612
+ freeShipping?: boolean | null;
613
+ customBenefits?: any;
614
+ } | null;
615
+ downgrade?: {
616
+ enabled: boolean;
617
+ gracePeriodDays: number;
618
+ } | null;
619
+ color?: string | null;
620
+ } & mongoose.DefaultTimestampProps & {
621
+ _id: mongoose.Types.ObjectId;
622
+ } & {
623
+ __v: number;
624
+ }, "id"> & mongoose.HydratedDocumentOverrides<{
625
+ id: string;
626
+ }>, unknown, {
627
+ programId: string;
628
+ name: string;
629
+ rank: number;
630
+ metadata?: any;
631
+ qualificationCriteria?: {
632
+ minLifetimePoints?: number | null;
633
+ minLifetimeSpend?: number | null;
634
+ evaluationPeriodDays?: number | null;
635
+ } | null;
636
+ benefits?: {
637
+ pointsMultiplier?: number | null;
638
+ discountPercent?: number | null;
639
+ freeShipping?: boolean | null;
640
+ customBenefits?: any;
641
+ } | null;
642
+ downgrade?: {
643
+ enabled: boolean;
644
+ gracePeriodDays: number;
645
+ } | null;
646
+ color?: string | null;
647
+ createdAt: NativeDate;
648
+ updatedAt: NativeDate;
649
+ } & {
650
+ _id: mongoose.Types.ObjectId;
651
+ } & {
652
+ __v: number;
653
+ }>;
654
+ //#endregion
655
+ //#region src/models/index.d.ts
656
+ /** Typed model bag — one Mongoose model per loyalty entity. */
657
+ interface LoyaltyModels {
658
+ Member: Model<InferSchemaType<ReturnType<typeof createMemberSchema>>>;
659
+ PointTransaction: Model<InferSchemaType<ReturnType<typeof createPointTransactionSchema>>>;
660
+ EarningRule: Model<InferSchemaType<ReturnType<typeof createEarningRuleSchema>>>;
661
+ TierDefinition: Model<InferSchemaType<ReturnType<typeof createTierDefinitionSchema>>>;
662
+ Redemption: Model<InferSchemaType<ReturnType<typeof createRedemptionSchema>>>;
663
+ Referral: Model<InferSchemaType<ReturnType<typeof createReferralSchema>>>;
664
+ }
665
+ interface DefineLoyaltyModelsConfig {
666
+ /** Resolved tenant descriptor — injected into every schema (see `injectTenantField`). */
667
+ tenant: ResolvedTenantConfig;
668
+ /** Per-model user-supplied custom indexes (keyed by the lowercase model key). */
669
+ indexes?: Partial<Record<ModelName, IndexDefinition[]>> | undefined;
670
+ /** Mongoose auto-index builds. Boolean applies to all; per-model map overrides. */
671
+ autoIndex?: boolean | Partial<Record<LoyaltyModelName, boolean>> | undefined;
672
+ /** Prefix prepended to every physical collection (model names/refs unaffected). */
673
+ collectionPrefix?: string | undefined;
674
+ /**
675
+ * On a model-name collision: default (`false`) throws mongokit's typed
676
+ * `ModelCollisionError`; `true` re-registers (hot-reload / test fixtures).
677
+ * Maps to the mongokit `replace` policy, which itself refuses under
678
+ * `NODE_ENV=production`.
679
+ */
680
+ forceRecreate?: boolean | undefined;
681
+ }
682
+ /**
683
+ * Describe the loyalty model set as a connection-free mongokit `ModelBlueprint`.
684
+ *
685
+ * Pure — builds no schema and registers nothing until `.bind(connection)`. This is the
686
+ * SINGLE authoritative place the loyalty models are described: tenant-field injection,
687
+ * user indexes, auto-index and collision policy all live here once (PACKAGE_RULES §20/§21).
688
+ * A name collision surfaces as mongokit's typed `ModelCollisionError`.
689
+ */
690
+ declare function defineLoyaltyModels(config: DefineLoyaltyModelsConfig): ModelBlueprint<LoyaltyModels>;
691
+ //#endregion
692
+ export { LoyaltyModels as n, defineLoyaltyModels as r, DefineLoyaltyModelsConfig as t };