@fiado/type-kit 3.573.0 → 3.575.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 (68) hide show
  1. package/_test_/unit/rewardsEligibility/evaluationStrategyDtos.test.ts +93 -0
  2. package/_test_/unit/rewardsEligibility/segmentMessagesAndRunDtos.test.ts +2 -2
  3. package/_test_/unit/rules/evaluationDatalakeDtos.test.ts +144 -0
  4. package/bin/retailCommission/dtos/CommissionApi.d.ts +25 -0
  5. package/bin/rewardsEligibility/constants/BatchLimits.d.ts +2 -0
  6. package/bin/rewardsEligibility/constants/BatchLimits.js +5 -0
  7. package/bin/rewardsEligibility/dtos/backoffice/CreateRunRequest.d.ts +2 -0
  8. package/bin/rewardsEligibility/dtos/backoffice/CreateRunRequest.js +7 -0
  9. package/bin/rewardsEligibility/dtos/backoffice/EvaluationRequest.d.ts +3 -0
  10. package/bin/rewardsEligibility/dtos/backoffice/EvaluationRequest.js +7 -0
  11. package/bin/rewardsEligibility/dtos/backoffice/EvaluationResponse.d.ts +3 -0
  12. package/bin/rewardsEligibility/dtos/backoffice/SimulateRequest.d.ts +2 -0
  13. package/bin/rewardsEligibility/dtos/backoffice/SimulateRequest.js +7 -0
  14. package/bin/rewardsEligibility/dtos/messages/EvaluateBatchMessage.d.ts +1 -1
  15. package/bin/rewardsEligibility/dtos/messages/EvaluateBatchMessage.js +3 -2
  16. package/bin/rewardsEligibility/index.d.ts +2 -0
  17. package/bin/rewardsEligibility/index.js +2 -0
  18. package/bin/rewardsEligibility/types/RewardInputRef.d.ts +9 -1
  19. package/bin/rewardsEligibility/validators/IsRewardInputs.d.ts +7 -0
  20. package/bin/rewardsEligibility/validators/IsRewardInputs.js +26 -0
  21. package/bin/rules/constants/RulesLimits.d.ts +6 -0
  22. package/bin/rules/constants/RulesLimits.js +7 -1
  23. package/bin/rules/dtos/EvaluateRulesRequest.d.ts +8 -0
  24. package/bin/rules/dtos/EvaluateRulesRequest.js +24 -0
  25. package/bin/rules/dtos/EvaluateRulesResponse.d.ts +3 -0
  26. package/bin/rules/dtos/ValidateRulesRequest.d.ts +5 -0
  27. package/bin/rules/dtos/ValidateRulesRequest.js +15 -0
  28. package/bin/rules/dtos/datalake/EvaluationExecutionRequest.d.ts +21 -0
  29. package/bin/rules/dtos/datalake/EvaluationExecutionRequest.js +83 -0
  30. package/bin/rules/dtos/datalake/EvaluationExecutionResponse.d.ts +6 -0
  31. package/bin/rules/dtos/datalake/EvaluationExecutionResponse.js +7 -0
  32. package/bin/rules/dtos/datalake/EvaluationExecutionResultsResponse.d.ts +11 -0
  33. package/bin/rules/dtos/datalake/EvaluationExecutionResultsResponse.js +7 -0
  34. package/bin/rules/dtos/datalake/EvaluationResultsRequest.d.ts +11 -0
  35. package/bin/rules/dtos/datalake/EvaluationResultsRequest.js +64 -0
  36. package/bin/rules/dtos/datalake/ReturnFieldsCatalogResponse.d.ts +17 -0
  37. package/bin/rules/dtos/datalake/ReturnFieldsCatalogResponse.js +10 -0
  38. package/bin/rules/dtos/population/SegmentTableSchemaResponse.d.ts +2 -0
  39. package/bin/rules/enums/EvaluationStrategyEnum.d.ts +5 -0
  40. package/bin/rules/enums/EvaluationStrategyEnum.js +9 -0
  41. package/bin/rules/enums/RulesErrorCodeEnum.d.ts +11 -1
  42. package/bin/rules/enums/RulesErrorCodeEnum.js +10 -0
  43. package/bin/rules/index.d.ts +6 -0
  44. package/bin/rules/index.js +7 -0
  45. package/package.json +1 -1
  46. package/src/retailCommission/dtos/CommissionApi.ts +26 -0
  47. package/src/rewardsEligibility/constants/BatchLimits.ts +2 -0
  48. package/src/rewardsEligibility/dtos/backoffice/CreateRunRequest.ts +7 -0
  49. package/src/rewardsEligibility/dtos/backoffice/EvaluationRequest.ts +8 -1
  50. package/src/rewardsEligibility/dtos/backoffice/EvaluationResponse.ts +3 -0
  51. package/src/rewardsEligibility/dtos/backoffice/SimulateRequest.ts +7 -0
  52. package/src/rewardsEligibility/dtos/messages/EvaluateBatchMessage.ts +3 -2
  53. package/src/rewardsEligibility/index.ts +2 -0
  54. package/src/rewardsEligibility/types/RewardInputRef.ts +6 -2
  55. package/src/rewardsEligibility/validators/IsRewardInputs.ts +16 -0
  56. package/src/rules/constants/RulesLimits.ts +6 -0
  57. package/src/rules/dtos/EvaluateRulesRequest.ts +26 -1
  58. package/src/rules/dtos/EvaluateRulesResponse.ts +3 -0
  59. package/src/rules/dtos/ValidateRulesRequest.ts +17 -2
  60. package/src/rules/dtos/datalake/EvaluationExecutionRequest.ts +73 -0
  61. package/src/rules/dtos/datalake/EvaluationExecutionResponse.ts +7 -0
  62. package/src/rules/dtos/datalake/EvaluationExecutionResultsResponse.ts +12 -0
  63. package/src/rules/dtos/datalake/EvaluationResultsRequest.ts +46 -0
  64. package/src/rules/dtos/datalake/ReturnFieldsCatalogResponse.ts +19 -0
  65. package/src/rules/dtos/population/SegmentTableSchemaResponse.ts +2 -0
  66. package/src/rules/enums/EvaluationStrategyEnum.ts +5 -0
  67. package/src/rules/enums/RulesErrorCodeEnum.ts +10 -0
  68. package/src/rules/index.ts +8 -0
