@fiado/type-kit 3.619.0 → 3.621.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 (21) hide show
  1. package/_test_/unit/reconciliation/reconciliationRequests.test.ts +23 -4
  2. package/_test_/unit/retailIntegration/reconciliationContracts.test.ts +18 -0
  3. package/_test_/unit/transferNote/transferNoteConfigAndPrivate.test.ts +23 -8
  4. package/bin/reconciliation/dtos/requests/PrivateReconciliationRequests.d.ts +49 -13
  5. package/bin/reconciliation/dtos/requests/PrivateReconciliationRequests.js +61 -13
  6. package/bin/reconciliation/dtos/requests/reconciliationRequestDecorators.d.ts +1 -3
  7. package/bin/reconciliation/dtos/requests/reconciliationRequestDecorators.js +3 -10
  8. package/bin/retailIntegration/dtos/GetReconciliationResponses.d.ts +13 -2
  9. package/bin/transferNote/constants/transferNoteValidation.d.ts +2 -0
  10. package/bin/transferNote/constants/transferNoteValidation.js +3 -1
  11. package/bin/transferNote/dtos/requests/PrivateTransferNoteRequests.d.ts +41 -11
  12. package/bin/transferNote/dtos/requests/PrivateTransferNoteRequests.js +51 -11
  13. package/bin/transferNote/dtos/requests/transferNoteRequestDecorators.d.ts +4 -0
  14. package/bin/transferNote/dtos/requests/transferNoteRequestDecorators.js +26 -0
  15. package/package.json +1 -1
  16. package/src/reconciliation/dtos/requests/PrivateReconciliationRequests.ts +86 -26
  17. package/src/reconciliation/dtos/requests/reconciliationRequestDecorators.ts +2 -11
  18. package/src/retailIntegration/dtos/GetReconciliationResponses.ts +14 -2
  19. package/src/transferNote/constants/transferNoteValidation.ts +3 -0
  20. package/src/transferNote/dtos/requests/PrivateTransferNoteRequests.ts +72 -22
  21. package/src/transferNote/dtos/requests/transferNoteRequestDecorators.ts +33 -2
@@ -35,7 +35,8 @@ function errorsOf<T extends object>(cls: new () => T, payload: Record<string, un
35
35
  return validateSync(dto).map((e) => e.property);
36
36
  }
37
37
 
38
- const operator = { tenantId: 'surekeep', author: 'conciliacion-dashboard', actor: 'operador@fsa.mx' };
38
+ const service = { tenantId: 'surekeep', author: 'conciliacion-dashboard' };
39
+ const operator = { ...service, actorId: 'aZ3x9Qk-azure-ad-sub_01' };
39
40
 
