@fiado/type-kit 3.621.0 → 3.622.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 (35) hide show
  1. package/_test_/unit/reconciliation/m8AdditiveBatch.test.ts +101 -0
  2. package/_test_/unit/transferNote/transferNoteEventsAndFeeds.test.ts +20 -0
  3. package/bin/reconciliation/constants/reconciliationErrorHttpStatus.d.ts +2 -2
  4. package/bin/reconciliation/constants/reconciliationErrorHttpStatus.js +9 -1
  5. package/bin/reconciliation/enums/ReconciliationErrorCodeEnum.d.ts +11 -1
  6. package/bin/reconciliation/enums/ReconciliationErrorCodeEnum.js +10 -0
  7. package/bin/transactionProcessor/constants/reconciliationAdjustmentErrorHttpStatus.d.ts +3 -0
  8. package/bin/transactionProcessor/constants/reconciliationAdjustmentErrorHttpStatus.js +14 -0
  9. package/bin/transactionProcessor/enums/ReconciliationAdjustmentErrorCodeEnum.d.ts +15 -0
  10. package/bin/transactionProcessor/enums/ReconciliationAdjustmentErrorCodeEnum.js +19 -0
  11. package/bin/transactionProcessor/index.d.ts +2 -0
  12. package/bin/transactionProcessor/index.js +2 -0
  13. package/bin/transferNote/constants/transferNoteErrorHttpStatus.d.ts +2 -2
  14. package/bin/transferNote/constants/transferNoteErrorHttpStatus.js +8 -1
  15. package/bin/transferNote/dtos/TransferNoteFeedRecords.d.ts +4 -0
  16. package/bin/transferNote/enums/TransferNoteErrorCodeEnum.d.ts +11 -1
  17. package/bin/transferNote/enums/TransferNoteErrorCodeEnum.js +10 -0
  18. package/bin/transferNote/events/TransferNoteIssuedEventDetail.d.ts +15 -0
  19. package/bin/transferNote/events/TransferNoteIssuedEventDetail.js +7 -0
  20. package/bin/transferNote/events/TransferNoteReconciledEventDetail.d.ts +2 -1
  21. package/bin/transferNote/events/TransferNoteReconciledEventDetail.js +1 -0
  22. package/bin/transferNote/index.d.ts +1 -0
  23. package/bin/transferNote/index.js +1 -0
  24. package/package.json +1 -1
  25. package/src/reconciliation/constants/reconciliationErrorHttpStatus.ts +10 -2
  26. package/src/reconciliation/enums/ReconciliationErrorCodeEnum.ts +10 -0
  27. package/src/transactionProcessor/constants/reconciliationAdjustmentErrorHttpStatus.ts +12 -0
  28. package/src/transactionProcessor/enums/ReconciliationAdjustmentErrorCodeEnum.ts +15 -0
  29. package/src/transactionProcessor/index.ts +2 -0
  30. package/src/transferNote/constants/transferNoteErrorHttpStatus.ts +9 -2
  31. package/src/transferNote/dtos/TransferNoteFeedRecords.ts +4 -0
  32. package/src/transferNote/enums/TransferNoteErrorCodeEnum.ts +10 -0
  33. package/src/transferNote/events/TransferNoteIssuedEventDetail.ts +17 -0
  34. package/src/transferNote/events/TransferNoteReconciledEventDetail.ts +1 -0
  35. package/src/transferNote/index.ts +1 -0