@@ -1,8 +1,9 @@
1
1
  import { Expose } from 'class-transformer';
2
- import { ArrayMaxSize, IsArray, IsObject, IsOptional, IsString } from 'class-validator';
2
+ import { ArrayMaxSize, IsArray, IsEnum, IsObject, IsOptional, IsString, Matches } from 'class-validator';
3
3
  import { JsonValue } from '../../common';
4
4
  import { InputField } from '../../dynamicForm/dtos/InputField';
5
- import { RULES_MAX_INPUT_CONTRACT } from '../constants/RulesLimits';
5
+ import { RETURN_FIELD_ID_PATTERN, RULES_MAX_INPUT_CONTRACT, RULES_MAX_RETURN_FIELDS } from '../constants/RulesLimits';
6
+ import { EvaluationStrategyEnum } from '../enums/EvaluationStrategyEnum';
6
7
 
7
8
  /** `POST /validate`: valida una regla guardada contra el catálogo de los ítems indicados y el contrato de `input`. */
8
9
  export class ValidateRulesRequest {
@@ -30,4 +31,18 @@ export class ValidateRulesRequest {
30
31
  @ArrayMaxSize(RULES_MAX_INPUT_CONTRACT)
31
32
  @IsObject({ each: true })
32
33
  inputContract?: InputField[];
34
+
35
+ /** Estrategia contra la que se valida; ausente = `LIVE`. */
36
+ @Expose()
37
+ @IsOptional()
38
+ @IsEnum(EvaluationStrategyEnum)
39
+ evaluationStrategy?: EvaluationStrategyEnum;
40
+
41
+ /** Campos devueltos a validar (`fuente:campo` o `tabla.ruta.hoja`); máx. 20. */
42
+ @Expose()
43
+ @IsOptional()
44
+ @IsArray()
45
+ @ArrayMaxSize(RULES_MAX_RETURN_FIELDS)
46
+ @Matches(RETURN_FIELD_ID_PATTERN, { each: true })
47
+ returnFields?: string[];
33
48
  }
@@ -0,0 +1,73 @@
1
+ import { Expose, Type } from 'class-transformer';
2
+ import { ArrayMaxSize, ArrayMinSize, IsArray, IsISO8601, IsObject, IsOptional, IsString, Matches, MaxLength, MinLength, ValidateNested } from 'class-validator';
3
+ import { InputField } from '../../../dynamicForm/dtos/InputField';
4
+ import {
5
+ RETURN_FIELD_ID_PATTERN,
6
+ RULES_MAX_INPUT_CONTRACT,
7
+ RULES_MAX_RETURN_FIELDS,
8
+ RULES_MAX_SUBJECTS_PER_DATALAKE_CALL,
9
+ } from '../../constants/RulesLimits';
10
+ import { RuleToEvaluate, RulesEvaluationSubject } from '../EvaluateRulesRequest';
11
+
12
+ /**
13
+ * `POST /evaluate/executions`: inicia UNA query Athena por lote (hasta 1000 sujetos).
14
+ * `rules` ausente = modo "solo campos" (exige `returnFields` ≥ 1: esa regla la valida el lambda).
15
+ */
16
+ export class EvaluationExecutionRequest {
17
+ /** Quién llama (solo logs y métricas). */
18
+ @Expose()
19
+ @IsOptional()
20
+ @IsString()
21
+ consumer?: string;
22
+
23
+ /** Ids de ítems del catálogo (`source:key`) que las reglas pueden usar. */
24
+ @Expose()
25
+ @IsArray()
26
+ @IsString({ each: true })
27
+ items: string[];
28
+
29
+ @Expose()
30
+ @IsOptional()
31
+ @IsArray()
32
+ @ArrayMinSize(1)
33
+ @ArrayMaxSize(10)
34
+ @ValidateNested({ each: true })
35
+ @Type(() => RuleToEvaluate)
36
+ rules?: RuleToEvaluate[];
37
+
38
+ /** Contrato de la fuente `input` (tipos de las columnas `i_<llave>`). */
39
+ @Expose()
40
+ @IsOptional()
41
+ @IsArray()
42
+ @ArrayMaxSize(RULES_MAX_INPUT_CONTRACT)
43
+ @IsObject({ each: true })
44
+ inputContract?: InputField[];
45
+
46
+ @Expose()
47
+ @IsArray()
48
+ @ArrayMinSize(1)
49
+ @ArrayMaxSize(RULES_MAX_SUBJECTS_PER_DATALAKE_CALL)
50
+ @ValidateNested({ each: true })
51
+ @Type(() => RulesEvaluationSubject)
52
+ subjects: RulesEvaluationSubject[];
53
+
54
+ /** Fecha ISO 8601 con hora (ancla del cálculo, nunca `now()`). */
55
+ @Expose()
56
+ @IsISO8601({ strict: true })
57
+ @Matches(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}/)
58
+ referenceAt: string;
59
+
60
+ @Expose()
61
+ @IsOptional()
62
+ @IsArray()
63
+ @ArrayMaxSize(RULES_MAX_RETURN_FIELDS)
64
+ @Matches(RETURN_FIELD_ID_PATTERN, { each: true })
65
+ returnFields?: string[];
66
+
67
+ /** Mismo lote reintentado = mismo `QueryExecutionId`. */
68
+ @Expose()
69
+ @IsString()
70
+ @MinLength(32)
71
+ @MaxLength(128)
72
+ idempotencyKey: string;
73
+ }
@@ -0,0 +1,7 @@
1
+ import { PopulationExecutionStatusEnum } from '../../enums/PopulationExecutionStatusEnum';
2
+
3
+ /** Respuesta de `POST /evaluate/executions`. */
4
+ export class EvaluationExecutionResponse {
5
+ executionId: string;
6
+ status: PopulationExecutionStatusEnum;
7
+ }
@@ -0,0 +1,12 @@
1
+ import { PopulationExecutionStatusEnum } from '../../enums/PopulationExecutionStatusEnum';
2
+ import { RulesErrorCodeEnum } from '../../enums/RulesErrorCodeEnum';
3
+ import { RuleEvaluationResult } from '../EvaluateRulesResponse';
4
+
5
+ /** Pagina de resultados. Sin `nextToken` = última página. `reason` solo si `status` es `FAILED`. */
6
+ export class EvaluationExecutionResultsResponse {
7
+ executionId: string;
8
+ status: PopulationExecutionStatusEnum;
9
+ results: RuleEvaluationResult[];
10
+ nextToken?: string;
11
+ reason?: RulesErrorCodeEnum;
12
+ }
@@ -0,0 +1,46 @@
1
+ import { Expose, Type } from 'class-transformer';
2
+ import { ArrayMaxSize, ArrayMinSize, IsArray, IsObject, IsOptional, IsString, Matches, ValidateNested } from 'class-validator';
3
+ import { InputField } from '../../../dynamicForm/dtos/InputField';
4
+ import { RETURN_FIELD_ID_PATTERN, RULES_MAX_INPUT_CONTRACT, RULES_MAX_RETURN_FIELDS } from '../../constants/RulesLimits';
5
+ import { RuleToEvaluate } from '../EvaluateRulesRequest';
6
+
7
+ /** `POST /evaluate/executions/{id}/results`: pagina de resultados. Reglas, ítems e `inputContract` deben ser los del inicio. */
8
+ export class EvaluationResultsRequest {
9
+ @Expose()
10
+ @IsOptional()
11
+ @IsString()
12
+ consumer?: string;
13
+
14
+ @Expose()
15
+ @IsArray()
16
+ @IsString({ each: true })
17
+ items: string[];
18
+
19
+ @Expose()
20
+ @IsOptional()
21
+ @IsArray()
22
+ @ArrayMinSize(1)
23
+ @ArrayMaxSize(10)
24
+ @ValidateNested({ each: true })
25
+ @Type(() => RuleToEvaluate)
26
+ rules?: RuleToEvaluate[];
27
+
28
+ @Expose()
29
+ @IsOptional()
30
+ @IsArray()
31
+ @ArrayMaxSize(RULES_MAX_INPUT_CONTRACT)
32
+ @IsObject({ each: true })
33
+ inputContract?: InputField[];
34
+
35
+ @Expose()
36
+ @IsOptional()
37
+ @IsArray()
38
+ @ArrayMaxSize(RULES_MAX_RETURN_FIELDS)
39
+ @Matches(RETURN_FIELD_ID_PATTERN, { each: true })
40
+ returnFields?: string[];
41
+
42
+ @Expose()
43
+ @IsOptional()
44
+ @IsString()
45
+ nextToken?: string;
46
+ }
@@ -0,0 +1,19 @@
1
+ import { RulesValueTypeEnum } from '../../enums/RulesValueTypeEnum';
2
+
3
+ /** Un campo del catálogo que se puede devolver (`GET /return-fields`). */
4
+ export class ReturnableFieldResponse {
5
+ /** `fuente:campo`. */
6
+ id: string;
7
+ source: string;
8
+ field: string;
9
+ label: string;
10
+ description: string;
11
+ valueType: RulesValueTypeEnum;
12
+ datalakeCompatible: boolean;
13
+ }
14
+
15
+ export class ReturnFieldsCatalogResponse {
16
+ /** `false` si el datalake no está disponible en el ambiente. */
17
+ available: boolean;
18
+ fields: ReturnableFieldResponse[];
19
+ }
@@ -6,6 +6,8 @@ export class SegmentColumnSchemaResponse {
6
6
  root?: string;
7
7
  type: string;
8
8
  isDate: boolean;
9
+ /** La hoja está detrás de al menos un `array<struct>`: semántica de elemento (`any_match`). */
10
+ inArray?: boolean;
9
11
  operators: SegmentOperatorEnum[];
10
12
  }