40
41
  describe('definiciones', () => {
41
42
  it('configurar pide un estado válido y listas de sandbox opcionales', () => {
@@ -138,7 +139,7 @@ describe('resolución, reactivación y notas', () => {
138
139
  });
139
140
 
140
141
  describe('espejo privado', () => {
141
- it('agrega tenantId, author y actor a la versión pública', () => {
142
+ it('agrega tenantId, author y actorId a la versión pública', () => {
142
143
  expect(
143
144
  errorsOf(PrivateResolveReconciliationItemRequest, {
144
145
  ...operator,
@@ -150,7 +151,7 @@ describe('espejo privado', () => {
150
151
  type: ReconciliationResolutionTypeEnum.EXCLUDE,
151
152
  reason: 'prueba interna',
152
153
  });
153
- expect(missing).toEqual(expect.arrayContaining(['tenantId', 'author', 'actor']));
154
+ expect(missing).toEqual(expect.arrayContaining(['tenantId', 'author', 'actorId']));
154
155
  expect(errorsOf(PrivateAddReconciliationItemNoteRequest, { ...operator, actor: 'no-es-correo', text: 'revisar con tesorería' })).toContain(
155
156
  'actor',
156
157
  );
@@ -167,11 +168,29 @@ describe('espejo privado', () => {
167
168
  expect(errorsOf(PrivateRunReconciliationRequest, { ...operator, definitionId: 'm8-gateway-bank', periodKey: '2026-10-29' })).toEqual(
168
169
  [],
169
170
  );
170
- expect(errorsOf(PrivateGetReconciliationItemQuery, { tenantId: 'surekeep', author: 'x' })).toContain('actor');
171
+ expect(errorsOf(PrivateGetReconciliationItemQuery, { tenantId: 'surekeep', author: 'x' })).toContain('actorId');
171
172
  expect(errorsOf(PrivateListReconciliationItemsQuery, { ...operator, definitionId: 'm8-gateway-sofom' })).toEqual([]);
172
173
  });
173
174
  });
174
175
 
176
+ describe('operador del espejo', () => {
177
+ it('viaja por actorId, que no puede ser un email; actor (email) es opcional', () => {
178
+ const { PrivateReconciliationOperatorCaller } = Reconciliation;
179
+ expect(errorsOf(PrivateReconciliationOperatorCaller, operator)).toEqual([]);
180
+ expect(errorsOf(PrivateReconciliationOperatorCaller, { ...operator, actor: 'operador@fsa.mx' })).toEqual([]);
181
+ expect(errorsOf(PrivateReconciliationOperatorCaller, service)).toContain('actorId');
182
+ expect(errorsOf(PrivateReconciliationOperatorCaller, { ...service, actorId: 'operador@fsa.mx' })).toContain('actorId');
183
+ expect(
184
+ errorsOf(PrivateResolveReconciliationItemRequest, {
185
+ ...service,
186
+ actorId: 'operador@fsa.mx',
187
+ type: ReconciliationResolutionTypeEnum.EXCLUDE,
188
+ reason: 'prueba interna',
189
+ }),
190
+ ).toContain('actorId');
191
+ });
192
+ });
193
+
175
194
  describe('feed genérico de los dueños', () => {
176
195
  it('lista por tenant y ventana, con cursor opcional', () => {
177
196
  expect(
@@ -119,6 +119,24 @@ describe('respuestas de la revisión', () => {
119
119
  expect(catalog.storesPending).toBe(0);
120
120
  });
121
121
 
122
+ it('las respuestas GET exponen el motivo del aborto, el último error y el intento', () => {
123
+ const counts = { seen: 0, created: 0, updated: 0, deactivated: 0, reactivated: 0, skipped: 0 };
124
+ const org: GetOrgReconciliationResponse = {
125
+ runId: 'run-o', retailerId: 'r-1', entity: ReconciliationEntityEnum.STORES,
126
+ status: ReconciliationRunStatusEnum.ABORTED, trigger: ReconciliationTriggerEnum.MANUAL,
127
+ startedAt: '2026-10-25T10:00:00.000Z', pagesProcessed: 0, counts,
128
+ abortReason: 'RETAIL_INTEGRATION_CONNECTOR_UNAVAILABLE', lastErrorCode: 'RETAIL_INTEGRATION_CONNECTOR_UNAVAILABLE', attempt: 1, maxAttempts: 5,
129
+ };
130
+ const catalog: GetCatalogReconciliationResponse = {
131
+ runId: 'run-c', retailerId: 'r-1', entity: ReconciliationEntityEnum.CATALOG,
132
+ status: ReconciliationRunStatusEnum.RUNNING, trigger: ReconciliationTriggerEnum.SCHEDULED,
133
+ startedAt: '2026-10-25T10:00:00.000Z', pagesProcessed: 0, counts,
134
+ abortReason: null, lastErrorCode: 'RETAIL_INTEGRATION_CONNECTOR_UNAVAILABLE', attempt: 3, maxAttempts: 5,
135
+ };
136
+ expect(org.abortReason).toBe('RETAIL_INTEGRATION_CONNECTOR_UNAVAILABLE');
137
+ expect([catalog.attempt, catalog.maxAttempts]).toEqual([3, 5]);
138
+ });
139
+
122
140
  it('GetCatalogReconciliationResponse admite MOVEMENTS con su ventana', () => {
123
141
  const movements: GetCatalogReconciliationResponse = {
124
142
  runId: 'run-m',
@@ -30,7 +30,8 @@ function errorsOf<T extends object>(cls: new () => T, payload: Record<string, un
30
30
  }
31
31
 
32
32
  const service = { tenantId: 'surekeep', author: 'conciliacion-dashboard' };
33
- const caller = { ...service, actor: 'operador@fsa.mx' };
33
+ const actorId = 'aZ3x9Qk-azure-ad-sub_01';
34
+ const caller = { ...service, actorId };
34
35
  const longReason = 'emisión manual por corte fallido del lunes';
35
36
 
36
37
  describe('UpdateTransferNoteConfigRequest', () => {
@@ -97,12 +98,15 @@ describe('UpdateTransferNoteConfigRequest', () => {
97
98
  });
98
99
 
99
100
  describe('espejo privado', () => {
100
- it('agrega tenantId, author y actor a la versión pública', () => {
101
+ it('agrega tenantId, author y actorId a la versión pública', () => {
101
102
  expect(errorsOf(PrivateIssueTransferNoteRequest, { ...caller, pairKey: 'p-1', isoWeek: '2026-W43', reason: longReason })).toEqual([]);
102
103
  expect(errorsOf(PrivateIssueTransferNoteRequest, { pairKey: 'p-1', isoWeek: '2026-W43', reason: longReason })).toEqual(
103
- expect.arrayContaining(['tenantId', 'author', 'actor']),
104
+ expect.arrayContaining(['tenantId', 'author', 'actorId']),
104
105
  );
105
106
  expect(errorsOf(PrivateIssueTransferNoteRequest, { ...caller, actor: 'operador', pairKey: 'p-1', isoWeek: '2026-W43', reason: longReason })).toContain('actor');
107
+ expect(
108
+ errorsOf(PrivateIssueTransferNoteRequest, { ...caller, actorId: 'operador@fsa.mx', pairKey: 'p-1', isoWeek: '2026-W43', reason: longReason }),
109
+ ).toContain('actorId');
106
110
  expect(
107
111
  errorsOf(PrivateCaptureTransferNoteSpeiRequest, {
108
112
  ...caller,
@@ -113,21 +117,32 @@ describe('espejo privado', () => {
113
117
  ).toEqual([]);
114
118
  });
115
119
 
116
- it('las lecturas privadas también exigen author y actor', () => {
120
+ it('las lecturas privadas también exigen author y actorId', () => {
117
121
  expect(errorsOf(PrivateGetTransferNoteQuery, caller)).toEqual([]);
118
- expect(errorsOf(PrivateGetTransferNoteQuery, { tenantId: 'surekeep' })).toEqual(expect.arrayContaining(['author', 'actor']));
122
+ expect(errorsOf(PrivateGetTransferNoteQuery, { tenantId: 'surekeep' })).toEqual(expect.arrayContaining(['author', 'actorId']));
119
123
  expect(errorsOf(PrivateListTransferNotesQuery, { ...caller, limit: '20' })).toEqual([]);
120
124
  });
121
125
 
122
- it('confirm-settlement pide el caller con el email del operador', () => {
126
+ it('confirm-settlement pide el caller con el id del operador', () => {
123
127
  expect(errorsOf(PrivateConfirmTransferNoteSettlementRequest, caller)).toEqual([]);
124
- expect(errorsOf(PrivateConfirmTransferNoteSettlementRequest, service)).toContain('actor');
128
+ expect(errorsOf(PrivateConfirmTransferNoteSettlementRequest, service)).toContain('actorId');
129
+ });
130
+
131
+ it('el operador viaja por actorId; actor (email) es opcional', () => {
132
+ const { PrivateTransferNoteOperatorCaller } = TransferNote;
133
+ expect(errorsOf(PrivateTransferNoteOperatorCaller, caller)).toEqual([]);
134
+ expect(errorsOf(PrivateTransferNoteOperatorCaller, { ...caller, actor: 'operador@fsa.mx' })).toEqual([]);
135
+ expect(errorsOf(PrivateTransferNoteOperatorCaller, service)).toContain('actorId');
136
+ expect(errorsOf(PrivateTransferNoteOperatorCaller, { ...service, actorId: '' })).toContain('actorId');
137
+ expect(errorsOf(PrivateTransferNoteOperatorCaller, { ...service, actorId: 'operador@fsa.mx' })).toContain('actorId');
138
+ expect(errorsOf(PrivateTransferNoteOperatorCaller, { ...service, actorId: 'x'.repeat(129) })).toContain('actorId');
139
+ expect(errorsOf(PrivateTransferNoteOperatorCaller, { ...caller, actor: 'no-es-correo' })).toContain('actor');
125
140
  });
126
141
 
127
142
  it('el corte manual pide tenant, semana y author', () => {
128
143
  expect(errorsOf(PrivateRunTransferNoteCutoffRequest, { ...service, isoWeek: '2026-W43' })).toEqual([]);
129
144
  expect(errorsOf(PrivateRunTransferNoteCutoffRequest, { ...service, isoWeek: 'W43' })).toContain('isoWeek');
130
- expect(Object.keys(plainToInstance(PrivateRunTransferNoteCutoffRequest, caller, { excludeExtraneousValues: true }))).not.toContain('actor');
145
+ expect(Object.keys(plainToInstance(PrivateRunTransferNoteCutoffRequest, caller, { excludeExtraneousValues: true }))).not.toContain('actorId');
131
146
  });
132
147
 
133
148
  it('el ajuste es idempotente por adjustmentKey y lleva monto entero distinto de cero', () => {
@@ -5,9 +5,12 @@ export declare class PrivateReconciliationCaller {
5
5
  tenantId: string;
6
6
  author: string;
7
7
  }
8
- /** Caller del espejo que llama fiado-dashboard; `actor` es el email del operador de la sesión. */
8
+ /** Caller del espejo que llama fiado-dashboard; el operador viaja por `actorId`. */
9
9
  export declare class PrivateReconciliationOperatorCaller extends PrivateReconciliationCaller {
10
- actor: string;
10
+ /** `sub` de Azure AD del operador del dashboard. */
11
+ actorId: string;
12
+ /** @deprecated Solo para la auditoría de loan-retail-audit. */
13
+ actor?: string;
11
14
  }
12
15
  /** Query de privateGetReconciliationItem. */
13
16
  export declare class PrivateGetReconciliationItemQuery extends PrivateReconciliationOperatorCaller {
@@ -16,65 +19,98 @@ export declare class PrivateGetReconciliationItemQuery extends PrivateReconcilia
16
19
  export declare class PrivateListReconciliationDefinitionsQuery extends ListReconciliationDefinitionsQuery {
17
20
  tenantId: string;
18
21
  author: string;
19
- actor: string;
22
+ /** `sub` de Azure AD del operador del dashboard. */
23
+ actorId: string;
24
+ /** @deprecated Solo para la auditoría de loan-retail-audit. */
25
+ actor?: string;
20
26
  }
21
27
  /** Body de privateConfigureReconciliationDefinition. */
22
28
  export declare class PrivateConfigureReconciliationDefinitionRequest extends ConfigureReconciliationDefinitionRequest {
23
29
  tenantId: string;
24
30
  author: string;
25
- actor: string;
31
+ /** `sub` de Azure AD del operador del dashboard. */
32
+ actorId: string;
33
+ /** @deprecated Solo para la auditoría de loan-retail-audit. */
34
+ actor?: string;
26
35
  }
27
36
  /** Query de privateListReconciliationRuns. */
28
37
  export declare class PrivateListReconciliationRunsQuery extends ListReconciliationRunsQuery {
29
38
  tenantId: string;
30
39
  author: string;
31
- actor: string;
40
+ /** `sub` de Azure AD del operador del dashboard. */
41
+ actorId: string;
42
+ /** @deprecated Solo para la auditoría de loan-retail-audit. */
43
+ actor?: string;
32
44
  }
33
45
  /** Body de privateRunReconciliation: responde 202 con `runId`. */
34
46
  export declare class PrivateRunReconciliationRequest extends RunReconciliationRequest {
35
47
  tenantId: string;
36
48
  author: string;
37
- actor: string;
49
+ /** `sub` de Azure AD del operador del dashboard. */
50
+ actorId: string;
51
+ /** @deprecated Solo para la auditoría de loan-retail-audit. */
52
+ actor?: string;
38
53
  }
39
54
  /** Query de privateGetReconciliationMatrix. */
40
55
  export declare class PrivateGetReconciliationMatrixQuery extends GetReconciliationMatrixQuery {
41
56
  tenantId: string;
42
57
  author: string;
43
- actor: string;
58
+ /** `sub` de Azure AD del operador del dashboard. */
59
+ actorId: string;
60
+ /** @deprecated Solo para la auditoría de loan-retail-audit. */
61
+ actor?: string;
44
62
  }
45
63
  /** Query de privateGetReconciliationOverview. */
46
64
  export declare class PrivateGetReconciliationOverviewQuery extends GetReconciliationOverviewQuery {
47
65
  tenantId: string;
48
66
  author: string;
49
- actor: string;
67
+ /** `sub` de Azure AD del operador del dashboard. */
68
+ actorId: string;
69
+ /** @deprecated Solo para la auditoría de loan-retail-audit. */
70
+ actor?: string;
50
71
  }
51
72
  /** Query de privateGetReconciliationSummary. */
52
73
  export declare class PrivateGetReconciliationSummaryQuery extends GetReconciliationSummaryQuery {
53
74
  tenantId: string;
54
75
  author: string;
55
- actor: string;
76
+ /** `sub` de Azure AD del operador del dashboard. */
77
+ actorId: string;
78
+ /** @deprecated Solo para la auditoría de loan-retail-audit. */
79
+ actor?: string;
56
80
  }
57
81
  /** Query de privateListReconciliationItems. */
58
82
  export declare class PrivateListReconciliationItemsQuery extends ListReconciliationItemsQuery {
59
83
  tenantId: string;
60
84
  author: string;
61
- actor: string;
85
+ /** `sub` de Azure AD del operador del dashboard. */
86
+ actorId: string;
87
+ /** @deprecated Solo para la auditoría de loan-retail-audit. */
88
+ actor?: string;
62
89
  }
63
90
  /** Body de privateResolveReconciliationItem. */
64
91
  export declare class PrivateResolveReconciliationItemRequest extends ResolveReconciliationItemRequest {
65
92
  tenantId: string;
66
93
  author: string;
67
- actor: string;
94
+ /** `sub` de Azure AD del operador del dashboard. */
95
+ actorId: string;
96
+ /** @deprecated Solo para la auditoría de loan-retail-audit. */
97
+ actor?: string;
68
98
  }
69
99
  /** Body de privateReactivateReconciliationItem. */
70
100
  export declare class PrivateReactivateReconciliationItemRequest extends ReactivateReconciliationItemRequest {
71
101
  tenantId: string;
72
102
  author: string;
73
- actor: string;
103
+ /** `sub` de Azure AD del operador del dashboard. */
104
+ actorId: string;
105
+ /** @deprecated Solo para la auditoría de loan-retail-audit. */
106
+ actor?: string;
74
107
  }
75
108
  /** Body de privateAddReconciliationItemNote. */
76
109
  export declare class PrivateAddReconciliationItemNoteRequest extends AddReconciliationItemNoteRequest {
77
110
  tenantId: string;
78
111
  author: string;
79
- actor: string;
112
+ /** `sub` de Azure AD del operador del dashboard. */
113
+ actorId: string;
114
+ /** @deprecated Solo para la auditoría de loan-retail-audit. */
115
+ actor?: string;
80
116
  }
@@ -25,12 +25,16 @@ __decorate([
25
25
  (0, reconciliationRequestDecorators_1.RequiredId)(),
26
26
  __metadata("design:type", String)
27
27
  ], PrivateReconciliationCaller.prototype, "author", void 0);
28
- /** Caller del espejo que llama fiado-dashboard; `actor` es el email del operador de la sesión. */
28
+ /** Caller del espejo que llama fiado-dashboard; el operador viaja por `actorId`. */
29
29
  class PrivateReconciliationOperatorCaller extends PrivateReconciliationCaller {
30
30
  }
31
31
  exports.PrivateReconciliationOperatorCaller = PrivateReconciliationOperatorCaller;
32
32
  __decorate([
33
- (0, reconciliationRequestDecorators_1.RequiredEmail)(),
33
+ (0, reconciliationRequestDecorators_1.RequiredActorId)(),
34
+ __metadata("design:type", String)
35
+ ], PrivateReconciliationOperatorCaller.prototype, "actorId", void 0);
36
+ __decorate([
37
+ (0, reconciliationRequestDecorators_1.OptionalEmail)(),
34
38
  __metadata("design:type", String)
35
39
  ], PrivateReconciliationOperatorCaller.prototype, "actor", void 0);
36
40
  /** Query de privateGetReconciliationItem. */
@@ -50,7 +54,11 @@ __decorate([
50
54
  __metadata("design:type", String)
51
55
  ], PrivateListReconciliationDefinitionsQuery.prototype, "author", void 0);
52
56
  __decorate([
53
- (0, reconciliationRequestDecorators_1.RequiredEmail)(),
57
+ (0, reconciliationRequestDecorators_1.RequiredActorId)(),
58
+ __metadata("design:type", String)
59
+ ], PrivateListReconciliationDefinitionsQuery.prototype, "actorId", void 0);
60
+ __decorate([
61
+ (0, reconciliationRequestDecorators_1.OptionalEmail)(),
54
62
  __metadata("design:type", String)
55
63
  ], PrivateListReconciliationDefinitionsQuery.prototype, "actor", void 0);
56
64
  /** Body de privateConfigureReconciliationDefinition. */
@@ -66,7 +74,11 @@ __decorate([
66
74
  __metadata("design:type", String)
67
75
  ], PrivateConfigureReconciliationDefinitionRequest.prototype, "author", void 0);
68
76
  __decorate([
69
- (0, reconciliationRequestDecorators_1.RequiredEmail)(),
77
+ (0, reconciliationRequestDecorators_1.RequiredActorId)(),
78
+ __metadata("design:type", String)
79
+ ], PrivateConfigureReconciliationDefinitionRequest.prototype, "actorId", void 0);
80
+ __decorate([
81
+ (0, reconciliationRequestDecorators_1.OptionalEmail)(),
70
82
  __metadata("design:type", String)
71
83
  ], PrivateConfigureReconciliationDefinitionRequest.prototype, "actor", void 0);
72
84
  /** Query de privateListReconciliationRuns. */
@@ -82,7 +94,11 @@ __decorate([
82
94
  __metadata("design:type", String)
83
95
  ], PrivateListReconciliationRunsQuery.prototype, "author", void 0);
84
96
  __decorate([
85
- (0, reconciliationRequestDecorators_1.RequiredEmail)(),
97
+ (0, reconciliationRequestDecorators_1.RequiredActorId)(),
98
+ __metadata("design:type", String)
99
+ ], PrivateListReconciliationRunsQuery.prototype, "actorId", void 0);
100
+ __decorate([
101
+ (0, reconciliationRequestDecorators_1.OptionalEmail)(),
86
102
  __metadata("design:type", String)
87
103
  ], PrivateListReconciliationRunsQuery.prototype, "actor", void 0);
88
104
  /** Body de privateRunReconciliation: responde 202 con `runId`. */
@@ -98,7 +114,11 @@ __decorate([
98
114
  __metadata("design:type", String)
99
115
  ], PrivateRunReconciliationRequest.prototype, "author", void 0);
100
116
  __decorate([
101
- (0, reconciliationRequestDecorators_1.RequiredEmail)(),
117
+ (0, reconciliationRequestDecorators_1.RequiredActorId)(),
118
+ __metadata("design:type", String)
119
+ ], PrivateRunReconciliationRequest.prototype, "actorId", void 0);
120
+ __decorate([
121
+ (0, reconciliationRequestDecorators_1.OptionalEmail)(),
102
122
  __metadata("design:type", String)
103
123
  ], PrivateRunReconciliationRequest.prototype, "actor", void 0);
104
124
  /** Query de privateGetReconciliationMatrix. */
@@ -114,7 +134,11 @@ __decorate([
114
134
  __metadata("design:type", String)
115
135
  ], PrivateGetReconciliationMatrixQuery.prototype, "author", void 0);
116
136
  __decorate([
117
- (0, reconciliationRequestDecorators_1.RequiredEmail)(),
137
+ (0, reconciliationRequestDecorators_1.RequiredActorId)(),
138
+ __metadata("design:type", String)
139
+ ], PrivateGetReconciliationMatrixQuery.prototype, "actorId", void 0);
140
+ __decorate([
141
+ (0, reconciliationRequestDecorators_1.OptionalEmail)(),
118
142
  __metadata("design:type", String)
119
143
  ], PrivateGetReconciliationMatrixQuery.prototype, "actor", void 0);
120
144
  /** Query de privateGetReconciliationOverview. */
@@ -130,7 +154,11 @@ __decorate([
130
154
  __metadata("design:type", String)
131
155
  ], PrivateGetReconciliationOverviewQuery.prototype, "author", void 0);
132
156
  __decorate([
133
- (0, reconciliationRequestDecorators_1.RequiredEmail)(),
157
+ (0, reconciliationRequestDecorators_1.RequiredActorId)(),
158
+ __metadata("design:type", String)
159
+ ], PrivateGetReconciliationOverviewQuery.prototype, "actorId", void 0);
160
+ __decorate([
161
+ (0, reconciliationRequestDecorators_1.OptionalEmail)(),
134
162
  __metadata("design:type", String)
135
163
  ], PrivateGetReconciliationOverviewQuery.prototype, "actor", void 0);
136
164
  /** Query de privateGetReconciliationSummary. */
@@ -146,7 +174,11 @@ __decorate([
146
174
  __metadata("design:type", String)
147
175
  ], PrivateGetReconciliationSummaryQuery.prototype, "author", void 0);
148
176
  __decorate([
149
- (0, reconciliationRequestDecorators_1.RequiredEmail)(),
177
+ (0, reconciliationRequestDecorators_1.RequiredActorId)(),
178
+ __metadata("design:type", String)
179
+ ], PrivateGetReconciliationSummaryQuery.prototype, "actorId", void 0);
180
+ __decorate([
181
+ (0, reconciliationRequestDecorators_1.OptionalEmail)(),
150
182
  __metadata("design:type", String)
151
183
  ], PrivateGetReconciliationSummaryQuery.prototype, "actor", void 0);
152
184
  /** Query de privateListReconciliationItems. */
@@ -162,7 +194,11 @@ __decorate([
162
194
  __metadata("design:type", String)
163
195
  ], PrivateListReconciliationItemsQuery.prototype, "author", void 0);
164
196
  __decorate([
165
- (0, reconciliationRequestDecorators_1.RequiredEmail)(),
197
+ (0, reconciliationRequestDecorators_1.RequiredActorId)(),
198
+ __metadata("design:type", String)
199
+ ], PrivateListReconciliationItemsQuery.prototype, "actorId", void 0);
200
+ __decorate([
201
+ (0, reconciliationRequestDecorators_1.OptionalEmail)(),
166
202
  __metadata("design:type", String)
167
203
  ], PrivateListReconciliationItemsQuery.prototype, "actor", void 0);
168
204
  /** Body de privateResolveReconciliationItem. */
@@ -178,7 +214,11 @@ __decorate([
178
214
  __metadata("design:type", String)
179
215
  ], PrivateResolveReconciliationItemRequest.prototype, "author", void 0);
180
216
  __decorate([
181
- (0, reconciliationRequestDecorators_1.RequiredEmail)(),
217
+ (0, reconciliationRequestDecorators_1.RequiredActorId)(),
218
+ __metadata("design:type", String)
219
+ ], PrivateResolveReconciliationItemRequest.prototype, "actorId", void 0);
220
+ __decorate([
221
+ (0, reconciliationRequestDecorators_1.OptionalEmail)(),
182
222
  __metadata("design:type", String)
183
223
  ], PrivateResolveReconciliationItemRequest.prototype, "actor", void 0);
184
224
  /** Body de privateReactivateReconciliationItem. */
@@ -194,7 +234,11 @@ __decorate([
194
234
  __metadata("design:type", String)
195
235
  ], PrivateReactivateReconciliationItemRequest.prototype, "author", void 0);
196
236
  __decorate([
197
- (0, reconciliationRequestDecorators_1.RequiredEmail)(),
237
+ (0, reconciliationRequestDecorators_1.RequiredActorId)(),
238
+ __metadata("design:type", String)
239
+ ], PrivateReactivateReconciliationItemRequest.prototype, "actorId", void 0);
240
+ __decorate([
241
+ (0, reconciliationRequestDecorators_1.OptionalEmail)(),
198
242
  __metadata("design:type", String)
199
243
  ], PrivateReactivateReconciliationItemRequest.prototype, "actor", void 0);
200
244
  /** Body de privateAddReconciliationItemNote. */
@@ -210,6 +254,10 @@ __decorate([
210
254
  __metadata("design:type", String)
211
255
  ], PrivateAddReconciliationItemNoteRequest.prototype, "author", void 0);
212
256
  __decorate([
213
- (0, reconciliationRequestDecorators_1.RequiredEmail)(),
257
+ (0, reconciliationRequestDecorators_1.RequiredActorId)(),
258
+ __metadata("design:type", String)
259
+ ], PrivateAddReconciliationItemNoteRequest.prototype, "actorId", void 0);
260
+ __decorate([
261
+ (0, reconciliationRequestDecorators_1.OptionalEmail)(),
214
262
  __metadata("design:type", String)
215
263
  ], PrivateAddReconciliationItemNoteRequest.prototype, "actor", void 0);
@@ -1,7 +1,5 @@
1
- export { PageLimit, PageToken, RequiredEmail, RequiredId, RequiredReason } from '../../../transferNote/dtos/requests/transferNoteRequestDecorators';
1
+ export { OptionalEmail, PageLimit, PageToken, RequiredActorId, RequiredEmail, RequiredId, RequiredReason } from '../../../transferNote/dtos/requests/transferNoteRequestDecorators';
2
2
  /** Periodo obligatorio: día, semana ISO o mes. */
3
3
  export declare function PeriodKey(): PropertyDecorator;
4
4
  /** Texto de 10+ caracteres sin contar espacios de relleno. */
5
5
  export declare function NoteText(): PropertyDecorator;
6
- /** Email opcional. */
7
- export declare function OptionalEmail(): PropertyDecorator;
@@ -1,15 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.RequiredReason = exports.RequiredId = exports.RequiredEmail = exports.PageToken = exports.PageLimit = void 0;
3
+ exports.RequiredReason = exports.RequiredId = exports.RequiredEmail = exports.RequiredActorId = exports.PageToken = exports.PageLimit = exports.OptionalEmail = void 0;
4
4
  exports.PeriodKey = PeriodKey;
5
5
  exports.NoteText = NoteText;
6
- exports.OptionalEmail = OptionalEmail;
7
6
  const class_transformer_1 = require("class-transformer");
8
7
  const class_validator_1 = require("class-validator");
9
8
  const reconciliationValidation_1 = require("../../constants/reconciliationValidation");
10
9
  var transferNoteRequestDecorators_1 = require("../../../transferNote/dtos/requests/transferNoteRequestDecorators");
10
+ Object.defineProperty(exports, "OptionalEmail", { enumerable: true, get: function () { return transferNoteRequestDecorators_1.OptionalEmail; } });
11
11
  Object.defineProperty(exports, "PageLimit", { enumerable: true, get: function () { return transferNoteRequestDecorators_1.PageLimit; } });
12
12
  Object.defineProperty(exports, "PageToken", { enumerable: true, get: function () { return transferNoteRequestDecorators_1.PageToken; } });
13
+ Object.defineProperty(exports, "RequiredActorId", { enumerable: true, get: function () { return transferNoteRequestDecorators_1.RequiredActorId; } });
13
14
  Object.defineProperty(exports, "RequiredEmail", { enumerable: true, get: function () { return transferNoteRequestDecorators_1.RequiredEmail; } });
14
15
  Object.defineProperty(exports, "RequiredId", { enumerable: true, get: function () { return transferNoteRequestDecorators_1.RequiredId; } });
15
16
  Object.defineProperty(exports, "RequiredReason", { enumerable: true, get: function () { return transferNoteRequestDecorators_1.RequiredReason; } });
@@ -29,11 +30,3 @@ function NoteText() {
29
30
  (0, class_validator_1.MinLength)(reconciliationValidation_1.RECONCILIATION_MIN_NOTE_LENGTH)(target, key);
30
31
  };
31
32
  }
32
- /** Email opcional. */
33
- function OptionalEmail() {
34
- return (target, key) => {
35
- (0, class_transformer_1.Expose)()(target, key);
36
- (0, class_validator_1.IsOptional)()(target, key);
37
- (0, class_validator_1.IsEmail)()(target, key);
38
- };
39
- }
@@ -3,8 +3,19 @@ import type { ReconciliationRunStatusEnum } from '../enums/ReconciliationRunStat
3
3
  import type { ReconciliationTriggerEnum } from '../enums/ReconciliationTriggerEnum';
4
4
  import type { ReconciliationPreview } from './ReconciliationPreview';
5
5
  import type { ReconciliationRunCounts } from './ReconciliationRunCounts';
6
+ /** Fallos de una corrida: por qué se abortó y en qué intento de SQS va la página que falla. */
7
+ export interface ReconciliationRunAttempts {
8
+ /** Motivo del ABORTED (`MAX_ATTEMPTS`, `ROW_WITHOUT_ID`, el `code` del externo caído, etc.); null si no se abortó. */
9
+ abortReason?: string | null;
10
+ /** `code` del último error de la página en curso; null si la página no ha fallado. */
11
+ lastErrorCode?: string | null;
12
+ /** Intento de SQS (1-based) en que falló la página en curso; null si no ha fallado. */
13
+ attempt?: number | null;
14
+ /** Intentos de SQS que tiene una página antes de abortar la corrida. */
15
+ maxAttempts?: number;
16
+ }
6
17
  /** Respuesta 200 de GET .../reconciliations/{runId} en org (backofficeGetOrgReconciliation). */
7
- export interface GetOrgReconciliationResponse {
18
+ export interface GetOrgReconciliationResponse extends ReconciliationRunAttempts {
8
19
  runId: string;
9
20
  retailerId: string;
10
21
  entity: ReconciliationEntityEnum.STORES | ReconciliationEntityEnum.USERS;
@@ -22,7 +33,7 @@ export interface GetOrgReconciliationResponse {
22
33
  preview?: ReconciliationPreview;
23
34
  }
24
35
  /** Respuesta 200 de GET .../reconciliations/{runId} en catalog (backofficeGetCatalogReconciliation). */
25
- export interface GetCatalogReconciliationResponse {
36
+ export interface GetCatalogReconciliationResponse extends ReconciliationRunAttempts {
26
37
  runId: string;
27
38
  retailerId: string;
28
39
  entity: ReconciliationEntityEnum.CATALOG | ReconciliationEntityEnum.INVENTORY | ReconciliationEntityEnum.MOVEMENTS;
@@ -5,3 +5,5 @@ export declare const TRANSFER_NOTE_ISO_WEEK_PATTERN: RegExp;
5
5
  /** CLABE interbancaria de 18 dígitos. */
6
6
  export declare const TRANSFER_NOTE_CLABE_PATTERN: RegExp;
7
7
  export declare const TRANSFER_NOTE_MAX_PAGE_SIZE = 100;
8
+ /** Largo máximo del id del operador (`sub` de Azure AD). */
9
+ export declare const TRANSFER_NOTE_ACTOR_ID_MAX_LENGTH = 128;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TRANSFER_NOTE_MAX_PAGE_SIZE = exports.TRANSFER_NOTE_CLABE_PATTERN = exports.TRANSFER_NOTE_ISO_WEEK_PATTERN = exports.TRANSFER_NOTE_MIN_REASON_LENGTH = void 0;
3
+ exports.TRANSFER_NOTE_ACTOR_ID_MAX_LENGTH = exports.TRANSFER_NOTE_MAX_PAGE_SIZE = exports.TRANSFER_NOTE_CLABE_PATTERN = exports.TRANSFER_NOTE_ISO_WEEK_PATTERN = exports.TRANSFER_NOTE_MIN_REASON_LENGTH = void 0;
4
4
  /** Largo mínimo de la razón de una emisión manual y de una objeción. */
5
5
  exports.TRANSFER_NOTE_MIN_REASON_LENGTH = 20;
6
6
  /** Semana ISO `YYYY-Www`, p. ej. `2026-W43`. */
@@ -8,3 +8,5 @@ exports.TRANSFER_NOTE_ISO_WEEK_PATTERN = /^\d{4}-W(0[1-9]|[1-4]\d|5[0-3])$/;
8
8
  /** CLABE interbancaria de 18 dígitos. */
9
9
  exports.TRANSFER_NOTE_CLABE_PATTERN = /^\d{18}$/;
10
10
  exports.TRANSFER_NOTE_MAX_PAGE_SIZE = 100;
11
+ /** Largo máximo del id del operador (`sub` de Azure AD). */
12
+ exports.TRANSFER_NOTE_ACTOR_ID_MAX_LENGTH = 128;
@@ -6,45 +6,66 @@ export declare class PrivateTransferNoteCaller {
6
6
  tenantId: string;
7
7
  author: string;
8
8
  }
9
- /** Caller del espejo que llama fiado-dashboard; `actor` es el email del operador de la sesión. */
9
+ /** Caller del espejo que llama fiado-dashboard; el operador viaja por `actorId`. */
10
10
  export declare class PrivateTransferNoteOperatorCaller extends PrivateTransferNoteCaller {
11
- actor: string;
11
+ /** `sub` de Azure AD del operador del dashboard. */
12
+ actorId: string;
13
+ /** @deprecated Solo para la auditoría de loan-retail-audit. */
14
+ actor?: string;
12
15
  }
13
16
  /** Body de privatePreviewTransferNote. */
14
17
  export declare class PrivatePreviewTransferNoteRequest extends PreviewTransferNoteRequest {
15
18
  tenantId: string;
16
19
  author: string;
17
- actor: string;
20
+ /** `sub` de Azure AD del operador del dashboard. */
21
+ actorId: string;
22
+ /** @deprecated Solo para la auditoría de loan-retail-audit. */
23
+ actor?: string;
18
24
  }
19
25
  /** Body de privateIssueTransferNote. */
20
26
  export declare class PrivateIssueTransferNoteRequest extends IssueTransferNoteRequest {
21
27
  tenantId: string;
22
28
  author: string;
23
- actor: string;
29
+ /** `sub` de Azure AD del operador del dashboard. */
30
+ actorId: string;
31
+ /** @deprecated Solo para la auditoría de loan-retail-audit. */
32
+ actor?: string;
24
33
  }
25
34
  /** Body de privateCaptureTransferNoteSpei. */
26
35
  export declare class PrivateCaptureTransferNoteSpeiRequest extends CaptureTransferNoteSpeiRequest {
27
36
  tenantId: string;
28
37
  author: string;
29
- actor: string;
38
+ /** `sub` de Azure AD del operador del dashboard. */
39
+ actorId: string;
40
+ /** @deprecated Solo para la auditoría de loan-retail-audit. */
41
+ actor?: string;
30
42
  }
31
43
  /** Body de privateRevertTransferNoteSpei. */
32
44
  export declare class PrivateRevertTransferNoteSpeiRequest extends RevertTransferNoteSpeiRequest {
33
45
  tenantId: string;
34
46
  author: string;
35
- actor: string;
47
+ /** `sub` de Azure AD del operador del dashboard. */
48
+ actorId: string;
49
+ /** @deprecated Solo para la auditoría de loan-retail-audit. */
50
+ actor?: string;
36
51
  }
37
52
  /** Body de privateCancelTransferNote. */
38
53
  export declare class PrivateCancelTransferNoteRequest extends CancelTransferNoteRequest {
39
54
  tenantId: string;
40
55
  author: string;
41
- actor: string;
56
+ /** `sub` de Azure AD del operador del dashboard. */
57
+ actorId: string;
58
+ /** @deprecated Solo para la auditoría de loan-retail-audit. */
59
+ actor?: string;
42
60
  }
43
61
  /** Body de privateResolveTransferNoteDispute. */
44
62
  export declare class PrivateResolveTransferNoteDisputeRequest extends ResolveTransferNoteDisputeRequest {
45
63
  tenantId: string;
46
64
  author: string;
47
- actor: string;
65
+ /** `sub` de Azure AD del operador del dashboard. */
66
+ actorId: string;
67
+ /** @deprecated Solo para la auditoría de loan-retail-audit. */
68
+ actor?: string;
48
69
  }
49
70
  /** Body de privateConfirmTransferNoteReception. */
50
71
  export declare class PrivateConfirmTransferNoteReceptionRequest extends PrivateTransferNoteOperatorCaller {
@@ -71,19 +92,28 @@ export declare class PrivateGetTransferNotePdfQuery extends PrivateTransferNoteO
71
92
  export declare class PrivateListTransferNotesQuery extends ListTransferNotesQuery {
72
93
  tenantId: string;
73
94
  author: string;
74
- actor: string;
95
+ /** `sub` de Azure AD del operador del dashboard. */
96
+ actorId: string;
97
+ /** @deprecated Solo para la auditoría de loan-retail-audit. */
98
+ actor?: string;
75
99
  }
76
100
  /** Query de privateListTransferNotePool. */
77
101
  export declare class PrivateListTransferNotePoolQuery extends ListTransferNotePoolQuery {
78
102
  tenantId: string;
79
103
  author: string;
80
- actor: string;
104
+ /** `sub` de Azure AD del operador del dashboard. */
105
+ actorId: string;
106
+ /** @deprecated Solo para la auditoría de loan-retail-audit. */
107
+ actor?: string;
81
108
  }
82
109
  /** Query de privateListTransferNoteItems. */
83
110
  export declare class PrivateListTransferNoteItemsQuery extends ListTransferNoteItemsQuery {
84
111
  tenantId: string;
85
112
  author: string;
86
- actor: string;
113
+ /** `sub` de Azure AD del operador del dashboard. */
114
+ actorId: string;
115
+ /** @deprecated Solo para la auditoría de loan-retail-audit. */
116
+ actor?: string;
87
117
  }
88
118
  /** Body de privateRunTransferNoteCutoff: responde 202 con `runId` y corre asíncrono. */
89
119
  export declare class PrivateRunTransferNoteCutoffRequest extends PrivateTransferNoteCaller {