@@ -0,0 +1,101 @@
1
+ import 'reflect-metadata';
2
+ import * as Reconciliation from '../../../src/reconciliation';
3
+ import * as TransferNote from '../../../src/transferNote';
4
+ import * as TransactionProcessor from '../../../src/transactionProcessor';
5
+ import { CurrencyId } from '../../../src/currency/enums/CurrencyId';
6
+
7
+ const { TransferNoteErrorCodeEnum: TN, TRANSFER_NOTE_ERROR_HTTP_STATUS } = TransferNote;
8
+ const { ReconciliationErrorCodeEnum: RC, RECONCILIATION_ERROR_HTTP_STATUS } = Reconciliation;
9
+ const { ReconciliationAdjustmentErrorCodeEnum: RA, RECONCILIATION_ADJUSTMENT_ERROR_HTTP_STATUS } = TransactionProcessor;
10
+
11
+ describe('codes de transfer-note con su status', () => {
12
+ it.each([
13
+ [TN.NOTE_DISPUTED, 409],
14
+ [TN.NOT_NOTE_PAYER, 422],
15
+ [TN.NOTE_NOT_SENT, 409],
16
+ [TN.NOT_NOTE_PAYEE, 422],
17
+ [TN.SETTLEMENT_NOT_REQUIRED, 422],
18
+ [TN.DISPUTE_ON_PAID_NOTE_PENDING_DECISION, 409],
19
+ [TN.ADJUSTMENT_KEY_CONFLICT, 409],
20
+ [TN.CONTACT_EMAIL_MISSING, 422],
21
+ [TN.NOTICE_PUBLISH_FAILED, 502],
22
+ [TN.BANK_CALENDAR_UNAVAILABLE, 502],
23
+ [TN.CUTOFF_DISPATCH_FAILED, 502],
24
+ [TN.CONCURRENT_WRITE_CONFLICT, 409],
25
+ [TN.AUDIT_QUEUE_PUBLISH_FAILED, 502],
26
+ ])('%s responde %d', (code, status) => {
27
+ expect(code).toBeDefined();
28
+ expect(TRANSFER_NOTE_ERROR_HTTP_STATUS[code]).toBe(status);
29
+ });
30
+ });
31
+
32
+ describe('codes del motor con su status', () => {
33
+ it.each([
34
+ [RC.INVALID_DEFINITION_STATUS_TRANSITION, 409],
35
+ [RC.DEFINITION_ACTIVE_FROM_REQUIRED, 422],
36
+ [RC.DEFINITION_NOT_RUNNABLE, 409],
37
+ [RC.RULE_TYPE_NOT_SUPPORTED, 422],
38
+ [RC.BANK_CALENDAR_UNAVAILABLE, 502],
39
+ [RC.RUN_DISPATCH_FAILED, 502],
40
+ [RC.BANK_STATEMENT_UNAVAILABLE, 502],
41
+ [RC.INVALID_SEED_TENANT, 400],
42
+ ])('%s responde %d', (code, status) => {
43
+ expect(code).toBeDefined();
44
+ expect(RECONCILIATION_ERROR_HTTP_STATUS[code]).toBe(status);
45
+ });
46
+ });
47
+
48
+ describe('codes del ajuste en el processor', () => {
49
+ it('el catálogo es exactamente el del ajuste', () => {
50
+ expect(Object.values(RA).sort()).toEqual([
51
+ 'ADJUSTMENT_IN_PROGRESS',
52
+ 'ADJUSTMENT_KEY_CONFLICT',
53
+ 'ADJUSTMENT_OUTCOME_UNKNOWN',
54
+ 'ADJUSTMENT_REJECTED',
55
+ 'ADJUSTMENT_UNAVAILABLE',
56
+ 'AUTHOR_NOT_ALLOWED',
57
+ 'COLLECTION_TENANT_MISSING',
58
+ ]);
59
+ });
60
+
61
+ it.each([
62
+ [RA.ADJUSTMENT_KEY_CONFLICT, 409],
63
+ [RA.ADJUSTMENT_IN_PROGRESS, 409],
64
+ [RA.ADJUSTMENT_OUTCOME_UNKNOWN, 409],
65
+ [RA.ADJUSTMENT_REJECTED, 422],
66
+ [RA.ADJUSTMENT_UNAVAILABLE, 502],
67
+ [RA.AUTHOR_NOT_ALLOWED, 422],
68
+ [RA.COLLECTION_TENANT_MISSING, 400],
69
+ ])('%s responde %d', (code, status) => {
70
+ expect(RECONCILIATION_ADJUSTMENT_ERROR_HTTP_STATUS[code]).toBe(status);
71
+ });
72
+ });
73
+
74
+ describe('evento TransferNoteIssued', () => {
75
+ it('vive en transferNote con su source y detailType', () => {
76
+ expect(TransferNote.TRANSFER_NOTE_EVENTS_SOURCE).toBe('fiado.transferNote');
77
+ expect(TransferNote.TransferNoteEventDetailTypeEnum.TRANSFER_NOTE_ISSUED).toBe('transferNote.TransferNoteIssued');
78
+ expect(TransferNote.TransferNoteEventDetailTypeEnum.TRANSFER_NOTE_RECONCILED).toBe('transferNote.TransferNoteReconciled');
79
+ const detail: TransferNote.TransferNoteIssuedEventDetail = {
80
+ eventId: 'surekeep#n-1#ISSUED',
81
+ tenantId: 'surekeep',
82
+ noteId: 'n-1',
83
+ pairKey: 'FSA#SK',
84
+ isoWeek: '2026-W44',
85
+ netAmountCents: 125000,
86
+ currency: CurrencyId.MXN,
87
+ issuedAt: '2026-10-27T06:01:00.000Z',
88
+ dueAt: '2026-10-29T06:00:00.000Z',
89
+ };
90
+ expect(detail.dueAt).toBe('2026-10-29T06:00:00.000Z');
91
+ });
92
+ });
93
+
94
+ describe('liquidación con la cuenta destino capturada', () => {
95
+ it('paidToClabe es opcional y sigue el patrón de CLABE', () => {
96
+ const paidTo: TransferNote.TransferNoteSettlementFeedRecord['paidToClabe'] = '012180009876543210';
97
+ const notCaptured: TransferNote.TransferNoteSettlementFeedRecord['paidToClabe'] = undefined;
98
+ expect(TransferNote.TRANSFER_NOTE_CLABE_PATTERN.test(paidTo ?? '')).toBe(true);
99
+ expect(notCaptured).toBeUndefined();
100
+ });
101
+ });
@@ -58,6 +58,26 @@ describe('registros de feed de notas con la forma base', () => {
58
58
  expect(Object.keys(reversal)).not.toContain('noteId');
59
59
  });
60
60
 
