@gymspace/shared 1.5.2 → 1.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.
- package/dist/.tsbuildinfo +1 -0
- package/dist/index.d.mts +99 -5
- package/dist/index.d.ts +99 -5
- package/dist/index.js +59 -4
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +59 -5
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
- package/src/constants/template-codes.constants.ts +37 -0
- package/src/constants.ts +6 -0
- package/src/enums.ts +10 -0
- package/src/events/bulk-messaging.events.ts +1 -0
- package/src/events/whatsapp.events.ts +17 -0
- package/src/index.ts +3 -0
- package/src/types/whatsapp-templates.types.ts +25 -1
- package/src/types.ts +8 -0
package/dist/index.js
CHANGED
|
@@ -11,7 +11,8 @@ var TemplateCode = {
|
|
|
11
11
|
PAYMENT_REMINDER: "PAYMENT_REMINDER",
|
|
12
12
|
BIRTHDAY: "BIRTHDAY",
|
|
13
13
|
PAYMENT_RECEIPT: "PAYMENT_RECEIPT",
|
|
14
|
-
SHARE_CATALOG: "SHARE_CATALOG"
|
|
14
|
+
SHARE_CATALOG: "SHARE_CATALOG",
|
|
15
|
+
SALE_PAYMENT_REMINDER: "SALE_PAYMENT_REMINDER"
|
|
15
16
|
};
|
|
16
17
|
var TemplateType = {
|
|
17
18
|
STATIC: "STATIC",
|
|
@@ -27,7 +28,8 @@ var TEMPLATE_CODES = {
|
|
|
27
28
|
PAYMENT_REMINDER: TemplateCode.PAYMENT_REMINDER,
|
|
28
29
|
BIRTHDAY: TemplateCode.BIRTHDAY,
|
|
29
30
|
PAYMENT_RECEIPT: TemplateCode.PAYMENT_RECEIPT,
|
|
30
|
-
SHARE_CATALOG: TemplateCode.SHARE_CATALOG
|
|
31
|
+
SHARE_CATALOG: TemplateCode.SHARE_CATALOG,
|
|
32
|
+
SALE_PAYMENT_REMINDER: TemplateCode.SALE_PAYMENT_REMINDER
|
|
31
33
|
};
|
|
32
34
|
var WHATSAPP_TEMPLATE_EVENTS = {
|
|
33
35
|
SEND_TEMPLATE: "whatsapp/template.send",
|
|
@@ -125,7 +127,9 @@ var TEMPLATE_METADATA = {
|
|
|
125
127
|
"clientName",
|
|
126
128
|
"items",
|
|
127
129
|
"amount",
|
|
128
|
-
"paymentMethod"
|
|
130
|
+
"paymentMethod",
|
|
131
|
+
"saleItems",
|
|
132
|
+
"currency"
|
|
129
133
|
],
|
|
130
134
|
exampleValues: {
|
|
131
135
|
gymName: "GymSpace",
|
|
@@ -134,7 +138,12 @@ var TEMPLATE_METADATA = {
|
|
|
134
138
|
clientName: "Juan P\xE9rez",
|
|
135
139
|
items: "\u2022 Prote\xEDna x2 = Q100.00\n\u2022 Creatina x1 = Q50.00",
|
|
136
140
|
amount: "Q150.00",
|
|
137
|
-
paymentMethod: "Efectivo"
|
|
141
|
+
paymentMethod: "Efectivo",
|
|
142
|
+
saleItems: [
|
|
143
|
+
{ product: { name: "Prote\xEDna" }, quantity: 2, total: "100.00" },
|
|
144
|
+
{ product: { name: "Creatina" }, quantity: 1, total: "50.00" }
|
|
145
|
+
],
|
|
146
|
+
currency: "Q"
|
|
138
147
|
}
|
|
139
148
|
},
|
|
140
149
|
[TemplateCode.SHARE_CATALOG]: {
|
|
@@ -148,6 +157,35 @@ var TEMPLATE_METADATA = {
|
|
|
148
157
|
gymName: "GymSpace",
|
|
149
158
|
urlCatalog: "https://gymspace.app/catalog/gym-123"
|
|
150
159
|
}
|
|
160
|
+
},
|
|
161
|
+
[TemplateCode.SALE_PAYMENT_REMINDER]: {
|
|
162
|
+
code: TemplateCode.SALE_PAYMENT_REMINDER,
|
|
163
|
+
title: "Recordatorio de Pago de Venta",
|
|
164
|
+
description: "Recordatorio para ventas con pago pendiente",
|
|
165
|
+
icon: "AlertCircle",
|
|
166
|
+
variables: [
|
|
167
|
+
"clientName",
|
|
168
|
+
"saleNumber",
|
|
169
|
+
"total",
|
|
170
|
+
"saleDate",
|
|
171
|
+
"daysOverdue",
|
|
172
|
+
"items",
|
|
173
|
+
"saleItems",
|
|
174
|
+
"currency"
|
|
175
|
+
],
|
|
176
|
+
exampleValues: {
|
|
177
|
+
clientName: "Manuel Trainer",
|
|
178
|
+
saleNumber: "#202511130003",
|
|
179
|
+
total: "S/ 205.00",
|
|
180
|
+
saleDate: "13/11/2025",
|
|
181
|
+
daysOverdue: "3",
|
|
182
|
+
items: "\u2022 BCAA x2\n\u2022 Pre-Entreno x1",
|
|
183
|
+
saleItems: [
|
|
184
|
+
{ product: { name: "BCAA" }, quantity: 2 },
|
|
185
|
+
{ product: { name: "Pre-Entreno" }, quantity: 1 }
|
|
186
|
+
],
|
|
187
|
+
currency: "S/ "
|
|
188
|
+
}
|
|
151
189
|
}
|
|
152
190
|
};
|
|
153
191
|
|
|
@@ -485,6 +523,11 @@ var PERMISSIONS = {
|
|
|
485
523
|
WHATSAPP_MANAGE: "WHATSAPP_MANAGE",
|
|
486
524
|
WHATSAPP_BULK_SEND: "WHATSAPP_BULK_SEND",
|
|
487
525
|
WHATSAPP_BULK_MANAGE: "WHATSAPP_BULK_MANAGE",
|
|
526
|
+
// Messages
|
|
527
|
+
MESSAGES_READ: "MESSAGES_READ",
|
|
528
|
+
MESSAGES_CREATE: "MESSAGES_CREATE",
|
|
529
|
+
MESSAGES_RETRY: "MESSAGES_RETRY",
|
|
530
|
+
MESSAGES_CANCEL: "MESSAGES_CANCEL",
|
|
488
531
|
// Activities
|
|
489
532
|
ACTIVITIES_CREATE: "ACTIVITIES_CREATE",
|
|
490
533
|
ACTIVITIES_READ: "ACTIVITIES_READ",
|
|
@@ -697,10 +740,21 @@ var ContractAssetType = /* @__PURE__ */ ((ContractAssetType2) => {
|
|
|
697
740
|
ContractAssetType2["OTHER"] = "other";
|
|
698
741
|
return ContractAssetType2;
|
|
699
742
|
})(ContractAssetType || {});
|
|
743
|
+
var MessageStatus = /* @__PURE__ */ ((MessageStatus2) => {
|
|
744
|
+
MessageStatus2["PENDING"] = "pending";
|
|
745
|
+
MessageStatus2["SCHEDULED"] = "scheduled";
|
|
746
|
+
MessageStatus2["QUEUED"] = "queued";
|
|
747
|
+
MessageStatus2["SENDING"] = "sending";
|
|
748
|
+
MessageStatus2["SENT"] = "sent";
|
|
749
|
+
MessageStatus2["FAILED"] = "failed";
|
|
750
|
+
MessageStatus2["CANCELLED"] = "cancelled";
|
|
751
|
+
return MessageStatus2;
|
|
752
|
+
})(MessageStatus || {});
|
|
700
753
|
|
|
701
754
|
// src/events/whatsapp.events.ts
|
|
702
755
|
var WHATSAPP_EVENTS = {
|
|
703
756
|
MESSAGE_SEND: "whatsapp/message.send",
|
|
757
|
+
MESSAGE_RETRY: "whatsapp/message.retry",
|
|
704
758
|
MESSAGE_RECEIVED: "whatsapp/message.received",
|
|
705
759
|
CONNECTION_UPDATE: "whatsapp/connection.update"
|
|
706
760
|
};
|
|
@@ -895,6 +949,7 @@ exports.DATE_FORMATS = DATE_FORMATS;
|
|
|
895
949
|
exports.FILE_LIMITS = FILE_LIMITS;
|
|
896
950
|
exports.HEADERS = HEADERS;
|
|
897
951
|
exports.InvitationStatus = InvitationStatus;
|
|
952
|
+
exports.MessageStatus = MessageStatus;
|
|
898
953
|
exports.PAGINATION_DEFAULTS = PAGINATION_DEFAULTS;
|
|
899
954
|
exports.PERMISSIONS = PERMISSIONS;
|
|
900
955
|
exports.PaymentFrequency = PaymentFrequency;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/types/whatsapp-templates.types.ts","../src/constants/template-codes.constants.ts","../src/constants/bulk-message-variables.ts","../src/constants.ts","../src/enums.ts","../src/events/whatsapp.events.ts","../src/events/bulk-messaging.events.ts","../src/events/activity.events.ts","../src/schemas/ai-template.schema.ts","../src/schemas/bulk-message.schema.ts","../src/schemas/activity-notification.schema.ts","../src/utils/roleHelpers.ts","../src/utils/phone.utils.ts"],"names":["UserType","SubscriptionStatus","CollaboratorStatus","InvitationStatus","ClientStatus","PlanStatus","PlanType","ContractStatus","CancellationReason","SuspensionType","PaymentFrequency","AssetStatus","AssetCategory","ContractAssetType","z","RoleNames"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Template codes for WhatsApp messages\n */\nexport const TemplateCode = {\n WELCOME: 'WELCOME',\n MEMBERSHIP_PURCHASE: 'MEMBERSHIP_PURCHASE',\n MEMBERSHIP_RENEWAL: 'MEMBERSHIP_RENEWAL',\n MEMBERSHIP_EXPIRING: 'MEMBERSHIP_EXPIRING',\n PAYMENT_REMINDER: 'PAYMENT_REMINDER',\n BIRTHDAY: 'BIRTHDAY',\n PAYMENT_RECEIPT: 'PAYMENT_RECEIPT',\n SHARE_CATALOG: 'SHARE_CATALOG',\n} as const;\n\nexport type TemplateCodeValue = (typeof TemplateCode)[keyof typeof TemplateCode];\nexport type TemplateCode = TemplateCodeValue;\n\n/**\n * Template types\n */\nexport const TemplateType = {\n STATIC: 'STATIC',\n PROMPT: 'PROMPT',\n} as const;\n\nexport type TemplateTypeValue = (typeof TemplateType)[keyof typeof TemplateType];\nexport type TemplateType = TemplateTypeValue;\n\n/**\n * Base interface for WhatsApp template data\n */\nexport interface WhatsAppTemplateData {\n gymId: string;\n clientId: string;\n phoneNumber: string;\n templateCode: TemplateCode;\n variables: Record<string, any>;\n metadata?: {\n contractId?: string;\n userId?: string;\n source?: string;\n instanceName?: string;\n };\n}\n\n/**\n * Welcome message template data\n */\nexport interface WelcomeTemplateData\n extends Omit<WhatsAppTemplateData, 'templateCode' | 'variables'> {\n templateCode: typeof TemplateCode.WELCOME;\n variables: {\n clientName: string;\n gymName: string;\n registrationDate: string;\n };\n}\n\n/**\n * Membership purchase template data\n */\nexport interface MembershipPurchaseTemplateData\n extends Omit<WhatsAppTemplateData, 'templateCode' | 'variables'> {\n templateCode: typeof TemplateCode.MEMBERSHIP_PURCHASE;\n variables: {\n clientName: string;\n planName: string;\n startDate: string;\n endDate: string;\n amount: string;\n paymentFrequency: string;\n };\n}\n\n/**\n * Membership renewal template data\n */\nexport interface MembershipRenewalTemplateData\n extends Omit<WhatsAppTemplateData, 'templateCode' | 'variables'> {\n templateCode: typeof TemplateCode.MEMBERSHIP_RENEWAL;\n variables: {\n clientName: string;\n planName: string;\n newEndDate: string;\n amount: string;\n };\n}\n\n/**\n * Membership expiring template data\n */\nexport interface MembershipExpiringTemplateData\n extends Omit<WhatsAppTemplateData, 'templateCode' | 'variables'> {\n templateCode: typeof TemplateCode.MEMBERSHIP_EXPIRING;\n variables: {\n clientName: string;\n planName: string;\n expirationDate: string;\n daysRemaining: string;\n };\n}\n\n/**\n * Payment reminder template data\n */\nexport interface PaymentReminderTemplateData\n extends Omit<WhatsAppTemplateData, 'templateCode' | 'variables'> {\n templateCode: typeof TemplateCode.PAYMENT_REMINDER;\n variables: {\n clientName: string;\n amount: string;\n dueDate: string;\n planName: string;\n };\n}\n\n/**\n * Birthday template data\n */\nexport interface BirthdayTemplateData\n extends Omit<WhatsAppTemplateData, 'templateCode' | 'variables'> {\n templateCode: typeof TemplateCode.BIRTHDAY;\n variables: {\n clientName: string;\n gymName: string;\n age: string;\n };\n}\n\n/**\n * Payment receipt template data\n */\nexport interface PaymentReceiptTemplateData\n extends Omit<WhatsAppTemplateData, 'templateCode' | 'variables'> {\n templateCode: typeof TemplateCode.PAYMENT_RECEIPT;\n variables: {\n gymName: string;\n receiptNumber: string;\n date: string;\n clientName: string;\n items: string;\n amount: string;\n paymentMethod: string;\n };\n metadata?: {\n saleId?: string;\n userId?: string;\n source?: string;\n instanceName?: string;\n };\n}\n\n/**\n * Share catalog template data\n */\nexport interface ShareCatalogTemplateData\n extends Omit<WhatsAppTemplateData, 'templateCode' | 'variables'> {\n templateCode: typeof TemplateCode.SHARE_CATALOG;\n variables: {\n clientName: string;\n gymName: string;\n urlCatalog: string;\n };\n}\n\n/**\n * Union type for all template data types\n */\nexport type WhatsAppTemplateEventData =\n | WelcomeTemplateData\n | MembershipPurchaseTemplateData\n | MembershipRenewalTemplateData\n | MembershipExpiringTemplateData\n | PaymentReminderTemplateData\n | BirthdayTemplateData\n | PaymentReceiptTemplateData\n | ShareCatalogTemplateData;\n\n/**\n * Template metadata interface\n */\nexport interface TemplateMetadata {\n code: TemplateCode;\n title: string;\n description: string;\n icon: string;\n variables: string[];\n exampleValues: Record<string, string>;\n}\n","import { TemplateCode } from '../types/whatsapp-templates.types';\n\n/**\n * Template code constants\n */\nexport const TEMPLATE_CODES = {\n WELCOME: TemplateCode.WELCOME,\n MEMBERSHIP_PURCHASE: TemplateCode.MEMBERSHIP_PURCHASE,\n MEMBERSHIP_RENEWAL: TemplateCode.MEMBERSHIP_RENEWAL,\n MEMBERSHIP_EXPIRING: TemplateCode.MEMBERSHIP_EXPIRING,\n PAYMENT_REMINDER: TemplateCode.PAYMENT_REMINDER,\n BIRTHDAY: TemplateCode.BIRTHDAY,\n PAYMENT_RECEIPT: TemplateCode.PAYMENT_RECEIPT,\n SHARE_CATALOG: TemplateCode.SHARE_CATALOG,\n} as const;\n\n/**\n * Event names for WhatsApp template events\n */\nexport const WHATSAPP_TEMPLATE_EVENTS = {\n SEND_TEMPLATE: 'whatsapp/template.send',\n TEMPLATE_SENT: 'whatsapp/template.sent',\n TEMPLATE_FAILED: 'whatsapp/template.failed',\n} as const;\n\n/**\n * Template metadata mapping\n */\nexport const TEMPLATE_METADATA = {\n [TemplateCode.WELCOME]: {\n code: TemplateCode.WELCOME,\n title: 'Mensaje de Bienvenida',\n description: 'Mensaje para nuevos clientes',\n icon: 'UserPlus',\n variables: ['clientName', 'gymName', 'registrationDate'],\n exampleValues: {\n clientName: 'Juan Pérez',\n gymName: 'GymSpace',\n registrationDate: '15/01/2024',\n },\n },\n [TemplateCode.MEMBERSHIP_PURCHASE]: {\n code: TemplateCode.MEMBERSHIP_PURCHASE,\n title: 'Compra de Membresía',\n description: 'Confirmación de nueva membresía',\n icon: 'ShoppingCart',\n variables: ['clientName', 'planName', 'startDate', 'endDate', 'amount', 'paymentFrequency'],\n exampleValues: {\n clientName: 'María López',\n planName: 'Premium',\n startDate: '01/02/2024',\n endDate: '01/03/2024',\n amount: '$50.00',\n paymentFrequency: 'mensual',\n },\n },\n [TemplateCode.MEMBERSHIP_RENEWAL]: {\n code: TemplateCode.MEMBERSHIP_RENEWAL,\n title: 'Renovación de Membresía',\n description: 'Confirmación de renovación',\n icon: 'RefreshCw',\n variables: ['clientName', 'planName', 'newEndDate', 'amount'],\n exampleValues: {\n clientName: 'Carlos Ruiz',\n planName: 'Básico',\n newEndDate: '15/04/2024',\n amount: '$30.00',\n },\n },\n [TemplateCode.MEMBERSHIP_EXPIRING]: {\n code: TemplateCode.MEMBERSHIP_EXPIRING,\n title: 'Membresía Por Vencer',\n description: 'Recordatorio de expiración próxima',\n icon: 'AlertCircle',\n variables: ['clientName', 'planName', 'expirationDate', 'daysRemaining'],\n exampleValues: {\n clientName: 'Ana García',\n planName: 'Premium',\n expirationDate: '20/02/2024',\n daysRemaining: '3',\n },\n },\n [TemplateCode.PAYMENT_REMINDER]: {\n code: TemplateCode.PAYMENT_REMINDER,\n title: 'Recordatorio de Pago',\n description: 'Recordatorio de pago pendiente',\n icon: 'DollarSign',\n variables: ['clientName', 'amount', 'dueDate', 'planName'],\n exampleValues: {\n clientName: 'Pedro Sánchez',\n amount: '$40.00',\n dueDate: '25/02/2024',\n planName: 'Estándar',\n },\n },\n [TemplateCode.BIRTHDAY]: {\n code: TemplateCode.BIRTHDAY,\n title: 'Cumpleaños',\n description: 'Felicitación de cumpleaños',\n icon: 'Cake',\n variables: ['clientName', 'gymName', 'age'],\n exampleValues: {\n clientName: 'Laura Martínez',\n gymName: 'GymSpace',\n age: '28',\n },\n },\n [TemplateCode.PAYMENT_RECEIPT]: {\n code: TemplateCode.PAYMENT_RECEIPT,\n title: 'Comprobante de Pago',\n description: 'Comprobante de venta pagada',\n icon: 'Receipt',\n variables: [\n 'gymName',\n 'receiptNumber',\n 'date',\n 'clientName',\n 'items',\n 'amount',\n 'paymentMethod',\n ],\n exampleValues: {\n gymName: 'GymSpace',\n receiptNumber: 'V-001',\n date: '15/01/2024',\n clientName: 'Juan Pérez',\n items: '• Proteína x2 = Q100.00\\n• Creatina x1 = Q50.00',\n amount: 'Q150.00',\n paymentMethod: 'Efectivo',\n },\n },\n [TemplateCode.SHARE_CATALOG]: {\n code: TemplateCode.SHARE_CATALOG,\n title: 'Compartir Catálogo',\n description: 'Mensaje para compartir catálogo de membresías',\n icon: 'Share2',\n variables: ['clientName', 'gymName', 'urlCatalog'],\n exampleValues: {\n clientName: 'Roberto Gómez',\n gymName: 'GymSpace',\n urlCatalog: 'https://gymspace.app/catalog/gym-123',\n },\n },\n} as const;\n","export interface BulkMessageVariable {\n name: string;\n placeholder: string;\n description: string;\n example: string;\n category: 'client' | 'gym' | 'membership' | 'activity' | 'datetime';\n required: boolean;\n formatter?: 'text' | 'currency' | 'date' | 'datetime' | 'number';\n}\n\nexport const BULK_MESSAGE_VARIABLES: BulkMessageVariable[] = [\n // Variables de Cliente\n {\n name: 'clientName',\n placeholder: '{{clientName}}',\n description: 'Nombre completo del cliente',\n example: 'Juan Pérez',\n category: 'client',\n required: false,\n formatter: 'text',\n },\n {\n name: 'clientEmail',\n placeholder: '{{clientEmail}}',\n description: 'Email del cliente',\n example: 'juan@example.com',\n category: 'client',\n required: false,\n formatter: 'text',\n },\n {\n name: 'clientPhone',\n placeholder: '{{clientPhone}}',\n description: 'Teléfono del cliente',\n example: '+51 999 999 999',\n category: 'client',\n required: false,\n formatter: 'text',\n },\n\n // Variables de Gimnasio\n {\n name: 'gymName',\n placeholder: '{{gymName}}',\n description: 'Nombre del gimnasio',\n example: 'Gym Fitness',\n category: 'gym',\n required: false,\n formatter: 'text',\n },\n {\n name: 'gymPhone',\n placeholder: '{{gymPhone}}',\n description: 'Teléfono del gimnasio',\n example: '+51 999 888 777',\n category: 'gym',\n required: false,\n formatter: 'text',\n },\n {\n name: 'gymAddress',\n placeholder: '{{gymAddress}}',\n description: 'Dirección del gimnasio',\n example: 'Av. Principal 123',\n category: 'gym',\n required: false,\n formatter: 'text',\n },\n\n // Variables de Membresía\n {\n name: 'planName',\n placeholder: '{{planName}}',\n description: 'Nombre del plan de membresía',\n example: 'Plan Premium',\n category: 'membership',\n required: false,\n formatter: 'text',\n },\n {\n name: 'membershipStatus',\n placeholder: '{{membershipStatus}}',\n description: 'Estado de la membresía',\n example: 'Activa',\n category: 'membership',\n required: false,\n formatter: 'text',\n },\n {\n name: 'daysUntilExpiration',\n placeholder: '{{daysUntilExpiration}}',\n description: 'Días restantes hasta vencimiento',\n example: '15',\n category: 'membership',\n required: false,\n formatter: 'number',\n },\n {\n name: 'expirationDate',\n placeholder: '{{expirationDate}}',\n description: 'Fecha de vencimiento',\n example: '31/12/2024',\n category: 'membership',\n required: false,\n formatter: 'date',\n },\n {\n name: 'amount',\n placeholder: '{{amount}}',\n description: 'Monto con formato de moneda',\n example: 'S/ 150.00',\n category: 'membership',\n required: false,\n formatter: 'currency',\n },\n\n // Variables de Fecha/Hora\n {\n name: 'date',\n placeholder: '{{date}}',\n description: 'Fecha actual',\n example: '15/10/2024',\n category: 'datetime',\n required: false,\n formatter: 'date',\n },\n {\n name: 'time',\n placeholder: '{{time}}',\n description: 'Hora actual',\n example: '14:30',\n category: 'datetime',\n required: false,\n formatter: 'text',\n },\n {\n name: 'dayOfWeek',\n placeholder: '{{dayOfWeek}}',\n description: 'Día de la semana',\n example: 'Lunes',\n category: 'datetime',\n required: false,\n formatter: 'text',\n },\n];\n\n// Variables de Actividades\nexport const ACTIVITY_MESSAGE_VARIABLES: BulkMessageVariable[] = [\n {\n name: 'activityName',\n placeholder: '{{activityName}}',\n description: 'Nombre de la actividad',\n example: 'Yoga Matutino',\n category: 'activity',\n required: false,\n formatter: 'text',\n },\n {\n name: 'activityDescription',\n placeholder: '{{activityDescription}}',\n description: 'Descripción de la actividad',\n example: 'Sesión de yoga para principiantes',\n category: 'activity',\n required: false,\n formatter: 'text',\n },\n {\n name: 'activityStartDate',\n placeholder: '{{activityStartDate}}',\n description: 'Fecha de inicio de la actividad',\n example: '15/10/2024',\n category: 'activity',\n required: false,\n formatter: 'date',\n },\n {\n name: 'activityStartTime',\n placeholder: '{{activityStartTime}}',\n description: 'Hora de inicio de la actividad',\n example: '08:00',\n category: 'activity',\n required: false,\n formatter: 'text',\n },\n {\n name: 'activityStartDateTime',\n placeholder: '{{activityStartDateTime}}',\n description: 'Fecha y hora de inicio de la actividad',\n example: '15/10/2024 08:00',\n category: 'activity',\n required: false,\n formatter: 'datetime',\n },\n {\n name: 'activityDuration',\n placeholder: '{{activityDuration}}',\n description: 'Duración de la actividad en minutos',\n example: '60',\n category: 'activity',\n required: false,\n formatter: 'number',\n },\n {\n name: 'activityMaxParticipants',\n placeholder: '{{activityMaxParticipants}}',\n description: 'Número máximo de participantes',\n example: '20',\n category: 'activity',\n required: false,\n formatter: 'number',\n },\n {\n name: 'activityLocation',\n placeholder: '{{activityLocation}}',\n description: 'Ubicación de la actividad',\n example: 'Av. Principal 123',\n category: 'activity',\n required: false,\n formatter: 'text',\n },\n {\n name: 'timeUntilActivity',\n placeholder: '{{timeUntilActivity}}',\n description: 'Tiempo restante hasta la actividad',\n example: '2 horas',\n category: 'activity',\n required: false,\n formatter: 'text',\n },\n];\n\n// Tipo de contexto de variables\nexport type VariableContextType = 'bulk' | 'activity' | 'event' | 'reminder';\n\n// Mapeo de contextos a variables disponibles\nexport const VARIABLE_CONTEXT_MAP: Record<VariableContextType, BulkMessageVariable[]> = {\n bulk: BULK_MESSAGE_VARIABLES,\n activity: [...BULK_MESSAGE_VARIABLES, ...ACTIVITY_MESSAGE_VARIABLES],\n event: BULK_MESSAGE_VARIABLES, // Para futuros eventos\n reminder: BULK_MESSAGE_VARIABLES, // Para futuros recordatorios\n};\n\n// Helper para obtener variables por contexto\nexport function getVariablesByContext(context: VariableContextType): BulkMessageVariable[] {\n return VARIABLE_CONTEXT_MAP[context] || BULK_MESSAGE_VARIABLES;\n}\n\n// Helper para validar variables en un contexto\n// Soporta tanto {{variable}} como {variable}\nexport function validateVariablesInContext(\n message: string,\n context: VariableContextType,\n): { valid: boolean; invalidVariables: string[] } {\n // Soportar tanto {{variable}} como {variable}\n const doubleBracePattern = /\\{\\{(\\w+)\\}\\}/g;\n const singleBracePattern = /\\{(\\w+)\\}/g;\n\n const doubleBraceMatches = message.matchAll(doubleBracePattern);\n const singleBraceMatches = message.matchAll(singleBracePattern);\n\n const invalidVariables: string[] = [];\n const validVariables = getVariablesByContext(context).map((v) => v.name);\n\n // Validar variables con doble llave\n for (const match of doubleBraceMatches) {\n const variableName = match[1];\n if (!validVariables.includes(variableName)) {\n invalidVariables.push(variableName);\n }\n }\n\n // Validar variables con una sola llave\n for (const match of singleBraceMatches) {\n const variableName = match[1];\n if (!validVariables.includes(variableName) && !invalidVariables.includes(variableName)) {\n invalidVariables.push(variableName);\n }\n }\n\n return {\n valid: invalidVariables.length === 0,\n invalidVariables,\n };\n}\n\nexport const BULK_MESSAGE_VARIABLE_CATEGORIES = {\n client: 'Cliente',\n gym: 'Gimnasio',\n membership: 'Membresía',\n activity: 'Actividad',\n datetime: 'Fecha/Hora',\n} as const;\n","// Permission constants\nexport const PERMISSIONS = {\n // Organizations\n ORGANIZATIONS_CREATE: 'ORGANIZATIONS_CREATE',\n ORGANIZATIONS_READ: 'ORGANIZATIONS_READ',\n ORGANIZATIONS_UPDATE: 'ORGANIZATIONS_UPDATE',\n ORGANIZATIONS_DELETE: 'ORGANIZATIONS_DELETE',\n\n // Gyms\n GYMS_CREATE: 'GYMS_CREATE',\n GYMS_READ: 'GYMS_READ',\n GYMS_UPDATE: 'GYMS_UPDATE',\n GYMS_DELETE: 'GYMS_DELETE',\n\n // Collaborators\n COLLABORATORS_CREATE: 'COLLABORATORS_CREATE',\n COLLABORATORS_READ: 'COLLABORATORS_READ',\n COLLABORATORS_UPDATE: 'COLLABORATORS_UPDATE',\n COLLABORATORS_DELETE: 'COLLABORATORS_DELETE',\n\n // Clients\n CLIENTS_CREATE: 'CLIENTS_CREATE',\n CLIENTS_READ: 'CLIENTS_READ',\n CLIENTS_UPDATE: 'CLIENTS_UPDATE',\n CLIENTS_DELETE: 'CLIENTS_DELETE',\n\n // Contracts\n CONTRACTS_CREATE: 'CONTRACTS_CREATE',\n CONTRACTS_READ: 'CONTRACTS_READ',\n CONTRACTS_UPDATE: 'CONTRACTS_UPDATE',\n CONTRACTS_APPROVE: 'CONTRACTS_APPROVE',\n CONTRACTS_CANCEL: 'CONTRACTS_CANCEL',\n\n // Check-ins\n CHECKINS_CREATE: 'CHECKINS_CREATE',\n CHECKINS_READ: 'CHECKINS_READ',\n\n // Reports\n REPORTS_VIEW: 'REPORTS_VIEW',\n REPORTS_FINANCIAL: 'REPORTS_FINANCIAL',\n\n // Settings\n SETTINGS_UPDATE: 'SETTINGS_UPDATE',\n\n // Assets\n ASSETS_CREATE: 'ASSETS_CREATE',\n ASSETS_READ: 'ASSETS_READ',\n ASSETS_DELETE: 'ASSETS_DELETE',\n\n // Files\n FILES_CREATE: 'FILES_CREATE',\n FILES_READ: 'FILES_READ',\n FILES_DELETE: 'FILES_DELETE',\n\n // Products\n PRODUCTS_CREATE: 'PRODUCTS_CREATE',\n PRODUCTS_READ: 'PRODUCTS_READ',\n PRODUCTS_UPDATE: 'PRODUCTS_UPDATE',\n PRODUCTS_DELETE: 'PRODUCTS_DELETE',\n\n // Product Categories\n PRODUCT_CATEGORIES_CREATE: 'PRODUCT_CATEGORIES_CREATE',\n PRODUCT_CATEGORIES_READ: 'PRODUCT_CATEGORIES_READ',\n PRODUCT_CATEGORIES_UPDATE: 'PRODUCT_CATEGORIES_UPDATE',\n PRODUCT_CATEGORIES_DELETE: 'PRODUCT_CATEGORIES_DELETE',\n\n // Sales\n SALES_CREATE: 'SALES_CREATE',\n SALES_READ: 'SALES_READ',\n SALES_UPDATE: 'SALES_UPDATE',\n SALES_DELETE: 'SALES_DELETE',\n\n // Suppliers\n SUPPLIERS_CREATE: 'SUPPLIERS_CREATE',\n SUPPLIERS_READ: 'SUPPLIERS_READ',\n SUPPLIERS_UPDATE: 'SUPPLIERS_UPDATE',\n SUPPLIERS_DELETE: 'SUPPLIERS_DELETE',\n\n // Payment Methods\n PAYMENT_METHODS_CREATE: 'PAYMENT_METHODS_CREATE',\n PAYMENT_METHODS_READ: 'PAYMENT_METHODS_READ',\n PAYMENT_METHODS_UPDATE: 'PAYMENT_METHODS_UPDATE',\n PAYMENT_METHODS_DELETE: 'PAYMENT_METHODS_DELETE',\n\n // WhatsApp\n WHATSAPP_READ: 'WHATSAPP_READ',\n WHATSAPP_SEND: 'WHATSAPP_SEND',\n WHATSAPP_MANAGE: 'WHATSAPP_MANAGE',\n WHATSAPP_BULK_SEND: 'WHATSAPP_BULK_SEND',\n WHATSAPP_BULK_MANAGE: 'WHATSAPP_BULK_MANAGE',\n\n // Activities\n ACTIVITIES_CREATE: 'ACTIVITIES_CREATE',\n ACTIVITIES_READ: 'ACTIVITIES_READ',\n ACTIVITIES_UPDATE: 'ACTIVITIES_UPDATE',\n ACTIVITIES_DELETE: 'ACTIVITIES_DELETE',\n ACTIVITIES_MANAGE_NOTIFICATIONS: 'ACTIVITIES_MANAGE_NOTIFICATIONS',\n\n // Tags\n TAGS_CREATE: 'TAGS_CREATE',\n TAGS_READ: 'TAGS_READ',\n TAGS_UPDATE: 'TAGS_UPDATE',\n TAGS_DELETE: 'TAGS_DELETE',\n\n // Commissions\n COMMISSIONS_CONFIG_CREATE: 'COMMISSIONS_CONFIG_CREATE',\n COMMISSIONS_CONFIG_READ: 'COMMISSIONS_CONFIG_READ',\n COMMISSIONS_CONFIG_UPDATE: 'COMMISSIONS_CONFIG_UPDATE',\n COMMISSIONS_RULES_CREATE: 'COMMISSIONS_RULES_CREATE',\n COMMISSIONS_RULES_READ: 'COMMISSIONS_RULES_READ',\n COMMISSIONS_RULES_UPDATE: 'COMMISSIONS_RULES_UPDATE',\n COMMISSIONS_RULES_DELETE: 'COMMISSIONS_RULES_DELETE',\n COMMISSIONS_CALCULATIONS_READ: 'COMMISSIONS_CALCULATIONS_READ',\n COMMISSIONS_REPORTS_VIEW: 'COMMISSIONS_REPORTS_VIEW',\n\n // Catalog\n CATALOG_READ: 'CATALOG_READ',\n CATALOG_UPDATE: 'CATALOG_UPDATE',\n CATALOG_MANAGE: 'CATALOG_MANAGE',\n\n // Special permissions\n SUPER_ADMIN: 'SUPER_ADMIN',\n OWNER: 'OWNER',\n All: 'ALL',\n} as const;\n\n// Role definitions\nexport const ROLE_PERMISSIONS = {\n ADMIN: Object.values(PERMISSIONS),\n MANAGER: [\n PERMISSIONS.GYMS_READ,\n PERMISSIONS.COLLABORATORS_READ,\n PERMISSIONS.CLIENTS_CREATE,\n PERMISSIONS.CLIENTS_READ,\n PERMISSIONS.CLIENTS_UPDATE,\n PERMISSIONS.CONTRACTS_CREATE,\n PERMISSIONS.CONTRACTS_READ,\n PERMISSIONS.CHECKINS_CREATE,\n PERMISSIONS.CHECKINS_READ,\n PERMISSIONS.REPORTS_VIEW,\n PERMISSIONS.ASSETS_CREATE,\n PERMISSIONS.ASSETS_READ,\n PERMISSIONS.ASSETS_DELETE,\n PERMISSIONS.FILES_CREATE,\n PERMISSIONS.FILES_READ,\n PERMISSIONS.FILES_DELETE,\n PERMISSIONS.PRODUCTS_CREATE,\n PERMISSIONS.PRODUCTS_READ,\n PERMISSIONS.PRODUCTS_UPDATE,\n PERMISSIONS.PRODUCTS_DELETE,\n PERMISSIONS.PRODUCT_CATEGORIES_CREATE,\n PERMISSIONS.PRODUCT_CATEGORIES_READ,\n PERMISSIONS.PRODUCT_CATEGORIES_UPDATE,\n PERMISSIONS.PRODUCT_CATEGORIES_DELETE,\n PERMISSIONS.SALES_CREATE,\n PERMISSIONS.SALES_READ,\n PERMISSIONS.SALES_UPDATE,\n PERMISSIONS.SUPPLIERS_CREATE,\n PERMISSIONS.SUPPLIERS_READ,\n PERMISSIONS.SUPPLIERS_UPDATE,\n PERMISSIONS.SUPPLIERS_DELETE,\n PERMISSIONS.PAYMENT_METHODS_CREATE,\n PERMISSIONS.PAYMENT_METHODS_READ,\n PERMISSIONS.PAYMENT_METHODS_UPDATE,\n PERMISSIONS.PAYMENT_METHODS_DELETE,\n PERMISSIONS.COMMISSIONS_RULES_READ,\n PERMISSIONS.COMMISSIONS_CALCULATIONS_READ,\n ],\n} as const;\n\n// Cache TTL values (in milliseconds - cache-manager standard)\nexport const CACHE_TTL = {\n USER_PERMISSIONS: 900000, // 15 minutes\n GYM_DATA: 1800000, // 30 minutes\n STATIC_DATA: 3600000, // 60 minutes\n REPORTS: 300000, // 5 minutes\n DASHBOARD: 180000, // 3 minutes\n WHATSAPP_MESSAGE_STATUS: 300000, // 5 minutes\n ONBOARDING_STATUS: 3600000, // 1 hour\n ONBOARDING_LOCK: 300000, // 5 minutes\n} as const;\n\n// File size limits (in bytes)\nexport const FILE_LIMITS = {\n MAX_FILE_SIZE: 10 * 1024 * 1024, // 10MB\n MAX_IMAGE_SIZE: 5 * 1024 * 1024, // 5MB\n MAX_DOCUMENT_SIZE: 10 * 1024 * 1024, // 10MB\n} as const;\n\n// Pagination defaults\nexport const PAGINATION_DEFAULTS = {\n PAGE: 1,\n LIMIT: 20,\n MAX_LIMIT: 100,\n} as const;\n\n// Date formats\nexport const DATE_FORMATS = {\n DATE_ONLY: 'YYYY-MM-DD',\n DATETIME: 'YYYY-MM-DD HH:mm:ss',\n TIME_ONLY: 'HH:mm:ss',\n} as const;\n\n// Headers\nexport const HEADERS = {\n GYM_ID: 'X-Gym-Id',\n REQUEST_ID: 'X-Request-Id',\n} as const;\n\n// Re-export template constants\nexport * from './constants/template-codes.constants';\nexport * from './constants/bulk-message-variables';\n","export enum UserType {\n OWNER = 'owner',\n COLLABORATOR = 'collaborator',\n}\n\nexport enum SubscriptionStatus {\n ACTIVE = 'active',\n INACTIVE = 'inactive',\n EXPIRED = 'expired',\n PAUSED = 'paused',\n PENDING_UPGRADE = 'pending_upgrade',\n}\n\nexport enum CollaboratorStatus {\n PENDING = 'pending',\n ACTIVE = 'active',\n INACTIVE = 'inactive',\n}\n\nexport enum InvitationStatus {\n PENDING = 'pending',\n ACCEPTED = 'accepted',\n CANCELLED = 'cancelled',\n EXPIRED = 'expired',\n}\n\nexport enum ClientStatus {\n ACTIVE = 'active',\n INACTIVE = 'inactive',\n}\n\nexport enum PlanStatus {\n ACTIVE = 'active',\n INACTIVE = 'inactive',\n ARCHIVED = 'archived',\n}\n\nexport enum PlanType {\n BASIC = 'BASIC',\n PREMIUM = 'PREMIUM',\n ENTERPRISE = 'ENTERPRISE',\n}\n\nexport enum ContractStatus {\n PENDING = 'pending',\n ACTIVE = 'active',\n EXPIRING_SOON = 'expiring_soon',\n EXPIRED = 'expired',\n CANCELLED = 'cancelled',\n FOR_RENEW = 'for_renew',\n SUSPENDED = 'suspended',\n GRACE_PERIOD = 'grace_period',\n TERMINATED = 'terminated',\n}\n\nexport enum CancellationReason {\n PRICE_TOO_HIGH = 'PRICE_TOO_HIGH',\n NOT_USING_SERVICE = 'NOT_USING_SERVICE',\n MOVING_LOCATION = 'MOVING_LOCATION',\n FINANCIAL_ISSUES = 'FINANCIAL_ISSUES',\n SERVICE_DISSATISFACTION = 'SERVICE_DISSATISFACTION',\n TEMPORARY_BREAK = 'TEMPORARY_BREAK',\n OTHER = 'OTHER',\n}\n\nexport enum SuspensionType {\n VACATION = 'vacation',\n MEDICAL = 'medical',\n FINANCIAL = 'financial',\n OTHER = 'other',\n}\n\nexport enum PaymentFrequency {\n MONTHLY = 'monthly',\n QUARTERLY = 'quarterly',\n ANNUAL = 'annual',\n}\n\nexport enum AssetStatus {\n ACTIVE = 'active',\n DELETED = 'deleted',\n}\n\nexport enum AssetCategory {\n MEDICAL_DOCUMENT = 'medical_document',\n IDENTIFICATION = 'identification',\n INSURANCE = 'insurance',\n CONTRACT_COPY = 'contract_copy',\n OTHER = 'other',\n}\n\nexport enum ContractAssetType {\n PAYMENT_RECEIPT = 'payment_receipt',\n CONTRACT_DOCUMENT = 'contract_document',\n IDENTIFICATION = 'identification',\n OTHER = 'other',\n}\n","/**\n * Evento para enviar un mensaje de WhatsApp\n */\nexport interface WhatsAppMessageSendEventData {\n // Identificadores\n gymId: string;\n instanceName: string; // Nombre de la instancia de Evolution API\n\n // Destinatario\n phoneNumber: string;\n\n // Contenido\n content: string;\n\n // Metadata opcional\n clientId?: string;\n templateId?: string;\n variables?: Record<string, any>;\n\n // Usuario que generó el envío\n userId?: string;\n}\n\n/**\n * Nombres de eventos de WhatsApp\n */\nexport const WHATSAPP_EVENTS = {\n MESSAGE_SEND: 'whatsapp/message.send',\n MESSAGE_RECEIVED: 'whatsapp/message.received',\n CONNECTION_UPDATE: 'whatsapp/connection.update',\n} as const;\n","import { VariableContextType } from '../constants/bulk-message-variables';\n\nexport const BULK_MESSAGING_EVENTS = {\n SEND_BULK_MESSAGES: 'whatsapp/bulk-messages.send',\n} as const;\n\nexport interface BulkMessageEventData {\n sendId: string;\n gymId: string;\n userId: string;\n instanceName: string;\n templateId?: string;\n message: string;\n variableContext?: VariableContextType; // Tipo de contexto\n clients: Array<{\n clientId: string;\n clientName: string;\n phoneNumber: string;\n data: Record<string, any>; // Raw data sin procesar\n }>;\n gymData: Record<string, any>; // Raw data del gym\n contextData?: Record<string, any>; // Data adicional del contexto (activity, event, etc.)\n}\n\nexport interface SendBulkMessagesEvent {\n name: typeof BULK_MESSAGING_EVENTS.SEND_BULK_MESSAGES;\n data: BulkMessageEventData;\n}\n","export const ACTIVITY_EVENTS = {\n SEND_ACTIVITY_NOTIFICATION: 'activity/notification.send',\n} as const;\n\nexport interface SendActivityNotificationEvent {\n name: typeof ACTIVITY_EVENTS.SEND_ACTIVITY_NOTIFICATION;\n data: {\n activityId: string;\n notificationId: string;\n gymId: string;\n userId: string;\n instanceName: string;\n message: string;\n clients: Array<{\n clientId: string;\n clientName: string;\n phoneNumber: string;\n data: {\n id: string;\n name: string;\n email?: string;\n phone: string;\n activePlan?: {\n name: string;\n expirationDate?: Date;\n amount?: number;\n };\n membershipStatus?: string;\n metadata?: Record<string, any>;\n };\n }>;\n gymData: {\n name: string;\n phone?: string;\n address?: string;\n countryConfig: {\n currency: string;\n locale: string;\n };\n };\n activityData: {\n name: string;\n startDateTime: Date;\n durationMinutes: number;\n location: string;\n };\n };\n}\n","import { z } from 'zod';\n\nexport const templateGenerationRequestSchema = z.object({\n templateCode: z.string(),\n templateMetadata: z.object({\n title: z.string(),\n description: z.string(),\n variables: z.array(z.string()),\n exampleValues: z.record(z.string()),\n }),\n userPrompt: z.string().optional(),\n language: z.string().default('es'),\n});\n\nexport const aiGeneratedTemplateSchema = z.object({\n message: z.string().describe('Mensaje generado con variables en formato {{variable}}'),\n tone: z.enum(['professional', 'friendly', 'casual', 'urgent']).describe('Tono del mensaje'),\n usedVariables: z.array(z.string()).describe('Variables utilizadas en el mensaje'),\n suggestions: z.array(z.string()).optional().describe('Sugerencias adicionales'),\n});\n\nexport type TemplateGenerationRequest = z.infer<typeof templateGenerationRequestSchema>;\nexport type AIGeneratedTemplate = z.infer<typeof aiGeneratedTemplateSchema>;\n","import { z } from 'zod';\n\nexport const bulkMessageGenerationRequestSchema = z.object({\n prompt: z.string().describe('Prompt or context for message generation'),\n tone: z\n .enum(['promotional', 'informational', 'reminder', 'greeting', 'friendly'])\n .optional()\n .describe('Tone of the message'),\n includeVariables: z.array(z.string()).optional().describe('Variables to include in the message'),\n additionalRequirements: z.string().optional().describe('Additional requirements for the message'),\n language: z.string().default('es').describe('Language for generation'),\n});\n\nexport const bulkMessageSchema = z.object({\n message: z.string().describe('Generated message with variables'),\n tone: z\n .enum(['promotional', 'informational', 'reminder', 'greeting', 'friendly'])\n .describe('Tone of the message'),\n usedVariables: z.array(z.string()).describe('Variables used in the message'),\n suggestions: z.array(z.string()).optional().describe('Additional message suggestions'),\n});\n\nexport type BulkMessageGenerationRequest = z.infer<typeof bulkMessageGenerationRequestSchema>;\nexport type BulkMessage = z.infer<typeof bulkMessageSchema>;\n","import { z } from 'zod';\n\nexport const activityNotificationGenerationRequestSchema = z.object({\n prompt: z.string().describe('Prompt or context for notification generation'),\n tone: z\n .enum(['friendly', 'formal', 'urgent', 'motivational', 'reminder'])\n .optional()\n .describe('Tone of the notification'),\n currentMessage: z.string().optional().describe('Current message to improve or use as reference'),\n additionalRequirements: z\n .string()\n .optional()\n .describe('Additional requirements for the notification'),\n language: z.string().default('es').describe('Language for generation'),\n});\n\nexport const activityNotificationSchema = z.object({\n message: z.string().describe('Generated notification message with activity variables'),\n});\n\nexport type ActivityNotificationGenerationRequest = z.infer<\n typeof activityNotificationGenerationRequestSchema\n>;\nexport type ActivityNotification = z.infer<typeof activityNotificationSchema>;\n","export enum RoleNames {\n ADMIN = 'Admin',\n ENCARGADO = 'Encargado',\n OWNER = 'OWNER', // Pseudo-role for gym owners\n}\n\nexport const ROLE_NAMES = RoleNames;\n\nexport type RoleName = RoleNames;\n\nexport function isAdminRole(roleName: string | null | undefined): boolean {\n return roleName === RoleNames.ADMIN;\n}\n\nexport function isEncargadoRole(roleName: string | null | undefined): boolean {\n return roleName === RoleNames.ENCARGADO;\n}\n\nexport function canAccessFeature(\n userRole: string | null | undefined,\n allowedRoles: string[] | RoleNames[]\n): boolean {\n if (!userRole) return false;\n // OWNER pseudo-role has access to everything\n if (userRole === RoleNames.OWNER) return true;\n return allowedRoles.includes(userRole as any);\n}\n\nexport function getRoleDisplayName(roleName: string | null | undefined): string {\n if (!roleName) return '';\n\n switch (roleName) {\n case RoleNames.ADMIN:\n return 'Administrador';\n case RoleNames.ENCARGADO:\n return 'Encargado';\n case RoleNames.OWNER:\n return 'Propietario';\n default:\n return roleName;\n }\n}\n\nexport function getRoleDescription(roleName: string | null | undefined): string {\n if (!roleName) return '';\n\n switch (roleName) {\n case RoleNames.ADMIN:\n return 'Acceso completo a todas las funcionalidades del gimnasio, gestión de colaboradores y configuración';\n case RoleNames.ENCARGADO:\n return 'Gestión diaria del gimnasio: clientes, contratos, check-ins y reportes';\n case RoleNames.OWNER:\n return 'Acceso completo a todas las funcionalidades, organización y suscripción';\n default:\n return '';\n }\n}\n\nexport function getRoleCapabilities(roleName: string | null | undefined): string[] {\n if (!roleName) return [];\n\n switch (roleName) {\n case RoleNames.OWNER:\n return [\n 'Acceso completo a todas las funcionalidades',\n 'Gestión de organización',\n 'Gestión de suscripción y facturación',\n 'Gestión completa de clientes',\n 'Gestión completa de contratos',\n 'Gestión de colaboradores',\n 'Configuración del gimnasio',\n 'Gestión de planes',\n 'Gestión de proveedores',\n 'Gestión de métodos de pago',\n 'Reportes y estadísticas',\n 'Gestión de inventario',\n 'Check-ins',\n ];\n case RoleNames.ADMIN:\n return [\n 'Gestión completa de clientes',\n 'Gestión completa de contratos',\n 'Gestión de colaboradores',\n 'Configuración del gimnasio',\n 'Gestión de planes',\n 'Gestión de proveedores',\n 'Gestión de métodos de pago',\n 'Reportes y estadísticas',\n 'Gestión de inventario',\n 'Check-ins',\n ];\n case RoleNames.ENCARGADO:\n return [\n 'Gestión de clientes (ver, crear, editar)',\n 'Creación y renovación de contratos',\n 'Check-ins',\n 'Ver reportes',\n 'Gestión de inventario',\n 'Ventas',\n ];\n default:\n return [];\n }\n}","/**\n * Simple phone number utilities for WhatsApp Evolution API\n */\n\n/**\n * Normalizes a phone number for Evolution API\n * Adds country code +51 for Peru if missing and ensures + prefix\n *\n * @param phoneNumber - Phone number in various formats\n * @returns Normalized phone number with + prefix\n *\n * Examples:\n * - \"987654321\" -> \"+51987654321\"\n * - \"51987654321\" -> \"+51987654321\"\n * - \"+51987654321\" -> \"+51987654321\"\n */\nexport function normalizePhoneForEvolution(phoneNumber: string): string {\n if (!phoneNumber) {\n throw new Error('Phone number is required');\n }\n\n // Remove all non-numeric characters except +\n let cleaned = phoneNumber.replace(/[^\\d+]/g, '');\n\n // Remove + if exists, we'll add it back\n if (cleaned.startsWith('+')) {\n cleaned = cleaned.substring(1);\n }\n\n // Handle Peru specific cases\n if (cleaned.length === 9) {\n // Local number, add Peru country code\n return `+51${cleaned}`;\n }\n\n if (cleaned.length === 11 && cleaned.startsWith('51')) {\n // Already has country code\n return `+${cleaned}`;\n }\n\n if (cleaned.length === 12 && cleaned.startsWith('051')) {\n // Remove leading 0\n return `+${cleaned.substring(1)}`;\n }\n\n // For other cases, assume it needs + prefix\n if (!cleaned.startsWith('+')) {\n return `+${cleaned}`;\n }\n\n return cleaned;\n}\n\n/**\n * Validates if a phone number is valid for Peru\n */\nexport function isValidPeruvianPhone(phoneNumber: string): boolean {\n try {\n const normalized = normalizePhoneForEvolution(phoneNumber);\n // Peru numbers should be +51 followed by 9 digits starting with 9\n return /^\\+51[9]\\d{8}$/.test(normalized);\n } catch {\n return false;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/types/whatsapp-templates.types.ts","../src/constants/template-codes.constants.ts","../src/constants/bulk-message-variables.ts","../src/constants.ts","../src/enums.ts","../src/events/whatsapp.events.ts","../src/events/bulk-messaging.events.ts","../src/events/activity.events.ts","../src/schemas/ai-template.schema.ts","../src/schemas/bulk-message.schema.ts","../src/schemas/activity-notification.schema.ts","../src/utils/roleHelpers.ts","../src/utils/phone.utils.ts"],"names":["UserType","SubscriptionStatus","CollaboratorStatus","InvitationStatus","ClientStatus","PlanStatus","PlanType","ContractStatus","CancellationReason","SuspensionType","PaymentFrequency","AssetStatus","AssetCategory","ContractAssetType","MessageStatus","z","RoleNames"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Template codes for WhatsApp messages\n */\nexport const TemplateCode = {\n WELCOME: 'WELCOME',\n MEMBERSHIP_PURCHASE: 'MEMBERSHIP_PURCHASE',\n MEMBERSHIP_RENEWAL: 'MEMBERSHIP_RENEWAL',\n MEMBERSHIP_EXPIRING: 'MEMBERSHIP_EXPIRING',\n PAYMENT_REMINDER: 'PAYMENT_REMINDER',\n BIRTHDAY: 'BIRTHDAY',\n PAYMENT_RECEIPT: 'PAYMENT_RECEIPT',\n SHARE_CATALOG: 'SHARE_CATALOG',\n SALE_PAYMENT_REMINDER: 'SALE_PAYMENT_REMINDER',\n} as const;\n\nexport type TemplateCodeValue = (typeof TemplateCode)[keyof typeof TemplateCode];\nexport type TemplateCode = TemplateCodeValue;\n\n/**\n * Template types\n */\nexport const TemplateType = {\n STATIC: 'STATIC',\n PROMPT: 'PROMPT',\n} as const;\n\nexport type TemplateTypeValue = (typeof TemplateType)[keyof typeof TemplateType];\nexport type TemplateType = TemplateTypeValue;\n\n/**\n * Base interface for WhatsApp template data\n */\nexport interface WhatsAppTemplateData {\n gymId: string;\n clientId: string;\n phoneNumber: string;\n templateCode: TemplateCode;\n variables: Record<string, any>;\n metadata?: {\n contractId?: string;\n userId?: string;\n source?: string;\n instanceName?: string;\n };\n}\n\n/**\n * Welcome message template data\n */\nexport interface WelcomeTemplateData\n extends Omit<WhatsAppTemplateData, 'templateCode' | 'variables'> {\n templateCode: typeof TemplateCode.WELCOME;\n variables: {\n clientName: string;\n gymName: string;\n registrationDate: string;\n };\n}\n\n/**\n * Membership purchase template data\n */\nexport interface MembershipPurchaseTemplateData\n extends Omit<WhatsAppTemplateData, 'templateCode' | 'variables'> {\n templateCode: typeof TemplateCode.MEMBERSHIP_PURCHASE;\n variables: {\n clientName: string;\n planName: string;\n startDate: string;\n endDate: string;\n amount: string;\n paymentFrequency: string;\n };\n}\n\n/**\n * Membership renewal template data\n */\nexport interface MembershipRenewalTemplateData\n extends Omit<WhatsAppTemplateData, 'templateCode' | 'variables'> {\n templateCode: typeof TemplateCode.MEMBERSHIP_RENEWAL;\n variables: {\n clientName: string;\n planName: string;\n newEndDate: string;\n amount: string;\n };\n}\n\n/**\n * Membership expiring template data\n */\nexport interface MembershipExpiringTemplateData\n extends Omit<WhatsAppTemplateData, 'templateCode' | 'variables'> {\n templateCode: typeof TemplateCode.MEMBERSHIP_EXPIRING;\n variables: {\n clientName: string;\n planName: string;\n expirationDate: string;\n daysRemaining: string;\n };\n}\n\n/**\n * Payment reminder template data\n */\nexport interface PaymentReminderTemplateData\n extends Omit<WhatsAppTemplateData, 'templateCode' | 'variables'> {\n templateCode: typeof TemplateCode.PAYMENT_REMINDER;\n variables: {\n clientName: string;\n amount: string;\n dueDate: string;\n planName: string;\n };\n}\n\n/**\n * Birthday template data\n */\nexport interface BirthdayTemplateData\n extends Omit<WhatsAppTemplateData, 'templateCode' | 'variables'> {\n templateCode: typeof TemplateCode.BIRTHDAY;\n variables: {\n clientName: string;\n gymName: string;\n age: string;\n };\n}\n\n/**\n * Payment receipt template data\n */\nexport interface PaymentReceiptTemplateData\n extends Omit<WhatsAppTemplateData, 'templateCode' | 'variables'> {\n templateCode: typeof TemplateCode.PAYMENT_RECEIPT;\n variables: {\n gymName: string;\n receiptNumber: string;\n date: string;\n clientName: string;\n items: string;\n amount: string;\n paymentMethod: string;\n };\n metadata?: {\n saleId?: string;\n userId?: string;\n source?: string;\n instanceName?: string;\n };\n}\n\n/**\n * Share catalog template data\n */\nexport interface ShareCatalogTemplateData\n extends Omit<WhatsAppTemplateData, 'templateCode' | 'variables'> {\n templateCode: typeof TemplateCode.SHARE_CATALOG;\n variables: {\n clientName: string;\n gymName: string;\n urlCatalog: string;\n };\n}\n\n/**\n * Sale payment reminder template data\n */\nexport interface SalePaymentReminderTemplateData\n extends Omit<WhatsAppTemplateData, 'templateCode' | 'variables'> {\n templateCode: typeof TemplateCode.SALE_PAYMENT_REMINDER;\n variables: {\n clientName: string;\n saleNumber: string;\n total: string;\n saleDate: string;\n daysOverdue?: string;\n items?: string;\n };\n metadata?: {\n saleId?: string;\n userId?: string;\n source?: string;\n instanceName?: string;\n };\n}\n\n/**\n * Union type for all template data types\n */\nexport type WhatsAppTemplateEventData =\n | WelcomeTemplateData\n | MembershipPurchaseTemplateData\n | MembershipRenewalTemplateData\n | MembershipExpiringTemplateData\n | PaymentReminderTemplateData\n | BirthdayTemplateData\n | PaymentReceiptTemplateData\n | ShareCatalogTemplateData\n | SalePaymentReminderTemplateData;\n\n/**\n * Template metadata interface\n */\nexport interface TemplateMetadata {\n code: TemplateCode;\n title: string;\n description: string;\n icon: string;\n variables: string[];\n exampleValues: Record<string, string>;\n}\n","import { TemplateCode } from '../types/whatsapp-templates.types';\n\n/**\n * Template code constants\n */\nexport const TEMPLATE_CODES = {\n WELCOME: TemplateCode.WELCOME,\n MEMBERSHIP_PURCHASE: TemplateCode.MEMBERSHIP_PURCHASE,\n MEMBERSHIP_RENEWAL: TemplateCode.MEMBERSHIP_RENEWAL,\n MEMBERSHIP_EXPIRING: TemplateCode.MEMBERSHIP_EXPIRING,\n PAYMENT_REMINDER: TemplateCode.PAYMENT_REMINDER,\n BIRTHDAY: TemplateCode.BIRTHDAY,\n PAYMENT_RECEIPT: TemplateCode.PAYMENT_RECEIPT,\n SHARE_CATALOG: TemplateCode.SHARE_CATALOG,\n SALE_PAYMENT_REMINDER: TemplateCode.SALE_PAYMENT_REMINDER,\n} as const;\n\n/**\n * Event names for WhatsApp template events\n */\nexport const WHATSAPP_TEMPLATE_EVENTS = {\n SEND_TEMPLATE: 'whatsapp/template.send',\n TEMPLATE_SENT: 'whatsapp/template.sent',\n TEMPLATE_FAILED: 'whatsapp/template.failed',\n} as const;\n\n/**\n * Template metadata mapping\n */\nexport const TEMPLATE_METADATA = {\n [TemplateCode.WELCOME]: {\n code: TemplateCode.WELCOME,\n title: 'Mensaje de Bienvenida',\n description: 'Mensaje para nuevos clientes',\n icon: 'UserPlus',\n variables: ['clientName', 'gymName', 'registrationDate'],\n exampleValues: {\n clientName: 'Juan Pérez',\n gymName: 'GymSpace',\n registrationDate: '15/01/2024',\n },\n },\n [TemplateCode.MEMBERSHIP_PURCHASE]: {\n code: TemplateCode.MEMBERSHIP_PURCHASE,\n title: 'Compra de Membresía',\n description: 'Confirmación de nueva membresía',\n icon: 'ShoppingCart',\n variables: ['clientName', 'planName', 'startDate', 'endDate', 'amount', 'paymentFrequency'],\n exampleValues: {\n clientName: 'María López',\n planName: 'Premium',\n startDate: '01/02/2024',\n endDate: '01/03/2024',\n amount: '$50.00',\n paymentFrequency: 'mensual',\n },\n },\n [TemplateCode.MEMBERSHIP_RENEWAL]: {\n code: TemplateCode.MEMBERSHIP_RENEWAL,\n title: 'Renovación de Membresía',\n description: 'Confirmación de renovación',\n icon: 'RefreshCw',\n variables: ['clientName', 'planName', 'newEndDate', 'amount'],\n exampleValues: {\n clientName: 'Carlos Ruiz',\n planName: 'Básico',\n newEndDate: '15/04/2024',\n amount: '$30.00',\n },\n },\n [TemplateCode.MEMBERSHIP_EXPIRING]: {\n code: TemplateCode.MEMBERSHIP_EXPIRING,\n title: 'Membresía Por Vencer',\n description: 'Recordatorio de expiración próxima',\n icon: 'AlertCircle',\n variables: ['clientName', 'planName', 'expirationDate', 'daysRemaining'],\n exampleValues: {\n clientName: 'Ana García',\n planName: 'Premium',\n expirationDate: '20/02/2024',\n daysRemaining: '3',\n },\n },\n [TemplateCode.PAYMENT_REMINDER]: {\n code: TemplateCode.PAYMENT_REMINDER,\n title: 'Recordatorio de Pago',\n description: 'Recordatorio de pago pendiente',\n icon: 'DollarSign',\n variables: ['clientName', 'amount', 'dueDate', 'planName'],\n exampleValues: {\n clientName: 'Pedro Sánchez',\n amount: '$40.00',\n dueDate: '25/02/2024',\n planName: 'Estándar',\n },\n },\n [TemplateCode.BIRTHDAY]: {\n code: TemplateCode.BIRTHDAY,\n title: 'Cumpleaños',\n description: 'Felicitación de cumpleaños',\n icon: 'Cake',\n variables: ['clientName', 'gymName', 'age'],\n exampleValues: {\n clientName: 'Laura Martínez',\n gymName: 'GymSpace',\n age: '28',\n },\n },\n [TemplateCode.PAYMENT_RECEIPT]: {\n code: TemplateCode.PAYMENT_RECEIPT,\n title: 'Comprobante de Pago',\n description: 'Comprobante de venta pagada',\n icon: 'Receipt',\n variables: [\n 'gymName',\n 'receiptNumber',\n 'date',\n 'clientName',\n 'items',\n 'amount',\n 'paymentMethod',\n 'saleItems',\n 'currency',\n ],\n exampleValues: {\n gymName: 'GymSpace',\n receiptNumber: 'V-001',\n date: '15/01/2024',\n clientName: 'Juan Pérez',\n items: '• Proteína x2 = Q100.00\\n• Creatina x1 = Q50.00',\n amount: 'Q150.00',\n paymentMethod: 'Efectivo',\n saleItems: [\n { product: { name: 'Proteína' }, quantity: 2, total: '100.00' },\n { product: { name: 'Creatina' }, quantity: 1, total: '50.00' },\n ],\n currency: 'Q',\n },\n },\n [TemplateCode.SHARE_CATALOG]: {\n code: TemplateCode.SHARE_CATALOG,\n title: 'Compartir Catálogo',\n description: 'Mensaje para compartir catálogo de membresías',\n icon: 'Share2',\n variables: ['clientName', 'gymName', 'urlCatalog'],\n exampleValues: {\n clientName: 'Roberto Gómez',\n gymName: 'GymSpace',\n urlCatalog: 'https://gymspace.app/catalog/gym-123',\n },\n },\n [TemplateCode.SALE_PAYMENT_REMINDER]: {\n code: TemplateCode.SALE_PAYMENT_REMINDER,\n title: 'Recordatorio de Pago de Venta',\n description: 'Recordatorio para ventas con pago pendiente',\n icon: 'AlertCircle',\n variables: [\n 'clientName',\n 'saleNumber',\n 'total',\n 'saleDate',\n 'daysOverdue',\n 'items',\n 'saleItems',\n 'currency',\n ],\n exampleValues: {\n clientName: 'Manuel Trainer',\n saleNumber: '#202511130003',\n total: 'S/ 205.00',\n saleDate: '13/11/2025',\n daysOverdue: '3',\n items: '• BCAA x2\\n• Pre-Entreno x1',\n saleItems: [\n { product: { name: 'BCAA' }, quantity: 2 },\n { product: { name: 'Pre-Entreno' }, quantity: 1 },\n ],\n currency: 'S/ ',\n },\n },\n} as const;\n","export interface BulkMessageVariable {\n name: string;\n placeholder: string;\n description: string;\n example: string;\n category: 'client' | 'gym' | 'membership' | 'activity' | 'datetime';\n required: boolean;\n formatter?: 'text' | 'currency' | 'date' | 'datetime' | 'number';\n}\n\nexport const BULK_MESSAGE_VARIABLES: BulkMessageVariable[] = [\n // Variables de Cliente\n {\n name: 'clientName',\n placeholder: '{{clientName}}',\n description: 'Nombre completo del cliente',\n example: 'Juan Pérez',\n category: 'client',\n required: false,\n formatter: 'text',\n },\n {\n name: 'clientEmail',\n placeholder: '{{clientEmail}}',\n description: 'Email del cliente',\n example: 'juan@example.com',\n category: 'client',\n required: false,\n formatter: 'text',\n },\n {\n name: 'clientPhone',\n placeholder: '{{clientPhone}}',\n description: 'Teléfono del cliente',\n example: '+51 999 999 999',\n category: 'client',\n required: false,\n formatter: 'text',\n },\n\n // Variables de Gimnasio\n {\n name: 'gymName',\n placeholder: '{{gymName}}',\n description: 'Nombre del gimnasio',\n example: 'Gym Fitness',\n category: 'gym',\n required: false,\n formatter: 'text',\n },\n {\n name: 'gymPhone',\n placeholder: '{{gymPhone}}',\n description: 'Teléfono del gimnasio',\n example: '+51 999 888 777',\n category: 'gym',\n required: false,\n formatter: 'text',\n },\n {\n name: 'gymAddress',\n placeholder: '{{gymAddress}}',\n description: 'Dirección del gimnasio',\n example: 'Av. Principal 123',\n category: 'gym',\n required: false,\n formatter: 'text',\n },\n\n // Variables de Membresía\n {\n name: 'planName',\n placeholder: '{{planName}}',\n description: 'Nombre del plan de membresía',\n example: 'Plan Premium',\n category: 'membership',\n required: false,\n formatter: 'text',\n },\n {\n name: 'membershipStatus',\n placeholder: '{{membershipStatus}}',\n description: 'Estado de la membresía',\n example: 'Activa',\n category: 'membership',\n required: false,\n formatter: 'text',\n },\n {\n name: 'daysUntilExpiration',\n placeholder: '{{daysUntilExpiration}}',\n description: 'Días restantes hasta vencimiento',\n example: '15',\n category: 'membership',\n required: false,\n formatter: 'number',\n },\n {\n name: 'expirationDate',\n placeholder: '{{expirationDate}}',\n description: 'Fecha de vencimiento',\n example: '31/12/2024',\n category: 'membership',\n required: false,\n formatter: 'date',\n },\n {\n name: 'amount',\n placeholder: '{{amount}}',\n description: 'Monto con formato de moneda',\n example: 'S/ 150.00',\n category: 'membership',\n required: false,\n formatter: 'currency',\n },\n\n // Variables de Fecha/Hora\n {\n name: 'date',\n placeholder: '{{date}}',\n description: 'Fecha actual',\n example: '15/10/2024',\n category: 'datetime',\n required: false,\n formatter: 'date',\n },\n {\n name: 'time',\n placeholder: '{{time}}',\n description: 'Hora actual',\n example: '14:30',\n category: 'datetime',\n required: false,\n formatter: 'text',\n },\n {\n name: 'dayOfWeek',\n placeholder: '{{dayOfWeek}}',\n description: 'Día de la semana',\n example: 'Lunes',\n category: 'datetime',\n required: false,\n formatter: 'text',\n },\n];\n\n// Variables de Actividades\nexport const ACTIVITY_MESSAGE_VARIABLES: BulkMessageVariable[] = [\n {\n name: 'activityName',\n placeholder: '{{activityName}}',\n description: 'Nombre de la actividad',\n example: 'Yoga Matutino',\n category: 'activity',\n required: false,\n formatter: 'text',\n },\n {\n name: 'activityDescription',\n placeholder: '{{activityDescription}}',\n description: 'Descripción de la actividad',\n example: 'Sesión de yoga para principiantes',\n category: 'activity',\n required: false,\n formatter: 'text',\n },\n {\n name: 'activityStartDate',\n placeholder: '{{activityStartDate}}',\n description: 'Fecha de inicio de la actividad',\n example: '15/10/2024',\n category: 'activity',\n required: false,\n formatter: 'date',\n },\n {\n name: 'activityStartTime',\n placeholder: '{{activityStartTime}}',\n description: 'Hora de inicio de la actividad',\n example: '08:00',\n category: 'activity',\n required: false,\n formatter: 'text',\n },\n {\n name: 'activityStartDateTime',\n placeholder: '{{activityStartDateTime}}',\n description: 'Fecha y hora de inicio de la actividad',\n example: '15/10/2024 08:00',\n category: 'activity',\n required: false,\n formatter: 'datetime',\n },\n {\n name: 'activityDuration',\n placeholder: '{{activityDuration}}',\n description: 'Duración de la actividad en minutos',\n example: '60',\n category: 'activity',\n required: false,\n formatter: 'number',\n },\n {\n name: 'activityMaxParticipants',\n placeholder: '{{activityMaxParticipants}}',\n description: 'Número máximo de participantes',\n example: '20',\n category: 'activity',\n required: false,\n formatter: 'number',\n },\n {\n name: 'activityLocation',\n placeholder: '{{activityLocation}}',\n description: 'Ubicación de la actividad',\n example: 'Av. Principal 123',\n category: 'activity',\n required: false,\n formatter: 'text',\n },\n {\n name: 'timeUntilActivity',\n placeholder: '{{timeUntilActivity}}',\n description: 'Tiempo restante hasta la actividad',\n example: '2 horas',\n category: 'activity',\n required: false,\n formatter: 'text',\n },\n];\n\n// Tipo de contexto de variables\nexport type VariableContextType = 'bulk' | 'activity' | 'event' | 'reminder';\n\n// Mapeo de contextos a variables disponibles\nexport const VARIABLE_CONTEXT_MAP: Record<VariableContextType, BulkMessageVariable[]> = {\n bulk: BULK_MESSAGE_VARIABLES,\n activity: [...BULK_MESSAGE_VARIABLES, ...ACTIVITY_MESSAGE_VARIABLES],\n event: BULK_MESSAGE_VARIABLES, // Para futuros eventos\n reminder: BULK_MESSAGE_VARIABLES, // Para futuros recordatorios\n};\n\n// Helper para obtener variables por contexto\nexport function getVariablesByContext(context: VariableContextType): BulkMessageVariable[] {\n return VARIABLE_CONTEXT_MAP[context] || BULK_MESSAGE_VARIABLES;\n}\n\n// Helper para validar variables en un contexto\n// Soporta tanto {{variable}} como {variable}\nexport function validateVariablesInContext(\n message: string,\n context: VariableContextType,\n): { valid: boolean; invalidVariables: string[] } {\n // Soportar tanto {{variable}} como {variable}\n const doubleBracePattern = /\\{\\{(\\w+)\\}\\}/g;\n const singleBracePattern = /\\{(\\w+)\\}/g;\n\n const doubleBraceMatches = message.matchAll(doubleBracePattern);\n const singleBraceMatches = message.matchAll(singleBracePattern);\n\n const invalidVariables: string[] = [];\n const validVariables = getVariablesByContext(context).map((v) => v.name);\n\n // Validar variables con doble llave\n for (const match of doubleBraceMatches) {\n const variableName = match[1];\n if (!validVariables.includes(variableName)) {\n invalidVariables.push(variableName);\n }\n }\n\n // Validar variables con una sola llave\n for (const match of singleBraceMatches) {\n const variableName = match[1];\n if (!validVariables.includes(variableName) && !invalidVariables.includes(variableName)) {\n invalidVariables.push(variableName);\n }\n }\n\n return {\n valid: invalidVariables.length === 0,\n invalidVariables,\n };\n}\n\nexport const BULK_MESSAGE_VARIABLE_CATEGORIES = {\n client: 'Cliente',\n gym: 'Gimnasio',\n membership: 'Membresía',\n activity: 'Actividad',\n datetime: 'Fecha/Hora',\n} as const;\n","// Permission constants\nexport const PERMISSIONS = {\n // Organizations\n ORGANIZATIONS_CREATE: 'ORGANIZATIONS_CREATE',\n ORGANIZATIONS_READ: 'ORGANIZATIONS_READ',\n ORGANIZATIONS_UPDATE: 'ORGANIZATIONS_UPDATE',\n ORGANIZATIONS_DELETE: 'ORGANIZATIONS_DELETE',\n\n // Gyms\n GYMS_CREATE: 'GYMS_CREATE',\n GYMS_READ: 'GYMS_READ',\n GYMS_UPDATE: 'GYMS_UPDATE',\n GYMS_DELETE: 'GYMS_DELETE',\n\n // Collaborators\n COLLABORATORS_CREATE: 'COLLABORATORS_CREATE',\n COLLABORATORS_READ: 'COLLABORATORS_READ',\n COLLABORATORS_UPDATE: 'COLLABORATORS_UPDATE',\n COLLABORATORS_DELETE: 'COLLABORATORS_DELETE',\n\n // Clients\n CLIENTS_CREATE: 'CLIENTS_CREATE',\n CLIENTS_READ: 'CLIENTS_READ',\n CLIENTS_UPDATE: 'CLIENTS_UPDATE',\n CLIENTS_DELETE: 'CLIENTS_DELETE',\n\n // Contracts\n CONTRACTS_CREATE: 'CONTRACTS_CREATE',\n CONTRACTS_READ: 'CONTRACTS_READ',\n CONTRACTS_UPDATE: 'CONTRACTS_UPDATE',\n CONTRACTS_APPROVE: 'CONTRACTS_APPROVE',\n CONTRACTS_CANCEL: 'CONTRACTS_CANCEL',\n\n // Check-ins\n CHECKINS_CREATE: 'CHECKINS_CREATE',\n CHECKINS_READ: 'CHECKINS_READ',\n\n // Reports\n REPORTS_VIEW: 'REPORTS_VIEW',\n REPORTS_FINANCIAL: 'REPORTS_FINANCIAL',\n\n // Settings\n SETTINGS_UPDATE: 'SETTINGS_UPDATE',\n\n // Assets\n ASSETS_CREATE: 'ASSETS_CREATE',\n ASSETS_READ: 'ASSETS_READ',\n ASSETS_DELETE: 'ASSETS_DELETE',\n\n // Files\n FILES_CREATE: 'FILES_CREATE',\n FILES_READ: 'FILES_READ',\n FILES_DELETE: 'FILES_DELETE',\n\n // Products\n PRODUCTS_CREATE: 'PRODUCTS_CREATE',\n PRODUCTS_READ: 'PRODUCTS_READ',\n PRODUCTS_UPDATE: 'PRODUCTS_UPDATE',\n PRODUCTS_DELETE: 'PRODUCTS_DELETE',\n\n // Product Categories\n PRODUCT_CATEGORIES_CREATE: 'PRODUCT_CATEGORIES_CREATE',\n PRODUCT_CATEGORIES_READ: 'PRODUCT_CATEGORIES_READ',\n PRODUCT_CATEGORIES_UPDATE: 'PRODUCT_CATEGORIES_UPDATE',\n PRODUCT_CATEGORIES_DELETE: 'PRODUCT_CATEGORIES_DELETE',\n\n // Sales\n SALES_CREATE: 'SALES_CREATE',\n SALES_READ: 'SALES_READ',\n SALES_UPDATE: 'SALES_UPDATE',\n SALES_DELETE: 'SALES_DELETE',\n\n // Suppliers\n SUPPLIERS_CREATE: 'SUPPLIERS_CREATE',\n SUPPLIERS_READ: 'SUPPLIERS_READ',\n SUPPLIERS_UPDATE: 'SUPPLIERS_UPDATE',\n SUPPLIERS_DELETE: 'SUPPLIERS_DELETE',\n\n // Payment Methods\n PAYMENT_METHODS_CREATE: 'PAYMENT_METHODS_CREATE',\n PAYMENT_METHODS_READ: 'PAYMENT_METHODS_READ',\n PAYMENT_METHODS_UPDATE: 'PAYMENT_METHODS_UPDATE',\n PAYMENT_METHODS_DELETE: 'PAYMENT_METHODS_DELETE',\n\n // WhatsApp\n WHATSAPP_READ: 'WHATSAPP_READ',\n WHATSAPP_SEND: 'WHATSAPP_SEND',\n WHATSAPP_MANAGE: 'WHATSAPP_MANAGE',\n WHATSAPP_BULK_SEND: 'WHATSAPP_BULK_SEND',\n WHATSAPP_BULK_MANAGE: 'WHATSAPP_BULK_MANAGE',\n\n // Messages\n MESSAGES_READ: 'MESSAGES_READ',\n MESSAGES_CREATE: 'MESSAGES_CREATE',\n MESSAGES_RETRY: 'MESSAGES_RETRY',\n MESSAGES_CANCEL: 'MESSAGES_CANCEL',\n\n // Activities\n ACTIVITIES_CREATE: 'ACTIVITIES_CREATE',\n ACTIVITIES_READ: 'ACTIVITIES_READ',\n ACTIVITIES_UPDATE: 'ACTIVITIES_UPDATE',\n ACTIVITIES_DELETE: 'ACTIVITIES_DELETE',\n ACTIVITIES_MANAGE_NOTIFICATIONS: 'ACTIVITIES_MANAGE_NOTIFICATIONS',\n\n // Tags\n TAGS_CREATE: 'TAGS_CREATE',\n TAGS_READ: 'TAGS_READ',\n TAGS_UPDATE: 'TAGS_UPDATE',\n TAGS_DELETE: 'TAGS_DELETE',\n\n // Commissions\n COMMISSIONS_CONFIG_CREATE: 'COMMISSIONS_CONFIG_CREATE',\n COMMISSIONS_CONFIG_READ: 'COMMISSIONS_CONFIG_READ',\n COMMISSIONS_CONFIG_UPDATE: 'COMMISSIONS_CONFIG_UPDATE',\n COMMISSIONS_RULES_CREATE: 'COMMISSIONS_RULES_CREATE',\n COMMISSIONS_RULES_READ: 'COMMISSIONS_RULES_READ',\n COMMISSIONS_RULES_UPDATE: 'COMMISSIONS_RULES_UPDATE',\n COMMISSIONS_RULES_DELETE: 'COMMISSIONS_RULES_DELETE',\n COMMISSIONS_CALCULATIONS_READ: 'COMMISSIONS_CALCULATIONS_READ',\n COMMISSIONS_REPORTS_VIEW: 'COMMISSIONS_REPORTS_VIEW',\n\n // Catalog\n CATALOG_READ: 'CATALOG_READ',\n CATALOG_UPDATE: 'CATALOG_UPDATE',\n CATALOG_MANAGE: 'CATALOG_MANAGE',\n\n // Special permissions\n SUPER_ADMIN: 'SUPER_ADMIN',\n OWNER: 'OWNER',\n All: 'ALL',\n} as const;\n\n// Role definitions\nexport const ROLE_PERMISSIONS = {\n ADMIN: Object.values(PERMISSIONS),\n MANAGER: [\n PERMISSIONS.GYMS_READ,\n PERMISSIONS.COLLABORATORS_READ,\n PERMISSIONS.CLIENTS_CREATE,\n PERMISSIONS.CLIENTS_READ,\n PERMISSIONS.CLIENTS_UPDATE,\n PERMISSIONS.CONTRACTS_CREATE,\n PERMISSIONS.CONTRACTS_READ,\n PERMISSIONS.CHECKINS_CREATE,\n PERMISSIONS.CHECKINS_READ,\n PERMISSIONS.REPORTS_VIEW,\n PERMISSIONS.ASSETS_CREATE,\n PERMISSIONS.ASSETS_READ,\n PERMISSIONS.ASSETS_DELETE,\n PERMISSIONS.FILES_CREATE,\n PERMISSIONS.FILES_READ,\n PERMISSIONS.FILES_DELETE,\n PERMISSIONS.PRODUCTS_CREATE,\n PERMISSIONS.PRODUCTS_READ,\n PERMISSIONS.PRODUCTS_UPDATE,\n PERMISSIONS.PRODUCTS_DELETE,\n PERMISSIONS.PRODUCT_CATEGORIES_CREATE,\n PERMISSIONS.PRODUCT_CATEGORIES_READ,\n PERMISSIONS.PRODUCT_CATEGORIES_UPDATE,\n PERMISSIONS.PRODUCT_CATEGORIES_DELETE,\n PERMISSIONS.SALES_CREATE,\n PERMISSIONS.SALES_READ,\n PERMISSIONS.SALES_UPDATE,\n PERMISSIONS.SUPPLIERS_CREATE,\n PERMISSIONS.SUPPLIERS_READ,\n PERMISSIONS.SUPPLIERS_UPDATE,\n PERMISSIONS.SUPPLIERS_DELETE,\n PERMISSIONS.PAYMENT_METHODS_CREATE,\n PERMISSIONS.PAYMENT_METHODS_READ,\n PERMISSIONS.PAYMENT_METHODS_UPDATE,\n PERMISSIONS.PAYMENT_METHODS_DELETE,\n PERMISSIONS.COMMISSIONS_RULES_READ,\n PERMISSIONS.COMMISSIONS_CALCULATIONS_READ,\n ],\n} as const;\n\n// Cache TTL values (in milliseconds - cache-manager standard)\nexport const CACHE_TTL = {\n USER_PERMISSIONS: 900000, // 15 minutes\n GYM_DATA: 1800000, // 30 minutes\n STATIC_DATA: 3600000, // 60 minutes\n REPORTS: 300000, // 5 minutes\n DASHBOARD: 180000, // 3 minutes\n WHATSAPP_MESSAGE_STATUS: 300000, // 5 minutes\n ONBOARDING_STATUS: 3600000, // 1 hour\n ONBOARDING_LOCK: 300000, // 5 minutes\n} as const;\n\n// File size limits (in bytes)\nexport const FILE_LIMITS = {\n MAX_FILE_SIZE: 10 * 1024 * 1024, // 10MB\n MAX_IMAGE_SIZE: 5 * 1024 * 1024, // 5MB\n MAX_DOCUMENT_SIZE: 10 * 1024 * 1024, // 10MB\n} as const;\n\n// Pagination defaults\nexport const PAGINATION_DEFAULTS = {\n PAGE: 1,\n LIMIT: 20,\n MAX_LIMIT: 100,\n} as const;\n\n// Date formats\nexport const DATE_FORMATS = {\n DATE_ONLY: 'YYYY-MM-DD',\n DATETIME: 'YYYY-MM-DD HH:mm:ss',\n TIME_ONLY: 'HH:mm:ss',\n} as const;\n\n// Headers\nexport const HEADERS = {\n GYM_ID: 'X-Gym-Id',\n REQUEST_ID: 'X-Request-Id',\n} as const;\n\n// Re-export template constants\nexport * from './constants/template-codes.constants';\nexport * from './constants/bulk-message-variables';\n","export enum UserType {\n OWNER = 'owner',\n COLLABORATOR = 'collaborator',\n}\n\nexport enum SubscriptionStatus {\n ACTIVE = 'active',\n INACTIVE = 'inactive',\n EXPIRED = 'expired',\n PAUSED = 'paused',\n PENDING_UPGRADE = 'pending_upgrade',\n}\n\nexport enum CollaboratorStatus {\n PENDING = 'pending',\n ACTIVE = 'active',\n INACTIVE = 'inactive',\n}\n\nexport enum InvitationStatus {\n PENDING = 'pending',\n ACCEPTED = 'accepted',\n CANCELLED = 'cancelled',\n EXPIRED = 'expired',\n}\n\nexport enum ClientStatus {\n ACTIVE = 'active',\n INACTIVE = 'inactive',\n}\n\nexport enum PlanStatus {\n ACTIVE = 'active',\n INACTIVE = 'inactive',\n ARCHIVED = 'archived',\n}\n\nexport enum PlanType {\n BASIC = 'BASIC',\n PREMIUM = 'PREMIUM',\n ENTERPRISE = 'ENTERPRISE',\n}\n\nexport enum ContractStatus {\n PENDING = 'pending',\n ACTIVE = 'active',\n EXPIRING_SOON = 'expiring_soon',\n EXPIRED = 'expired',\n CANCELLED = 'cancelled',\n FOR_RENEW = 'for_renew',\n SUSPENDED = 'suspended',\n GRACE_PERIOD = 'grace_period',\n TERMINATED = 'terminated',\n}\n\nexport enum CancellationReason {\n PRICE_TOO_HIGH = 'PRICE_TOO_HIGH',\n NOT_USING_SERVICE = 'NOT_USING_SERVICE',\n MOVING_LOCATION = 'MOVING_LOCATION',\n FINANCIAL_ISSUES = 'FINANCIAL_ISSUES',\n SERVICE_DISSATISFACTION = 'SERVICE_DISSATISFACTION',\n TEMPORARY_BREAK = 'TEMPORARY_BREAK',\n OTHER = 'OTHER',\n}\n\nexport enum SuspensionType {\n VACATION = 'vacation',\n MEDICAL = 'medical',\n FINANCIAL = 'financial',\n OTHER = 'other',\n}\n\nexport enum PaymentFrequency {\n MONTHLY = 'monthly',\n QUARTERLY = 'quarterly',\n ANNUAL = 'annual',\n}\n\nexport enum AssetStatus {\n ACTIVE = 'active',\n DELETED = 'deleted',\n}\n\nexport enum AssetCategory {\n MEDICAL_DOCUMENT = 'medical_document',\n IDENTIFICATION = 'identification',\n INSURANCE = 'insurance',\n CONTRACT_COPY = 'contract_copy',\n OTHER = 'other',\n}\n\nexport enum ContractAssetType {\n PAYMENT_RECEIPT = 'payment_receipt',\n CONTRACT_DOCUMENT = 'contract_document',\n IDENTIFICATION = 'identification',\n OTHER = 'other',\n}\n\nexport enum MessageStatus {\n PENDING = 'pending',\n SCHEDULED = 'scheduled',\n QUEUED = 'queued',\n SENDING = 'sending',\n SENT = 'sent',\n FAILED = 'failed',\n CANCELLED = 'cancelled',\n}\n","/**\n * Evento para enviar un mensaje de WhatsApp\n */\nexport interface WhatsAppMessageSendEventData {\n // Identificadores\n gymId: string;\n instanceName: string; // Nombre de la instancia de Evolution API\n\n // Destinatario\n phoneNumber: string;\n\n // Contenido\n content: string;\n\n // Metadata opcional\n messageId?: string;\n clientId?: string;\n templateId?: string;\n variables?: Record<string, any>;\n\n // Usuario que generó el envío\n userId?: string;\n}\n\n/**\n * Evento para reintentar un mensaje de WhatsApp\n * El mensaje ya está construido, solo necesita ser reenviado\n */\nexport interface WhatsAppMessageRetryEventData {\n messageId: string; // ID del mensaje a reintentar\n gymId: string; // ID del gimnasio\n userId?: string; // Usuario que solicitó el reintento\n\n // Datos del mensaje necesarios para el reintento\n content: string; // Contenido del mensaje\n recipientPhone: string; // Teléfono del destinatario\n instanceName: string; // Nombre de la instancia de Evolution API\n}\n\n/**\n * Nombres de eventos de WhatsApp\n */\nexport const WHATSAPP_EVENTS = {\n MESSAGE_SEND: 'whatsapp/message.send',\n MESSAGE_RETRY: 'whatsapp/message.retry',\n MESSAGE_RECEIVED: 'whatsapp/message.received',\n CONNECTION_UPDATE: 'whatsapp/connection.update',\n} as const;\n","import { VariableContextType } from '../constants/bulk-message-variables';\n\nexport const BULK_MESSAGING_EVENTS = {\n SEND_BULK_MESSAGES: 'whatsapp/bulk-messages.send',\n} as const;\n\nexport interface BulkMessageEventData {\n sendId: string;\n gymId: string;\n userId: string;\n instanceName: string;\n templateId?: string;\n message: string;\n variableContext?: VariableContextType; // Tipo de contexto\n clients: Array<{\n messageId?: string;\n clientId: string;\n clientName: string;\n phoneNumber: string;\n data: Record<string, any>; // Raw data sin procesar\n }>;\n gymData: Record<string, any>; // Raw data del gym\n contextData?: Record<string, any>; // Data adicional del contexto (activity, event, etc.)\n}\n\nexport interface SendBulkMessagesEvent {\n name: typeof BULK_MESSAGING_EVENTS.SEND_BULK_MESSAGES;\n data: BulkMessageEventData;\n}\n","export const ACTIVITY_EVENTS = {\n SEND_ACTIVITY_NOTIFICATION: 'activity/notification.send',\n} as const;\n\nexport interface SendActivityNotificationEvent {\n name: typeof ACTIVITY_EVENTS.SEND_ACTIVITY_NOTIFICATION;\n data: {\n activityId: string;\n notificationId: string;\n gymId: string;\n userId: string;\n instanceName: string;\n message: string;\n clients: Array<{\n clientId: string;\n clientName: string;\n phoneNumber: string;\n data: {\n id: string;\n name: string;\n email?: string;\n phone: string;\n activePlan?: {\n name: string;\n expirationDate?: Date;\n amount?: number;\n };\n membershipStatus?: string;\n metadata?: Record<string, any>;\n };\n }>;\n gymData: {\n name: string;\n phone?: string;\n address?: string;\n countryConfig: {\n currency: string;\n locale: string;\n };\n };\n activityData: {\n name: string;\n startDateTime: Date;\n durationMinutes: number;\n location: string;\n };\n };\n}\n","import { z } from 'zod';\n\nexport const templateGenerationRequestSchema = z.object({\n templateCode: z.string(),\n templateMetadata: z.object({\n title: z.string(),\n description: z.string(),\n variables: z.array(z.string()),\n exampleValues: z.record(z.string()),\n }),\n userPrompt: z.string().optional(),\n language: z.string().default('es'),\n});\n\nexport const aiGeneratedTemplateSchema = z.object({\n message: z.string().describe('Mensaje generado con variables en formato {{variable}}'),\n tone: z.enum(['professional', 'friendly', 'casual', 'urgent']).describe('Tono del mensaje'),\n usedVariables: z.array(z.string()).describe('Variables utilizadas en el mensaje'),\n suggestions: z.array(z.string()).optional().describe('Sugerencias adicionales'),\n});\n\nexport type TemplateGenerationRequest = z.infer<typeof templateGenerationRequestSchema>;\nexport type AIGeneratedTemplate = z.infer<typeof aiGeneratedTemplateSchema>;\n","import { z } from 'zod';\n\nexport const bulkMessageGenerationRequestSchema = z.object({\n prompt: z.string().describe('Prompt or context for message generation'),\n tone: z\n .enum(['promotional', 'informational', 'reminder', 'greeting', 'friendly'])\n .optional()\n .describe('Tone of the message'),\n includeVariables: z.array(z.string()).optional().describe('Variables to include in the message'),\n additionalRequirements: z.string().optional().describe('Additional requirements for the message'),\n language: z.string().default('es').describe('Language for generation'),\n});\n\nexport const bulkMessageSchema = z.object({\n message: z.string().describe('Generated message with variables'),\n tone: z\n .enum(['promotional', 'informational', 'reminder', 'greeting', 'friendly'])\n .describe('Tone of the message'),\n usedVariables: z.array(z.string()).describe('Variables used in the message'),\n suggestions: z.array(z.string()).optional().describe('Additional message suggestions'),\n});\n\nexport type BulkMessageGenerationRequest = z.infer<typeof bulkMessageGenerationRequestSchema>;\nexport type BulkMessage = z.infer<typeof bulkMessageSchema>;\n","import { z } from 'zod';\n\nexport const activityNotificationGenerationRequestSchema = z.object({\n prompt: z.string().describe('Prompt or context for notification generation'),\n tone: z\n .enum(['friendly', 'formal', 'urgent', 'motivational', 'reminder'])\n .optional()\n .describe('Tone of the notification'),\n currentMessage: z.string().optional().describe('Current message to improve or use as reference'),\n additionalRequirements: z\n .string()\n .optional()\n .describe('Additional requirements for the notification'),\n language: z.string().default('es').describe('Language for generation'),\n});\n\nexport const activityNotificationSchema = z.object({\n message: z.string().describe('Generated notification message with activity variables'),\n});\n\nexport type ActivityNotificationGenerationRequest = z.infer<\n typeof activityNotificationGenerationRequestSchema\n>;\nexport type ActivityNotification = z.infer<typeof activityNotificationSchema>;\n","export enum RoleNames {\n ADMIN = 'Admin',\n ENCARGADO = 'Encargado',\n OWNER = 'OWNER', // Pseudo-role for gym owners\n}\n\nexport const ROLE_NAMES = RoleNames;\n\nexport type RoleName = RoleNames;\n\nexport function isAdminRole(roleName: string | null | undefined): boolean {\n return roleName === RoleNames.ADMIN;\n}\n\nexport function isEncargadoRole(roleName: string | null | undefined): boolean {\n return roleName === RoleNames.ENCARGADO;\n}\n\nexport function canAccessFeature(\n userRole: string | null | undefined,\n allowedRoles: string[] | RoleNames[]\n): boolean {\n if (!userRole) return false;\n // OWNER pseudo-role has access to everything\n if (userRole === RoleNames.OWNER) return true;\n return allowedRoles.includes(userRole as any);\n}\n\nexport function getRoleDisplayName(roleName: string | null | undefined): string {\n if (!roleName) return '';\n\n switch (roleName) {\n case RoleNames.ADMIN:\n return 'Administrador';\n case RoleNames.ENCARGADO:\n return 'Encargado';\n case RoleNames.OWNER:\n return 'Propietario';\n default:\n return roleName;\n }\n}\n\nexport function getRoleDescription(roleName: string | null | undefined): string {\n if (!roleName) return '';\n\n switch (roleName) {\n case RoleNames.ADMIN:\n return 'Acceso completo a todas las funcionalidades del gimnasio, gestión de colaboradores y configuración';\n case RoleNames.ENCARGADO:\n return 'Gestión diaria del gimnasio: clientes, contratos, check-ins y reportes';\n case RoleNames.OWNER:\n return 'Acceso completo a todas las funcionalidades, organización y suscripción';\n default:\n return '';\n }\n}\n\nexport function getRoleCapabilities(roleName: string | null | undefined): string[] {\n if (!roleName) return [];\n\n switch (roleName) {\n case RoleNames.OWNER:\n return [\n 'Acceso completo a todas las funcionalidades',\n 'Gestión de organización',\n 'Gestión de suscripción y facturación',\n 'Gestión completa de clientes',\n 'Gestión completa de contratos',\n 'Gestión de colaboradores',\n 'Configuración del gimnasio',\n 'Gestión de planes',\n 'Gestión de proveedores',\n 'Gestión de métodos de pago',\n 'Reportes y estadísticas',\n 'Gestión de inventario',\n 'Check-ins',\n ];\n case RoleNames.ADMIN:\n return [\n 'Gestión completa de clientes',\n 'Gestión completa de contratos',\n 'Gestión de colaboradores',\n 'Configuración del gimnasio',\n 'Gestión de planes',\n 'Gestión de proveedores',\n 'Gestión de métodos de pago',\n 'Reportes y estadísticas',\n 'Gestión de inventario',\n 'Check-ins',\n ];\n case RoleNames.ENCARGADO:\n return [\n 'Gestión de clientes (ver, crear, editar)',\n 'Creación y renovación de contratos',\n 'Check-ins',\n 'Ver reportes',\n 'Gestión de inventario',\n 'Ventas',\n ];\n default:\n return [];\n }\n}","/**\n * Simple phone number utilities for WhatsApp Evolution API\n */\n\n/**\n * Normalizes a phone number for Evolution API\n * Adds country code +51 for Peru if missing and ensures + prefix\n *\n * @param phoneNumber - Phone number in various formats\n * @returns Normalized phone number with + prefix\n *\n * Examples:\n * - \"987654321\" -> \"+51987654321\"\n * - \"51987654321\" -> \"+51987654321\"\n * - \"+51987654321\" -> \"+51987654321\"\n */\nexport function normalizePhoneForEvolution(phoneNumber: string): string {\n if (!phoneNumber) {\n throw new Error('Phone number is required');\n }\n\n // Remove all non-numeric characters except +\n let cleaned = phoneNumber.replace(/[^\\d+]/g, '');\n\n // Remove + if exists, we'll add it back\n if (cleaned.startsWith('+')) {\n cleaned = cleaned.substring(1);\n }\n\n // Handle Peru specific cases\n if (cleaned.length === 9) {\n // Local number, add Peru country code\n return `+51${cleaned}`;\n }\n\n if (cleaned.length === 11 && cleaned.startsWith('51')) {\n // Already has country code\n return `+${cleaned}`;\n }\n\n if (cleaned.length === 12 && cleaned.startsWith('051')) {\n // Remove leading 0\n return `+${cleaned.substring(1)}`;\n }\n\n // For other cases, assume it needs + prefix\n if (!cleaned.startsWith('+')) {\n return `+${cleaned}`;\n }\n\n return cleaned;\n}\n\n/**\n * Validates if a phone number is valid for Peru\n */\nexport function isValidPeruvianPhone(phoneNumber: string): boolean {\n try {\n const normalized = normalizePhoneForEvolution(phoneNumber);\n // Peru numbers should be +51 followed by 9 digits starting with 9\n return /^\\+51[9]\\d{8}$/.test(normalized);\n } catch {\n return false;\n }\n}\n"]}
|
package/dist/index.mjs
CHANGED
|
@@ -9,7 +9,8 @@ var TemplateCode = {
|
|
|
9
9
|
PAYMENT_REMINDER: "PAYMENT_REMINDER",
|
|
10
10
|
BIRTHDAY: "BIRTHDAY",
|
|
11
11
|
PAYMENT_RECEIPT: "PAYMENT_RECEIPT",
|
|
12
|
-
SHARE_CATALOG: "SHARE_CATALOG"
|
|
12
|
+
SHARE_CATALOG: "SHARE_CATALOG",
|
|
13
|
+
SALE_PAYMENT_REMINDER: "SALE_PAYMENT_REMINDER"
|
|
13
14
|
};
|
|
14
15
|
var TemplateType = {
|
|
15
16
|
STATIC: "STATIC",
|
|
@@ -25,7 +26,8 @@ var TEMPLATE_CODES = {
|
|
|
25
26
|
PAYMENT_REMINDER: TemplateCode.PAYMENT_REMINDER,
|
|
26
27
|
BIRTHDAY: TemplateCode.BIRTHDAY,
|
|
27
28
|
PAYMENT_RECEIPT: TemplateCode.PAYMENT_RECEIPT,
|
|
28
|
-
SHARE_CATALOG: TemplateCode.SHARE_CATALOG
|
|
29
|
+
SHARE_CATALOG: TemplateCode.SHARE_CATALOG,
|
|
30
|
+
SALE_PAYMENT_REMINDER: TemplateCode.SALE_PAYMENT_REMINDER
|
|
29
31
|
};
|
|
30
32
|
var WHATSAPP_TEMPLATE_EVENTS = {
|
|
31
33
|
SEND_TEMPLATE: "whatsapp/template.send",
|
|
@@ -123,7 +125,9 @@ var TEMPLATE_METADATA = {
|
|
|
123
125
|
"clientName",
|
|
124
126
|
"items",
|
|
125
127
|
"amount",
|
|
126
|
-
"paymentMethod"
|
|
128
|
+
"paymentMethod",
|
|
129
|
+
"saleItems",
|
|
130
|
+
"currency"
|
|
127
131
|
],
|
|
128
132
|
exampleValues: {
|
|
129
133
|
gymName: "GymSpace",
|
|
@@ -132,7 +136,12 @@ var TEMPLATE_METADATA = {
|
|
|
132
136
|
clientName: "Juan P\xE9rez",
|
|
133
137
|
items: "\u2022 Prote\xEDna x2 = Q100.00\n\u2022 Creatina x1 = Q50.00",
|
|
134
138
|
amount: "Q150.00",
|
|
135
|
-
paymentMethod: "Efectivo"
|
|
139
|
+
paymentMethod: "Efectivo",
|
|
140
|
+
saleItems: [
|
|
141
|
+
{ product: { name: "Prote\xEDna" }, quantity: 2, total: "100.00" },
|
|
142
|
+
{ product: { name: "Creatina" }, quantity: 1, total: "50.00" }
|
|
143
|
+
],
|
|
144
|
+
currency: "Q"
|
|
136
145
|
}
|
|
137
146
|
},
|
|
138
147
|
[TemplateCode.SHARE_CATALOG]: {
|
|
@@ -146,6 +155,35 @@ var TEMPLATE_METADATA = {
|
|
|
146
155
|
gymName: "GymSpace",
|
|
147
156
|
urlCatalog: "https://gymspace.app/catalog/gym-123"
|
|
148
157
|
}
|
|
158
|
+
},
|
|
159
|
+
[TemplateCode.SALE_PAYMENT_REMINDER]: {
|
|
160
|
+
code: TemplateCode.SALE_PAYMENT_REMINDER,
|
|
161
|
+
title: "Recordatorio de Pago de Venta",
|
|
162
|
+
description: "Recordatorio para ventas con pago pendiente",
|
|
163
|
+
icon: "AlertCircle",
|
|
164
|
+
variables: [
|
|
165
|
+
"clientName",
|
|
166
|
+
"saleNumber",
|
|
167
|
+
"total",
|
|
168
|
+
"saleDate",
|
|
169
|
+
"daysOverdue",
|
|
170
|
+
"items",
|
|
171
|
+
"saleItems",
|
|
172
|
+
"currency"
|
|
173
|
+
],
|
|
174
|
+
exampleValues: {
|
|
175
|
+
clientName: "Manuel Trainer",
|
|
176
|
+
saleNumber: "#202511130003",
|
|
177
|
+
total: "S/ 205.00",
|
|
178
|
+
saleDate: "13/11/2025",
|
|
179
|
+
daysOverdue: "3",
|
|
180
|
+
items: "\u2022 BCAA x2\n\u2022 Pre-Entreno x1",
|
|
181
|
+
saleItems: [
|
|
182
|
+
{ product: { name: "BCAA" }, quantity: 2 },
|
|
183
|
+
{ product: { name: "Pre-Entreno" }, quantity: 1 }
|
|
184
|
+
],
|
|
185
|
+
currency: "S/ "
|
|
186
|
+
}
|
|
149
187
|
}
|
|
150
188
|
};
|
|
151
189
|
|
|
@@ -483,6 +521,11 @@ var PERMISSIONS = {
|
|
|
483
521
|
WHATSAPP_MANAGE: "WHATSAPP_MANAGE",
|
|
484
522
|
WHATSAPP_BULK_SEND: "WHATSAPP_BULK_SEND",
|
|
485
523
|
WHATSAPP_BULK_MANAGE: "WHATSAPP_BULK_MANAGE",
|
|
524
|
+
// Messages
|
|
525
|
+
MESSAGES_READ: "MESSAGES_READ",
|
|
526
|
+
MESSAGES_CREATE: "MESSAGES_CREATE",
|
|
527
|
+
MESSAGES_RETRY: "MESSAGES_RETRY",
|
|
528
|
+
MESSAGES_CANCEL: "MESSAGES_CANCEL",
|
|
486
529
|
// Activities
|
|
487
530
|
ACTIVITIES_CREATE: "ACTIVITIES_CREATE",
|
|
488
531
|
ACTIVITIES_READ: "ACTIVITIES_READ",
|
|
@@ -695,10 +738,21 @@ var ContractAssetType = /* @__PURE__ */ ((ContractAssetType2) => {
|
|
|
695
738
|
ContractAssetType2["OTHER"] = "other";
|
|
696
739
|
return ContractAssetType2;
|
|
697
740
|
})(ContractAssetType || {});
|
|
741
|
+
var MessageStatus = /* @__PURE__ */ ((MessageStatus2) => {
|
|
742
|
+
MessageStatus2["PENDING"] = "pending";
|
|
743
|
+
MessageStatus2["SCHEDULED"] = "scheduled";
|
|
744
|
+
MessageStatus2["QUEUED"] = "queued";
|
|
745
|
+
MessageStatus2["SENDING"] = "sending";
|
|
746
|
+
MessageStatus2["SENT"] = "sent";
|
|
747
|
+
MessageStatus2["FAILED"] = "failed";
|
|
748
|
+
MessageStatus2["CANCELLED"] = "cancelled";
|
|
749
|
+
return MessageStatus2;
|
|
750
|
+
})(MessageStatus || {});
|
|
698
751
|
|
|
699
752
|
// src/events/whatsapp.events.ts
|
|
700
753
|
var WHATSAPP_EVENTS = {
|
|
701
754
|
MESSAGE_SEND: "whatsapp/message.send",
|
|
755
|
+
MESSAGE_RETRY: "whatsapp/message.retry",
|
|
702
756
|
MESSAGE_RECEIVED: "whatsapp/message.received",
|
|
703
757
|
CONNECTION_UPDATE: "whatsapp/connection.update"
|
|
704
758
|
};
|
|
@@ -876,6 +930,6 @@ function isValidPeruvianPhone(phoneNumber) {
|
|
|
876
930
|
}
|
|
877
931
|
}
|
|
878
932
|
|
|
879
|
-
export { ACTIVITY_EVENTS, ACTIVITY_MESSAGE_VARIABLES, AssetCategory, AssetStatus, BULK_MESSAGE_VARIABLES, BULK_MESSAGE_VARIABLE_CATEGORIES, BULK_MESSAGING_EVENTS, CACHE_TTL, CancellationReason, ClientStatus, CollaboratorStatus, ContractAssetType, ContractStatus, DATE_FORMATS, FILE_LIMITS, HEADERS, InvitationStatus, PAGINATION_DEFAULTS, PERMISSIONS, PaymentFrequency, PlanStatus, PlanType, ROLE_NAMES, ROLE_PERMISSIONS, RoleNames, SubscriptionStatus, SuspensionType, TEMPLATE_CODES, TEMPLATE_METADATA, TemplateCode, TemplateType, UserType, VARIABLE_CONTEXT_MAP, WHATSAPP_EVENTS, WHATSAPP_TEMPLATE_EVENTS, activityNotificationGenerationRequestSchema, activityNotificationSchema, aiGeneratedTemplateSchema, bulkMessageGenerationRequestSchema, bulkMessageSchema, canAccessFeature, getRoleCapabilities, getRoleDescription, getRoleDisplayName, getVariablesByContext, isAdminRole, isEncargadoRole, isValidPeruvianPhone, normalizePhoneForEvolution, templateGenerationRequestSchema, validateVariablesInContext };
|
|
933
|
+
export { ACTIVITY_EVENTS, ACTIVITY_MESSAGE_VARIABLES, AssetCategory, AssetStatus, BULK_MESSAGE_VARIABLES, BULK_MESSAGE_VARIABLE_CATEGORIES, BULK_MESSAGING_EVENTS, CACHE_TTL, CancellationReason, ClientStatus, CollaboratorStatus, ContractAssetType, ContractStatus, DATE_FORMATS, FILE_LIMITS, HEADERS, InvitationStatus, MessageStatus, PAGINATION_DEFAULTS, PERMISSIONS, PaymentFrequency, PlanStatus, PlanType, ROLE_NAMES, ROLE_PERMISSIONS, RoleNames, SubscriptionStatus, SuspensionType, TEMPLATE_CODES, TEMPLATE_METADATA, TemplateCode, TemplateType, UserType, VARIABLE_CONTEXT_MAP, WHATSAPP_EVENTS, WHATSAPP_TEMPLATE_EVENTS, activityNotificationGenerationRequestSchema, activityNotificationSchema, aiGeneratedTemplateSchema, bulkMessageGenerationRequestSchema, bulkMessageSchema, canAccessFeature, getRoleCapabilities, getRoleDescription, getRoleDisplayName, getVariablesByContext, isAdminRole, isEncargadoRole, isValidPeruvianPhone, normalizePhoneForEvolution, templateGenerationRequestSchema, validateVariablesInContext };
|
|
880
934
|
//# sourceMappingURL=index.mjs.map
|
|
881
935
|
//# sourceMappingURL=index.mjs.map
|