@fiado/type-kit 3.604.0 → 3.606.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/_test_/unit/retailIntegration/eventPayloadBounds.test.ts +2 -2
- package/_test_/unit/retailIntegration/eventPayloads.test.ts +43 -2
- package/bin/index.d.ts +1 -0
- package/bin/index.js +4 -1
- package/bin/meetings/constants/MeetingLimits.d.ts +11 -0
- package/bin/meetings/constants/MeetingLimits.js +14 -0
- package/bin/meetings/dtos/MeetingAttendanceResponse.d.ts +61 -0
- package/bin/meetings/dtos/MeetingAttendanceResponse.js +21 -0
- package/bin/meetings/dtos/MeetingFormResponse.d.ts +28 -0
- package/bin/meetings/dtos/MeetingFormResponse.js +13 -0
- package/bin/meetings/dtos/MeetingLeadResponse.d.ts +43 -0
- package/bin/meetings/dtos/MeetingLeadResponse.js +17 -0
- package/bin/meetings/dtos/MeetingPollRef.d.ts +5 -0
- package/bin/meetings/dtos/MeetingPollRef.js +8 -0
- package/bin/meetings/dtos/MeetingQuestionRef.d.ts +5 -0
- package/bin/meetings/dtos/MeetingQuestionRef.js +7 -0
- package/bin/meetings/dtos/MeetingQuestionResponse.d.ts +48 -0
- package/bin/meetings/dtos/MeetingQuestionResponse.js +20 -0
- package/bin/meetings/dtos/MeetingQueueEvents.d.ts +85 -0
- package/bin/meetings/dtos/MeetingQueueEvents.js +11 -0
- package/bin/meetings/dtos/MeetingResponse.d.ts +131 -0
- package/bin/meetings/dtos/MeetingResponse.js +20 -0
- package/bin/meetings/dtos/MeetingRuleResponse.d.ts +43 -0
- package/bin/meetings/dtos/MeetingRuleResponse.js +17 -0
- package/bin/meetings/dtos/MeetingSessionRef.d.ts +8 -0
- package/bin/meetings/dtos/MeetingSessionRef.js +7 -0
- package/bin/meetings/enums/MeetingAttendanceRoleEnum.d.ts +5 -0
- package/bin/meetings/enums/MeetingAttendanceRoleEnum.js +9 -0
- package/bin/meetings/enums/MeetingAttendanceSourceEnum.d.ts +5 -0
- package/bin/meetings/enums/MeetingAttendanceSourceEnum.js +9 -0
- package/bin/meetings/enums/MeetingAttendanceStatusEnum.d.ts +7 -0
- package/bin/meetings/enums/MeetingAttendanceStatusEnum.js +11 -0
- package/bin/meetings/enums/MeetingEventTypeEnum.d.ts +16 -0
- package/bin/meetings/enums/MeetingEventTypeEnum.js +20 -0
- package/bin/meetings/enums/MeetingLeadSourceEnum.d.ts +8 -0
- package/bin/meetings/enums/MeetingLeadSourceEnum.js +12 -0
- package/bin/meetings/enums/MeetingLeadTagEnum.d.ts +10 -0
- package/bin/meetings/enums/MeetingLeadTagEnum.js +14 -0
- package/bin/meetings/enums/MeetingModalityEnum.d.ts +6 -0
- package/bin/meetings/enums/MeetingModalityEnum.js +10 -0
- package/bin/meetings/enums/MeetingPlatformEnum.d.ts +7 -0
- package/bin/meetings/enums/MeetingPlatformEnum.js +11 -0
- package/bin/meetings/enums/MeetingQuestionDataTypeEnum.d.ts +12 -0
- package/bin/meetings/enums/MeetingQuestionDataTypeEnum.js +16 -0
- package/bin/meetings/enums/MeetingQuestionSurfaceEnum.d.ts +5 -0
- package/bin/meetings/enums/MeetingQuestionSurfaceEnum.js +9 -0
- package/bin/meetings/enums/MeetingQuestionTypeEnum.d.ts +6 -0
- package/bin/meetings/enums/MeetingQuestionTypeEnum.js +10 -0
- package/bin/meetings/enums/MeetingRuleActionTypeEnum.d.ts +5 -0
- package/bin/meetings/enums/MeetingRuleActionTypeEnum.js +9 -0
- package/bin/meetings/enums/MeetingRuleStatusEnum.d.ts +5 -0
- package/bin/meetings/enums/MeetingRuleStatusEnum.js +9 -0
- package/bin/meetings/enums/MeetingSourceEnum.d.ts +5 -0
- package/bin/meetings/enums/MeetingSourceEnum.js +9 -0
- package/bin/meetings/enums/MeetingStatusEnum.d.ts +5 -0
- package/bin/meetings/enums/MeetingStatusEnum.js +9 -0
- package/bin/meetings/enums/MeetingTypeEnum.d.ts +5 -0
- package/bin/meetings/enums/MeetingTypeEnum.js +9 -0
- package/bin/meetings/index.d.ts +27 -0
- package/bin/meetings/index.js +46 -0
- package/bin/retailIntegration/dtos/ProductEventPayload.d.ts +2 -0
- package/bin/retailIntegration/dtos/ProductEventPayload.js +8 -1
- package/bin/retailIntegration/enums/RetailProductTierEnum.d.ts +1 -1
- package/bin/retailIntegration/enums/RetailProductTierEnum.js +1 -1
- package/bin/usmarketgrowth-business/dtos/PromoterFromLead.d.ts +18 -0
- package/bin/usmarketgrowth-business/dtos/PromoterFromLead.js +7 -0
- package/bin/usmarketgrowth-business/index.d.ts +1 -0
- package/bin/usmarketgrowth-business/index.js +1 -0
- package/package.json +1 -1
- package/src/index.ts +4 -0
- package/src/meetings/constants/MeetingLimits.ts +11 -0
- package/src/meetings/dtos/MeetingAttendanceResponse.ts +66 -0
- package/src/meetings/dtos/MeetingFormResponse.ts +30 -0
- package/src/meetings/dtos/MeetingLeadResponse.ts +47 -0
- package/src/meetings/dtos/MeetingPollRef.ts +6 -0
- package/src/meetings/dtos/MeetingQuestionRef.ts +5 -0
- package/src/meetings/dtos/MeetingQuestionResponse.ts +53 -0
- package/src/meetings/dtos/MeetingQueueEvents.ts +102 -0
- package/src/meetings/dtos/MeetingResponse.ts +136 -0
- package/src/meetings/dtos/MeetingRuleResponse.ts +47 -0
- package/src/meetings/dtos/MeetingSessionRef.ts +8 -0
- package/src/meetings/enums/MeetingAttendanceRoleEnum.ts +5 -0
- package/src/meetings/enums/MeetingAttendanceSourceEnum.ts +5 -0
- package/src/meetings/enums/MeetingAttendanceStatusEnum.ts +7 -0
- package/src/meetings/enums/MeetingEventTypeEnum.ts +16 -0
- package/src/meetings/enums/MeetingLeadSourceEnum.ts +8 -0
- package/src/meetings/enums/MeetingLeadTagEnum.ts +10 -0
- package/src/meetings/enums/MeetingModalityEnum.ts +6 -0
- package/src/meetings/enums/MeetingPlatformEnum.ts +7 -0
- package/src/meetings/enums/MeetingQuestionDataTypeEnum.ts +12 -0
- package/src/meetings/enums/MeetingQuestionSurfaceEnum.ts +5 -0
- package/src/meetings/enums/MeetingQuestionTypeEnum.ts +6 -0
- package/src/meetings/enums/MeetingRuleActionTypeEnum.ts +5 -0
- package/src/meetings/enums/MeetingRuleStatusEnum.ts +5 -0
- package/src/meetings/enums/MeetingSourceEnum.ts +5 -0
- package/src/meetings/enums/MeetingStatusEnum.ts +5 -0
- package/src/meetings/enums/MeetingTypeEnum.ts +5 -0
- package/src/meetings/index.ts +32 -0
- package/src/retailIntegration/dtos/ProductEventPayload.ts +9 -4
- package/src/retailIntegration/enums/RetailProductTierEnum.ts +1 -1
- package/src/usmarketgrowth-business/dtos/PromoterFromLead.ts +20 -0
- package/src/usmarketgrowth-business/index.ts +1 -0
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
//Enums
|
|
18
|
+
__exportStar(require("./enums/MeetingTypeEnum"), exports);
|
|
19
|
+
__exportStar(require("./enums/MeetingModalityEnum"), exports);
|
|
20
|
+
__exportStar(require("./enums/MeetingPlatformEnum"), exports);
|
|
21
|
+
__exportStar(require("./enums/MeetingStatusEnum"), exports);
|
|
22
|
+
__exportStar(require("./enums/MeetingSourceEnum"), exports);
|
|
23
|
+
__exportStar(require("./enums/MeetingAttendanceStatusEnum"), exports);
|
|
24
|
+
__exportStar(require("./enums/MeetingAttendanceRoleEnum"), exports);
|
|
25
|
+
__exportStar(require("./enums/MeetingAttendanceSourceEnum"), exports);
|
|
26
|
+
__exportStar(require("./enums/MeetingLeadSourceEnum"), exports);
|
|
27
|
+
__exportStar(require("./enums/MeetingLeadTagEnum"), exports);
|
|
28
|
+
__exportStar(require("./enums/MeetingQuestionTypeEnum"), exports);
|
|
29
|
+
__exportStar(require("./enums/MeetingQuestionSurfaceEnum"), exports);
|
|
30
|
+
__exportStar(require("./enums/MeetingQuestionDataTypeEnum"), exports);
|
|
31
|
+
__exportStar(require("./enums/MeetingRuleStatusEnum"), exports);
|
|
32
|
+
__exportStar(require("./enums/MeetingRuleActionTypeEnum"), exports);
|
|
33
|
+
__exportStar(require("./enums/MeetingEventTypeEnum"), exports);
|
|
34
|
+
//Constants
|
|
35
|
+
__exportStar(require("./constants/MeetingLimits"), exports);
|
|
36
|
+
//DTOs
|
|
37
|
+
__exportStar(require("./dtos/MeetingSessionRef"), exports);
|
|
38
|
+
__exportStar(require("./dtos/MeetingQuestionRef"), exports);
|
|
39
|
+
__exportStar(require("./dtos/MeetingPollRef"), exports);
|
|
40
|
+
__exportStar(require("./dtos/MeetingResponse"), exports);
|
|
41
|
+
__exportStar(require("./dtos/MeetingAttendanceResponse"), exports);
|
|
42
|
+
__exportStar(require("./dtos/MeetingLeadResponse"), exports);
|
|
43
|
+
__exportStar(require("./dtos/MeetingQuestionResponse"), exports);
|
|
44
|
+
__exportStar(require("./dtos/MeetingFormResponse"), exports);
|
|
45
|
+
__exportStar(require("./dtos/MeetingRuleResponse"), exports);
|
|
46
|
+
__exportStar(require("./dtos/MeetingQueueEvents"), exports);
|
|
@@ -16,9 +16,11 @@ export declare class ProductEventPayload implements RetailSystemProduct {
|
|
|
16
16
|
description: string | null;
|
|
17
17
|
category: RetailProductCategory;
|
|
18
18
|
trackingMode: RetailTrackingMode;
|
|
19
|
+
/** Opcional en el evento: ausente se vuelve `null`. */
|
|
19
20
|
tier: RetailProductTier | null;
|
|
20
21
|
currencyId: RetailCurrency;
|
|
21
22
|
price: ProductEventPricePayload;
|
|
23
|
+
/** Opcional en el evento: ausente o `null` se vuelve la lista de todas las financieras. */
|
|
22
24
|
eligibleFinanciers: RetailFinancier[];
|
|
23
25
|
mdmProvider: RetailMdmProvider | null;
|
|
24
26
|
status: RetailProductStatus;
|
|
@@ -89,7 +89,9 @@ __decorate([
|
|
|
89
89
|
__metadata("design:type", String)
|
|
90
90
|
], ProductEventPayload.prototype, "trackingMode", void 0);
|
|
91
91
|
__decorate([
|
|
92
|
-
(0,
|
|
92
|
+
(0, class_transformer_1.Expose)(),
|
|
93
|
+
(0, class_transformer_1.Transform)(({ value }) => value ?? null),
|
|
94
|
+
(0, class_validator_1.IsOptional)(),
|
|
93
95
|
(0, class_validator_1.IsIn)(Object.values(enums_1.RetailProductTierEnum)),
|
|
94
96
|
__metadata("design:type", String)
|
|
95
97
|
], ProductEventPayload.prototype, "tier", void 0);
|
|
@@ -105,7 +107,12 @@ __decorate([
|
|
|
105
107
|
__metadata("design:type", ProductEventPricePayload)
|
|
106
108
|
], ProductEventPayload.prototype, "price", void 0);
|
|
107
109
|
__decorate([
|
|
110
|
+
(0, class_transformer_1.Expose)(),
|
|
111
|
+
(0, class_transformer_1.Transform)(({ value }) => value ?? Object.values(enums_1.RetailFinancierEnum)),
|
|
112
|
+
(0, class_validator_1.IsOptional)(),
|
|
108
113
|
(0, class_validator_1.IsArray)(),
|
|
114
|
+
(0, class_validator_1.ArrayNotEmpty)(),
|
|
115
|
+
(0, class_validator_1.ArrayUnique)(),
|
|
109
116
|
(0, class_validator_1.ArrayMaxSize)(retailIntegrationLimits_1.RETAIL_ELIGIBLE_FINANCIERS_MAX),
|
|
110
117
|
(0, class_validator_1.IsIn)(Object.values(enums_1.RetailFinancierEnum), { each: true }),
|
|
111
118
|
__metadata("design:type", Array)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.RetailProductTierEnum = void 0;
|
|
4
|
-
/** Gama de un producto. */
|
|
4
|
+
/** Gama de un producto; mismos valores que `ProductTierEnum` de retailCatalog. */
|
|
5
5
|
var RetailProductTierEnum;
|
|
6
6
|
(function (RetailProductTierEnum) {
|
|
7
7
|
RetailProductTierEnum["LOW"] = "LOW";
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 4.5 del plan de reuniones: alta de un promotor a partir de un lead de meetings-business.
|
|
3
|
+
* `POST /private/promoters/from-lead` de `usmarketgrowth-business`, idempotente por teléfono o correo:
|
|
4
|
+
* dos llamadas con el mismo contacto devuelven el mismo `promoterId`.
|
|
5
|
+
*/
|
|
6
|
+
export interface CreatePromoterFromLeadRequest {
|
|
7
|
+
/** Nombre completo; obligatorio (DEC-024: nombre y un medio de contacto). */
|
|
8
|
+
name?: string;
|
|
9
|
+
phoneNumber?: string;
|
|
10
|
+
email?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface PostPromoterFromLeadResponse {
|
|
13
|
+
/** CREATED si nació aquí; EXISTING si ya había promotor con ese contacto (no se toca nada). */
|
|
14
|
+
status: 'CREATED' | 'EXISTING';
|
|
15
|
+
promoterId: string;
|
|
16
|
+
/** Lo que faltó de la aplicación: el promotor queda «por revisar» hasta completarla. */
|
|
17
|
+
reviewReasons: string[];
|
|
18
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* 4.5 del plan de reuniones: alta de un promotor a partir de un lead de meetings-business.
|
|
4
|
+
* `POST /private/promoters/from-lead` de `usmarketgrowth-business`, idempotente por teléfono o correo:
|
|
5
|
+
* dos llamadas con el mismo contacto devuelven el mismo `promoterId`.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
@@ -16,3 +16,4 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
//dtos
|
|
18
18
|
__exportStar(require("./dtos/PromoterByDirectoryIdResponse"), exports);
|
|
19
|
+
__exportStar(require("./dtos/PromoterFromLead"), exports);
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -218,6 +218,10 @@ export * as PdfRender from './pdfRender';
|
|
|
218
218
|
// Rules: DTOs del lambda central rules-business (catálogo, validación, generación con IA y evaluación de reglas).
|
|
219
219
|
export * as Rules from './rules';
|
|
220
220
|
|
|
221
|
+
// Meetings: reuniones, eventos y leads (meetings-business y meeting-connector): el contrato de los
|
|
222
|
+
// endpoints del back office y los eventos de MeetingsBusinessQueue, sin nombrar al proveedor.
|
|
223
|
+
export * as Meetings from './meetings';
|
|
224
|
+
|
|
221
225
|
// LoanRetailAudit: contrato del lambda central loan-retail-audit-business (bitácora y accesos a PII
|
|
222
226
|
// de Loan y Retail): mensaje de su cola, POST /private/pii-access-logs y GET /private/audit-trail.
|
|
223
227
|
export * as LoanRetailAudit from './loanRetailAudit';
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** Título de una encuesta o pregunta: lo que ve el asistente en la plataforma. */
|
|
2
|
+
export const MEETING_QUESTION_TITLE_MAX_LENGTH = 64;
|
|
3
|
+
/** Una pregunta cerrada lleva entre 2 y 10 opciones; una abierta, ninguna. */
|
|
4
|
+
export const MEETING_QUESTION_OPTIONS_MIN = 2;
|
|
5
|
+
export const MEETING_QUESTION_OPTIONS_MAX = 10;
|
|
6
|
+
/** Tope de reuniones que crea una repetición semanal (la plataforma limita las creaciones por día). */
|
|
7
|
+
export const MEETING_REPEAT_MAX = 12;
|
|
8
|
+
/** Un evento se dimensiona para miles de asistentes, no decenas de miles: por encima se procesa en lotes. */
|
|
9
|
+
export const MEETING_EVENT_EXPECTED_MAX_ATTENDEES = 2000;
|
|
10
|
+
/** Entrada "pregunta:opción" de Lead_GT.answers: referencias estables, nunca el texto. */
|
|
11
|
+
export const MEETING_ANSWER_TOKEN_SEPARATOR = ':';
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { MeetingAttendanceRoleEnum } from '../enums/MeetingAttendanceRoleEnum';
|
|
2
|
+
import { MeetingAttendanceSourceEnum } from '../enums/MeetingAttendanceSourceEnum';
|
|
3
|
+
import { MeetingAttendanceStatusEnum } from '../enums/MeetingAttendanceStatusEnum';
|
|
4
|
+
import { MeetingQuestionSurfaceEnum } from '../enums/MeetingQuestionSurfaceEnum';
|
|
5
|
+
|
|
6
|
+
/** Una respuesta guardada en el renglón de asistencia (del registro o de la encuesta en vivo). */
|
|
7
|
+
export class MeetingAnswer {
|
|
8
|
+
questionId: string;
|
|
9
|
+
version: number;
|
|
10
|
+
surface: MeetingQuestionSurfaceEnum;
|
|
11
|
+
/** El texto que vio la persona, como contexto; las reglas usan las referencias. */
|
|
12
|
+
question?: string;
|
|
13
|
+
answer: string;
|
|
14
|
+
/** Referencias estables de las opciones elegidas (las entradas de Lead_GT.answers salen de acá). */
|
|
15
|
+
optionRefs?: string[];
|
|
16
|
+
/** true = no cumple el dataType declarado; se guarda tal como llegó y no crea lead. */
|
|
17
|
+
invalid?: boolean;
|
|
18
|
+
respondedAt?: string;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/** Una persona en una reunión, desde que se la invita o se registra. Los anfitriones también. */
|
|
22
|
+
export class MeetingAttendanceResponse {
|
|
23
|
+
meetingId: string;
|
|
24
|
+
/** LEAD#<id>; EMAIL#<correo> si todavía no es lead; EXT#<id de participante> si no se pudo identificar. */
|
|
25
|
+
personKey: string;
|
|
26
|
+
role: MeetingAttendanceRoleEnum;
|
|
27
|
+
status: MeetingAttendanceStatusEnum;
|
|
28
|
+
leadId?: string;
|
|
29
|
+
promoterId?: string;
|
|
30
|
+
directoryId?: string;
|
|
31
|
+
meetingStartsAt?: string;
|
|
32
|
+
name?: string;
|
|
33
|
+
email?: string;
|
|
34
|
+
phoneNumber?: string;
|
|
35
|
+
externalRegistrantId?: string;
|
|
36
|
+
registeredAt?: string;
|
|
37
|
+
joinedAt?: string;
|
|
38
|
+
leftAt?: string;
|
|
39
|
+
/** Suma de tramos si se reconecta. */
|
|
40
|
+
durationMinutes?: number;
|
|
41
|
+
wasInvited?: boolean;
|
|
42
|
+
source: MeetingAttendanceSourceEnum;
|
|
43
|
+
markedBy?: string;
|
|
44
|
+
responses?: MeetingAnswer[];
|
|
45
|
+
createdAt?: number;
|
|
46
|
+
updatedAt?: number;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/** Marcar asistencia fuera de la plataforma: lo marcado queda ATTENDED y los invitados sin marcar, NO_SHOW. */
|
|
50
|
+
export class MeetingAttendanceMarkItem {
|
|
51
|
+
/** De un renglón existente; si falta, se crea uno nuevo con los datos de abajo. */
|
|
52
|
+
personKey?: string;
|
|
53
|
+
name?: string;
|
|
54
|
+
email?: string;
|
|
55
|
+
phoneNumber?: string;
|
|
56
|
+
attended: boolean;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export class MeetingAttendanceMarkRequest {
|
|
60
|
+
items: MeetingAttendanceMarkItem[];
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export class MeetingAttendanceListResponse {
|
|
64
|
+
items: MeetingAttendanceResponse[];
|
|
65
|
+
index: string | null;
|
|
66
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/** Un formulario que se manda a los asistentes (el formId de la reunión). Los carga Silvia; no se borran. */
|
|
2
|
+
export class MeetingFormResponse {
|
|
3
|
+
id: string;
|
|
4
|
+
name: string;
|
|
5
|
+
/** El link del formulario; hoy, Microsoft Forms. */
|
|
6
|
+
url: string;
|
|
7
|
+
/** Plantilla de messages-business con que se manda el correo. */
|
|
8
|
+
templateId: string;
|
|
9
|
+
/** No se le manda a quien ya es promotor (marcada en el de promotor). */
|
|
10
|
+
skipPromoters: boolean;
|
|
11
|
+
active: boolean;
|
|
12
|
+
tenantId?: string;
|
|
13
|
+
createdAt?: number;
|
|
14
|
+
updatedAt?: number;
|
|
15
|
+
createdBy?: string;
|
|
16
|
+
updatedBy?: string;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export class MeetingFormUpsertRequest {
|
|
20
|
+
name: string;
|
|
21
|
+
url: string;
|
|
22
|
+
templateId: string;
|
|
23
|
+
skipPromoters?: boolean;
|
|
24
|
+
active?: boolean;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export class MeetingFormListResponse {
|
|
28
|
+
items: MeetingFormResponse[];
|
|
29
|
+
index: string | null;
|
|
30
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { MeetingLeadSourceEnum } from '../enums/MeetingLeadSourceEnum';
|
|
2
|
+
|
|
3
|
+
/** Una persona del padrón, una sola vez. Promotor, directorio o cuenta son estados colgados de la fila. */
|
|
4
|
+
export class MeetingLeadResponse {
|
|
5
|
+
id: string;
|
|
6
|
+
name?: string;
|
|
7
|
+
email?: string;
|
|
8
|
+
/** Llave de identidad, normalizado (+1 o +52). */
|
|
9
|
+
phoneNumber?: string;
|
|
10
|
+
/** Derivados del reporte de identificación del lago; no se mantienen a mano. */
|
|
11
|
+
directoryId?: string;
|
|
12
|
+
peopleId?: string;
|
|
13
|
+
hasFiadoAccount?: boolean;
|
|
14
|
+
promoterId?: string;
|
|
15
|
+
source: MeetingLeadSourceEnum;
|
|
16
|
+
lastAttendedAt?: string;
|
|
17
|
+
/** «<ref de pregunta>:<ref de opción>» por opción elegida en una cerrada; lo lee el motor en el lago. */
|
|
18
|
+
answers?: string[];
|
|
19
|
+
/** Correo con el formulario de la reunión (formId). */
|
|
20
|
+
formSentAt?: string;
|
|
21
|
+
formReminderSentAt?: string;
|
|
22
|
+
/** Etiquetas de LeadTags_GT (las sirve el lambda de tags de onboarding-business). */
|
|
23
|
+
tags?: string[];
|
|
24
|
+
tenantId?: string;
|
|
25
|
+
createdAt?: number;
|
|
26
|
+
updatedAt?: number;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export class MeetingLeadListResponse {
|
|
30
|
+
items: MeetingLeadResponse[];
|
|
31
|
+
index: string | null;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export class MeetingLeadCreateRequest {
|
|
35
|
+
name?: string;
|
|
36
|
+
email?: string;
|
|
37
|
+
/** El lead nace cuando aparece el teléfono; a mano se exige. */
|
|
38
|
+
phoneNumber: string;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/** PUT /leads/{id}/tags: etiquetas a mano, contra la lista blanca de MeetingLeadTagEnum. */
|
|
42
|
+
export class MeetingLeadTagsRequest {
|
|
43
|
+
add?: string[];
|
|
44
|
+
remove?: string[];
|
|
45
|
+
/** En qué reunión se ganó, si aplica. */
|
|
46
|
+
meetingId?: string;
|
|
47
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { MeetingQuestionDataTypeEnum } from '../enums/MeetingQuestionDataTypeEnum';
|
|
2
|
+
import { MeetingQuestionSurfaceEnum } from '../enums/MeetingQuestionSurfaceEnum';
|
|
3
|
+
import { MeetingQuestionTypeEnum } from '../enums/MeetingQuestionTypeEnum';
|
|
4
|
+
|
|
5
|
+
/** Una opción de una pregunta cerrada. La referencia es estable; el texto puede cambiar. */
|
|
6
|
+
export class MeetingQuestionOption {
|
|
7
|
+
ref: string;
|
|
8
|
+
value: string;
|
|
9
|
+
/** Etiqueta que gana quien la elige, si la pregunta es clasificatoria. */
|
|
10
|
+
tag?: string;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export class MeetingQuestionItem {
|
|
14
|
+
/** Referencia estable: las reglas se escriben contra ella, renombrar no rompe nada. */
|
|
15
|
+
ref: string;
|
|
16
|
+
text: string;
|
|
17
|
+
type: MeetingQuestionTypeEnum;
|
|
18
|
+
/** Sólo en abiertas (TEXT) y opcional: lo valida meetings-business al recibir. */
|
|
19
|
+
dataType?: MeetingQuestionDataTypeEnum;
|
|
20
|
+
surfaces: MeetingQuestionSurfaceEnum[];
|
|
21
|
+
/** Sólo aplica en el registro. */
|
|
22
|
+
required?: boolean;
|
|
23
|
+
/** Una abierta clasificatoria se rechaza al guardar: el motor compara valores, no lee texto. */
|
|
24
|
+
classifying?: boolean;
|
|
25
|
+
options?: MeetingQuestionOption[];
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/** Una encuesta del catálogo, versionada: cada edición crea una versión nueva y conserva la vieja. */
|
|
29
|
+
export class MeetingQuestionCatalogResponse {
|
|
30
|
+
id: string;
|
|
31
|
+
version: number;
|
|
32
|
+
/** Hasta MEETING_QUESTION_TITLE_MAX_LENGTH caracteres. */
|
|
33
|
+
title: string;
|
|
34
|
+
questions: MeetingQuestionItem[];
|
|
35
|
+
/** Las inactivas no aparecen al crear reuniones. */
|
|
36
|
+
active: boolean;
|
|
37
|
+
tenantId?: string;
|
|
38
|
+
createdAt?: number;
|
|
39
|
+
updatedAt?: number;
|
|
40
|
+
createdBy?: string;
|
|
41
|
+
updatedBy?: string;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export class MeetingQuestionUpsertRequest {
|
|
45
|
+
title: string;
|
|
46
|
+
questions: MeetingQuestionItem[];
|
|
47
|
+
active?: boolean;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export class MeetingQuestionListResponse {
|
|
51
|
+
items: MeetingQuestionCatalogResponse[];
|
|
52
|
+
index: string | null;
|
|
53
|
+
}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { JsonValue } from '../../common';
|
|
2
|
+
import { MeetingEventTypeEnum } from '../enums/MeetingEventTypeEnum';
|
|
3
|
+
|
|
4
|
+
/** meeting.created: fechas vacías = reunión sin horario fijo (se guarda cuando empiece cada sesión). */
|
|
5
|
+
export interface MeetingCreatedPayload {
|
|
6
|
+
externalMeetingId: string;
|
|
7
|
+
hostEmail?: string;
|
|
8
|
+
/** Quién la creó en la plataforma, si no es el anfitrión. */
|
|
9
|
+
operator?: string;
|
|
10
|
+
title?: string;
|
|
11
|
+
/** ISO 8601 UTC, una por fecha fija. */
|
|
12
|
+
dates: string[];
|
|
13
|
+
timezone?: string;
|
|
14
|
+
durationMinutes?: number;
|
|
15
|
+
joinUrl?: string;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export interface MeetingUpdatedPayload {
|
|
19
|
+
externalMeetingId: string;
|
|
20
|
+
/** Lo que cambió, tal como lo reportó la plataforma. */
|
|
21
|
+
changes: Record<string, JsonValue>;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export interface MeetingDeletedPayload {
|
|
25
|
+
externalMeetingId: string;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export interface SessionStartedPayload {
|
|
29
|
+
externalMeetingId: string;
|
|
30
|
+
sessionId: string;
|
|
31
|
+
startedAt: string;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/** El teléfono va tal como lo escribió la persona: lo normaliza meetings-business. */
|
|
35
|
+
export interface PersonRegisteredPayload {
|
|
36
|
+
externalMeetingId: string;
|
|
37
|
+
registrantId: string;
|
|
38
|
+
name?: string;
|
|
39
|
+
email?: string;
|
|
40
|
+
phoneNumber?: string;
|
|
41
|
+
answers?: Array<{ question: string; answer: string }>;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export interface ParticipantJoinedPayload {
|
|
45
|
+
externalMeetingId: string;
|
|
46
|
+
sessionId: string;
|
|
47
|
+
participantId: string;
|
|
48
|
+
registrantId?: string;
|
|
49
|
+
name?: string;
|
|
50
|
+
email?: string;
|
|
51
|
+
joinedAt: string;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export interface ParticipantLeftPayload {
|
|
55
|
+
externalMeetingId: string;
|
|
56
|
+
sessionId: string;
|
|
57
|
+
participantId: string;
|
|
58
|
+
registrantId?: string;
|
|
59
|
+
name?: string;
|
|
60
|
+
email?: string;
|
|
61
|
+
leftAt: string;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export interface MeetingEndedPayload {
|
|
65
|
+
externalMeetingId: string;
|
|
66
|
+
sessionId: string;
|
|
67
|
+
startedAt?: string;
|
|
68
|
+
endedAt: string;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/** Lo publica usmarketgrowth-business al crear un promotor; el lead guarda su promoterId. */
|
|
72
|
+
export interface PromoterCreatedPayload {
|
|
73
|
+
promoterId: string;
|
|
74
|
+
phoneNumber?: string;
|
|
75
|
+
email?: string;
|
|
76
|
+
name?: string;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export type MeetingEventPayload =
|
|
80
|
+
| MeetingCreatedPayload
|
|
81
|
+
| MeetingUpdatedPayload
|
|
82
|
+
| MeetingDeletedPayload
|
|
83
|
+
| SessionStartedPayload
|
|
84
|
+
| PersonRegisteredPayload
|
|
85
|
+
| ParticipantJoinedPayload
|
|
86
|
+
| ParticipantLeftPayload
|
|
87
|
+
| MeetingEndedPayload
|
|
88
|
+
| PromoterCreatedPayload;
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Sobre de todo mensaje de MeetingsBusinessQueue. El connector traduce los avisos de la plataforma a
|
|
92
|
+
* esto: nada nombra al proveedor (la reunión allá es externalMeetingId; una sesión, sessionId).
|
|
93
|
+
* El consumidor es idempotente: un eventId repetido o fuera de orden no duplica nada.
|
|
94
|
+
*/
|
|
95
|
+
export class MeetingQueueEvent<T = MeetingEventPayload> {
|
|
96
|
+
type: MeetingEventTypeEnum;
|
|
97
|
+
/** Identidad del aviso en el origen, para idempotencia. */
|
|
98
|
+
eventId: string;
|
|
99
|
+
/** Cuándo pasó, ISO 8601 UTC. */
|
|
100
|
+
occurredAt: string;
|
|
101
|
+
payload: T;
|
|
102
|
+
}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { MeetingAttendanceRoleEnum } from '../enums/MeetingAttendanceRoleEnum';
|
|
2
|
+
import { MeetingModalityEnum } from '../enums/MeetingModalityEnum';
|
|
3
|
+
import { MeetingPlatformEnum } from '../enums/MeetingPlatformEnum';
|
|
4
|
+
import { MeetingSourceEnum } from '../enums/MeetingSourceEnum';
|
|
5
|
+
import { MeetingStatusEnum } from '../enums/MeetingStatusEnum';
|
|
6
|
+
import { MeetingTypeEnum } from '../enums/MeetingTypeEnum';
|
|
7
|
+
import { MeetingPollRef } from './MeetingPollRef';
|
|
8
|
+
import { MeetingQuestionRef } from './MeetingQuestionRef';
|
|
9
|
+
import { MeetingSessionRef } from './MeetingSessionRef';
|
|
10
|
+
|
|
11
|
+
/** Una reunión (cita o evento) de una fecha. Una clase que se repite son varias filas. */
|
|
12
|
+
export class MeetingResponse {
|
|
13
|
+
id: string;
|
|
14
|
+
type: MeetingTypeEnum;
|
|
15
|
+
title: string;
|
|
16
|
+
/** El mensaje de la reunión; va a la plataforma como agenda. */
|
|
17
|
+
description?: string;
|
|
18
|
+
/** Tipo de clase, sólo en eventos; texto con autocompletado, no un enum (decidido el 22-10). */
|
|
19
|
+
classType?: string;
|
|
20
|
+
/** Referencia opcional a una campaña de otro servicio. */
|
|
21
|
+
campaignId?: string;
|
|
22
|
+
/** ISO 8601 UTC. Puede faltar en reuniones capturadas sin fecha. */
|
|
23
|
+
startsAt?: string;
|
|
24
|
+
durationMinutes?: number;
|
|
25
|
+
/** Zona de la reunión, p. ej. America/Los_Angeles. */
|
|
26
|
+
timezone?: string;
|
|
27
|
+
/** AAAA-MM-DD en esa zona; con externalMeetingId identifica la fila de una sesión. */
|
|
28
|
+
localDate?: string;
|
|
29
|
+
/** AAAA-MM en UTC, para el índice de «Todas». */
|
|
30
|
+
month: string;
|
|
31
|
+
/** El responsable único. Los co-anfitriones son renglones de asistencia con role HOST. */
|
|
32
|
+
hostEmail: string;
|
|
33
|
+
hostName?: string;
|
|
34
|
+
modality: MeetingModalityEnum;
|
|
35
|
+
platform?: MeetingPlatformEnum;
|
|
36
|
+
/** En Zoom, el link de registro: lo que se publica por WhatsApp y lleva el QR. */
|
|
37
|
+
meetingUrl?: string;
|
|
38
|
+
address?: string;
|
|
39
|
+
phoneNumber?: string;
|
|
40
|
+
registrationRequired: boolean;
|
|
41
|
+
phoneRequired: boolean;
|
|
42
|
+
/** El formulario que se manda a los asistentes (MeetingForm_GT); vacío = no se manda nada. */
|
|
43
|
+
formId?: string;
|
|
44
|
+
status: MeetingStatusEnum;
|
|
45
|
+
/** Id de la reunión en la plataforma, como texto (en Zoom puede pasar de 10 dígitos). */
|
|
46
|
+
externalMeetingId?: string;
|
|
47
|
+
externalSessions?: MeetingSessionRef[];
|
|
48
|
+
polls?: MeetingPollRef[];
|
|
49
|
+
registrationQuestions?: MeetingQuestionRef[];
|
|
50
|
+
source: MeetingSourceEnum;
|
|
51
|
+
/** Sólo en citas capturadas de la plataforma: pendiente de clasificar en el back office. */
|
|
52
|
+
pendingClassification?: boolean;
|
|
53
|
+
/** Todos los participantes eran del equipo interno: no ensucia reportes, no se borra. */
|
|
54
|
+
internal?: boolean;
|
|
55
|
+
/** Cuántos renglones de asistencia PARTICIPANT tiene (registrados o que entraron). Lo mantiene
|
|
56
|
+
* meetings-business en la fila al cambiar la asistencia; el back office lo muestra sin recalcular. */
|
|
57
|
+
registeredCount?: number;
|
|
58
|
+
/** Cuántos de esos PARTICIPANT quedaron ATTENDED. Mismo mantenimiento que registeredCount. */
|
|
59
|
+
attendedCount?: number;
|
|
60
|
+
tenantId?: string;
|
|
61
|
+
/** Epoch ms, como el resto de la flota. */
|
|
62
|
+
createdAt?: number;
|
|
63
|
+
updatedAt?: number;
|
|
64
|
+
createdBy?: string;
|
|
65
|
+
updatedBy?: string;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/** Un invitado o co-anfitrión al crear o editar: nace como renglón de asistencia INVITED. */
|
|
69
|
+
export class MeetingInviteeRequest {
|
|
70
|
+
role: MeetingAttendanceRoleEnum;
|
|
71
|
+
name?: string;
|
|
72
|
+
/** Obligatorio si la reunión es virtual: es por donde se avisa. */
|
|
73
|
+
email?: string;
|
|
74
|
+
/** Obligatorio si la reunión es por teléfono. */
|
|
75
|
+
phoneNumber?: string;
|
|
76
|
+
leadId?: string;
|
|
77
|
+
promoterId?: string;
|
|
78
|
+
directoryId?: string;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
export class MeetingCreateRequest {
|
|
82
|
+
type: MeetingTypeEnum;
|
|
83
|
+
title: string;
|
|
84
|
+
description?: string;
|
|
85
|
+
classType?: string;
|
|
86
|
+
campaignId?: string;
|
|
87
|
+
startsAt: string;
|
|
88
|
+
durationMinutes: number;
|
|
89
|
+
timezone: string;
|
|
90
|
+
hostEmail: string;
|
|
91
|
+
hostName?: string;
|
|
92
|
+
modality: MeetingModalityEnum;
|
|
93
|
+
platform?: MeetingPlatformEnum;
|
|
94
|
+
/** Link cargado a mano cuando no se crea en la plataforma. */
|
|
95
|
+
meetingUrl?: string;
|
|
96
|
+
address?: string;
|
|
97
|
+
phoneNumber?: string;
|
|
98
|
+
/** Marcadas por defecto en el back office. */
|
|
99
|
+
registrationRequired?: boolean;
|
|
100
|
+
phoneRequired?: boolean;
|
|
101
|
+
formId?: string;
|
|
102
|
+
invitees?: MeetingInviteeRequest[];
|
|
103
|
+
registrationQuestions?: MeetingQuestionRef[];
|
|
104
|
+
polls?: MeetingQuestionRef[];
|
|
105
|
+
/** true = pedirle al connector que la cree en la plataforma (botón «Crear en Zoom»). */
|
|
106
|
+
createInPlatform?: boolean;
|
|
107
|
+
/** Repetición semanal: cuántas reuniones independientes crear (tope MEETING_REPEAT_MAX). */
|
|
108
|
+
repeatWeeks?: number;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
export class MeetingUpdateRequest {
|
|
112
|
+
title?: string;
|
|
113
|
+
description?: string;
|
|
114
|
+
classType?: string;
|
|
115
|
+
campaignId?: string;
|
|
116
|
+
startsAt?: string;
|
|
117
|
+
durationMinutes?: number;
|
|
118
|
+
timezone?: string;
|
|
119
|
+
hostEmail?: string;
|
|
120
|
+
hostName?: string;
|
|
121
|
+
modality?: MeetingModalityEnum;
|
|
122
|
+
platform?: MeetingPlatformEnum;
|
|
123
|
+
meetingUrl?: string;
|
|
124
|
+
address?: string;
|
|
125
|
+
phoneNumber?: string;
|
|
126
|
+
registrationRequired?: boolean;
|
|
127
|
+
phoneRequired?: boolean;
|
|
128
|
+
formId?: string;
|
|
129
|
+
status?: MeetingStatusEnum;
|
|
130
|
+
invitees?: MeetingInviteeRequest[];
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
export class MeetingListResponse {
|
|
134
|
+
items: MeetingResponse[];
|
|
135
|
+
index: string | null;
|
|
136
|
+
}
|