61
+ it('un item de ajuste apunta al item original que corrige', () => {
62
+ const adjustment: TransferNote.TransferNoteItemFeedRecord = {
63
+ recordId: 'it-3',
64
+ tenantId: 'surekeep',
65
+ concept: ReconciliationFeedConceptEnum.TRANSFER_NOTE_ITEM,
66
+ matchKey: 'att-1',
67
+ amountCents: -500,
68
+ currency: CurrencyId.MXN,
69
+ occurredAt: '2026-10-28T15:00:00.000Z',
70
+ feedDay: '2026-10-28',
71
+ refs: { noteId: 'n-2', itemId: 'it-3' },
72
+ itemConcept: TransferNoteConceptEnum.ADJUSTMENT,
73
+ pairKey: 'FSA#SK',
74
+ sourceRecordId: 'it-1',
75
+ includedAt: '2026-10-28T06:01:00.000Z',
76
+ adjustedItemId: 'it-1',
77
+ };
78
+ expect(adjustment.adjustedItemId).toBe('it-1');
79
+ });
80
+
61
81
  it('la liquidación de una nota se lee con el cliente genérico', () => {
62
82
  const settlement: TransferNote.TransferNoteSettlementFeedRecord = {
63
83
  recordId: 'n-1',
@@ -1,6 +1,6 @@
1
1
  import { ReconciliationErrorCodeEnum as C } from '../enums/ReconciliationErrorCodeEnum';
2
- /** Status HTTP de cada code: 404 no existe · 409 conflicto de estado · 422 regla de negocio · 502 falló el dueño del dinero. */
3
- export declare const RECONCILIATION_ERROR_HTTP_STATUS: Readonly<Record<C, 404 | 409 | 422 | 502>>;
2
+ /** Status HTTP de cada code: 400 request inválido · 404 no existe · 409 conflicto · 422 regla de negocio · 502 falló un externo. */
3
+ export declare const RECONCILIATION_ERROR_HTTP_STATUS: Readonly<Record<C, 400 | 404 | 409 | 422 | 502>>;
4
4
  /** Status HTTP de los codes del feed genérico: 400 request inválido · 404 no existe · 502 falló la fuente. */
5
5
  export declare const RECONCILIATION_FEED_ERROR_HTTP_STATUS: {
6
6
  readonly FEED_RECORD_NOT_FOUND: 404;
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.RECONCILIATION_FEED_ERROR_HTTP_STATUS = exports.RECONCILIATION_ERROR_HTTP_STATUS = void 0;
4
4
  const ReconciliationErrorCodeEnum_1 = require("../enums/ReconciliationErrorCodeEnum");
5
5
  const ReconciliationFeedErrorCodeEnum_1 = require("../enums/ReconciliationFeedErrorCodeEnum");
6
- /** Status HTTP de cada code: 404 no existe · 409 conflicto de estado · 422 regla de negocio · 502 falló el dueño del dinero. */
6
+ /** Status HTTP de cada code: 400 request inválido · 404 no existe · 409 conflicto · 422 regla de negocio · 502 falló un externo. */
7
7
  exports.RECONCILIATION_ERROR_HTTP_STATUS = {
8
8
  [ReconciliationErrorCodeEnum_1.ReconciliationErrorCodeEnum.DEFINITION_NOT_FOUND]: 404,
9
9
  [ReconciliationErrorCodeEnum_1.ReconciliationErrorCodeEnum.RUN_IN_PROGRESS]: 409,
@@ -16,6 +16,14 @@ exports.RECONCILIATION_ERROR_HTTP_STATUS = {
16
16
  [ReconciliationErrorCodeEnum_1.ReconciliationErrorCodeEnum.ADJUSTMENT_UNAVAILABLE]: 502,
17
17
  [ReconciliationErrorCodeEnum_1.ReconciliationErrorCodeEnum.ITEM_ADJUSTED]: 409,
18
18
  [ReconciliationErrorCodeEnum_1.ReconciliationErrorCodeEnum.AUTHOR_NOT_ALLOWED]: 422,
19
+ [ReconciliationErrorCodeEnum_1.ReconciliationErrorCodeEnum.INVALID_DEFINITION_STATUS_TRANSITION]: 409,
20
+ [ReconciliationErrorCodeEnum_1.ReconciliationErrorCodeEnum.DEFINITION_ACTIVE_FROM_REQUIRED]: 422,
21
+ [ReconciliationErrorCodeEnum_1.ReconciliationErrorCodeEnum.DEFINITION_NOT_RUNNABLE]: 409,
22
+ [ReconciliationErrorCodeEnum_1.ReconciliationErrorCodeEnum.RULE_TYPE_NOT_SUPPORTED]: 422,
23
+ [ReconciliationErrorCodeEnum_1.ReconciliationErrorCodeEnum.BANK_CALENDAR_UNAVAILABLE]: 502,
24
+ [ReconciliationErrorCodeEnum_1.ReconciliationErrorCodeEnum.RUN_DISPATCH_FAILED]: 502,
25
+ [ReconciliationErrorCodeEnum_1.ReconciliationErrorCodeEnum.BANK_STATEMENT_UNAVAILABLE]: 502,
26
+ [ReconciliationErrorCodeEnum_1.ReconciliationErrorCodeEnum.INVALID_SEED_TENANT]: 400,
19
27
  };
20
28
  /** Status HTTP de los codes del feed genérico: 400 request inválido · 404 no existe · 502 falló la fuente. */
21
29
  exports.RECONCILIATION_FEED_ERROR_HTTP_STATUS = {
@@ -20,5 +20,15 @@ export declare enum ReconciliationErrorCodeEnum {
20
20
  /** Una partida ajustada no se reactiva. */
21
21
  ITEM_ADJUSTED = "ITEM_ADJUSTED",
22
22
  /** El `author` del espejo privado no está en la lista permitida del lambda. */
23
- AUTHOR_NOT_ALLOWED = "AUTHOR_NOT_ALLOWED"
23
+ AUTHOR_NOT_ALLOWED = "AUTHOR_NOT_ALLOWED",
24
+ INVALID_DEFINITION_STATUS_TRANSITION = "INVALID_DEFINITION_STATUS_TRANSITION",
25
+ /** Activar una definición exige su fecha de inicio. */
26
+ DEFINITION_ACTIVE_FROM_REQUIRED = "DEFINITION_ACTIVE_FROM_REQUIRED",
27
+ /** La definición no está activa o aún no entra en vigor. */
28
+ DEFINITION_NOT_RUNNABLE = "DEFINITION_NOT_RUNNABLE",
29
+ RULE_TYPE_NOT_SUPPORTED = "RULE_TYPE_NOT_SUPPORTED",
30
+ BANK_CALENDAR_UNAVAILABLE = "BANK_CALENDAR_UNAVAILABLE",
31
+ RUN_DISPATCH_FAILED = "RUN_DISPATCH_FAILED",
32
+ BANK_STATEMENT_UNAVAILABLE = "BANK_STATEMENT_UNAVAILABLE",
33
+ INVALID_SEED_TENANT = "INVALID_SEED_TENANT"
24
34
  }
@@ -25,4 +25,14 @@ var ReconciliationErrorCodeEnum;
25
25
  ReconciliationErrorCodeEnum["ITEM_ADJUSTED"] = "ITEM_ADJUSTED";
26
26
  /** El `author` del espejo privado no está en la lista permitida del lambda. */
27
27
  ReconciliationErrorCodeEnum["AUTHOR_NOT_ALLOWED"] = "AUTHOR_NOT_ALLOWED";
28
+ ReconciliationErrorCodeEnum["INVALID_DEFINITION_STATUS_TRANSITION"] = "INVALID_DEFINITION_STATUS_TRANSITION";
29
+ /** Activar una definición exige su fecha de inicio. */
30
+ ReconciliationErrorCodeEnum["DEFINITION_ACTIVE_FROM_REQUIRED"] = "DEFINITION_ACTIVE_FROM_REQUIRED";
31
+ /** La definición no está activa o aún no entra en vigor. */
32
+ ReconciliationErrorCodeEnum["DEFINITION_NOT_RUNNABLE"] = "DEFINITION_NOT_RUNNABLE";
33
+ ReconciliationErrorCodeEnum["RULE_TYPE_NOT_SUPPORTED"] = "RULE_TYPE_NOT_SUPPORTED";
34
+ ReconciliationErrorCodeEnum["BANK_CALENDAR_UNAVAILABLE"] = "BANK_CALENDAR_UNAVAILABLE";
35
+ ReconciliationErrorCodeEnum["RUN_DISPATCH_FAILED"] = "RUN_DISPATCH_FAILED";
36
+ ReconciliationErrorCodeEnum["BANK_STATEMENT_UNAVAILABLE"] = "BANK_STATEMENT_UNAVAILABLE";
37
+ ReconciliationErrorCodeEnum["INVALID_SEED_TENANT"] = "INVALID_SEED_TENANT";
28
38
  })(ReconciliationErrorCodeEnum || (exports.ReconciliationErrorCodeEnum = ReconciliationErrorCodeEnum = {}));
@@ -0,0 +1,3 @@
1
+ import { ReconciliationAdjustmentErrorCodeEnum as C } from '../enums/ReconciliationAdjustmentErrorCodeEnum';
2
+ /** Status HTTP de cada code: 400 request inválido · 409 conflicto · 422 regla de negocio · 502 falló un externo. */
3
+ export declare const RECONCILIATION_ADJUSTMENT_ERROR_HTTP_STATUS: Readonly<Record<C, 400 | 409 | 422 | 502>>;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RECONCILIATION_ADJUSTMENT_ERROR_HTTP_STATUS = void 0;
4
+ const ReconciliationAdjustmentErrorCodeEnum_1 = require("../enums/ReconciliationAdjustmentErrorCodeEnum");
5
+ /** Status HTTP de cada code: 400 request inválido · 409 conflicto · 422 regla de negocio · 502 falló un externo. */
6
+ exports.RECONCILIATION_ADJUSTMENT_ERROR_HTTP_STATUS = {
7
+ [ReconciliationAdjustmentErrorCodeEnum_1.ReconciliationAdjustmentErrorCodeEnum.ADJUSTMENT_KEY_CONFLICT]: 409,
8
+ [ReconciliationAdjustmentErrorCodeEnum_1.ReconciliationAdjustmentErrorCodeEnum.ADJUSTMENT_IN_PROGRESS]: 409,
9
+ [ReconciliationAdjustmentErrorCodeEnum_1.ReconciliationAdjustmentErrorCodeEnum.ADJUSTMENT_OUTCOME_UNKNOWN]: 409,
10
+ [ReconciliationAdjustmentErrorCodeEnum_1.ReconciliationAdjustmentErrorCodeEnum.ADJUSTMENT_REJECTED]: 422,
11
+ [ReconciliationAdjustmentErrorCodeEnum_1.ReconciliationAdjustmentErrorCodeEnum.ADJUSTMENT_UNAVAILABLE]: 502,
12
+ [ReconciliationAdjustmentErrorCodeEnum_1.ReconciliationAdjustmentErrorCodeEnum.AUTHOR_NOT_ALLOWED]: 422,
13
+ [ReconciliationAdjustmentErrorCodeEnum_1.ReconciliationAdjustmentErrorCodeEnum.COLLECTION_TENANT_MISSING]: 400,
14
+ };
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Codes de error del ajuste de conciliación en transaction-processor; el status de cada uno está en
3
+ * `RECONCILIATION_ADJUSTMENT_ERROR_HTTP_STATUS`.
4
+ */
5
+ export declare enum ReconciliationAdjustmentErrorCodeEnum {
6
+ /** La misma `adjustmentKey` llegó con otro contenido. */
7
+ ADJUSTMENT_KEY_CONFLICT = "ADJUSTMENT_KEY_CONFLICT",
8
+ ADJUSTMENT_IN_PROGRESS = "ADJUSTMENT_IN_PROGRESS",
9
+ /** Un intento previo con la misma llave no dejó resultado conocido. */
10
+ ADJUSTMENT_OUTCOME_UNKNOWN = "ADJUSTMENT_OUTCOME_UNKNOWN",
11
+ ADJUSTMENT_REJECTED = "ADJUSTMENT_REJECTED",
12
+ ADJUSTMENT_UNAVAILABLE = "ADJUSTMENT_UNAVAILABLE",
13
+ AUTHOR_NOT_ALLOWED = "AUTHOR_NOT_ALLOWED",
14
+ COLLECTION_TENANT_MISSING = "COLLECTION_TENANT_MISSING"
15
+ }
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ReconciliationAdjustmentErrorCodeEnum = void 0;
4
+ /**
5
+ * Codes de error del ajuste de conciliación en transaction-processor; el status de cada uno está en
6
+ * `RECONCILIATION_ADJUSTMENT_ERROR_HTTP_STATUS`.
7
+ */
8
+ var ReconciliationAdjustmentErrorCodeEnum;
9
+ (function (ReconciliationAdjustmentErrorCodeEnum) {
10
+ /** La misma `adjustmentKey` llegó con otro contenido. */
11
+ ReconciliationAdjustmentErrorCodeEnum["ADJUSTMENT_KEY_CONFLICT"] = "ADJUSTMENT_KEY_CONFLICT";
12
+ ReconciliationAdjustmentErrorCodeEnum["ADJUSTMENT_IN_PROGRESS"] = "ADJUSTMENT_IN_PROGRESS";
13
+ /** Un intento previo con la misma llave no dejó resultado conocido. */
14
+ ReconciliationAdjustmentErrorCodeEnum["ADJUSTMENT_OUTCOME_UNKNOWN"] = "ADJUSTMENT_OUTCOME_UNKNOWN";
15
+ ReconciliationAdjustmentErrorCodeEnum["ADJUSTMENT_REJECTED"] = "ADJUSTMENT_REJECTED";
16
+ ReconciliationAdjustmentErrorCodeEnum["ADJUSTMENT_UNAVAILABLE"] = "ADJUSTMENT_UNAVAILABLE";
17
+ ReconciliationAdjustmentErrorCodeEnum["AUTHOR_NOT_ALLOWED"] = "AUTHOR_NOT_ALLOWED";
18
+ ReconciliationAdjustmentErrorCodeEnum["COLLECTION_TENANT_MISSING"] = "COLLECTION_TENANT_MISSING";
19
+ })(ReconciliationAdjustmentErrorCodeEnum || (exports.ReconciliationAdjustmentErrorCodeEnum = ReconciliationAdjustmentErrorCodeEnum = {}));
@@ -46,6 +46,8 @@ export * from './dtos/ReconciliationAdjustmentReference';
46
46
  export * from './dtos/PrivateAuthorizeReconciliationAdjustmentRequest';
47
47
  export * from './dtos/PrivateAuthorizeReconciliationAdjustmentResponse';
48
48
  export * from './enums/TransactionProcessorCodesEnum';
49
+ export * from './enums/ReconciliationAdjustmentErrorCodeEnum';
50
+ export * from './constants/reconciliationAdjustmentErrorHttpStatus';
49
51
  export * from './enums/AsyncTxStatusEnum';
50
52
  export * from './enums/AppEnum';
51
53
  export * from './enums/TransactionInfoStatusEnum';
@@ -62,6 +62,8 @@ __exportStar(require("./dtos/ReconciliationAdjustmentReference"), exports);
62
62
  __exportStar(require("./dtos/PrivateAuthorizeReconciliationAdjustmentRequest"), exports);
63
63
  __exportStar(require("./dtos/PrivateAuthorizeReconciliationAdjustmentResponse"), exports);
64
64
  __exportStar(require("./enums/TransactionProcessorCodesEnum"), exports);
65
+ __exportStar(require("./enums/ReconciliationAdjustmentErrorCodeEnum"), exports);
66
+ __exportStar(require("./constants/reconciliationAdjustmentErrorHttpStatus"), exports);
65
67
  __exportStar(require("./enums/AsyncTxStatusEnum"), exports);
66
68
  __exportStar(require("./enums/AppEnum"), exports);
67
69
  __exportStar(require("./enums/TransactionInfoStatusEnum"), exports);
@@ -1,3 +1,3 @@
1
1
  import { TransferNoteErrorCodeEnum as C } from '../enums/TransferNoteErrorCodeEnum';
2
- /** Status HTTP de cada code: 400 request inválido · 404 no existe · 409 conflicto de estado · 422 regla de negocio. */
3
- export declare const TRANSFER_NOTE_ERROR_HTTP_STATUS: Readonly<Record<C, 400 | 404 | 409 | 422>>;
2
+ /** Status HTTP de cada code: 400 request inválido · 404 no existe · 409 conflicto · 422 regla de negocio · 502 falló un externo. */
3
+ export declare const TRANSFER_NOTE_ERROR_HTTP_STATUS: Readonly<Record<C, 400 | 404 | 409 | 422 | 502>>;
@@ -4,7 +4,7 @@ exports.TRANSFER_NOTE_ERROR_HTTP_STATUS = void 0;
4
4
  const reconciliationErrorHttpStatus_1 = require("../../reconciliation/constants/reconciliationErrorHttpStatus");
5
5
  const ReconciliationFeedErrorCodeEnum_1 = require("../../reconciliation/enums/ReconciliationFeedErrorCodeEnum");
6
6
  const TransferNoteErrorCodeEnum_1 = require("../enums/TransferNoteErrorCodeEnum");
7
- /** Status HTTP de cada code: 400 request inválido · 404 no existe · 409 conflicto de estado · 422 regla de negocio. */
7
+ /** Status HTTP de cada code: 400 request inválido · 404 no existe · 409 conflicto · 422 regla de negocio · 502 falló un externo. */
8
8
  exports.TRANSFER_NOTE_ERROR_HTTP_STATUS = {
9
9
  [TransferNoteErrorCodeEnum_1.TransferNoteErrorCodeEnum.TRANSFER_NOTE_NOT_FOUND]: 404,
10
10
  [TransferNoteErrorCodeEnum_1.TransferNoteErrorCodeEnum.NOTE_NOT_DISPUTABLE]: 409,
@@ -27,4 +27,11 @@ exports.TRANSFER_NOTE_ERROR_HTTP_STATUS = {
27
27
  [TransferNoteErrorCodeEnum_1.TransferNoteErrorCodeEnum.SOURCE_ITEM_NOT_FOUND]: 404,
28
28
  [TransferNoteErrorCodeEnum_1.TransferNoteErrorCodeEnum.TRANSFER_NOTE_ITEM_NOT_FOUND]: 404,
29
29
  [TransferNoteErrorCodeEnum_1.TransferNoteErrorCodeEnum.FEED_RECORD_NOT_FOUND]: reconciliationErrorHttpStatus_1.RECONCILIATION_FEED_ERROR_HTTP_STATUS[ReconciliationFeedErrorCodeEnum_1.ReconciliationFeedErrorCodeEnum.FEED_RECORD_NOT_FOUND],
30
+ [TransferNoteErrorCodeEnum_1.TransferNoteErrorCodeEnum.DISPUTE_ON_PAID_NOTE_PENDING_DECISION]: 409,
31
+ [TransferNoteErrorCodeEnum_1.TransferNoteErrorCodeEnum.ADJUSTMENT_KEY_CONFLICT]: 409,
32
+ [TransferNoteErrorCodeEnum_1.TransferNoteErrorCodeEnum.NOTICE_PUBLISH_FAILED]: 502,
33
+ [TransferNoteErrorCodeEnum_1.TransferNoteErrorCodeEnum.BANK_CALENDAR_UNAVAILABLE]: 502,
34
+ [TransferNoteErrorCodeEnum_1.TransferNoteErrorCodeEnum.CUTOFF_DISPATCH_FAILED]: 502,
35
+ [TransferNoteErrorCodeEnum_1.TransferNoteErrorCodeEnum.CONCURRENT_WRITE_CONFLICT]: 409,
36
+ [TransferNoteErrorCodeEnum_1.TransferNoteErrorCodeEnum.AUDIT_QUEUE_PUBLISH_FAILED]: 502,
30
37
  };
@@ -16,6 +16,8 @@ export interface TransferNoteItemFeedRecord extends ReconciliationFeedRecord {
16
16
  /** `recordId` en el feed del dueño del que salió el item. */
17
17
  sourceRecordId: string;
18
18
  includedAt: string;
19
+ /** itemId del item original que corrige un item de concepto ADJUSTMENT. */
20
+ adjustedItemId?: string;
19
21
  }
20
22
  /** Registro del feed TRANSFER_NOTE_SETTLEMENT: lo que una nota debe pagar y lo capturado; `recordId` y `matchKey` son el noteId. */
21
23
  export interface TransferNoteSettlementFeedRecord extends ReconciliationFeedRecord {
@@ -35,4 +37,6 @@ export interface TransferNoteSettlementFeedRecord extends ReconciliationFeedReco
35
37
  payeeClabe: string;
36
38
  paidAt?: string;
37
39
  paidAmountCents?: number;
40
+ /** CLABE destino del SPEI capturado (`TRANSFER_NOTE_CLABE_PATTERN`); el motor la compara contra `payeeClabe`. */
41
+ paidToClabe?: string;
38
42
  }
@@ -28,5 +28,15 @@ export declare enum TransferNoteErrorCodeEnum {
28
28
  /** No hay item para el concepto y registro de origen pedidos en by-source. */
29
29
  TRANSFER_NOTE_ITEM_NOT_FOUND = "TRANSFER_NOTE_ITEM_NOT_FOUND",
30
30
  /** Mismo code del feed genérico que implementa cada dueño. */
31
- FEED_RECORD_NOT_FOUND = "FEED_RECORD_NOT_FOUND"
31
+ FEED_RECORD_NOT_FOUND = "FEED_RECORD_NOT_FOUND",
32
+ /** La nota pagada ya tiene una objeción esperando decisión. */
33
+ DISPUTE_ON_PAID_NOTE_PENDING_DECISION = "DISPUTE_ON_PAID_NOTE_PENDING_DECISION",
34
+ /** La misma llave de ajuste llegó con otro contenido. */
35
+ ADJUSTMENT_KEY_CONFLICT = "ADJUSTMENT_KEY_CONFLICT",
36
+ NOTICE_PUBLISH_FAILED = "NOTICE_PUBLISH_FAILED",
37
+ BANK_CALENDAR_UNAVAILABLE = "BANK_CALENDAR_UNAVAILABLE",
38
+ CUTOFF_DISPATCH_FAILED = "CUTOFF_DISPATCH_FAILED",
39
+ /** Otra escritura cambió el registro entre la lectura y el guardado. */
40
+ CONCURRENT_WRITE_CONFLICT = "CONCURRENT_WRITE_CONFLICT",
41
+ AUDIT_QUEUE_PUBLISH_FAILED = "AUDIT_QUEUE_PUBLISH_FAILED"
32
42
  }
@@ -33,4 +33,14 @@ var TransferNoteErrorCodeEnum;
33
33
  TransferNoteErrorCodeEnum["TRANSFER_NOTE_ITEM_NOT_FOUND"] = "TRANSFER_NOTE_ITEM_NOT_FOUND";
34
34
  /** Mismo code del feed genérico que implementa cada dueño. */
35
35
  TransferNoteErrorCodeEnum["FEED_RECORD_NOT_FOUND"] = "FEED_RECORD_NOT_FOUND";
36
+ /** La nota pagada ya tiene una objeción esperando decisión. */
37
+ TransferNoteErrorCodeEnum["DISPUTE_ON_PAID_NOTE_PENDING_DECISION"] = "DISPUTE_ON_PAID_NOTE_PENDING_DECISION";
38
+ /** La misma llave de ajuste llegó con otro contenido. */
39
+ TransferNoteErrorCodeEnum["ADJUSTMENT_KEY_CONFLICT"] = "ADJUSTMENT_KEY_CONFLICT";
40
+ TransferNoteErrorCodeEnum["NOTICE_PUBLISH_FAILED"] = "NOTICE_PUBLISH_FAILED";
41
+ TransferNoteErrorCodeEnum["BANK_CALENDAR_UNAVAILABLE"] = "BANK_CALENDAR_UNAVAILABLE";
42
+ TransferNoteErrorCodeEnum["CUTOFF_DISPATCH_FAILED"] = "CUTOFF_DISPATCH_FAILED";
43
+ /** Otra escritura cambió el registro entre la lectura y el guardado. */
44
+ TransferNoteErrorCodeEnum["CONCURRENT_WRITE_CONFLICT"] = "CONCURRENT_WRITE_CONFLICT";
45
+ TransferNoteErrorCodeEnum["AUDIT_QUEUE_PUBLISH_FAILED"] = "AUDIT_QUEUE_PUBLISH_FAILED";
36
46
  })(TransferNoteErrorCodeEnum || (exports.TransferNoteErrorCodeEnum = TransferNoteErrorCodeEnum = {}));
@@ -0,0 +1,15 @@
1
+ import { CurrencyId } from '../../currency/enums/CurrencyId';
2
+ export declare class TransferNoteIssuedEventDetail {
3
+ /** Fijo por nota: un reenvío llega con el mismo id. */
4
+ eventId: string;
5
+ tenantId: string;
6
+ noteId: string;
7
+ pairKey: string;
8
+ isoWeek: string;
9
+ netAmountCents: number;
10
+ currency: CurrencyId;
11
+ /** ISO 8601 de la emisión. */
12
+ issuedAt: string;
13
+ /** ISO 8601 del vencimiento del SPEI. */
14
+ dueAt: string;
15
+ }
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TransferNoteIssuedEventDetail = void 0;
4
+ // `detail` de TransferNoteIssued; source `TRANSFER_NOTE_EVENTS_SOURCE`, detail-type `TRANSFER_NOTE_ISSUED`.
5
+ class TransferNoteIssuedEventDetail {
6
+ }
7
+ exports.TransferNoteIssuedEventDetail = TransferNoteIssuedEventDetail;
@@ -1,7 +1,8 @@
1
1
  import { CurrencyId } from '../../currency/enums/CurrencyId';
2
2
  export declare const TRANSFER_NOTE_EVENTS_SOURCE = "fiado.transferNote";
3
3
  export declare enum TransferNoteEventDetailTypeEnum {
4
- TRANSFER_NOTE_RECONCILED = "transferNote.TransferNoteReconciled"
4
+ TRANSFER_NOTE_RECONCILED = "transferNote.TransferNoteReconciled",
5
+ TRANSFER_NOTE_ISSUED = "transferNote.TransferNoteIssued"
5
6
  }
6
7
  export declare class TransferNoteReconciledEventDetail {
7
8
  /** Fijo por nota: un reenvío llega con el mismo id y el consumidor lo descarta. */
@@ -6,6 +6,7 @@ exports.TRANSFER_NOTE_EVENTS_SOURCE = 'fiado.transferNote';
6
6
  var TransferNoteEventDetailTypeEnum;
7
7
  (function (TransferNoteEventDetailTypeEnum) {
8
8
  TransferNoteEventDetailTypeEnum["TRANSFER_NOTE_RECONCILED"] = "transferNote.TransferNoteReconciled";
9
+ TransferNoteEventDetailTypeEnum["TRANSFER_NOTE_ISSUED"] = "transferNote.TransferNoteIssued";
9
10
  })(TransferNoteEventDetailTypeEnum || (exports.TransferNoteEventDetailTypeEnum = TransferNoteEventDetailTypeEnum = {}));
10
11
  // `detail` de TransferNoteReconciled; el motor recalcula con él el agregado de la semana del par.
11
12
  class TransferNoteReconciledEventDetail {
@@ -32,3 +32,4 @@ export * from './dtos/responses/RetailerTransferNoteResponses';
32
32
  export * from './dtos/responses/TransferNoteConfigResponses';
33
33
  export * from './dtos/responses/PrivateTransferNoteResponses';
34
34
  export * from './events/TransferNoteReconciledEventDetail';
35
+ export * from './events/TransferNoteIssuedEventDetail';
@@ -54,3 +54,4 @@ __exportStar(require("./dtos/responses/TransferNoteConfigResponses"), exports);
54
54
  __exportStar(require("./dtos/responses/PrivateTransferNoteResponses"), exports);
55
55
  // Eventos
56
56
  __exportStar(require("./events/TransferNoteReconciledEventDetail"), exports);
57
+ __exportStar(require("./events/TransferNoteIssuedEventDetail"), exports);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fiado/type-kit",
3
- "version": "3.621.0",
3
+ "version": "3.622.0",
4
4
  "description": "",
5
5
  "main": "bin/index.js",
6
6
  "types": "bin/index.d.ts",
@@ -1,8 +1,8 @@
1
1
  import { ReconciliationErrorCodeEnum as C } from '../enums/ReconciliationErrorCodeEnum';
2
2
  import { ReconciliationFeedErrorCodeEnum } from '../enums/ReconciliationFeedErrorCodeEnum';
3
3
 
4
- /** Status HTTP de cada code: 404 no existe · 409 conflicto de estado · 422 regla de negocio · 502 falló el dueño del dinero. */
5
- export const RECONCILIATION_ERROR_HTTP_STATUS: Readonly<Record<C, 404 | 409 | 422 | 502>> = {
4
+ /** Status HTTP de cada code: 400 request inválido · 404 no existe · 409 conflicto · 422 regla de negocio · 502 falló un externo. */
5
+ export const RECONCILIATION_ERROR_HTTP_STATUS: Readonly<Record<C, 400 | 404 | 409 | 422 | 502>> = {
6
6
  [C.DEFINITION_NOT_FOUND]: 404,
7
7
  [C.RUN_IN_PROGRESS]: 409,
8
8
  [C.ITEM_NOT_FOUND]: 404,
@@ -14,6 +14,14 @@ export const RECONCILIATION_ERROR_HTTP_STATUS: Readonly<Record<C, 404 | 409 | 42
14
14
  [C.ADJUSTMENT_UNAVAILABLE]: 502,
15
15
  [C.ITEM_ADJUSTED]: 409,
16
16
  [C.AUTHOR_NOT_ALLOWED]: 422,
17
+ [C.INVALID_DEFINITION_STATUS_TRANSITION]: 409,
18
+ [C.DEFINITION_ACTIVE_FROM_REQUIRED]: 422,
19
+ [C.DEFINITION_NOT_RUNNABLE]: 409,
20
+ [C.RULE_TYPE_NOT_SUPPORTED]: 422,
21
+ [C.BANK_CALENDAR_UNAVAILABLE]: 502,
22
+ [C.RUN_DISPATCH_FAILED]: 502,
23
+ [C.BANK_STATEMENT_UNAVAILABLE]: 502,
24
+ [C.INVALID_SEED_TENANT]: 400,
17
25
  };
18
26
 
19
27
  /** Status HTTP de los codes del feed genérico: 400 request inválido · 404 no existe · 502 falló la fuente. */
@@ -21,4 +21,14 @@ export enum ReconciliationErrorCodeEnum {
21
21
  ITEM_ADJUSTED = 'ITEM_ADJUSTED',
22
22
  /** El `author` del espejo privado no está en la lista permitida del lambda. */
23
23
  AUTHOR_NOT_ALLOWED = 'AUTHOR_NOT_ALLOWED',
24
+ INVALID_DEFINITION_STATUS_TRANSITION = 'INVALID_DEFINITION_STATUS_TRANSITION',
25
+ /** Activar una definición exige su fecha de inicio. */
26
+ DEFINITION_ACTIVE_FROM_REQUIRED = 'DEFINITION_ACTIVE_FROM_REQUIRED',
27
+ /** La definición no está activa o aún no entra en vigor. */
28
+ DEFINITION_NOT_RUNNABLE = 'DEFINITION_NOT_RUNNABLE',
29
+ RULE_TYPE_NOT_SUPPORTED = 'RULE_TYPE_NOT_SUPPORTED',
30
+ BANK_CALENDAR_UNAVAILABLE = 'BANK_CALENDAR_UNAVAILABLE',
31
+ RUN_DISPATCH_FAILED = 'RUN_DISPATCH_FAILED',
32
+ BANK_STATEMENT_UNAVAILABLE = 'BANK_STATEMENT_UNAVAILABLE',
33
+ INVALID_SEED_TENANT = 'INVALID_SEED_TENANT',
24
34
  }
@@ -0,0 +1,12 @@
1
+ import { ReconciliationAdjustmentErrorCodeEnum as C } from '../enums/ReconciliationAdjustmentErrorCodeEnum';
2
+
3
+ /** Status HTTP de cada code: 400 request inválido · 409 conflicto · 422 regla de negocio · 502 falló un externo. */
4
+ export const RECONCILIATION_ADJUSTMENT_ERROR_HTTP_STATUS: Readonly<Record<C, 400 | 409 | 422 | 502>> = {
5
+ [C.ADJUSTMENT_KEY_CONFLICT]: 409,
6
+ [C.ADJUSTMENT_IN_PROGRESS]: 409,
7
+ [C.ADJUSTMENT_OUTCOME_UNKNOWN]: 409,
8
+ [C.ADJUSTMENT_REJECTED]: 422,
9
+ [C.ADJUSTMENT_UNAVAILABLE]: 502,
10
+ [C.AUTHOR_NOT_ALLOWED]: 422,
11
+ [C.COLLECTION_TENANT_MISSING]: 400,
12
+ };
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Codes de error del ajuste de conciliación en transaction-processor; el status de cada uno está en
3
+ * `RECONCILIATION_ADJUSTMENT_ERROR_HTTP_STATUS`.
4
+ */
5
+ export enum ReconciliationAdjustmentErrorCodeEnum {
6
+ /** La misma `adjustmentKey` llegó con otro contenido. */
7
+ ADJUSTMENT_KEY_CONFLICT = 'ADJUSTMENT_KEY_CONFLICT',
8
+ ADJUSTMENT_IN_PROGRESS = 'ADJUSTMENT_IN_PROGRESS',
9
+ /** Un intento previo con la misma llave no dejó resultado conocido. */
10
+ ADJUSTMENT_OUTCOME_UNKNOWN = 'ADJUSTMENT_OUTCOME_UNKNOWN',
11
+ ADJUSTMENT_REJECTED = 'ADJUSTMENT_REJECTED',
12
+ ADJUSTMENT_UNAVAILABLE = 'ADJUSTMENT_UNAVAILABLE',
13
+ AUTHOR_NOT_ALLOWED = 'AUTHOR_NOT_ALLOWED',
14
+ COLLECTION_TENANT_MISSING = 'COLLECTION_TENANT_MISSING',
15
+ }
@@ -47,6 +47,8 @@ export * from './dtos/PrivateAuthorizeReconciliationAdjustmentRequest';
47
47
  export * from './dtos/PrivateAuthorizeReconciliationAdjustmentResponse';
48
48
 
49
49
  export * from './enums/TransactionProcessorCodesEnum';
50
+ export * from './enums/ReconciliationAdjustmentErrorCodeEnum';
51
+ export * from './constants/reconciliationAdjustmentErrorHttpStatus';
50
52
  export * from './enums/AsyncTxStatusEnum';
51
53
  export * from './enums/AppEnum';
52
54
  export * from './enums/TransactionInfoStatusEnum';
@@ -2,8 +2,8 @@ import { RECONCILIATION_FEED_ERROR_HTTP_STATUS } from '../../reconciliation/cons
2
2
  import { ReconciliationFeedErrorCodeEnum } from '../../reconciliation/enums/ReconciliationFeedErrorCodeEnum';
3
3
  import { TransferNoteErrorCodeEnum as C } from '../enums/TransferNoteErrorCodeEnum';
4
4
 
5
- /** Status HTTP de cada code: 400 request inválido · 404 no existe · 409 conflicto de estado · 422 regla de negocio. */
6
- export const TRANSFER_NOTE_ERROR_HTTP_STATUS: Readonly<Record<C, 400 | 404 | 409 | 422>> = {
5
+ /** Status HTTP de cada code: 400 request inválido · 404 no existe · 409 conflicto · 422 regla de negocio · 502 falló un externo. */
6
+ export const TRANSFER_NOTE_ERROR_HTTP_STATUS: Readonly<Record<C, 400 | 404 | 409 | 422 | 502>> = {
7
7
  [C.TRANSFER_NOTE_NOT_FOUND]: 404,
8
8
  [C.NOTE_NOT_DISPUTABLE]: 409,
9
9
  [C.NET_NOT_POSITIVE]: 422,
@@ -25,4 +25,11 @@ export const TRANSFER_NOTE_ERROR_HTTP_STATUS: Readonly<Record<C, 400 | 404 | 409
25
25
  [C.SOURCE_ITEM_NOT_FOUND]: 404,
26
26
  [C.TRANSFER_NOTE_ITEM_NOT_FOUND]: 404,
27
27
  [C.FEED_RECORD_NOT_FOUND]: RECONCILIATION_FEED_ERROR_HTTP_STATUS[ReconciliationFeedErrorCodeEnum.FEED_RECORD_NOT_FOUND],
28
+ [C.DISPUTE_ON_PAID_NOTE_PENDING_DECISION]: 409,
29
+ [C.ADJUSTMENT_KEY_CONFLICT]: 409,
30
+ [C.NOTICE_PUBLISH_FAILED]: 502,
31
+ [C.BANK_CALENDAR_UNAVAILABLE]: 502,
32
+ [C.CUTOFF_DISPATCH_FAILED]: 502,
33
+ [C.CONCURRENT_WRITE_CONFLICT]: 409,
34
+ [C.AUDIT_QUEUE_PUBLISH_FAILED]: 502,
28
35
  };
@@ -14,6 +14,8 @@ export interface TransferNoteItemFeedRecord extends ReconciliationFeedRecord {
14
14
  /** `recordId` en el feed del dueño del que salió el item. */
15
15
  sourceRecordId: string;
16
16
  includedAt: string;
17
+ /** itemId del item original que corrige un item de concepto ADJUSTMENT. */
18
+ adjustedItemId?: string;
17
19
  }
18
20
 
19
21
  /** Registro del feed TRANSFER_NOTE_SETTLEMENT: lo que una nota debe pagar y lo capturado; `recordId` y `matchKey` son el noteId. */
@@ -32,4 +34,6 @@ export interface TransferNoteSettlementFeedRecord extends ReconciliationFeedReco
32
34
  payeeClabe: string;
33
35
  paidAt?: string;
34
36
  paidAmountCents?: number;
37
+ /** CLABE destino del SPEI capturado (`TRANSFER_NOTE_CLABE_PATTERN`); el motor la compara contra `payeeClabe`. */
38
+ paidToClabe?: string;
35
39
  }
@@ -31,4 +31,14 @@ export enum TransferNoteErrorCodeEnum {
31
31
  TRANSFER_NOTE_ITEM_NOT_FOUND = 'TRANSFER_NOTE_ITEM_NOT_FOUND',
32
32
  /** Mismo code del feed genérico que implementa cada dueño. */
33
33
  FEED_RECORD_NOT_FOUND = ReconciliationFeedErrorCodeEnum.FEED_RECORD_NOT_FOUND,
34
+ /** La nota pagada ya tiene una objeción esperando decisión. */
35
+ DISPUTE_ON_PAID_NOTE_PENDING_DECISION = 'DISPUTE_ON_PAID_NOTE_PENDING_DECISION',
36
+ /** La misma llave de ajuste llegó con otro contenido. */
37
+ ADJUSTMENT_KEY_CONFLICT = 'ADJUSTMENT_KEY_CONFLICT',
38
+ NOTICE_PUBLISH_FAILED = 'NOTICE_PUBLISH_FAILED',
39
+ BANK_CALENDAR_UNAVAILABLE = 'BANK_CALENDAR_UNAVAILABLE',
40
+ CUTOFF_DISPATCH_FAILED = 'CUTOFF_DISPATCH_FAILED',
41
+ /** Otra escritura cambió el registro entre la lectura y el guardado. */
42
+ CONCURRENT_WRITE_CONFLICT = 'CONCURRENT_WRITE_CONFLICT',
43
+ AUDIT_QUEUE_PUBLISH_FAILED = 'AUDIT_QUEUE_PUBLISH_FAILED',
34
44
  }
@@ -0,0 +1,17 @@
1
+ import { CurrencyId } from '../../currency/enums/CurrencyId';
2
+
3
+ // `detail` de TransferNoteIssued; source `TRANSFER_NOTE_EVENTS_SOURCE`, detail-type `TRANSFER_NOTE_ISSUED`.
4
+ export class TransferNoteIssuedEventDetail {
5
+ /** Fijo por nota: un reenvío llega con el mismo id. */
6
+ eventId!: string;
7
+ tenantId!: string;
8
+ noteId!: string;
9
+ pairKey!: string;
10
+ isoWeek!: string;
11
+ netAmountCents!: number;
12
+ currency!: CurrencyId;
13
+ /** ISO 8601 de la emisión. */
14
+ issuedAt!: string;
15
+ /** ISO 8601 del vencimiento del SPEI. */
16
+ dueAt!: string;
17
+ }
@@ -5,6 +5,7 @@ export const TRANSFER_NOTE_EVENTS_SOURCE = 'fiado.transferNote';
5
5
 
6
6
  export enum TransferNoteEventDetailTypeEnum {
7
7
  TRANSFER_NOTE_RECONCILED = 'transferNote.TransferNoteReconciled',
8
+ TRANSFER_NOTE_ISSUED = 'transferNote.TransferNoteIssued',
8
9
  }
9
10
 
10
11
  // `detail` de TransferNoteReconciled; el motor recalcula con él el agregado de la semana del par.
@@ -43,3 +43,4 @@ export * from './dtos/responses/PrivateTransferNoteResponses';
43
43
 
44
44
  // Eventos
45
45
  export * from './events/TransferNoteReconciledEventDetail';
46
+ export * from './events/TransferNoteIssuedEventDetail';