@classytic/loyalty 0.5.0 → 0.7.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
+ metadata?: any;
15
+ description?: string | null;
16
+ conditions?: {
17
+ categories: string[];
18
+ tiers: string[];
19
+ actions: string[];
20
+ dayOfWeek: number[];
21
+ minOrderAmount?: number | null;
22
+ dateRange?: {
23
+ start?: NativeDate | null;
24
+ end?: NativeDate | null;
25
+ } | null;
26
+ } | null;
27
+ reward?: {
28
+ roundingMode: "floor" | "round" | "ceil";
29
+ pointsPerAmount?: number | null;
30
+ rateBasis?: number | null;
31
+ amountPerPoint?: number | null;
32
+ fixedPoints?: number | null;
33
+ multiplier?: number | null;
34
+ maxPointsPerTransaction?: number | null;
35
+ } | null;
36
+ startsAt?: NativeDate | null;
37
+ endsAt?: NativeDate | null;
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
+ metadata?: any;
45
+ description?: string | null;
46
+ conditions?: {
47
+ categories: string[];
48
+ tiers: string[];
49
+ actions: string[];
50
+ dayOfWeek: number[];
51
+ minOrderAmount?: number | null;
52
+ dateRange?: {
53
+ start?: NativeDate | null;
54
+ end?: NativeDate | null;
55
+ } | null;
56
+ } | null;
57
+ reward?: {
58
+ roundingMode: "floor" | "round" | "ceil";
59
+ pointsPerAmount?: number | null;
60
+ rateBasis?: number | null;
61
+ amountPerPoint?: number | null;
62
+ fixedPoints?: number | null;
63
+ multiplier?: number | null;
64
+ maxPointsPerTransaction?: number | null;
65
+ } | null;
66
+ startsAt?: NativeDate | null;
67
+ endsAt?: NativeDate | null;
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
+ metadata?: any;
79
+ description?: string | null;
80
+ conditions?: {
81
+ categories: string[];
82
+ tiers: string[];
83
+ actions: string[];
84
+ dayOfWeek: number[];
85
+ minOrderAmount?: number | null;
86
+ dateRange?: {
87
+ start?: NativeDate | null;
88
+ end?: NativeDate | null;
89
+ } | null;
90
+ } | null;
91
+ reward?: {
92
+ roundingMode: "floor" | "round" | "ceil";
93
+ pointsPerAmount?: number | null;
94
+ rateBasis?: number | null;
95
+ amountPerPoint?: number | null;
96
+ fixedPoints?: number | null;
97
+ multiplier?: number | null;
98
+ maxPointsPerTransaction?: number | null;
99
+ } | null;
100
+ startsAt?: NativeDate | null;
101
+ endsAt?: NativeDate | null;
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
+ metadata?: any;
115
+ description?: string | null;
116
+ conditions?: {
117
+ categories: string[];
118
+ tiers: string[];
119
+ actions: string[];
120
+ dayOfWeek: number[];
121
+ minOrderAmount?: number | null;
122
+ dateRange?: {
123
+ start?: NativeDate | null;
124
+ end?: NativeDate | null;
125
+ } | null;
126
+ } | null;
127
+ reward?: {
128
+ roundingMode: "floor" | "round" | "ceil";
129
+ pointsPerAmount?: number | null;
130
+ rateBasis?: number | null;
131
+ amountPerPoint?: number | null;
132
+ fixedPoints?: number | null;
133
+ multiplier?: number | null;
134
+ maxPointsPerTransaction?: number | null;
135
+ } | null;
136
+ startsAt?: NativeDate | null;
137
+ endsAt?: NativeDate | null;
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
+ referralCode?: string | null;
157
+ cardId?: 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
+ referralCode?: string | null;
180
+ cardId?: 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
+ referralCode?: string | null;
207
+ cardId?: 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
+ referralCode?: string | null;
236
+ cardId?: 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
+ referenceType?: string | null;
275
+ referenceId?: string | null;
276
+ idempotencyKey?: string | null;
277
+ earningRuleId?: mongoose.Types.ObjectId | null;
278
+ expiresAt?: NativeDate | null;
279
+ expiredAt?: NativeDate | null;
280
+ approvals?: any;
281
+ approvalPolicyId?: string | null;
282
+ approvalPolicyVersion?: number | 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
+ referenceType?: string | null;
294
+ referenceId?: string | null;
295
+ idempotencyKey?: string | null;
296
+ earningRuleId?: mongoose.Types.ObjectId | null;
297
+ expiresAt?: NativeDate | null;
298
+ expiredAt?: NativeDate | null;
299
+ approvals?: any;
300
+ approvalPolicyId?: string | null;
301
+ approvalPolicyVersion?: number | 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
+ referenceType?: string | null;
320
+ referenceId?: string | null;
321
+ idempotencyKey?: string | null;
322
+ earningRuleId?: mongoose.Types.ObjectId | null;
323
+ expiresAt?: NativeDate | null;
324
+ expiredAt?: NativeDate | null;
325
+ approvals?: any;
326
+ approvalPolicyId?: string | null;
327
+ approvalPolicyVersion?: number | 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
+ referenceType?: string | null;
345
+ referenceId?: string | null;
346
+ idempotencyKey?: string | null;
347
+ earningRuleId?: mongoose.Types.ObjectId | null;
348
+ expiresAt?: NativeDate | null;
349
+ expiredAt?: NativeDate | null;
350
+ approvals?: any;
351
+ approvalPolicyId?: string | null;
352
+ approvalPolicyVersion?: number | 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
+ approvals?: any;
375
+ approvalPolicyId?: string | null;
376
+ approvalPolicyVersion?: number | null;
377
+ confirmedAt?: NativeDate | null;
378
+ releasedAt?: NativeDate | null;
379
+ reversedAt?: NativeDate | null;
380
+ reversalReason?: string | null;
381
+ reversalTransactionId?: mongoose.Types.ObjectId | null;
382
+ transactionId?: mongoose.Types.ObjectId | null;
383
+ initialBalance?: number | null;
384
+ remainingBalance?: 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
+ approvals?: any;
397
+ approvalPolicyId?: string | null;
398
+ approvalPolicyVersion?: number | null;
399
+ confirmedAt?: NativeDate | null;
400
+ releasedAt?: NativeDate | null;
401
+ reversedAt?: NativeDate | null;
402
+ reversalReason?: string | null;
403
+ reversalTransactionId?: mongoose.Types.ObjectId | null;
404
+ transactionId?: mongoose.Types.ObjectId | null;
405
+ initialBalance?: number | null;
406
+ remainingBalance?: 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
+ approvals?: any;
423
+ approvalPolicyId?: string | null;
424
+ approvalPolicyVersion?: number | null;
425
+ confirmedAt?: NativeDate | null;
426
+ releasedAt?: NativeDate | null;
427
+ reversedAt?: NativeDate | null;
428
+ reversalReason?: string | null;
429
+ reversalTransactionId?: mongoose.Types.ObjectId | null;
430
+ transactionId?: mongoose.Types.ObjectId | null;
431
+ initialBalance?: number | null;
432
+ remainingBalance?: 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
+ approvals?: any;
451
+ approvalPolicyId?: string | null;
452
+ approvalPolicyVersion?: number | null;
453
+ confirmedAt?: NativeDate | null;
454
+ releasedAt?: NativeDate | null;
455
+ reversedAt?: NativeDate | null;
456
+ reversalReason?: string | null;
457
+ reversalTransactionId?: mongoose.Types.ObjectId | null;
458
+ transactionId?: mongoose.Types.ObjectId | null;
459
+ initialBalance?: number | null;
460
+ remainingBalance?: 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
+ referrerId: mongoose.Types.ObjectId;
476
+ refereeId: mongoose.Types.ObjectId;
477
+ referralCode: string;
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
+ referrerId: mongoose.Types.ObjectId;
491
+ refereeId: mongoose.Types.ObjectId;
492
+ referralCode: string;
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
+ referrerId: mongoose.Types.ObjectId;
510
+ refereeId: mongoose.Types.ObjectId;
511
+ referralCode: string;
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
+ referrerId: mongoose.Types.ObjectId;
531
+ refereeId: mongoose.Types.ObjectId;
532
+ referralCode: string;
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
+ qualificationCriteria?: {
558
+ minLifetimePoints?: number | null;
559
+ minLifetimeSpend?: number | null;
560
+ evaluationPeriodDays?: number | null;
561
+ } | null;
562
+ benefits?: {
563
+ pointsMultiplier?: number | null;
564
+ discountPercent?: number | null;
565
+ freeShipping?: boolean | null;
566
+ customBenefits?: any;
567
+ } | null;
568
+ downgrade?: {
569
+ enabled: boolean;
570
+ gracePeriodDays: number;
571
+ } | null;
572
+ color?: string | null;
573
+ metadata?: any;
574
+ } & mongoose.DefaultTimestampProps, mongoose.Document<unknown, {}, {
575
+ programId: string;
576
+ name: string;
577
+ rank: number;
578
+ qualificationCriteria?: {
579
+ minLifetimePoints?: number | null;
580
+ minLifetimeSpend?: number | null;
581
+ evaluationPeriodDays?: number | null;
582
+ } | null;
583
+ benefits?: {
584
+ pointsMultiplier?: number | null;
585
+ discountPercent?: number | null;
586
+ freeShipping?: boolean | null;
587
+ customBenefits?: any;
588
+ } | null;
589
+ downgrade?: {
590
+ enabled: boolean;
591
+ gracePeriodDays: number;
592
+ } | null;
593
+ color?: string | null;
594
+ metadata?: any;
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
+ qualificationCriteria?: {
604
+ minLifetimePoints?: number | null;
605
+ minLifetimeSpend?: number | null;
606
+ evaluationPeriodDays?: number | null;
607
+ } | null;
608
+ benefits?: {
609
+ pointsMultiplier?: number | null;
610
+ discountPercent?: number | null;
611
+ freeShipping?: boolean | null;
612
+ customBenefits?: any;
613
+ } | null;
614
+ downgrade?: {
615
+ enabled: boolean;
616
+ gracePeriodDays: number;
617
+ } | null;
618
+ color?: string | null;
619
+ metadata?: any;
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
+ qualificationCriteria?: {
631
+ minLifetimePoints?: number | null;
632
+ minLifetimeSpend?: number | null;
633
+ evaluationPeriodDays?: number | null;
634
+ } | null;
635
+ benefits?: {
636
+ pointsMultiplier?: number | null;
637
+ discountPercent?: number | null;
638
+ freeShipping?: boolean | null;
639
+ customBenefits?: any;
640
+ } | null;
641
+ downgrade?: {
642
+ enabled: boolean;
643
+ gracePeriodDays: number;
644
+ } | null;
645
+ color?: string | null;
646
+ metadata?: any;
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 };