@fiado/type-kit 3.658.0 → 3.660.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.
@@ -107,6 +107,7 @@ describe('RetailUser — wallet PCF', () => {
107
107
  pcfAccountId: null,
108
108
  walletLinkMethod: null,
109
109
  walletClabeLast4: null,
110
+ walletPhoneLast4: null,
110
111
  walletLinkedAt: null,
111
112
  walletLinkedBy: null,
112
113
  };
@@ -124,6 +125,17 @@ describe('RetailUser — wallet PCF', () => {
124
125
  expect(errors.some(e => e.property === 'walletClabeLast4')).toBe(true);
125
126
  });
126
127
 
128
+ it('valida la wallet vinculada por teléfono con sus últimos 4', async () => {
129
+ const byPhone = { ...linked, walletLinkMethod: RetailUserWalletLinkMethodEnum.PHONE, walletClabeLast4: null, walletPhoneLast4: '9900' };
130
+ const errors = await validate(plainToInstance(RetailUser, byPhone));
131
+ expect(errors).toEqual([]);
132
+ });
133
+
134
+ it('falla si walletPhoneLast4 trae el teléfono completo', async () => {
135
+ const errors = await validate(plainToInstance(RetailUser, { ...linked, walletPhoneLast4: '5512345678' }));
136
+ expect(errors.some(e => e.property === 'walletPhoneLast4')).toBe(true);
137
+ });
138
+
127
139
  it('falla si walletLinkedAt no es ISO 8601', async () => {
128
140
  const errors = await validate(plainToInstance(RetailUser, { ...linked, walletLinkedAt: '20/10/2026' }));
129
141
  expect(errors.some(e => e.property === 'walletLinkedAt')).toBe(true);
@@ -37,6 +37,8 @@ export declare class RetailUser {
37
37
  walletLinkMethod?: RetailUserWalletLinkMethodEnum | null;
38
38
  /** Últimos 4 dígitos de la CLABE; la CLABE completa no se guarda. */
39
39
  walletClabeLast4?: string | null;
40
+ /** Últimos 4 dígitos del teléfono con que se buscó la wallet; el teléfono completo no se guarda. */
41
+ walletPhoneLast4?: string | null;
40
42
  /** Cuándo se vinculó (ISO). */
41
43
  walletLinkedAt?: string | null;
42
44
  /** Quién la vinculó: el actorId del usuario del back office. */
@@ -115,6 +115,13 @@ __decorate([
115
115
  (0, class_validator_1.Matches)(/^\d{4}$/, { message: 'walletClabeLast4 debe tener 4 dígitos' }),
116
116
  __metadata("design:type", String)
117
117
  ], RetailUser.prototype, "walletClabeLast4", void 0);
118
+ __decorate([
119
+ (0, class_transformer_1.Expose)(),
120
+ (0, class_validator_1.IsOptional)(),
121
+ (0, class_validator_1.IsString)(),
122
+ (0, class_validator_1.Matches)(/^\d{4}$/, { message: 'walletPhoneLast4 debe tener 4 dígitos' }),
123
+ __metadata("design:type", String)
124
+ ], RetailUser.prototype, "walletPhoneLast4", void 0);
118
125
  __decorate([
119
126
  (0, class_transformer_1.Expose)(),
120
127
  (0, class_validator_1.IsOptional)(),
@@ -119,6 +119,16 @@ export declare class PrivateListTransferNoteItemsQuery extends ListTransferNoteI
119
119
  export declare class PrivateRunTransferNoteCutoffRequest extends PrivateTransferNoteCaller {
120
120
  isoWeek: string;
121
121
  }
122
+ /**
123
+ * Body de privatePullTransferNotePool: trae al pool todo lo pendiente de los feeds hasta ahora,
124
+ * sin exigir semana cerrada ni emitir notas. Corre síncrono; idempotente por los candados SOURCE
125
+ * existentes (un registro ya tomado se cuenta como `duplicates`, no se repite).
126
+ *
127
+ * Reusa la lógica de `poolConcepts` del corte; el corte semanal queda intacto como red de seguridad.
128
+ * Lo llama el operador del dashboard para ver cobros nuevos sin esperar al lunes 00:01 CDMX.
129
+ */
130
+ export declare class PrivatePullTransferNotePoolRequest extends PrivateTransferNoteOperatorCaller {
131
+ }
122
132
  /** Body de privateCreateTransferNoteAdjustment; un `adjustmentKey` repetido devuelve el primer ajuste. */
123
133
  export declare class PrivateCreateTransferNoteAdjustmentRequest extends PrivateTransferNoteCaller {
124
134
  adjustmentKey: string;
@@ -9,7 +9,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
9
9
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.PrivateGetTransferNoteItemBySourceQuery = exports.PrivateCreateTransferNoteAdjustmentRequest = exports.PrivateRunTransferNoteCutoffRequest = exports.PrivateListTransferNoteItemsQuery = exports.PrivateListTransferNotePoolQuery = exports.PrivateListTransferNotesQuery = exports.PrivateGetTransferNotePdfQuery = exports.PrivateGetTransferNoteHistoryQuery = exports.PrivateGetTransferNoteQuery = exports.PrivateConfirmTransferNoteSettlementRequest = exports.PrivateCreateSpeiReceiptUploadUrlRequest = exports.PrivateSendTransferNoteNoticeRequest = exports.PrivateConfirmTransferNoteReceptionRequest = exports.PrivateResolveTransferNoteDisputeRequest = exports.PrivateCancelTransferNoteRequest = exports.PrivateRevertTransferNoteSpeiRequest = exports.PrivateCaptureTransferNoteSpeiRequest = exports.PrivateIssueTransferNoteRequest = exports.PrivatePreviewTransferNoteRequest = exports.PrivateTransferNoteOperatorCaller = exports.PrivateTransferNoteCaller = void 0;
12
+ exports.PrivateGetTransferNoteItemBySourceQuery = exports.PrivateCreateTransferNoteAdjustmentRequest = exports.PrivatePullTransferNotePoolRequest = exports.PrivateRunTransferNoteCutoffRequest = exports.PrivateListTransferNoteItemsQuery = exports.PrivateListTransferNotePoolQuery = exports.PrivateListTransferNotesQuery = exports.PrivateGetTransferNotePdfQuery = exports.PrivateGetTransferNoteHistoryQuery = exports.PrivateGetTransferNoteQuery = exports.PrivateConfirmTransferNoteSettlementRequest = exports.PrivateCreateSpeiReceiptUploadUrlRequest = exports.PrivateSendTransferNoteNoticeRequest = exports.PrivateConfirmTransferNoteReceptionRequest = exports.PrivateResolveTransferNoteDisputeRequest = exports.PrivateCancelTransferNoteRequest = exports.PrivateRevertTransferNoteSpeiRequest = exports.PrivateCaptureTransferNoteSpeiRequest = exports.PrivateIssueTransferNoteRequest = exports.PrivatePreviewTransferNoteRequest = exports.PrivateTransferNoteOperatorCaller = exports.PrivateTransferNoteCaller = void 0;
13
13
  const class_transformer_1 = require("class-transformer");
14
14
  const class_validator_1 = require("class-validator");
15
15
  const transferNoteValidation_1 = require("../../constants/transferNoteValidation");
@@ -258,6 +258,17 @@ __decorate([
258
258
  (0, class_validator_1.Matches)(transferNoteValidation_1.TRANSFER_NOTE_ISO_WEEK_PATTERN),
259
259
  __metadata("design:type", String)
260
260
  ], PrivateRunTransferNoteCutoffRequest.prototype, "isoWeek", void 0);
261
+ /**
262
+ * Body de privatePullTransferNotePool: trae al pool todo lo pendiente de los feeds hasta ahora,
263
+ * sin exigir semana cerrada ni emitir notas. Corre síncrono; idempotente por los candados SOURCE
264
+ * existentes (un registro ya tomado se cuenta como `duplicates`, no se repite).
265
+ *
266
+ * Reusa la lógica de `poolConcepts` del corte; el corte semanal queda intacto como red de seguridad.
267
+ * Lo llama el operador del dashboard para ver cobros nuevos sin esperar al lunes 00:01 CDMX.
268
+ */
269
+ class PrivatePullTransferNotePoolRequest extends PrivateTransferNoteOperatorCaller {
270
+ }
271
+ exports.PrivatePullTransferNotePoolRequest = PrivatePullTransferNotePoolRequest;
261
272
  /** Body de privateCreateTransferNoteAdjustment; un `adjustmentKey` repetido devuelve el primer ajuste. */
262
273
  class PrivateCreateTransferNoteAdjustmentRequest extends PrivateTransferNoteCaller {
263
274
  }
@@ -1,3 +1,4 @@
1
+ import { TransferNoteConceptEnum } from '../../enums/TransferNoteConceptEnum';
1
2
  import { TransferNote } from '../TransferNote';
2
3
  import { TransferNoteItem } from '../TransferNoteItem';
3
4
  import { TransferNoteSignedUrl } from '../TransferNoteSignedUrl';
@@ -21,6 +22,28 @@ export type PrivateGetTransferNotePdfResponse = TransferNoteSignedUrl;
21
22
  export interface PrivateRunTransferNoteCutoffResponse {
22
23
  runId: string;
23
24
  }
25
+ /**
26
+ * Resultado por concepto de llenar el pool: `pooled` entra nuevo, `duplicates` ya tomados por el
27
+ * candado SOURCE en una corrida previa, `skipped` records fuera del par o del alcance, `heldReversals`
28
+ * son reversas sin su original tomado (quedan para revisión, no entran como item negativo).
29
+ */
30
+ export interface PrivatePullTransferNotePoolConceptResult {
31
+ concept: TransferNoteConceptEnum;
32
+ pooled: number;
33
+ duplicates: number;
34
+ skipped: number;
35
+ heldReversals: string[];
36
+ }
37
+ /**
38
+ * Respuesta 200 de privatePullTransferNotePool: resumen por concepto activo, más los conceptos cuyo
39
+ * feed falló y el timestamp hasta donde se leyó. Reintentable: los candados SOURCE evitan duplicados.
40
+ */
41
+ export interface PrivatePullTransferNotePoolResponse {
42
+ tenantId: string;
43
+ pulledThrough: string;
44
+ perConcept: PrivatePullTransferNotePoolConceptResult[];
45
+ failedConcepts: TransferNoteConceptEnum[];
46
+ }
24
47
  /** El item de ajuste; un `adjustmentKey` repetido devuelve el primero. */
25
48
  export type PrivateCreateTransferNoteAdjustmentResponse = TransferNoteItem;
26
49
  export type PrivateGetTransferNoteItemBySourceResponse = TransferNoteItem;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fiado/type-kit",
3
- "version": "3.658.0",
3
+ "version": "3.660.0",
4
4
  "description": "",
5
5
  "main": "bin/index.js",
6
6
  "types": "bin/index.d.ts",
@@ -100,6 +100,13 @@ export class RetailUser {
100
100
  @Matches(/^\d{4}$/, { message: 'walletClabeLast4 debe tener 4 dígitos' })
101
101
  walletClabeLast4?: string | null;
102
102
 
103
+ /** Últimos 4 dígitos del teléfono con que se buscó la wallet; el teléfono completo no se guarda. */
104
+ @Expose()
105
+ @IsOptional()
106
+ @IsString()
107
+ @Matches(/^\d{4}$/, { message: 'walletPhoneLast4 debe tener 4 dígitos' })
108
+ walletPhoneLast4?: string | null;
109
+
103
110
  /** Cuándo se vinculó (ISO). */
104
111
  @Expose()
105
112
  @IsOptional()
@@ -214,6 +214,16 @@ export class PrivateRunTransferNoteCutoffRequest extends PrivateTransferNoteCall
214
214
  isoWeek!: string;
215
215
  }
216
216
 
217
+ /**
218
+ * Body de privatePullTransferNotePool: trae al pool todo lo pendiente de los feeds hasta ahora,
219
+ * sin exigir semana cerrada ni emitir notas. Corre síncrono; idempotente por los candados SOURCE
220
+ * existentes (un registro ya tomado se cuenta como `duplicates`, no se repite).
221
+ *
222
+ * Reusa la lógica de `poolConcepts` del corte; el corte semanal queda intacto como red de seguridad.
223
+ * Lo llama el operador del dashboard para ver cobros nuevos sin esperar al lunes 00:01 CDMX.
224
+ */
225
+ export class PrivatePullTransferNotePoolRequest extends PrivateTransferNoteOperatorCaller {}
226
+
217
227
  /** Body de privateCreateTransferNoteAdjustment; un `adjustmentKey` repetido devuelve el primer ajuste. */
218
228
  export class PrivateCreateTransferNoteAdjustmentRequest extends PrivateTransferNoteCaller {
219
229
  @RequiredId()
@@ -1,3 +1,4 @@
1
+ import { TransferNoteConceptEnum } from '../../enums/TransferNoteConceptEnum';
1
2
  import { TransferNote } from '../TransferNote';
2
3
  import { TransferNoteItem } from '../TransferNoteItem';
3
4
  import { TransferNoteSignedUrl } from '../TransferNoteSignedUrl';
@@ -31,6 +32,30 @@ export interface PrivateRunTransferNoteCutoffResponse {
31
32
  runId: string;
32
33
  }
33
34
 
35
+ /**
36
+ * Resultado por concepto de llenar el pool: `pooled` entra nuevo, `duplicates` ya tomados por el
37
+ * candado SOURCE en una corrida previa, `skipped` records fuera del par o del alcance, `heldReversals`
38
+ * son reversas sin su original tomado (quedan para revisión, no entran como item negativo).
39
+ */
40
+ export interface PrivatePullTransferNotePoolConceptResult {
41
+ concept: TransferNoteConceptEnum;
42
+ pooled: number;
43
+ duplicates: number;
44
+ skipped: number;
45
+ heldReversals: string[];
46
+ }
47
+
48
+ /**
49
+ * Respuesta 200 de privatePullTransferNotePool: resumen por concepto activo, más los conceptos cuyo
50
+ * feed falló y el timestamp hasta donde se leyó. Reintentable: los candados SOURCE evitan duplicados.
51
+ */
52
+ export interface PrivatePullTransferNotePoolResponse {
53
+ tenantId: string;
54
+ pulledThrough: string;
55
+ perConcept: PrivatePullTransferNotePoolConceptResult[];
56
+ failedConcepts: TransferNoteConceptEnum[];
57
+ }
58
+
34
59
  /** El item de ajuste; un `adjustmentKey` repetido devuelve el primero. */
35
60
  export type PrivateCreateTransferNoteAdjustmentResponse = TransferNoteItem;
36
61
  export type PrivateGetTransferNoteItemBySourceResponse = TransferNoteItem;