@fiado/type-kit 3.260.0 → 3.262.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.
Files changed (104) hide show
  1. package/_test_/unit/platformRbac/PasswordPolicyInput.test.ts +58 -0
  2. package/_test_/unit/retailWizard/saleFinancier.test.ts +68 -0
  3. package/bin/benefitCenter/enums/BenefitFlowEnum.d.ts +11 -0
  4. package/bin/benefitCenter/enums/BenefitFlowEnum.js +15 -0
  5. package/bin/identity/dtos/PeopleResponse.d.ts +9 -0
  6. package/bin/identity/enums/SelfieSourceEnum.d.ts +10 -0
  7. package/bin/identity/enums/SelfieSourceEnum.js +14 -0
  8. package/bin/platformRbac/application/Application.d.ts +17 -0
  9. package/bin/platformRbac/dtos/CreateTenantRequest.d.ts +12 -0
  10. package/bin/platformRbac/dtos/CreateTenantRequest.js +8 -0
  11. package/bin/platformRbac/dtos/PasswordPolicyInput.d.ts +30 -0
  12. package/bin/platformRbac/dtos/PasswordPolicyInput.js +72 -0
  13. package/bin/platformRbac/index.d.ts +1 -0
  14. package/bin/platformRbac/index.js +3 -0
  15. package/bin/retailWizard/dtos/SaleException.d.ts +54 -0
  16. package/bin/retailWizard/dtos/SaleException.js +2 -0
  17. package/bin/retailWizard/dtos/SaleExceptionEvent.d.ts +18 -0
  18. package/bin/retailWizard/dtos/SaleExceptionEvent.js +2 -0
  19. package/bin/retailWizard/dtos/SaleExceptionPayload.d.ts +19 -0
  20. package/bin/retailWizard/dtos/SaleExceptionPayload.js +2 -0
  21. package/bin/retailWizard/dtos/SaleLogEntry.d.ts +29 -0
  22. package/bin/retailWizard/dtos/SaleLogEntry.js +2 -0
  23. package/bin/retailWizard/dtos/SalesReportDefinition.d.ts +20 -0
  24. package/bin/retailWizard/dtos/SalesReportDefinition.js +2 -0
  25. package/bin/retailWizard/dtos/SalesReportRun.d.ts +39 -0
  26. package/bin/retailWizard/dtos/SalesReportRun.js +2 -0
  27. package/bin/retailWizard/dtos/requests/BackofficeCancelSaleRequest.d.ts +26 -0
  28. package/bin/retailWizard/dtos/requests/BackofficeCancelSaleRequest.js +48 -0
  29. package/bin/retailWizard/dtos/requests/CreateSaleExceptionRequest.d.ts +28 -0
  30. package/bin/retailWizard/dtos/requests/CreateSaleExceptionRequest.js +96 -0
  31. package/bin/retailWizard/dtos/requests/ResolveSaleExceptionRequest.d.ts +15 -0
  32. package/bin/retailWizard/dtos/requests/ResolveSaleExceptionRequest.js +40 -0
  33. package/bin/retailWizard/dtos/requests/RunSalesReportRequest.d.ts +18 -0
  34. package/bin/retailWizard/dtos/requests/RunSalesReportRequest.js +45 -0
  35. package/bin/retailWizard/dtos/responses/BackofficeReportsResponse.d.ts +14 -0
  36. package/bin/retailWizard/dtos/responses/BackofficeReportsResponse.js +2 -0
  37. package/bin/retailWizard/dtos/responses/BackofficeSalesKpisResponse.d.ts +32 -0
  38. package/bin/retailWizard/dtos/responses/BackofficeSalesKpisResponse.js +2 -0
  39. package/bin/retailWizard/dtos/responses/BackofficeSalesStatsResponse.d.ts +26 -0
  40. package/bin/retailWizard/dtos/responses/BackofficeSalesStatsResponse.js +2 -0
  41. package/bin/retailWizard/enums/ReportFormatEnum.d.ts +5 -0
  42. package/bin/retailWizard/enums/ReportFormatEnum.js +9 -0
  43. package/bin/retailWizard/enums/ReportPeriodicityEnum.d.ts +9 -0
  44. package/bin/retailWizard/enums/ReportPeriodicityEnum.js +13 -0
  45. package/bin/retailWizard/enums/ReportRunStatusEnum.d.ts +18 -0
  46. package/bin/retailWizard/enums/ReportRunStatusEnum.js +22 -0
  47. package/bin/retailWizard/enums/SaleExceptionDecisionEnum.d.ts +10 -0
  48. package/bin/retailWizard/enums/SaleExceptionDecisionEnum.js +14 -0
  49. package/bin/retailWizard/enums/SaleExceptionEventKindEnum.d.ts +17 -0
  50. package/bin/retailWizard/enums/SaleExceptionEventKindEnum.js +21 -0
  51. package/bin/retailWizard/enums/SaleExceptionStatusEnum.d.ts +19 -0
  52. package/bin/retailWizard/enums/SaleExceptionStatusEnum.js +23 -0
  53. package/bin/retailWizard/enums/SaleExceptionTypeEnum.d.ts +19 -0
  54. package/bin/retailWizard/enums/SaleExceptionTypeEnum.js +23 -0
  55. package/bin/retailWizard/enums/SaleFinancierEnum.d.ts +18 -0
  56. package/bin/retailWizard/enums/SaleFinancierEnum.js +22 -0
  57. package/bin/retailWizard/enums/SalesReportIdEnum.d.ts +19 -0
  58. package/bin/retailWizard/enums/SalesReportIdEnum.js +23 -0
  59. package/bin/retailWizard/helpers/saleFinancier.d.ts +21 -0
  60. package/bin/retailWizard/helpers/saleFinancier.js +44 -0
  61. package/bin/retailWizard/index.d.ts +23 -0
  62. package/bin/retailWizard/index.js +29 -0
  63. package/bin/walletFunding/dtos/CancelFundingReferenceRequest.d.ts +6 -0
  64. package/bin/walletFunding/dtos/CancelFundingReferenceRequest.js +31 -0
  65. package/bin/walletFunding/dtos/CancelFundingReferenceResponse.d.ts +7 -0
  66. package/bin/walletFunding/dtos/CancelFundingReferenceResponse.js +6 -0
  67. package/bin/walletFunding/dtos/CancelFundingRequest.d.ts +11 -0
  68. package/bin/walletFunding/dtos/CancelFundingRequest.js +33 -0
  69. package/bin/walletFunding/dtos/CancelFundingResponse.d.ts +14 -0
  70. package/bin/walletFunding/dtos/CancelFundingResponse.js +12 -0
  71. package/bin/walletFunding/dtos/CancelWalletFundingRequest.d.ts +3 -0
  72. package/bin/walletFunding/dtos/CancelWalletFundingRequest.js +21 -0
  73. package/bin/walletFunding/dtos/CancelWalletFundingResponse.d.ts +7 -0
  74. package/bin/walletFunding/dtos/CancelWalletFundingResponse.js +6 -0
  75. package/package.json +1 -1
  76. package/src/identity/dtos/PeopleResponse.ts +9 -0
  77. package/src/platformRbac/application/Application.ts +17 -0
  78. package/src/platformRbac/dtos/CreateTenantRequest.ts +13 -0
  79. package/src/platformRbac/dtos/PasswordPolicyInput.ts +42 -0
  80. package/src/platformRbac/index.ts +3 -0
  81. package/src/retailWizard/dtos/SaleException.ts +55 -0
  82. package/src/retailWizard/dtos/SaleExceptionEvent.ts +19 -0
  83. package/src/retailWizard/dtos/SaleExceptionPayload.ts +19 -0
  84. package/src/retailWizard/dtos/SaleLogEntry.ts +30 -0
  85. package/src/retailWizard/dtos/SalesReportDefinition.ts +21 -0
  86. package/src/retailWizard/dtos/SalesReportRun.ts +40 -0
  87. package/src/retailWizard/dtos/requests/BackofficeCancelSaleRequest.ts +42 -0
  88. package/src/retailWizard/dtos/requests/CreateSaleExceptionRequest.ts +84 -0
  89. package/src/retailWizard/dtos/requests/ResolveSaleExceptionRequest.ts +25 -0
  90. package/src/retailWizard/dtos/requests/RunSalesReportRequest.ts +31 -0
  91. package/src/retailWizard/dtos/responses/BackofficeReportsResponse.ts +15 -0
  92. package/src/retailWizard/dtos/responses/BackofficeSalesKpisResponse.ts +34 -0
  93. package/src/retailWizard/dtos/responses/BackofficeSalesStatsResponse.ts +26 -0
  94. package/src/retailWizard/enums/ReportFormatEnum.ts +5 -0
  95. package/src/retailWizard/enums/ReportPeriodicityEnum.ts +9 -0
  96. package/src/retailWizard/enums/ReportRunStatusEnum.ts +18 -0
  97. package/src/retailWizard/enums/SaleExceptionDecisionEnum.ts +10 -0
  98. package/src/retailWizard/enums/SaleExceptionEventKindEnum.ts +17 -0
  99. package/src/retailWizard/enums/SaleExceptionStatusEnum.ts +19 -0
  100. package/src/retailWizard/enums/SaleExceptionTypeEnum.ts +19 -0
  101. package/src/retailWizard/enums/SaleFinancierEnum.ts +18 -0
  102. package/src/retailWizard/enums/SalesReportIdEnum.ts +19 -0
  103. package/src/retailWizard/helpers/saleFinancier.ts +48 -0
  104. package/src/retailWizard/index.ts +34 -0
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.BackofficeCancelSaleRequest = void 0;
13
+ const class_transformer_1 = require("class-transformer");
14
+ const class_validator_1 = require("class-validator");
15
+ /**
16
+ * POST /backoffice/sales/:saleId/cancel — cancelación del Admin VL. SureKeep Fase 3 — pista Retail.
17
+ *
18
+ * Es un endpoint SEPARADO de `POST /sales/:saleId/cancel` (el del vendedor), no una rama del mismo, y
19
+ * por eso lleva su propio DTO. Son dos reglas de negocio distintas: la del vendedor está acotada a su
20
+ * propia venta y a la ventana de 7 días; la del admin puede cancelar FUERA de ventana — que es justo
21
+ * lo que habilita la excepción `LATE_CANCEL`. Mezclarlas en un handler enredaría las dos.
22
+ *
23
+ * `outOfWindowExceptionId` es el puente entre las dos piezas: cancelar fuera de ventana exige una
24
+ * excepción `LATE_CANCEL` ya aprobada. Sin ella el manager rechaza, aunque el actor tenga el permiso.
25
+ */
26
+ class BackofficeCancelSaleRequest {
27
+ }
28
+ exports.BackofficeCancelSaleRequest = BackofficeCancelSaleRequest;
29
+ __decorate([
30
+ (0, class_transformer_1.Expose)(),
31
+ (0, class_validator_1.IsString)(),
32
+ (0, class_validator_1.MinLength)(10),
33
+ (0, class_validator_1.MaxLength)(200),
34
+ __metadata("design:type", String)
35
+ ], BackofficeCancelSaleRequest.prototype, "reason", void 0);
36
+ __decorate([
37
+ (0, class_transformer_1.Expose)(),
38
+ (0, class_validator_1.IsOptional)(),
39
+ (0, class_validator_1.IsBoolean)(),
40
+ __metadata("design:type", Boolean)
41
+ ], BackofficeCancelSaleRequest.prototype, "equipmentVerified", void 0);
42
+ __decorate([
43
+ (0, class_transformer_1.Expose)(),
44
+ (0, class_validator_1.IsOptional)(),
45
+ (0, class_validator_1.IsString)(),
46
+ (0, class_validator_1.MaxLength)(64),
47
+ __metadata("design:type", String)
48
+ ], BackofficeCancelSaleRequest.prototype, "outOfWindowExceptionId", void 0);
@@ -0,0 +1,28 @@
1
+ import { SaleExceptionTypeEnum } from '../../enums/SaleExceptionTypeEnum';
2
+ /** Lo que la excepción pide cambiar. Cada tipo usa los campos que le tocan; todos son opcionales. */
3
+ export declare class SaleExceptionPayloadInput {
4
+ sku?: string;
5
+ amountCents?: number;
6
+ soldAt?: string;
7
+ imei?: string;
8
+ }
9
+ /**
10
+ * POST /backoffice/exceptions — levanta una excepción sobre una venta. SureKeep Fase 3 — pista Retail.
11
+ *
12
+ * La `justification` es OBLIGATORIA y con mínimo real: es lo único que vuelve auditable la excepción,
13
+ * y un campo libre que acepta `"x"` no audita nada. Escribe `RetailSaleException_GT` +
14
+ * `SharedAuditTrail_GT` en la MISMA `TransactWriteItems`.
15
+ *
16
+ * El `retailerId` NO viaja en el request: sale del token (`scopeFromRetailer`).
17
+ */
18
+ export declare class CreateSaleExceptionRequest {
19
+ type: SaleExceptionTypeEnum;
20
+ /** `null`/ausente en las excepciones generales, que no cuelgan de una venta puntual. */
21
+ saleId?: string;
22
+ /** Obligatorio cuando NO hay `saleId`; si hay venta, se toma el de la venta. */
23
+ storeId?: string;
24
+ justification: string;
25
+ /** Impacto económico con signo, en centavos. Negativo si la excepción resta (descuento). */
26
+ impactCents?: number;
27
+ payload?: SaleExceptionPayloadInput;
28
+ }
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.CreateSaleExceptionRequest = exports.SaleExceptionPayloadInput = void 0;
13
+ const class_transformer_1 = require("class-transformer");
14
+ const class_validator_1 = require("class-validator");
15
+ const SaleExceptionTypeEnum_1 = require("../../enums/SaleExceptionTypeEnum");
16
+ /** Lo que la excepción pide cambiar. Cada tipo usa los campos que le tocan; todos son opcionales. */
17
+ class SaleExceptionPayloadInput {
18
+ }
19
+ exports.SaleExceptionPayloadInput = SaleExceptionPayloadInput;
20
+ __decorate([
21
+ (0, class_transformer_1.Expose)(),
22
+ (0, class_validator_1.IsOptional)(),
23
+ (0, class_validator_1.IsString)(),
24
+ (0, class_validator_1.MaxLength)(64),
25
+ __metadata("design:type", String)
26
+ ], SaleExceptionPayloadInput.prototype, "sku", void 0);
27
+ __decorate([
28
+ (0, class_transformer_1.Expose)(),
29
+ (0, class_validator_1.IsOptional)(),
30
+ (0, class_validator_1.IsInt)(),
31
+ __metadata("design:type", Number)
32
+ ], SaleExceptionPayloadInput.prototype, "amountCents", void 0);
33
+ __decorate([
34
+ (0, class_transformer_1.Expose)(),
35
+ (0, class_validator_1.IsOptional)(),
36
+ (0, class_validator_1.IsISO8601)(),
37
+ __metadata("design:type", String)
38
+ ], SaleExceptionPayloadInput.prototype, "soldAt", void 0);
39
+ __decorate([
40
+ (0, class_transformer_1.Expose)(),
41
+ (0, class_validator_1.IsOptional)(),
42
+ (0, class_validator_1.IsString)(),
43
+ (0, class_validator_1.MaxLength)(20),
44
+ __metadata("design:type", String)
45
+ ], SaleExceptionPayloadInput.prototype, "imei", void 0);
46
+ /**
47
+ * POST /backoffice/exceptions — levanta una excepción sobre una venta. SureKeep Fase 3 — pista Retail.
48
+ *
49
+ * La `justification` es OBLIGATORIA y con mínimo real: es lo único que vuelve auditable la excepción,
50
+ * y un campo libre que acepta `"x"` no audita nada. Escribe `RetailSaleException_GT` +
51
+ * `SharedAuditTrail_GT` en la MISMA `TransactWriteItems`.
52
+ *
53
+ * El `retailerId` NO viaja en el request: sale del token (`scopeFromRetailer`).
54
+ */
55
+ class CreateSaleExceptionRequest {
56
+ }
57
+ exports.CreateSaleExceptionRequest = CreateSaleExceptionRequest;
58
+ __decorate([
59
+ (0, class_transformer_1.Expose)(),
60
+ (0, class_validator_1.IsEnum)(SaleExceptionTypeEnum_1.SaleExceptionTypeEnum),
61
+ __metadata("design:type", String)
62
+ ], CreateSaleExceptionRequest.prototype, "type", void 0);
63
+ __decorate([
64
+ (0, class_transformer_1.Expose)(),
65
+ (0, class_validator_1.IsOptional)(),
66
+ (0, class_validator_1.IsString)(),
67
+ (0, class_validator_1.MaxLength)(64),
68
+ __metadata("design:type", String)
69
+ ], CreateSaleExceptionRequest.prototype, "saleId", void 0);
70
+ __decorate([
71
+ (0, class_transformer_1.Expose)(),
72
+ (0, class_validator_1.IsOptional)(),
73
+ (0, class_validator_1.IsString)(),
74
+ (0, class_validator_1.MaxLength)(64),
75
+ __metadata("design:type", String)
76
+ ], CreateSaleExceptionRequest.prototype, "storeId", void 0);
77
+ __decorate([
78
+ (0, class_transformer_1.Expose)(),
79
+ (0, class_validator_1.IsString)(),
80
+ (0, class_validator_1.MinLength)(20),
81
+ (0, class_validator_1.MaxLength)(1000),
82
+ __metadata("design:type", String)
83
+ ], CreateSaleExceptionRequest.prototype, "justification", void 0);
84
+ __decorate([
85
+ (0, class_transformer_1.Expose)(),
86
+ (0, class_validator_1.IsOptional)(),
87
+ (0, class_validator_1.IsInt)(),
88
+ __metadata("design:type", Number)
89
+ ], CreateSaleExceptionRequest.prototype, "impactCents", void 0);
90
+ __decorate([
91
+ (0, class_transformer_1.Expose)(),
92
+ (0, class_validator_1.IsOptional)(),
93
+ (0, class_validator_1.ValidateNested)(),
94
+ (0, class_transformer_1.Type)(() => SaleExceptionPayloadInput),
95
+ __metadata("design:type", SaleExceptionPayloadInput)
96
+ ], CreateSaleExceptionRequest.prototype, "payload", void 0);
@@ -0,0 +1,15 @@
1
+ import { SaleExceptionDecisionEnum } from '../../enums/SaleExceptionDecisionEnum';
2
+ /**
3
+ * POST /backoffice/exceptions/:exceptionId/resolve — aprueba o rechaza una excepción.
4
+ * SureKeep Fase 3 — pista Retail.
5
+ *
6
+ * La `resolution` es OBLIGATORIA en los dos veredictos, no solo al rechazar: un «aprobada» sin motivo
7
+ * escrito es exactamente el registro que después nadie puede defender ante una auditoría.
8
+ *
9
+ * **Idempotente** con el guard local (`IIdempotencyGuard` + `SureKeepSharedIdempotency_GT`): un doble
10
+ * click no puede resolver dos veces. ⚠️ El decorador `@Idempotent` NO existe en el gateway-adapter.
11
+ */
12
+ export declare class ResolveSaleExceptionRequest {
13
+ decision: SaleExceptionDecisionEnum;
14
+ resolution: string;
15
+ }
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.ResolveSaleExceptionRequest = void 0;
13
+ const class_transformer_1 = require("class-transformer");
14
+ const class_validator_1 = require("class-validator");
15
+ const SaleExceptionDecisionEnum_1 = require("../../enums/SaleExceptionDecisionEnum");
16
+ /**
17
+ * POST /backoffice/exceptions/:exceptionId/resolve — aprueba o rechaza una excepción.
18
+ * SureKeep Fase 3 — pista Retail.
19
+ *
20
+ * La `resolution` es OBLIGATORIA en los dos veredictos, no solo al rechazar: un «aprobada» sin motivo
21
+ * escrito es exactamente el registro que después nadie puede defender ante una auditoría.
22
+ *
23
+ * **Idempotente** con el guard local (`IIdempotencyGuard` + `SureKeepSharedIdempotency_GT`): un doble
24
+ * click no puede resolver dos veces. ⚠️ El decorador `@Idempotent` NO existe en el gateway-adapter.
25
+ */
26
+ class ResolveSaleExceptionRequest {
27
+ }
28
+ exports.ResolveSaleExceptionRequest = ResolveSaleExceptionRequest;
29
+ __decorate([
30
+ (0, class_transformer_1.Expose)(),
31
+ (0, class_validator_1.IsEnum)(SaleExceptionDecisionEnum_1.SaleExceptionDecisionEnum),
32
+ __metadata("design:type", String)
33
+ ], ResolveSaleExceptionRequest.prototype, "decision", void 0);
34
+ __decorate([
35
+ (0, class_transformer_1.Expose)(),
36
+ (0, class_validator_1.IsString)(),
37
+ (0, class_validator_1.MinLength)(10),
38
+ (0, class_validator_1.MaxLength)(1000),
39
+ __metadata("design:type", String)
40
+ ], ResolveSaleExceptionRequest.prototype, "resolution", void 0);
@@ -0,0 +1,18 @@
1
+ import { ReportFormatEnum } from '../../enums/ReportFormatEnum';
2
+ /**
3
+ * POST /backoffice/reports/:reportId/run — encola la generación de un reporte.
4
+ * SureKeep Fase 3 — pista Retail.
5
+ *
6
+ * Devuelve el `SalesReportRun` en `QUEUED`, NO el archivo: la generación es asíncrona por el límite de
7
+ * 29 s de API Gateway. El front poletea `GET /backoffice/reports` hasta ver `READY` y ahí usa el
8
+ * `downloadUrl`.
9
+ *
10
+ * El `reportId` viaja en el path, no acá. El `retailerId` sale del token.
11
+ */
12
+ export declare class RunSalesReportRequest {
13
+ format: ReportFormatEnum;
14
+ /** Inicio de la ventana de datos, ISO-8601. Si falta, la resuelve la periodicidad del reporte. */
15
+ periodFrom?: string;
16
+ /** Fin de la ventana de datos, ISO-8601. Si falta, la resuelve la periodicidad del reporte. */
17
+ periodTo?: string;
18
+ }
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.RunSalesReportRequest = void 0;
13
+ const class_transformer_1 = require("class-transformer");
14
+ const class_validator_1 = require("class-validator");
15
+ const ReportFormatEnum_1 = require("../../enums/ReportFormatEnum");
16
+ /**
17
+ * POST /backoffice/reports/:reportId/run — encola la generación de un reporte.
18
+ * SureKeep Fase 3 — pista Retail.
19
+ *
20
+ * Devuelve el `SalesReportRun` en `QUEUED`, NO el archivo: la generación es asíncrona por el límite de
21
+ * 29 s de API Gateway. El front poletea `GET /backoffice/reports` hasta ver `READY` y ahí usa el
22
+ * `downloadUrl`.
23
+ *
24
+ * El `reportId` viaja en el path, no acá. El `retailerId` sale del token.
25
+ */
26
+ class RunSalesReportRequest {
27
+ }
28
+ exports.RunSalesReportRequest = RunSalesReportRequest;
29
+ __decorate([
30
+ (0, class_transformer_1.Expose)(),
31
+ (0, class_validator_1.IsEnum)(ReportFormatEnum_1.ReportFormatEnum),
32
+ __metadata("design:type", String)
33
+ ], RunSalesReportRequest.prototype, "format", void 0);
34
+ __decorate([
35
+ (0, class_transformer_1.Expose)(),
36
+ (0, class_validator_1.IsOptional)(),
37
+ (0, class_validator_1.IsISO8601)(),
38
+ __metadata("design:type", String)
39
+ ], RunSalesReportRequest.prototype, "periodFrom", void 0);
40
+ __decorate([
41
+ (0, class_transformer_1.Expose)(),
42
+ (0, class_validator_1.IsOptional)(),
43
+ (0, class_validator_1.IsISO8601)(),
44
+ __metadata("design:type", String)
45
+ ], RunSalesReportRequest.prototype, "periodTo", void 0);
@@ -0,0 +1,14 @@
1
+ import type { SalesReportDefinition } from '../SalesReportDefinition';
2
+ import type { SalesReportRun } from '../SalesReportRun';
3
+ /**
4
+ * GET /backoffice/reports — el catálogo de los 5 reportes de ventas MÁS el log de corridas recientes,
5
+ * que es exactamente lo que la pantalla dibuja en sus dos secciones. SureKeep Fase 3 — pista Retail.
6
+ *
7
+ * Van juntos en una sola respuesta y no en dos endpoints porque la pantalla siempre necesita los dos,
8
+ * y el catálogo son 5 ítems de configuración en código: partirlo costaría un round-trip para nada.
9
+ */
10
+ export interface BackofficeReportsResponse {
11
+ definitions: SalesReportDefinition[];
12
+ /** Últimas corridas del retailer, más recientes primero. */
13
+ runs: SalesReportRun[];
14
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,32 @@
1
+ import type { SaleFinancierEnum } from '../../enums/SaleFinancierEnum';
2
+ /** Un tramo del mix por financiera del Home del Admin VL. */
3
+ export interface SalesFinancierMixEntry {
4
+ financier: SaleFinancierEnum;
5
+ count: number;
6
+ amountCents: number;
7
+ }
8
+ /**
9
+ * GET /backoffice/sales/kpis — los KPIs del Home del Admin VL. SureKeep Fase 3 — pista Retail.
10
+ *
11
+ * 🟡 **Incompleto por diseño:** el panel «Meta del día» necesita las metas por tienda, que viven en
12
+ * `retail-org-business` y **todavía no existen**. `goal` viaja `null` hasta entonces; todo lo demás
13
+ * son datos reales. El front debe tratar `null` como «sin meta configurada», no como cero.
14
+ *
15
+ * Las llaves van en inglés (el diseño no fija un payload literal acá, a diferencia de
16
+ * `BackofficeSalesStatsResponse`).
17
+ */
18
+ export interface BackofficeSalesKpisResponse {
19
+ /** Monto colocado hoy, en centavos. Mide precio del equipo, no lo cobrado en caja (DEC-032). */
20
+ soldTodayCents: number;
21
+ /** Piezas vendidas hoy. */
22
+ unitsToday: number;
23
+ /** Ticket promedio de hoy, en centavos. 0 si no hubo ventas. */
24
+ averageTicketCents: number;
25
+ /** Delta porcentual del monto de hoy contra ayer. `null` si ayer no hubo ventas (no se divide por cero). */
26
+ deltaVsYesterdayPct: number | null;
27
+ /** Monto del MISMO día de la semana pasada, en centavos — el baseline honesto contra la estacionalidad. */
28
+ baselineSameWeekdayCents: number;
29
+ mix: SalesFinancierMixEntry[];
30
+ /** Meta del día del retailer, en centavos. `null` mientras no exista la tabla de metas. */
31
+ goalCents: number | null;
32
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,26 @@
1
+ /**
2
+ * GET /backoffice/sales/stats — los pills de conteo arriba de la tabla de Ventas del Admin VL.
3
+ * SureKeep Fase 3 — pista Retail.
4
+ *
5
+ * ⚠️ **Las llaves van en ESPAÑOL, a propósito y como única excepción del dominio.** Es el contrato
6
+ * literal que fija el diseño de F3 (`03_backoffice_ventasluga/lambdas/retail-wizard-business.md`) y
7
+ * contra el que el front ya mockeó la pantalla. Cambiarlas a inglés por consistencia rompería una
8
+ * pantalla ya construida sin ganar nada. Decisión de Andrés, 2026-08-03.
9
+ *
10
+ * `contado` + `credito` == `total`. `surekeep` + `externas` == `credito`: las dos particiones son
11
+ * completas y NO se solapan (ver `helpers/saleFinancier`).
12
+ */
13
+ export interface BackofficeSalesStatsResponse {
14
+ /** Ventas del retailer en la ventana consultada. */
15
+ total: number;
16
+ /** Subconjunto de `total` con `soldAt` en el día de hoy. */
17
+ hoy: number;
18
+ /** `type: CASH`. */
19
+ contado: number;
20
+ /** `type: CREDIT` o `EXTERNAL_REFERRAL` — todo lo que no es contado. */
21
+ credito: number;
22
+ /** Financiadas por la SOFOM (`type: CREDIT`). */
23
+ surekeep: number;
24
+ /** Financiadas por un tercero (`EXTERNAL_REFERRAL` con proveedor). */
25
+ externas: number;
26
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,5 @@
1
+ /** Formato de salida de un reporte del Admin VL. SureKeep Fase 3 — pista Retail. */
2
+ export declare enum ReportFormatEnum {
3
+ CSV = "CSV",
4
+ PDF = "PDF"
5
+ }
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ReportFormatEnum = void 0;
4
+ /** Formato de salida de un reporte del Admin VL. SureKeep Fase 3 — pista Retail. */
5
+ var ReportFormatEnum;
6
+ (function (ReportFormatEnum) {
7
+ ReportFormatEnum["CSV"] = "CSV";
8
+ ReportFormatEnum["PDF"] = "PDF";
9
+ })(ReportFormatEnum || (exports.ReportFormatEnum = ReportFormatEnum = {}));
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Periodicidad de un reporte del Admin VL. Los diarios y semanales corren por cron; los mensuales
3
+ * requieren corrida manual (M6 §5.1). SureKeep Fase 3 — pista Retail.
4
+ */
5
+ export declare enum ReportPeriodicityEnum {
6
+ DAILY = "DAILY",
7
+ WEEKLY = "WEEKLY",
8
+ MONTHLY = "MONTHLY"
9
+ }
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ReportPeriodicityEnum = void 0;
4
+ /**
5
+ * Periodicidad de un reporte del Admin VL. Los diarios y semanales corren por cron; los mensuales
6
+ * requieren corrida manual (M6 §5.1). SureKeep Fase 3 — pista Retail.
7
+ */
8
+ var ReportPeriodicityEnum;
9
+ (function (ReportPeriodicityEnum) {
10
+ ReportPeriodicityEnum["DAILY"] = "DAILY";
11
+ ReportPeriodicityEnum["WEEKLY"] = "WEEKLY";
12
+ ReportPeriodicityEnum["MONTHLY"] = "MONTHLY";
13
+ })(ReportPeriodicityEnum || (exports.ReportPeriodicityEnum = ReportPeriodicityEnum = {}));
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Estado de una corrida de reporte. La generación es ASÍNCRONA: el `POST .../run` devuelve `QUEUED` y
3
+ * el front poletea el listado. SureKeep Fase 3 — pista Retail.
4
+ *
5
+ * Es async desde el día uno por el límite de 29 s de API Gateway: un reporte de red completa no entra
6
+ * en una respuesta síncrona. Mismo error que ya se corrigió en el cierre de corte de comisiones.
7
+ *
8
+ * QUEUED - Encolada, sin arrancar.
9
+ * RUNNING - Generándose.
10
+ * READY - Lista para descargar (`downloadUrl` presente).
11
+ * FAILED - Falló; `failureReason` explica por qué.
12
+ */
13
+ export declare enum ReportRunStatusEnum {
14
+ QUEUED = "QUEUED",
15
+ RUNNING = "RUNNING",
16
+ READY = "READY",
17
+ FAILED = "FAILED"
18
+ }
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ReportRunStatusEnum = void 0;
4
+ /**
5
+ * Estado de una corrida de reporte. La generación es ASÍNCRONA: el `POST .../run` devuelve `QUEUED` y
6
+ * el front poletea el listado. SureKeep Fase 3 — pista Retail.
7
+ *
8
+ * Es async desde el día uno por el límite de 29 s de API Gateway: un reporte de red completa no entra
9
+ * en una respuesta síncrona. Mismo error que ya se corrigió en el cierre de corte de comisiones.
10
+ *
11
+ * QUEUED - Encolada, sin arrancar.
12
+ * RUNNING - Generándose.
13
+ * READY - Lista para descargar (`downloadUrl` presente).
14
+ * FAILED - Falló; `failureReason` explica por qué.
15
+ */
16
+ var ReportRunStatusEnum;
17
+ (function (ReportRunStatusEnum) {
18
+ ReportRunStatusEnum["QUEUED"] = "QUEUED";
19
+ ReportRunStatusEnum["RUNNING"] = "RUNNING";
20
+ ReportRunStatusEnum["READY"] = "READY";
21
+ ReportRunStatusEnum["FAILED"] = "FAILED";
22
+ })(ReportRunStatusEnum || (exports.ReportRunStatusEnum = ReportRunStatusEnum = {}));
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Veredicto del Admin VL al resolver una excepción. Es un enum PROPIO y no un subconjunto de
3
+ * `SaleExceptionStatusEnum`: el request expresa una DECISIÓN («apruébala»), no un estado destino, y
4
+ * mezclarlos dejaría al caller mandar `APPLIED` o `NEW` en un endpoint que no los admite.
5
+ * SureKeep Fase 3 — pista Retail.
6
+ */
7
+ export declare enum SaleExceptionDecisionEnum {
8
+ APPROVE = "APPROVE",
9
+ REJECT = "REJECT"
10
+ }
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SaleExceptionDecisionEnum = void 0;
4
+ /**
5
+ * Veredicto del Admin VL al resolver una excepción. Es un enum PROPIO y no un subconjunto de
6
+ * `SaleExceptionStatusEnum`: el request expresa una DECISIÓN («apruébala»), no un estado destino, y
7
+ * mezclarlos dejaría al caller mandar `APPLIED` o `NEW` en un endpoint que no los admite.
8
+ * SureKeep Fase 3 — pista Retail.
9
+ */
10
+ var SaleExceptionDecisionEnum;
11
+ (function (SaleExceptionDecisionEnum) {
12
+ SaleExceptionDecisionEnum["APPROVE"] = "APPROVE";
13
+ SaleExceptionDecisionEnum["REJECT"] = "REJECT";
14
+ })(SaleExceptionDecisionEnum || (exports.SaleExceptionDecisionEnum = SaleExceptionDecisionEnum = {}));
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Tipo de entrada del timeline de una excepción (la conversación que la pantalla de Excepciones
3
+ * dibuja bajo la ficha). SureKeep Fase 3 — pista Retail.
4
+ *
5
+ * REQUEST - El alta: quién la levantó y por qué.
6
+ * NOTE - Nota de seguimiento (pide evidencia, deja contexto).
7
+ * APPROVAL - Queda aprobada.
8
+ * REJECTION - Queda rechazada.
9
+ * APPLIED - El cambio ya se aplicó al sistema.
10
+ */
11
+ export declare enum SaleExceptionEventKindEnum {
12
+ REQUEST = "REQUEST",
13
+ NOTE = "NOTE",
14
+ APPROVAL = "APPROVAL",
15
+ REJECTION = "REJECTION",
16
+ APPLIED = "APPLIED"
17
+ }
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SaleExceptionEventKindEnum = void 0;
4
+ /**
5
+ * Tipo de entrada del timeline de una excepción (la conversación que la pantalla de Excepciones
6
+ * dibuja bajo la ficha). SureKeep Fase 3 — pista Retail.
7
+ *
8
+ * REQUEST - El alta: quién la levantó y por qué.
9
+ * NOTE - Nota de seguimiento (pide evidencia, deja contexto).
10
+ * APPROVAL - Queda aprobada.
11
+ * REJECTION - Queda rechazada.
12
+ * APPLIED - El cambio ya se aplicó al sistema.
13
+ */
14
+ var SaleExceptionEventKindEnum;
15
+ (function (SaleExceptionEventKindEnum) {
16
+ SaleExceptionEventKindEnum["REQUEST"] = "REQUEST";
17
+ SaleExceptionEventKindEnum["NOTE"] = "NOTE";
18
+ SaleExceptionEventKindEnum["APPROVAL"] = "APPROVAL";
19
+ SaleExceptionEventKindEnum["REJECTION"] = "REJECTION";
20
+ SaleExceptionEventKindEnum["APPLIED"] = "APPLIED";
21
+ })(SaleExceptionEventKindEnum || (exports.SaleExceptionEventKindEnum = SaleExceptionEventKindEnum = {}));
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Estado de una excepción de venta. SureKeep Fase 3 — pista Retail.
3
+ *
4
+ * NEW - Levantada por el vendedor, sin tomar.
5
+ * IN_REVIEW - El Admin VL la está revisando.
6
+ * APPROVED - Aprobada; falta aplicar el cambio a la venta.
7
+ * APPLIED - Aprobada Y aplicada.
8
+ * REJECTED - Rechazada, con resolución obligatoria.
9
+ *
10
+ * ⚠️ El estado NO va en el sort key de `RetailSaleException_GT`: el sk es inmutable en DynamoDB y esto
11
+ * cambia en todo el ciclo. El filtro por estado se hace en memoria (son eventos raros).
12
+ */
13
+ export declare enum SaleExceptionStatusEnum {
14
+ NEW = "NEW",
15
+ IN_REVIEW = "IN_REVIEW",
16
+ APPROVED = "APPROVED",
17
+ APPLIED = "APPLIED",
18
+ REJECTED = "REJECTED"
19
+ }
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SaleExceptionStatusEnum = void 0;
4
+ /**
5
+ * Estado de una excepción de venta. SureKeep Fase 3 — pista Retail.
6
+ *
7
+ * NEW - Levantada por el vendedor, sin tomar.
8
+ * IN_REVIEW - El Admin VL la está revisando.
9
+ * APPROVED - Aprobada; falta aplicar el cambio a la venta.
10
+ * APPLIED - Aprobada Y aplicada.
11
+ * REJECTED - Rechazada, con resolución obligatoria.
12
+ *
13
+ * ⚠️ El estado NO va en el sort key de `RetailSaleException_GT`: el sk es inmutable en DynamoDB y esto
14
+ * cambia en todo el ciclo. El filtro por estado se hace en memoria (son eventos raros).
15
+ */
16
+ var SaleExceptionStatusEnum;
17
+ (function (SaleExceptionStatusEnum) {
18
+ SaleExceptionStatusEnum["NEW"] = "NEW";
19
+ SaleExceptionStatusEnum["IN_REVIEW"] = "IN_REVIEW";
20
+ SaleExceptionStatusEnum["APPROVED"] = "APPROVED";
21
+ SaleExceptionStatusEnum["APPLIED"] = "APPLIED";
22
+ SaleExceptionStatusEnum["REJECTED"] = "REJECTED";
23
+ })(SaleExceptionStatusEnum || (exports.SaleExceptionStatusEnum = SaleExceptionStatusEnum = {}));
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Tipo de excepción de venta (bandeja del Admin VL, M6 §5). SureKeep Fase 3 — pista Retail.
3
+ *
4
+ * CAPTURE_FIX - Corrección de captura: el POS registró un modelo/SKU distinto al vendido.
5
+ * LATE_CANCEL - Cancelación fuera de la ventana de 7 días.
6
+ * BACKDATING - Venta física ejecutada antes de su captura; se pide la fecha real.
7
+ * PRICE_OVERRIDE - Descuento o precio fuera de lista, autorizado por el Admin VL.
8
+ * EXTENDED_WARRANTY - Reemplazo de equipo bajo garantía extendida contratada en la venta.
9
+ *
10
+ * ⚠️ NO existe `AUTHORIZATION_CAP` (el `autorizacion_tope` del mockup): su dato es de conciliación,
11
+ * que es cobranza (D1), no retail. La fila del mockup no tiene backend en F3.
12
+ */
13
+ export declare enum SaleExceptionTypeEnum {
14
+ CAPTURE_FIX = "CAPTURE_FIX",
15
+ LATE_CANCEL = "LATE_CANCEL",
16
+ BACKDATING = "BACKDATING",
17
+ PRICE_OVERRIDE = "PRICE_OVERRIDE",
18
+ EXTENDED_WARRANTY = "EXTENDED_WARRANTY"
19
+ }
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SaleExceptionTypeEnum = void 0;
4
+ /**
5
+ * Tipo de excepción de venta (bandeja del Admin VL, M6 §5). SureKeep Fase 3 — pista Retail.
6
+ *
7
+ * CAPTURE_FIX - Corrección de captura: el POS registró un modelo/SKU distinto al vendido.
8
+ * LATE_CANCEL - Cancelación fuera de la ventana de 7 días.
9
+ * BACKDATING - Venta física ejecutada antes de su captura; se pide la fecha real.
10
+ * PRICE_OVERRIDE - Descuento o precio fuera de lista, autorizado por el Admin VL.
11
+ * EXTENDED_WARRANTY - Reemplazo de equipo bajo garantía extendida contratada en la venta.
12
+ *
13
+ * ⚠️ NO existe `AUTHORIZATION_CAP` (el `autorizacion_tope` del mockup): su dato es de conciliación,
14
+ * que es cobranza (D1), no retail. La fila del mockup no tiene backend en F3.
15
+ */
16
+ var SaleExceptionTypeEnum;
17
+ (function (SaleExceptionTypeEnum) {
18
+ SaleExceptionTypeEnum["CAPTURE_FIX"] = "CAPTURE_FIX";
19
+ SaleExceptionTypeEnum["LATE_CANCEL"] = "LATE_CANCEL";
20
+ SaleExceptionTypeEnum["BACKDATING"] = "BACKDATING";
21
+ SaleExceptionTypeEnum["PRICE_OVERRIDE"] = "PRICE_OVERRIDE";
22
+ SaleExceptionTypeEnum["EXTENDED_WARRANTY"] = "EXTENDED_WARRANTY";
23
+ })(SaleExceptionTypeEnum || (exports.SaleExceptionTypeEnum = SaleExceptionTypeEnum = {}));