@fiado/type-kit 3.278.0 → 3.280.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/bin/collection/dtos/CollectionAttemptDto.d.ts +15 -0
- package/bin/collection/dtos/CollectionAttemptDto.js +63 -0
- package/bin/collection/dtos/CollectionErrorLogDto.d.ts +12 -0
- package/bin/collection/dtos/CollectionErrorLogDto.js +54 -0
- package/bin/collection/dtos/CollectionIntentDetailDto.d.ts +10 -0
- package/bin/collection/dtos/CollectionIntentDetailDto.js +40 -0
- package/bin/collection/dtos/CollectionIntentSummaryDto.d.ts +22 -0
- package/bin/collection/dtos/CollectionIntentSummaryDto.js +94 -0
- package/bin/collection/dtos/CollectionMetricsDto.d.ts +9 -0
- package/bin/collection/dtos/CollectionMetricsDto.js +41 -0
- package/bin/collection/dtos/CollectionOutboxEventDto.d.ts +15 -0
- package/bin/collection/dtos/CollectionOutboxEventDto.js +56 -0
- package/bin/collection/index.d.ts +6 -0
- package/bin/collection/index.js +7 -0
- package/bin/index.d.ts +1 -0
- package/bin/index.js +6 -2
- package/bin/retailCommission/dtos/CommissionAccrual.d.ts +78 -0
- package/bin/retailCommission/dtos/CommissionAccrual.js +2 -0
- package/bin/retailCommission/dtos/CommissionApi.d.ts +169 -0
- package/bin/retailCommission/dtos/CommissionApi.js +2 -0
- package/bin/retailCommission/dtos/CommissionCalcTrace.d.ts +73 -0
- package/bin/retailCommission/dtos/CommissionCalcTrace.js +2 -0
- package/bin/retailCommission/dtos/CommissionPayout.d.ts +73 -0
- package/bin/retailCommission/dtos/CommissionPayout.js +2 -0
- package/bin/retailCommission/dtos/CommissionPlan.d.ts +182 -0
- package/bin/retailCommission/dtos/CommissionPlan.js +2 -0
- package/bin/retailCommission/enums/CommissionAccrualStatusEnum.d.ts +14 -0
- package/bin/retailCommission/enums/CommissionAccrualStatusEnum.js +18 -0
- package/bin/retailCommission/enums/CommissionCalcStepEnum.d.ts +23 -0
- package/bin/retailCommission/enums/CommissionCalcStepEnum.js +27 -0
- package/bin/retailCommission/enums/CommissionExceptionTypeEnum.d.ts +14 -0
- package/bin/retailCommission/enums/CommissionExceptionTypeEnum.js +18 -0
- package/bin/retailCommission/enums/CommissionMechanicTypeEnum.d.ts +24 -0
- package/bin/retailCommission/enums/CommissionMechanicTypeEnum.js +28 -0
- package/bin/retailCommission/enums/CommissionPayeeTypeEnum.d.ts +13 -0
- package/bin/retailCommission/enums/CommissionPayeeTypeEnum.js +17 -0
- package/bin/retailCommission/enums/CommissionPayoutStatusEnum.d.ts +18 -0
- package/bin/retailCommission/enums/CommissionPayoutStatusEnum.js +22 -0
- package/bin/retailCommission/enums/CommissionPeriodTypeEnum.d.ts +17 -0
- package/bin/retailCommission/enums/CommissionPeriodTypeEnum.js +21 -0
- package/bin/retailCommission/enums/CommissionPlanStatusEnum.d.ts +14 -0
- package/bin/retailCommission/enums/CommissionPlanStatusEnum.js +18 -0
- package/bin/retailCommission/enums/CommissionPriceReferenceEnum.d.ts +18 -0
- package/bin/retailCommission/enums/CommissionPriceReferenceEnum.js +22 -0
- package/bin/retailCommission/enums/CommissionQuotaMeasureEnum.d.ts +12 -0
- package/bin/retailCommission/enums/CommissionQuotaMeasureEnum.js +16 -0
- package/bin/retailCommission/enums/CommissionQuotaModeEnum.d.ts +13 -0
- package/bin/retailCommission/enums/CommissionQuotaModeEnum.js +17 -0
- package/bin/retailCommission/enums/CommissionQuotaSubjectEnum.d.ts +12 -0
- package/bin/retailCommission/enums/CommissionQuotaSubjectEnum.js +16 -0
- package/bin/retailCommission/enums/CommissionQuotaTypeEnum.d.ts +12 -0
- package/bin/retailCommission/enums/CommissionQuotaTypeEnum.js +16 -0
- package/bin/retailCommission/index.d.ts +18 -0
- package/bin/retailCommission/index.js +37 -0
- package/package.json +1 -1
- package/src/collection/dtos/CollectionAttemptDto.ts +17 -0
- package/src/collection/dtos/CollectionErrorLogDto.ts +14 -0
- package/src/collection/dtos/CollectionIntentDetailDto.ts +13 -0
- package/src/collection/dtos/CollectionIntentSummaryDto.ts +24 -0
- package/src/collection/dtos/CollectionMetricsDto.ts +11 -0
- package/src/collection/dtos/CollectionOutboxEventDto.ts +17 -0
- package/src/collection/index.ts +8 -0
- package/src/index.ts +4 -0
- package/src/retailCommission/dtos/CommissionAccrual.ts +81 -0
- package/src/retailCommission/dtos/CommissionApi.ts +205 -0
- package/src/retailCommission/dtos/CommissionCalcTrace.ts +64 -0
- package/src/retailCommission/dtos/CommissionPayout.ts +76 -0
- package/src/retailCommission/dtos/CommissionPlan.ts +199 -0
- package/src/retailCommission/enums/CommissionAccrualStatusEnum.ts +14 -0
- package/src/retailCommission/enums/CommissionCalcStepEnum.ts +23 -0
- package/src/retailCommission/enums/CommissionExceptionTypeEnum.ts +14 -0
- package/src/retailCommission/enums/CommissionMechanicTypeEnum.ts +24 -0
- package/src/retailCommission/enums/CommissionPayeeTypeEnum.ts +13 -0
- package/src/retailCommission/enums/CommissionPayoutStatusEnum.ts +18 -0
- package/src/retailCommission/enums/CommissionPeriodTypeEnum.ts +17 -0
- package/src/retailCommission/enums/CommissionPlanStatusEnum.ts +14 -0
- package/src/retailCommission/enums/CommissionPriceReferenceEnum.ts +18 -0
- package/src/retailCommission/enums/CommissionQuotaMeasureEnum.ts +12 -0
- package/src/retailCommission/enums/CommissionQuotaModeEnum.ts +13 -0
- package/src/retailCommission/enums/CommissionQuotaSubjectEnum.ts +12 -0
- package/src/retailCommission/enums/CommissionQuotaTypeEnum.ts +12 -0
- package/src/retailCommission/index.ts +23 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CommissionMechanicTypeEnum = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Las 6 formas de calcular la comisión de una categoría (D12).
|
|
6
|
+
*
|
|
7
|
+
* Son el producto cartesiano de dos ejes —cómo se elige la celda y en qué unidad paga— y por eso
|
|
8
|
+
* un solo evaluador las cubre todas: `toCells(mechanic)` normaliza cualquiera a
|
|
9
|
+
* `[{ match, baseValue, withQuotaValue }]` + `valueKind`.
|
|
10
|
+
*
|
|
11
|
+
* PRICE_TIER - Por rango de precio del equipo (D/C/B/A). Equipos.
|
|
12
|
+
* FLAT - Monto fijo por unidad. MiFi, PayJoy.
|
|
13
|
+
* PERCENT - Porcentaje del precio, en bps. Accesorios.
|
|
14
|
+
* MATRIX - Celda por N dimensiones. SIMs: operador × origen.
|
|
15
|
+
* VARIANT - Monto por variante enumerada. Pospago: plan $339 → $220.
|
|
16
|
+
* PERCENT_BY_PAYMENT - Porcentaje según forma de pago. Zmotos: contado 2% / crédito 4%.
|
|
17
|
+
*
|
|
18
|
+
* SureKeep Fase 3 — pista Retail. Motor de comisiones de VentasLuga.
|
|
19
|
+
*/
|
|
20
|
+
var CommissionMechanicTypeEnum;
|
|
21
|
+
(function (CommissionMechanicTypeEnum) {
|
|
22
|
+
CommissionMechanicTypeEnum["PRICE_TIER"] = "PRICE_TIER";
|
|
23
|
+
CommissionMechanicTypeEnum["FLAT"] = "FLAT";
|
|
24
|
+
CommissionMechanicTypeEnum["PERCENT"] = "PERCENT";
|
|
25
|
+
CommissionMechanicTypeEnum["MATRIX"] = "MATRIX";
|
|
26
|
+
CommissionMechanicTypeEnum["VARIANT"] = "VARIANT";
|
|
27
|
+
CommissionMechanicTypeEnum["PERCENT_BY_PAYMENT"] = "PERCENT_BY_PAYMENT";
|
|
28
|
+
})(CommissionMechanicTypeEnum || (exports.CommissionMechanicTypeEnum = CommissionMechanicTypeEnum = {}));
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Quién cobra una fila de devengo.
|
|
3
|
+
*
|
|
4
|
+
* SELLER - El vendedor que originó la venta. Único que se devenga en el primer corte.
|
|
5
|
+
* STORE_ADMIN - El admin de la tienda, por el `storeOverrideBps`. ⚠️ Modelado pero NO devengado
|
|
6
|
+
* hasta que se defina quién es ese admin en `retail-org-business`.
|
|
7
|
+
*
|
|
8
|
+
* SureKeep Fase 3 — pista Retail. Motor de comisiones de VentasLuga.
|
|
9
|
+
*/
|
|
10
|
+
export declare enum CommissionPayeeTypeEnum {
|
|
11
|
+
SELLER = "SELLER",
|
|
12
|
+
STORE_ADMIN = "STORE_ADMIN"
|
|
13
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CommissionPayeeTypeEnum = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Quién cobra una fila de devengo.
|
|
6
|
+
*
|
|
7
|
+
* SELLER - El vendedor que originó la venta. Único que se devenga en el primer corte.
|
|
8
|
+
* STORE_ADMIN - El admin de la tienda, por el `storeOverrideBps`. ⚠️ Modelado pero NO devengado
|
|
9
|
+
* hasta que se defina quién es ese admin en `retail-org-business`.
|
|
10
|
+
*
|
|
11
|
+
* SureKeep Fase 3 — pista Retail. Motor de comisiones de VentasLuga.
|
|
12
|
+
*/
|
|
13
|
+
var CommissionPayeeTypeEnum;
|
|
14
|
+
(function (CommissionPayeeTypeEnum) {
|
|
15
|
+
CommissionPayeeTypeEnum["SELLER"] = "SELLER";
|
|
16
|
+
CommissionPayeeTypeEnum["STORE_ADMIN"] = "STORE_ADMIN";
|
|
17
|
+
})(CommissionPayeeTypeEnum || (exports.CommissionPayeeTypeEnum = CommissionPayeeTypeEnum = {}));
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Estado del corte semanal.
|
|
3
|
+
*
|
|
4
|
+
* OPEN - Acumulando devengos. Nadie lo «abre»: el ítem META se crea con upsert al primer ajuste o al cerrar.
|
|
5
|
+
* CLOSING - Cierre encolado o corriendo. Es el candado: sin este estado, dos clicks en «Cerrar»
|
|
6
|
+
* encolan dos workers que liquidan en paralelo, y la UI no puede distinguir «abierto» de «cerrando».
|
|
7
|
+
* CLOSED - Terminado. Es la ÚLTIMA escritura del worker, no la primera: significa «se pagó todo»,
|
|
8
|
+
* no «se empezó a pagar».
|
|
9
|
+
*
|
|
10
|
+
* ⚠️ No existe `PAID`: **Fiado no dispersa el pago**. El archivo se entrega a la nómina de LUGA.
|
|
11
|
+
*
|
|
12
|
+
* SureKeep Fase 3 — pista Retail. Motor de comisiones de VentasLuga.
|
|
13
|
+
*/
|
|
14
|
+
export declare enum CommissionPayoutStatusEnum {
|
|
15
|
+
OPEN = "OPEN",
|
|
16
|
+
CLOSING = "CLOSING",
|
|
17
|
+
CLOSED = "CLOSED"
|
|
18
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CommissionPayoutStatusEnum = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Estado del corte semanal.
|
|
6
|
+
*
|
|
7
|
+
* OPEN - Acumulando devengos. Nadie lo «abre»: el ítem META se crea con upsert al primer ajuste o al cerrar.
|
|
8
|
+
* CLOSING - Cierre encolado o corriendo. Es el candado: sin este estado, dos clicks en «Cerrar»
|
|
9
|
+
* encolan dos workers que liquidan en paralelo, y la UI no puede distinguir «abierto» de «cerrando».
|
|
10
|
+
* CLOSED - Terminado. Es la ÚLTIMA escritura del worker, no la primera: significa «se pagó todo»,
|
|
11
|
+
* no «se empezó a pagar».
|
|
12
|
+
*
|
|
13
|
+
* ⚠️ No existe `PAID`: **Fiado no dispersa el pago**. El archivo se entrega a la nómina de LUGA.
|
|
14
|
+
*
|
|
15
|
+
* SureKeep Fase 3 — pista Retail. Motor de comisiones de VentasLuga.
|
|
16
|
+
*/
|
|
17
|
+
var CommissionPayoutStatusEnum;
|
|
18
|
+
(function (CommissionPayoutStatusEnum) {
|
|
19
|
+
CommissionPayoutStatusEnum["OPEN"] = "OPEN";
|
|
20
|
+
CommissionPayoutStatusEnum["CLOSING"] = "CLOSING";
|
|
21
|
+
CommissionPayoutStatusEnum["CLOSED"] = "CLOSED";
|
|
22
|
+
})(CommissionPayoutStatusEnum || (exports.CommissionPayoutStatusEnum = CommissionPayoutStatusEnum = {}));
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Periodicidad de la cuota. El modal del plan ofrece las tres.
|
|
3
|
+
*
|
|
4
|
+
* ⚠️ El primer corte implementa SOLO `WEEKLY`; las otras dos se rechazan con error tipado en vez de
|
|
5
|
+
* calcularse mal en silencio.
|
|
6
|
+
*
|
|
7
|
+
* WEEKLY - Semanal. `M6_ADMIN` §9.3 y §9.4: corte de martes a lunes.
|
|
8
|
+
* BIWEEKLY - Quincenal. No implementada.
|
|
9
|
+
* MONTHLY - Mensual. No implementada.
|
|
10
|
+
*
|
|
11
|
+
* SureKeep Fase 3 — pista Retail. Motor de comisiones de VentasLuga.
|
|
12
|
+
*/
|
|
13
|
+
export declare enum CommissionPeriodTypeEnum {
|
|
14
|
+
WEEKLY = "WEEKLY",
|
|
15
|
+
BIWEEKLY = "BIWEEKLY",
|
|
16
|
+
MONTHLY = "MONTHLY"
|
|
17
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CommissionPeriodTypeEnum = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Periodicidad de la cuota. El modal del plan ofrece las tres.
|
|
6
|
+
*
|
|
7
|
+
* ⚠️ El primer corte implementa SOLO `WEEKLY`; las otras dos se rechazan con error tipado en vez de
|
|
8
|
+
* calcularse mal en silencio.
|
|
9
|
+
*
|
|
10
|
+
* WEEKLY - Semanal. `M6_ADMIN` §9.3 y §9.4: corte de martes a lunes.
|
|
11
|
+
* BIWEEKLY - Quincenal. No implementada.
|
|
12
|
+
* MONTHLY - Mensual. No implementada.
|
|
13
|
+
*
|
|
14
|
+
* SureKeep Fase 3 — pista Retail. Motor de comisiones de VentasLuga.
|
|
15
|
+
*/
|
|
16
|
+
var CommissionPeriodTypeEnum;
|
|
17
|
+
(function (CommissionPeriodTypeEnum) {
|
|
18
|
+
CommissionPeriodTypeEnum["WEEKLY"] = "WEEKLY";
|
|
19
|
+
CommissionPeriodTypeEnum["BIWEEKLY"] = "BIWEEKLY";
|
|
20
|
+
CommissionPeriodTypeEnum["MONTHLY"] = "MONTHLY";
|
|
21
|
+
})(CommissionPeriodTypeEnum || (exports.CommissionPeriodTypeEnum = CommissionPeriodTypeEnum = {}));
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Estado de una versión del plan de comisiones.
|
|
3
|
+
*
|
|
4
|
+
* DRAFT - Borrador en edición. Ítem ÚNICO (`sk = DRAFT`): se pisa, no versiona.
|
|
5
|
+
* PUBLISHED - Snapshot sellado y vigente. Apuntado por el puntero `ACTIVE`.
|
|
6
|
+
* SUPERSEDED - Snapshot que fue vigente y ya no lo es. Inmutable: lo devengado con él ya se devengó.
|
|
7
|
+
*
|
|
8
|
+
* SureKeep Fase 3 — pista Retail. Motor de comisiones de VentasLuga.
|
|
9
|
+
*/
|
|
10
|
+
export declare enum CommissionPlanStatusEnum {
|
|
11
|
+
DRAFT = "DRAFT",
|
|
12
|
+
PUBLISHED = "PUBLISHED",
|
|
13
|
+
SUPERSEDED = "SUPERSEDED"
|
|
14
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CommissionPlanStatusEnum = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Estado de una versión del plan de comisiones.
|
|
6
|
+
*
|
|
7
|
+
* DRAFT - Borrador en edición. Ítem ÚNICO (`sk = DRAFT`): se pisa, no versiona.
|
|
8
|
+
* PUBLISHED - Snapshot sellado y vigente. Apuntado por el puntero `ACTIVE`.
|
|
9
|
+
* SUPERSEDED - Snapshot que fue vigente y ya no lo es. Inmutable: lo devengado con él ya se devengó.
|
|
10
|
+
*
|
|
11
|
+
* SureKeep Fase 3 — pista Retail. Motor de comisiones de VentasLuga.
|
|
12
|
+
*/
|
|
13
|
+
var CommissionPlanStatusEnum;
|
|
14
|
+
(function (CommissionPlanStatusEnum) {
|
|
15
|
+
CommissionPlanStatusEnum["DRAFT"] = "DRAFT";
|
|
16
|
+
CommissionPlanStatusEnum["PUBLISHED"] = "PUBLISHED";
|
|
17
|
+
CommissionPlanStatusEnum["SUPERSEDED"] = "SUPERSEDED";
|
|
18
|
+
})(CommissionPlanStatusEnum || (exports.CommissionPlanStatusEnum = CommissionPlanStatusEnum = {}));
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Contra qué precio se evalúa la mecánica de una categoría.
|
|
3
|
+
*
|
|
4
|
+
* ⚠️ En el primer corte las tres resuelven contra el mismo número: la venta trae UN precio
|
|
5
|
+
* (`equipmentPriceCents`, con `amountCents` de respaldo). Se modela porque el plan de Jaime lo
|
|
6
|
+
* declara por categoría y borrarlo obligaría a migrar los snapshots cuando lleguen los tres precios.
|
|
7
|
+
*
|
|
8
|
+
* LIST - Precio de lista.
|
|
9
|
+
* FINAL - Precio final cobrado.
|
|
10
|
+
* PUBLIC - Precio público sugerido.
|
|
11
|
+
*
|
|
12
|
+
* SureKeep Fase 3 — pista Retail. Motor de comisiones de VentasLuga.
|
|
13
|
+
*/
|
|
14
|
+
export declare enum CommissionPriceReferenceEnum {
|
|
15
|
+
LIST = "LIST",
|
|
16
|
+
FINAL = "FINAL",
|
|
17
|
+
PUBLIC = "PUBLIC"
|
|
18
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CommissionPriceReferenceEnum = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Contra qué precio se evalúa la mecánica de una categoría.
|
|
6
|
+
*
|
|
7
|
+
* ⚠️ En el primer corte las tres resuelven contra el mismo número: la venta trae UN precio
|
|
8
|
+
* (`equipmentPriceCents`, con `amountCents` de respaldo). Se modela porque el plan de Jaime lo
|
|
9
|
+
* declara por categoría y borrarlo obligaría a migrar los snapshots cuando lleguen los tres precios.
|
|
10
|
+
*
|
|
11
|
+
* LIST - Precio de lista.
|
|
12
|
+
* FINAL - Precio final cobrado.
|
|
13
|
+
* PUBLIC - Precio público sugerido.
|
|
14
|
+
*
|
|
15
|
+
* SureKeep Fase 3 — pista Retail. Motor de comisiones de VentasLuga.
|
|
16
|
+
*/
|
|
17
|
+
var CommissionPriceReferenceEnum;
|
|
18
|
+
(function (CommissionPriceReferenceEnum) {
|
|
19
|
+
CommissionPriceReferenceEnum["LIST"] = "LIST";
|
|
20
|
+
CommissionPriceReferenceEnum["FINAL"] = "FINAL";
|
|
21
|
+
CommissionPriceReferenceEnum["PUBLIC"] = "PUBLIC";
|
|
22
|
+
})(CommissionPriceReferenceEnum || (exports.CommissionPriceReferenceEnum = CommissionPriceReferenceEnum = {}));
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Qué se mide para evaluar la cuota.
|
|
3
|
+
*
|
|
4
|
+
* UNITS - Piezas vendidas en el periodo.
|
|
5
|
+
* SK_AMOUNT - Monto vendido, contando SOLO las ventas con financiera SUREKEEP.
|
|
6
|
+
*
|
|
7
|
+
* SureKeep Fase 3 — pista Retail. Motor de comisiones de VentasLuga.
|
|
8
|
+
*/
|
|
9
|
+
export declare enum CommissionQuotaMeasureEnum {
|
|
10
|
+
UNITS = "UNITS",
|
|
11
|
+
SK_AMOUNT = "SK_AMOUNT"
|
|
12
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CommissionQuotaMeasureEnum = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Qué se mide para evaluar la cuota.
|
|
6
|
+
*
|
|
7
|
+
* UNITS - Piezas vendidas en el periodo.
|
|
8
|
+
* SK_AMOUNT - Monto vendido, contando SOLO las ventas con financiera SUREKEEP.
|
|
9
|
+
*
|
|
10
|
+
* SureKeep Fase 3 — pista Retail. Motor de comisiones de VentasLuga.
|
|
11
|
+
*/
|
|
12
|
+
var CommissionQuotaMeasureEnum;
|
|
13
|
+
(function (CommissionQuotaMeasureEnum) {
|
|
14
|
+
CommissionQuotaMeasureEnum["UNITS"] = "UNITS";
|
|
15
|
+
CommissionQuotaMeasureEnum["SK_AMOUNT"] = "SK_AMOUNT";
|
|
16
|
+
})(CommissionQuotaMeasureEnum || (exports.CommissionQuotaMeasureEnum = CommissionQuotaMeasureEnum = {}));
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cómo se aplica la cuota al alcanzarse.
|
|
3
|
+
*
|
|
4
|
+
* Queda con un solo valor A PROPÓSITO: es un campo enumerable del dominio, no un flag. Guardarlo
|
|
5
|
+
* como booleano obligaría a migrar los snapshots el día que aparezca un modo prospectivo.
|
|
6
|
+
*
|
|
7
|
+
* RETROACTIVE - Aplica a TODO lo devengado en el periodo, no solo a lo que vino después.
|
|
8
|
+
*
|
|
9
|
+
* SureKeep Fase 3 — pista Retail. Motor de comisiones de VentasLuga.
|
|
10
|
+
*/
|
|
11
|
+
export declare enum CommissionQuotaModeEnum {
|
|
12
|
+
RETROACTIVE = "RETROACTIVE"
|
|
13
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CommissionQuotaModeEnum = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Cómo se aplica la cuota al alcanzarse.
|
|
6
|
+
*
|
|
7
|
+
* Queda con un solo valor A PROPÓSITO: es un campo enumerable del dominio, no un flag. Guardarlo
|
|
8
|
+
* como booleano obligaría a migrar los snapshots el día que aparezca un modo prospectivo.
|
|
9
|
+
*
|
|
10
|
+
* RETROACTIVE - Aplica a TODO lo devengado en el periodo, no solo a lo que vino después.
|
|
11
|
+
*
|
|
12
|
+
* SureKeep Fase 3 — pista Retail. Motor de comisiones de VentasLuga.
|
|
13
|
+
*/
|
|
14
|
+
var CommissionQuotaModeEnum;
|
|
15
|
+
(function (CommissionQuotaModeEnum) {
|
|
16
|
+
CommissionQuotaModeEnum["RETROACTIVE"] = "RETROACTIVE";
|
|
17
|
+
})(CommissionQuotaModeEnum || (exports.CommissionQuotaModeEnum = CommissionQuotaModeEnum = {}));
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sobre quién se acumula la cuota.
|
|
3
|
+
*
|
|
4
|
+
* SELLER - Por vendedor. Único implementado en el primer corte.
|
|
5
|
+
* STORE - Por tienda: la alcanza el equipo completo.
|
|
6
|
+
*
|
|
7
|
+
* SureKeep Fase 3 — pista Retail. Motor de comisiones de VentasLuga.
|
|
8
|
+
*/
|
|
9
|
+
export declare enum CommissionQuotaSubjectEnum {
|
|
10
|
+
SELLER = "SELLER",
|
|
11
|
+
STORE = "STORE"
|
|
12
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CommissionQuotaSubjectEnum = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Sobre quién se acumula la cuota.
|
|
6
|
+
*
|
|
7
|
+
* SELLER - Por vendedor. Único implementado en el primer corte.
|
|
8
|
+
* STORE - Por tienda: la alcanza el equipo completo.
|
|
9
|
+
*
|
|
10
|
+
* SureKeep Fase 3 — pista Retail. Motor de comisiones de VentasLuga.
|
|
11
|
+
*/
|
|
12
|
+
var CommissionQuotaSubjectEnum;
|
|
13
|
+
(function (CommissionQuotaSubjectEnum) {
|
|
14
|
+
CommissionQuotaSubjectEnum["SELLER"] = "SELLER";
|
|
15
|
+
CommissionQuotaSubjectEnum["STORE"] = "STORE";
|
|
16
|
+
})(CommissionQuotaSubjectEnum || (exports.CommissionQuotaSubjectEnum = CommissionQuotaSubjectEnum = {}));
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tipo de cuota. Cuota y acelerador quedaron unificados en un solo concepto (Jaime, 28-jul).
|
|
3
|
+
*
|
|
4
|
+
* BINARY - Un gate: alcanzarlo cambia de columna (`base` → `withQuota`) para las categorías que la referencian.
|
|
5
|
+
* TIERED - N niveles con multiplicador RETROACTIVO sobre el resultado. Es el «acelerador».
|
|
6
|
+
*
|
|
7
|
+
* SureKeep Fase 3 — pista Retail. Motor de comisiones de VentasLuga.
|
|
8
|
+
*/
|
|
9
|
+
export declare enum CommissionQuotaTypeEnum {
|
|
10
|
+
BINARY = "BINARY",
|
|
11
|
+
TIERED = "TIERED"
|
|
12
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CommissionQuotaTypeEnum = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Tipo de cuota. Cuota y acelerador quedaron unificados en un solo concepto (Jaime, 28-jul).
|
|
6
|
+
*
|
|
7
|
+
* BINARY - Un gate: alcanzarlo cambia de columna (`base` → `withQuota`) para las categorías que la referencian.
|
|
8
|
+
* TIERED - N niveles con multiplicador RETROACTIVO sobre el resultado. Es el «acelerador».
|
|
9
|
+
*
|
|
10
|
+
* SureKeep Fase 3 — pista Retail. Motor de comisiones de VentasLuga.
|
|
11
|
+
*/
|
|
12
|
+
var CommissionQuotaTypeEnum;
|
|
13
|
+
(function (CommissionQuotaTypeEnum) {
|
|
14
|
+
CommissionQuotaTypeEnum["BINARY"] = "BINARY";
|
|
15
|
+
CommissionQuotaTypeEnum["TIERED"] = "TIERED";
|
|
16
|
+
})(CommissionQuotaTypeEnum || (exports.CommissionQuotaTypeEnum = CommissionQuotaTypeEnum = {}));
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export * from './enums/CommissionPlanStatusEnum';
|
|
2
|
+
export * from './enums/CommissionMechanicTypeEnum';
|
|
3
|
+
export * from './enums/CommissionPriceReferenceEnum';
|
|
4
|
+
export * from './enums/CommissionQuotaTypeEnum';
|
|
5
|
+
export * from './enums/CommissionQuotaMeasureEnum';
|
|
6
|
+
export * from './enums/CommissionQuotaSubjectEnum';
|
|
7
|
+
export * from './enums/CommissionPeriodTypeEnum';
|
|
8
|
+
export * from './enums/CommissionQuotaModeEnum';
|
|
9
|
+
export * from './enums/CommissionAccrualStatusEnum';
|
|
10
|
+
export * from './enums/CommissionPayoutStatusEnum';
|
|
11
|
+
export * from './enums/CommissionPayeeTypeEnum';
|
|
12
|
+
export * from './enums/CommissionExceptionTypeEnum';
|
|
13
|
+
export * from './enums/CommissionCalcStepEnum';
|
|
14
|
+
export * from './dtos/CommissionPlan';
|
|
15
|
+
export * from './dtos/CommissionCalcTrace';
|
|
16
|
+
export * from './dtos/CommissionAccrual';
|
|
17
|
+
export * from './dtos/CommissionPayout';
|
|
18
|
+
export * from './dtos/CommissionApi';
|
|
@@ -0,0 +1,37 @@
|
|
|
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/CommissionPlanStatusEnum"), exports);
|
|
19
|
+
__exportStar(require("./enums/CommissionMechanicTypeEnum"), exports);
|
|
20
|
+
__exportStar(require("./enums/CommissionPriceReferenceEnum"), exports);
|
|
21
|
+
__exportStar(require("./enums/CommissionQuotaTypeEnum"), exports);
|
|
22
|
+
__exportStar(require("./enums/CommissionQuotaMeasureEnum"), exports);
|
|
23
|
+
__exportStar(require("./enums/CommissionQuotaSubjectEnum"), exports);
|
|
24
|
+
__exportStar(require("./enums/CommissionPeriodTypeEnum"), exports);
|
|
25
|
+
__exportStar(require("./enums/CommissionQuotaModeEnum"), exports);
|
|
26
|
+
__exportStar(require("./enums/CommissionAccrualStatusEnum"), exports);
|
|
27
|
+
__exportStar(require("./enums/CommissionPayoutStatusEnum"), exports);
|
|
28
|
+
__exportStar(require("./enums/CommissionPayeeTypeEnum"), exports);
|
|
29
|
+
__exportStar(require("./enums/CommissionExceptionTypeEnum"), exports);
|
|
30
|
+
__exportStar(require("./enums/CommissionCalcStepEnum"), exports);
|
|
31
|
+
// Entidades del dominio
|
|
32
|
+
__exportStar(require("./dtos/CommissionPlan"), exports);
|
|
33
|
+
__exportStar(require("./dtos/CommissionCalcTrace"), exports);
|
|
34
|
+
__exportStar(require("./dtos/CommissionAccrual"), exports);
|
|
35
|
+
__exportStar(require("./dtos/CommissionPayout"), exports);
|
|
36
|
+
// Contratos HTTP — uno por endpoint
|
|
37
|
+
__exportStar(require("./dtos/CommissionApi"), exports);
|
package/package.json
CHANGED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { IsString, IsInt, IsEnum, IsOptional } from 'class-validator';
|
|
2
|
+
import { MechanismType } from '../enums/MechanismType';
|
|
3
|
+
import { CollectionResultStatus } from '../enums/CollectionResultStatus';
|
|
4
|
+
|
|
5
|
+
/** Un intento de cobro ejecutado sobre un intent, para el backoffice de monitoreo. */
|
|
6
|
+
export class CollectionAttemptDto {
|
|
7
|
+
@IsString() attemptId!: string;
|
|
8
|
+
@IsString() intentId!: string;
|
|
9
|
+
@IsString() source!: string;
|
|
10
|
+
@IsEnum(MechanismType) mechanism!: MechanismType;
|
|
11
|
+
@IsInt() amount!: number;
|
|
12
|
+
@IsOptional() @IsString() holdTxId?: string;
|
|
13
|
+
@IsOptional() @IsEnum(CollectionResultStatus) result?: CollectionResultStatus;
|
|
14
|
+
@IsOptional() @IsString() errorCode?: string;
|
|
15
|
+
@IsOptional() @IsString() errorDetail?: string;
|
|
16
|
+
@IsInt() createdAt!: number; // epoch ms
|
|
17
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { IsString, IsInt, IsEnum, IsOptional } from 'class-validator';
|
|
2
|
+
import { SagaStep } from '../enums/SagaStep';
|
|
3
|
+
|
|
4
|
+
/** Entrada del log estructurado de errores del motor de cobro, para el backoffice de monitoreo. */
|
|
5
|
+
export class CollectionErrorLogDto {
|
|
6
|
+
@IsString() errorId!: string;
|
|
7
|
+
@IsOptional() @IsString() intentId?: string;
|
|
8
|
+
@IsOptional() @IsString() attemptId?: string;
|
|
9
|
+
@IsOptional() @IsEnum(SagaStep) sagaStep?: SagaStep;
|
|
10
|
+
@IsString() errorCode!: string;
|
|
11
|
+
@IsOptional() @IsString() errorDetail?: string;
|
|
12
|
+
@IsString() tenantId!: string;
|
|
13
|
+
@IsInt() createdAt!: number; // epoch ms
|
|
14
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { IsArray, ValidateNested } from 'class-validator';
|
|
2
|
+
import { Type } from 'class-transformer';
|
|
3
|
+
import { CollectionIntentSummaryDto } from './CollectionIntentSummaryDto';
|
|
4
|
+
import { CollectionAttemptDto } from './CollectionAttemptDto';
|
|
5
|
+
import { CollectionOutboxEventDto } from './CollectionOutboxEventDto';
|
|
6
|
+
import { CollectionErrorLogDto } from './CollectionErrorLogDto';
|
|
7
|
+
|
|
8
|
+
/** Detalle de un intent para el backoffice de monitoreo: el resumen más su historial completo. */
|
|
9
|
+
export class CollectionIntentDetailDto extends CollectionIntentSummaryDto {
|
|
10
|
+
@IsArray() @ValidateNested({ each: true }) @Type(() => CollectionAttemptDto) attempts!: CollectionAttemptDto[];
|
|
11
|
+
@IsArray() @ValidateNested({ each: true }) @Type(() => CollectionOutboxEventDto) outbox!: CollectionOutboxEventDto[];
|
|
12
|
+
@IsArray() @ValidateNested({ each: true }) @Type(() => CollectionErrorLogDto) errors!: CollectionErrorLogDto[];
|
|
13
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { IsString, IsInt, IsBoolean, IsEnum, IsOptional } from 'class-validator';
|
|
2
|
+
import { CollectionState } from '../enums/CollectionState';
|
|
3
|
+
import { SagaStep } from '../enums/SagaStep';
|
|
4
|
+
|
|
5
|
+
/** Fila de listado de intents para el backoffice de monitoreo del motor de cobro. */
|
|
6
|
+
export class CollectionIntentSummaryDto {
|
|
7
|
+
@IsString() intentId!: string;
|
|
8
|
+
@IsString() ownerRef!: string;
|
|
9
|
+
@IsString() tenantId!: string;
|
|
10
|
+
@IsString() domain!: string;
|
|
11
|
+
@IsString() chargeId!: string;
|
|
12
|
+
@IsInt() amount!: number;
|
|
13
|
+
@IsOptional() @IsInt() reserved?: number;
|
|
14
|
+
@IsEnum(CollectionState) state!: CollectionState;
|
|
15
|
+
@IsEnum(SagaStep) sagaStep!: SagaStep;
|
|
16
|
+
@IsOptional() @IsBoolean() attention?: boolean;
|
|
17
|
+
@IsOptional() @IsInt() failureCount?: number;
|
|
18
|
+
@IsOptional() @IsInt() retryCount?: number;
|
|
19
|
+
@IsOptional() @IsInt() nextRetryAt?: number; // epoch ms
|
|
20
|
+
@IsOptional() @IsString() lastErrorCode?: string;
|
|
21
|
+
@IsOptional() @IsString() lastErrorMsg?: string;
|
|
22
|
+
@IsInt() createdAt!: number; // epoch ms
|
|
23
|
+
@IsInt() updatedAt!: number; // epoch ms
|
|
24
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { IsInt, IsNumber, IsObject } from 'class-validator';
|
|
2
|
+
|
|
3
|
+
/** Métricas agregadas del motor de cobro, para el dashboard del backoffice de monitoreo. */
|
|
4
|
+
export class CollectionMetricsDto {
|
|
5
|
+
@IsObject() countsByState!: Record<string, number>;
|
|
6
|
+
@IsNumber() successRate!: number;
|
|
7
|
+
@IsInt() amountReserved!: number;
|
|
8
|
+
@IsInt() amountCollected!: number;
|
|
9
|
+
@IsInt() backlogAwaitingFunds!: number;
|
|
10
|
+
@IsInt() dlqCount!: number;
|
|
11
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { IsString, IsInt, IsOptional } from 'class-validator';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Mensaje del outbox transaccional (publicación de `CollectionResult` hacia el dominio), para el
|
|
5
|
+
* backoffice de monitoreo. `status` viaja como texto (p.ej. `PENDING`, `SENT`, `FAILED`, `DLQ`) — su
|
|
6
|
+
* enum de origen es interno a la mecánica de entrega del motor.
|
|
7
|
+
*/
|
|
8
|
+
export class CollectionOutboxEventDto {
|
|
9
|
+
@IsString() eventId!: string;
|
|
10
|
+
@IsString() attemptId!: string;
|
|
11
|
+
@IsString() domain!: string;
|
|
12
|
+
@IsString() status!: string;
|
|
13
|
+
@IsOptional() @IsInt() deliveryAttempts?: number;
|
|
14
|
+
@IsOptional() @IsString() lastError?: string;
|
|
15
|
+
@IsOptional() @IsInt() movedToDlqAt?: number; // epoch ms
|
|
16
|
+
@IsInt() createdAt!: number; // epoch ms
|
|
17
|
+
}
|
package/src/collection/index.ts
CHANGED
|
@@ -17,3 +17,11 @@ export * from './dtos/CollectionSourceDto';
|
|
|
17
17
|
export * from './dtos/CollectionProductConfigDto';
|
|
18
18
|
export * from './dtos/UpsertProductConfigRequest';
|
|
19
19
|
export * from './dtos/ApplyCollectionResultRequest';
|
|
20
|
+
|
|
21
|
+
// DTOs — backoffice de monitoreo
|
|
22
|
+
export * from './dtos/CollectionIntentSummaryDto';
|
|
23
|
+
export * from './dtos/CollectionAttemptDto';
|
|
24
|
+
export * from './dtos/CollectionOutboxEventDto';
|
|
25
|
+
export * from './dtos/CollectionErrorLogDto';
|
|
26
|
+
export * from './dtos/CollectionIntentDetailDto';
|
|
27
|
+
export * from './dtos/CollectionMetricsDto';
|
package/src/index.ts
CHANGED
|
@@ -105,6 +105,10 @@ export * as EmailVerification from './emailVerification';
|
|
|
105
105
|
// RetailOrg: DTOs/enums del lambda retail-org-business (SureKeep Fase 1 — pista Retail).
|
|
106
106
|
// Dominio de retailers → zonas → tiendas → usuarios retail.
|
|
107
107
|
export * as RetailOrg from './retailOrg';
|
|
108
|
+
// RetailCommission: DTOs/enums del lambda retail-commission-business (SureKeep Fase 3 — pista
|
|
109
|
+
// Retail). El motor de comisiones de VentasLuga: el plan versionado por snapshot, el devengo por
|
|
110
|
+
// venta y el corte semanal.
|
|
111
|
+
export * as RetailCommission from './retailCommission';
|
|
108
112
|
// RetailCatalog: DTOs/enums del lambda retail-catalog-business (comp 05 — catálogo de productos
|
|
109
113
|
// por SKU + inventario por IMEI; SureKeep Fase 1 — pista Retail).
|
|
110
114
|
export * as RetailCatalog from './retailCatalog';
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import type { CommissionAccrualStatusEnum } from '../enums/CommissionAccrualStatusEnum';
|
|
2
|
+
import type { CommissionPayeeTypeEnum } from '../enums/CommissionPayeeTypeEnum';
|
|
3
|
+
import type { SaleFinancierEnum } from '../../retailWizard/enums/SaleFinancierEnum';
|
|
4
|
+
import type { CommissionCalcTrace } from './CommissionCalcTrace';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* El devengo: lo que se le debe a un vendedor por UNA venta.
|
|
8
|
+
* SureKeep Fase 3 — pista Retail.
|
|
9
|
+
*
|
|
10
|
+
* **Se comisiona la venta, no la línea.** Una `RetailSale` es de un solo producto: no hay `lines[]`
|
|
11
|
+
* que repartir.
|
|
12
|
+
*
|
|
13
|
+
* ⚠️ **Append-only solo hasta el cierre.** Al devengar se escriben el monto base y la traza; al
|
|
14
|
+
* cerrar el corte se escriben `quotaMet`, `quotaFactorBps`, `settledAmountCents`, `payoutId` y el
|
|
15
|
+
* `status`. Es un mutable con historia, no un log inmutable.
|
|
16
|
+
*/
|
|
17
|
+
export interface CommissionAccrual {
|
|
18
|
+
sellerId: string;
|
|
19
|
+
periodId: string;
|
|
20
|
+
saleId: string;
|
|
21
|
+
/** Denormalizados: son lo que hace posible aislar por retailer sin un GSI. */
|
|
22
|
+
retailerId: string;
|
|
23
|
+
storeId: string;
|
|
24
|
+
payeeType: CommissionPayeeTypeEnum;
|
|
25
|
+
status: CommissionAccrualStatusEnum;
|
|
26
|
+
/** Con qué versión del plan se calculó. Apunta a un `SNAPSHOT#<ulid>` consultable. */
|
|
27
|
+
planSnapshotId: string;
|
|
28
|
+
/**
|
|
29
|
+
* Versión del motor que lo calculó.
|
|
30
|
+
*
|
|
31
|
+
* El snapshot congela el PLAN, no el CÓDIGO. Sin este campo, un cambio en el evaluador vuelve
|
|
32
|
+
* imposible reproducir un monto viejo aunque el plan esté intacto.
|
|
33
|
+
*/
|
|
34
|
+
calcEngineVersion: string;
|
|
35
|
+
categoryId: string | null;
|
|
36
|
+
mechanicType: string | null;
|
|
37
|
+
/** Resultado de mecánica + excepciones + add-ons. **Sin cuota ni acelerador.** */
|
|
38
|
+
baseAmountCents: number;
|
|
39
|
+
/** Derivada de `type` + `externalProvider` con `financierOfSale` del type-kit. */
|
|
40
|
+
financier: SaleFinancierEnum;
|
|
41
|
+
|
|
42
|
+
/** Al CERRAR: si el vendedor alcanzó la cuota de su categoría. */
|
|
43
|
+
quotaMet: boolean | null;
|
|
44
|
+
/** Al CERRAR: factor del acelerador. 10000 = 1.0×. */
|
|
45
|
+
quotaFactorBps: number | null;
|
|
46
|
+
/**
|
|
47
|
+
* Al CERRAR: el total liquidado.
|
|
48
|
+
*
|
|
49
|
+
* Se llama así —y no `amountCents`— para que nadie lo lea como definitivo antes del cierre.
|
|
50
|
+
*/
|
|
51
|
+
settledAmountCents: number | null;
|
|
52
|
+
payoutId: string | null;
|
|
53
|
+
reversalReason: string | null;
|
|
54
|
+
calcTrace: CommissionCalcTrace;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Lo mínimo de una venta para devengarla. Es lo que llega por la cola y lo que se reconstruye
|
|
59
|
+
* desde el data lake al simular — por eso vive en el type-kit y no dentro del motor.
|
|
60
|
+
*/
|
|
61
|
+
export interface CommissionSaleInput {
|
|
62
|
+
saleId: string;
|
|
63
|
+
sellerId: string;
|
|
64
|
+
retailerId: string;
|
|
65
|
+
storeId: string;
|
|
66
|
+
sku: string;
|
|
67
|
+
brand: string | null;
|
|
68
|
+
/**
|
|
69
|
+
* 🔴 **La base de comisión es el PRECIO DEL EQUIPO, no lo cobrado en caja.**
|
|
70
|
+
*
|
|
71
|
+
* En una venta a crédito `amountCents` es SOLO el enganche: comisionar sobre él pagaría una
|
|
72
|
+
* fracción de lo que corresponde. Se usa `equipmentPriceCents` y se cae a `amountCents` solo
|
|
73
|
+
* cuando no está (ventas viejas sin el dato).
|
|
74
|
+
*/
|
|
75
|
+
equipmentPriceCents: number | null;
|
|
76
|
+
amountCents: number;
|
|
77
|
+
financier: SaleFinancierEnum;
|
|
78
|
+
/** `CASH` | `CREDIT`, para `PERCENT_BY_PAYMENT`. */
|
|
79
|
+
paymentType: string;
|
|
80
|
+
soldAt: string;
|
|
81
|
+
}
|