11
13
 
@@ -0,0 +1,5 @@
1
+ /** Cómo evalúa el central una regla: `LIVE` (resolvers en vivo, default) o `DATALAKE` (una query Athena por lote). */
2
+ export enum EvaluationStrategyEnum {
3
+ LIVE = 'LIVE',
4
+ DATALAKE = 'DATALAKE',
5
+ }
@@ -4,4 +4,14 @@ export enum RulesErrorCodeEnum {
4
4
  DUPLICATE_SOURCE_IN_ITEMS = 'DUPLICATE_SOURCE_IN_ITEMS',
5
5
  TOO_MANY_SUBJECTS = 'TOO_MANY_SUBJECTS',
6
6
  VALIDATION_ERROR = 'VALIDATION_ERROR',
7
+ /** 400: la regla usa `params`, o una tabla que el campo necesita no existe en el ambiente. */
8
+ RULE_NOT_DATALAKE_COMPATIBLE = 'RULE_NOT_DATALAKE_COMPATIBLE',
9
+ /** 503: el datalake no está disponible. */
10
+ DATALAKE_UNAVAILABLE = 'DATALAKE_UNAVAILABLE',
11
+ /** La query del datalake terminó en error. */
12
+ DATALAKE_EVALUATION_FAILED = 'DATALAKE_EVALUATION_FAILED',
13
+ /** La query del datalake superó el tiempo de espera (reintentable). */
14
+ DATALAKE_EVALUATION_TIMEOUT = 'DATALAKE_EVALUATION_TIMEOUT',
15
+ /** 400: un id de `returnFields` no existe en el catálogo ni en el esquema del datalake. */
16
+ UNKNOWN_RETURN_FIELD = 'UNKNOWN_RETURN_FIELD',
7
17
  }
@@ -49,3 +49,11 @@ export * from './dtos/population/PopulationTestResponse';
49
49
  export * from './dtos/population/PopulationExecutionRequest';
50
50
  export * from './dtos/population/PopulationExecutionResponse';
51
51
  export * from './dtos/population/PopulationExecutionPageResponse';
52
+
53
+ //Evaluacion DATALAKE, campos devueltos y ejecucion asincrona
54
+ export * from './enums/EvaluationStrategyEnum';
55
+ export * from './dtos/datalake/EvaluationExecutionRequest';
56
+ export * from './dtos/datalake/EvaluationExecutionResponse';
57
+ export * from './dtos/datalake/EvaluationResultsRequest';
58
+ export * from './dtos/datalake/EvaluationExecutionResultsResponse';
59
+ export * from './dtos/datalake/ReturnFieldsCatalogResponse';