@fiado/type-kit 3.616.0 → 3.618.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 (256) hide show
  1. package/_test_/unit/account/BankAccountMCSendTransfer.test.ts +43 -0
  2. package/_test_/unit/loanRetailAudit/m8AuditCatalog.test.ts +58 -0
  3. package/_test_/unit/reconciliation/reconciliationCatalogs.test.ts +126 -0
  4. package/_test_/unit/reconciliation/reconciliationRequests.test.ts +208 -0
  5. package/_test_/unit/reconciliation/reconciliationShapes.test.ts +74 -0
  6. package/_test_/unit/retailWizard/privateGetSale.test.ts +59 -0
  7. package/_test_/unit/transaction/transactionCreateRequestM8.test.ts +27 -0
  8. package/_test_/unit/transactionProcessor/reconciliationAdjustment.test.ts +63 -0
  9. package/_test_/unit/transferNote/transferNoteConfigAndPrivate.test.ts +202 -0
  10. package/_test_/unit/transferNote/transferNoteEventsAndFeeds.test.ts +112 -0
  11. package/_test_/unit/transferNote/transferNoteRequests.test.ts +138 -0
  12. package/bin/account/dtos/BankAccountMCSendTransferRequest.d.ts +8 -2
  13. package/bin/account/dtos/BankAccountMCSendTransferResponse.d.ts +3 -0
  14. package/bin/index.d.ts +2 -0
  15. package/bin/index.js +7 -1
  16. package/bin/loanRetailAudit/enums/AuditTrailActionEnum.d.ts +12 -1
  17. package/bin/loanRetailAudit/enums/AuditTrailActionEnum.js +12 -0
  18. package/bin/loanRetailAudit/enums/LoanAuditEntityTypeEnum.d.ts +5 -1
  19. package/bin/loanRetailAudit/enums/LoanAuditEntityTypeEnum.js +4 -0
  20. package/bin/reconciliation/constants/reconciliationErrorHttpStatus.d.ts +6 -0
  21. package/bin/reconciliation/constants/reconciliationErrorHttpStatus.js +23 -0
  22. package/bin/reconciliation/constants/reconciliationValidation.d.ts +8 -0
  23. package/bin/reconciliation/constants/reconciliationValidation.js +11 -0
  24. package/bin/reconciliation/dtos/ReconciliationDefinition.d.ts +42 -0
  25. package/bin/reconciliation/dtos/ReconciliationDefinition.js +2 -0
  26. package/bin/reconciliation/dtos/ReconciliationFeedRecord.d.ts +42 -0
  27. package/bin/reconciliation/dtos/ReconciliationFeedRecord.js +2 -0
  28. package/bin/reconciliation/dtos/ReconciliationItem.d.ts +77 -0
  29. package/bin/reconciliation/dtos/ReconciliationItem.js +2 -0
  30. package/bin/reconciliation/dtos/ReconciliationRun.d.ts +28 -0
  31. package/bin/reconciliation/dtos/ReconciliationRun.js +2 -0
  32. package/bin/reconciliation/dtos/requests/PrivateReconciliationRequests.d.ts +80 -0
  33. package/bin/reconciliation/dtos/requests/PrivateReconciliationRequests.js +215 -0
  34. package/bin/reconciliation/dtos/requests/ReconciliationActionRequests.d.ts +30 -0
  35. package/bin/reconciliation/dtos/requests/ReconciliationActionRequests.js +105 -0
  36. package/bin/reconciliation/dtos/requests/ReconciliationFeedRequests.d.ts +23 -0
  37. package/bin/reconciliation/dtos/requests/ReconciliationFeedRequests.js +71 -0
  38. package/bin/reconciliation/dtos/requests/ReconciliationQueries.d.ts +54 -0
  39. package/bin/reconciliation/dtos/requests/ReconciliationQueries.js +192 -0
  40. package/bin/reconciliation/dtos/requests/reconciliationRequestDecorators.d.ts +7 -0
  41. package/bin/reconciliation/dtos/requests/reconciliationRequestDecorators.js +39 -0
  42. package/bin/reconciliation/dtos/responses/PrivateReconciliationResponses.d.ts +13 -0
  43. package/bin/reconciliation/dtos/responses/PrivateReconciliationResponses.js +2 -0
  44. package/bin/reconciliation/dtos/responses/ReconciliationFeedResponses.d.ts +7 -0
  45. package/bin/reconciliation/dtos/responses/ReconciliationFeedResponses.js +2 -0
  46. package/bin/reconciliation/dtos/responses/ReconciliationResponses.d.ts +81 -0
  47. package/bin/reconciliation/dtos/responses/ReconciliationResponses.js +2 -0
  48. package/bin/reconciliation/enums/ReconciliationDefinitionStatusEnum.d.ts +6 -0
  49. package/bin/reconciliation/enums/ReconciliationDefinitionStatusEnum.js +10 -0
  50. package/bin/reconciliation/enums/ReconciliationErrorCodeEnum.d.ts +24 -0
  51. package/bin/reconciliation/enums/ReconciliationErrorCodeEnum.js +28 -0
  52. package/bin/reconciliation/enums/ReconciliationExportFormatEnum.d.ts +5 -0
  53. package/bin/reconciliation/enums/ReconciliationExportFormatEnum.js +9 -0
  54. package/bin/reconciliation/enums/ReconciliationFeedConceptEnum.d.ts +16 -0
  55. package/bin/reconciliation/enums/ReconciliationFeedConceptEnum.js +20 -0
  56. package/bin/reconciliation/enums/ReconciliationFeedErrorCodeEnum.d.ts +4 -0
  57. package/bin/reconciliation/enums/ReconciliationFeedErrorCodeEnum.js +8 -0
  58. package/bin/reconciliation/enums/ReconciliationFeedOwnerEnum.d.ts +9 -0
  59. package/bin/reconciliation/enums/ReconciliationFeedOwnerEnum.js +13 -0
  60. package/bin/reconciliation/enums/ReconciliationItemStateEnum.d.ts +23 -0
  61. package/bin/reconciliation/enums/ReconciliationItemStateEnum.js +27 -0
  62. package/bin/reconciliation/enums/ReconciliationLayerEnum.d.ts +8 -0
  63. package/bin/reconciliation/enums/ReconciliationLayerEnum.js +12 -0
  64. package/bin/reconciliation/enums/ReconciliationPeriodEnum.d.ts +6 -0
  65. package/bin/reconciliation/enums/ReconciliationPeriodEnum.js +10 -0
  66. package/bin/reconciliation/enums/ReconciliationResolutionArchiveReasonEnum.d.ts +6 -0
  67. package/bin/reconciliation/enums/ReconciliationResolutionArchiveReasonEnum.js +10 -0
  68. package/bin/reconciliation/enums/ReconciliationResolutionStatusEnum.d.ts +9 -0
  69. package/bin/reconciliation/enums/ReconciliationResolutionStatusEnum.js +13 -0
  70. package/bin/reconciliation/enums/ReconciliationResolutionTypeEnum.d.ts +7 -0
  71. package/bin/reconciliation/enums/ReconciliationResolutionTypeEnum.js +11 -0
  72. package/bin/reconciliation/enums/ReconciliationRuleTypeEnum.d.ts +7 -0
  73. package/bin/reconciliation/enums/ReconciliationRuleTypeEnum.js +11 -0
  74. package/bin/reconciliation/enums/ReconciliationRunStatusEnum.d.ts +6 -0
  75. package/bin/reconciliation/enums/ReconciliationRunStatusEnum.js +10 -0
  76. package/bin/reconciliation/enums/ReconciliationSourceRoleEnum.d.ts +6 -0
  77. package/bin/reconciliation/enums/ReconciliationSourceRoleEnum.js +10 -0
  78. package/bin/reconciliation/events/ReconciliationItemMatchedEventDetail.d.ts +22 -0
  79. package/bin/reconciliation/events/ReconciliationItemMatchedEventDetail.js +14 -0
  80. package/bin/reconciliation/index.d.ts +29 -0
  81. package/bin/reconciliation/index.js +51 -0
  82. package/bin/retailWizard/catalog/privateSaleDetailFields.d.ts +3 -0
  83. package/bin/retailWizard/catalog/privateSaleDetailFields.js +16 -0
  84. package/bin/retailWizard/constants/retailWizardValidation.d.ts +2 -0
  85. package/bin/retailWizard/constants/retailWizardValidation.js +5 -0
  86. package/bin/retailWizard/dtos/requests/PrivateGetSaleRequest.d.ts +8 -0
  87. package/bin/retailWizard/dtos/requests/PrivateGetSaleRequest.js +42 -0
  88. package/bin/retailWizard/dtos/responses/PrivateGetSaleResponse.d.ts +16 -0
  89. package/bin/retailWizard/dtos/responses/PrivateGetSaleResponse.js +2 -0
  90. package/bin/retailWizard/index.d.ts +4 -0
  91. package/bin/retailWizard/index.js +5 -0
  92. package/bin/transaction/dtos/TransactionCreateRequest.d.ts +4 -0
  93. package/bin/transaction/dtos/TransactionCreateRequest.js +12 -0
  94. package/bin/transactionProcessor/dtos/PrivateAuthorizeReconciliationAdjustmentRequest.d.ts +30 -0
  95. package/bin/transactionProcessor/dtos/PrivateAuthorizeReconciliationAdjustmentRequest.js +107 -0
  96. package/bin/transactionProcessor/dtos/PrivateAuthorizeReconciliationAdjustmentResponse.d.ts +7 -0
  97. package/bin/transactionProcessor/dtos/PrivateAuthorizeReconciliationAdjustmentResponse.js +2 -0
  98. package/bin/transactionProcessor/dtos/ReconciliationAdjustmentReference.d.ts +5 -0
  99. package/bin/transactionProcessor/dtos/ReconciliationAdjustmentReference.js +30 -0
  100. package/bin/transactionProcessor/index.d.ts +3 -0
  101. package/bin/transactionProcessor/index.js +3 -0
  102. package/bin/transferNote/constants/transferNoteDefaultFees.d.ts +5 -0
  103. package/bin/transferNote/constants/transferNoteDefaultFees.js +9 -0
  104. package/bin/transferNote/constants/transferNoteErrorHttpStatus.d.ts +3 -0
  105. package/bin/transferNote/constants/transferNoteErrorHttpStatus.js +30 -0
  106. package/bin/transferNote/constants/transferNoteValidation.d.ts +7 -0
  107. package/bin/transferNote/constants/transferNoteValidation.js +10 -0
  108. package/bin/transferNote/dtos/TransferNote.d.ts +81 -0
  109. package/bin/transferNote/dtos/TransferNote.js +2 -0
  110. package/bin/transferNote/dtos/TransferNoteConfigRecords.d.ts +50 -0
  111. package/bin/transferNote/dtos/TransferNoteConfigRecords.js +2 -0
  112. package/bin/transferNote/dtos/TransferNoteFeedRecords.d.ts +38 -0
  113. package/bin/transferNote/dtos/TransferNoteFeedRecords.js +2 -0
  114. package/bin/transferNote/dtos/TransferNoteHistoryEntry.d.ts +16 -0
  115. package/bin/transferNote/dtos/TransferNoteHistoryEntry.js +2 -0
  116. package/bin/transferNote/dtos/TransferNoteItem.d.ts +36 -0
  117. package/bin/transferNote/dtos/TransferNoteItem.js +2 -0
  118. package/bin/transferNote/dtos/TransferNoteSignedUrl.d.ts +5 -0
  119. package/bin/transferNote/dtos/TransferNoteSignedUrl.js +2 -0
  120. package/bin/transferNote/dtos/requests/PrivateTransferNoteRequests.d.ts +105 -0
  121. package/bin/transferNote/dtos/requests/PrivateTransferNoteRequests.js +256 -0
  122. package/bin/transferNote/dtos/requests/RetailerTransferNoteRequests.d.ts +20 -0
  123. package/bin/transferNote/dtos/requests/RetailerTransferNoteRequests.js +47 -0
  124. package/bin/transferNote/dtos/requests/TransferNoteActionRequests.d.ts +33 -0
  125. package/bin/transferNote/dtos/requests/TransferNoteActionRequests.js +104 -0
  126. package/bin/transferNote/dtos/requests/TransferNoteConfigRequests.d.ts +38 -0
  127. package/bin/transferNote/dtos/requests/TransferNoteConfigRequests.js +152 -0
  128. package/bin/transferNote/dtos/requests/TransferNoteQueries.d.ts +29 -0
  129. package/bin/transferNote/dtos/requests/TransferNoteQueries.js +107 -0
  130. package/bin/transferNote/dtos/requests/transferNoteRequestDecorators.d.ts +14 -0
  131. package/bin/transferNote/dtos/requests/transferNoteRequestDecorators.js +73 -0
  132. package/bin/transferNote/dtos/responses/PrivateTransferNoteResponses.d.ts +26 -0
  133. package/bin/transferNote/dtos/responses/PrivateTransferNoteResponses.js +2 -0
  134. package/bin/transferNote/dtos/responses/RetailerTransferNoteResponses.d.ts +13 -0
  135. package/bin/transferNote/dtos/responses/RetailerTransferNoteResponses.js +2 -0
  136. package/bin/transferNote/dtos/responses/TransferNoteConfigResponses.d.ts +6 -0
  137. package/bin/transferNote/dtos/responses/TransferNoteConfigResponses.js +2 -0
  138. package/bin/transferNote/dtos/responses/TransferNoteResponses.d.ts +44 -0
  139. package/bin/transferNote/dtos/responses/TransferNoteResponses.js +2 -0
  140. package/bin/transferNote/enums/TransferNoteConceptEnum.d.ts +16 -0
  141. package/bin/transferNote/enums/TransferNoteConceptEnum.js +20 -0
  142. package/bin/transferNote/enums/TransferNoteConceptSignEnum.d.ts +5 -0
  143. package/bin/transferNote/enums/TransferNoteConceptSignEnum.js +9 -0
  144. package/bin/transferNote/enums/TransferNoteConfigRecordTypeEnum.d.ts +7 -0
  145. package/bin/transferNote/enums/TransferNoteConfigRecordTypeEnum.js +11 -0
  146. package/bin/transferNote/enums/TransferNoteConfirmationSourceEnum.d.ts +5 -0
  147. package/bin/transferNote/enums/TransferNoteConfirmationSourceEnum.js +9 -0
  148. package/bin/transferNote/enums/TransferNoteConfirmationTypeEnum.d.ts +5 -0
  149. package/bin/transferNote/enums/TransferNoteConfirmationTypeEnum.js +9 -0
  150. package/bin/transferNote/enums/TransferNoteDisputeCategoryEnum.d.ts +7 -0
  151. package/bin/transferNote/enums/TransferNoteDisputeCategoryEnum.js +11 -0
  152. package/bin/transferNote/enums/TransferNoteDisputeDecisionEnum.d.ts +5 -0
  153. package/bin/transferNote/enums/TransferNoteDisputeDecisionEnum.js +9 -0
  154. package/bin/transferNote/enums/TransferNoteErrorCodeEnum.d.ts +32 -0
  155. package/bin/transferNote/enums/TransferNoteErrorCodeEnum.js +36 -0
  156. package/bin/transferNote/enums/TransferNoteFeedConceptEnum.d.ts +5 -0
  157. package/bin/transferNote/enums/TransferNoteFeedConceptEnum.js +9 -0
  158. package/bin/transferNote/enums/TransferNoteHistoryActionEnum.d.ts +13 -0
  159. package/bin/transferNote/enums/TransferNoteHistoryActionEnum.js +17 -0
  160. package/bin/transferNote/enums/TransferNoteIssueOriginEnum.d.ts +6 -0
  161. package/bin/transferNote/enums/TransferNoteIssueOriginEnum.js +10 -0
  162. package/bin/transferNote/enums/TransferNoteItemStatusEnum.d.ts +5 -0
  163. package/bin/transferNote/enums/TransferNoteItemStatusEnum.js +9 -0
  164. package/bin/transferNote/enums/TransferNotePartyTypeEnum.d.ts +6 -0
  165. package/bin/transferNote/enums/TransferNotePartyTypeEnum.js +10 -0
  166. package/bin/transferNote/enums/TransferNoteStatusEnum.d.ts +9 -0
  167. package/bin/transferNote/enums/TransferNoteStatusEnum.js +13 -0
  168. package/bin/transferNote/events/TransferNoteReconciledEventDetail.d.ts +17 -0
  169. package/bin/transferNote/events/TransferNoteReconciledEventDetail.js +13 -0
  170. package/bin/transferNote/index.d.ts +34 -0
  171. package/bin/transferNote/index.js +56 -0
  172. package/bin/transferNote/validators/IsTransferNoteSelectionConstraint.d.ts +6 -0
  173. package/bin/transferNote/validators/IsTransferNoteSelectionConstraint.js +28 -0
  174. package/package.json +1 -1
  175. package/src/account/dtos/BankAccountMCSendTransferRequest.ts +8 -2
  176. package/src/account/dtos/BankAccountMCSendTransferResponse.ts +3 -0
  177. package/src/index.ts +8 -0
  178. package/src/loanRetailAudit/enums/AuditTrailActionEnum.ts +12 -0
  179. package/src/loanRetailAudit/enums/LoanAuditEntityTypeEnum.ts +4 -0
  180. package/src/reconciliation/constants/reconciliationErrorHttpStatus.ts +22 -0
  181. package/src/reconciliation/constants/reconciliationValidation.ts +11 -0
  182. package/src/reconciliation/dtos/ReconciliationDefinition.ts +44 -0
  183. package/src/reconciliation/dtos/ReconciliationFeedRecord.ts +44 -0
  184. package/src/reconciliation/dtos/ReconciliationItem.ts +84 -0
  185. package/src/reconciliation/dtos/ReconciliationRun.ts +31 -0
  186. package/src/reconciliation/dtos/requests/PrivateReconciliationRequests.ts +166 -0
  187. package/src/reconciliation/dtos/requests/ReconciliationActionRequests.ts +77 -0
  188. package/src/reconciliation/dtos/requests/ReconciliationFeedRequests.ts +47 -0
  189. package/src/reconciliation/dtos/requests/ReconciliationQueries.ts +148 -0
  190. package/src/reconciliation/dtos/requests/reconciliationRequestDecorators.ts +32 -0
  191. package/src/reconciliation/dtos/responses/PrivateReconciliationResponses.ts +27 -0
  192. package/src/reconciliation/dtos/responses/ReconciliationFeedResponses.ts +9 -0
  193. package/src/reconciliation/dtos/responses/ReconciliationResponses.ts +101 -0
  194. package/src/reconciliation/enums/ReconciliationDefinitionStatusEnum.ts +6 -0
  195. package/src/reconciliation/enums/ReconciliationErrorCodeEnum.ts +24 -0
  196. package/src/reconciliation/enums/ReconciliationExportFormatEnum.ts +5 -0
  197. package/src/reconciliation/enums/ReconciliationFeedConceptEnum.ts +19 -0
  198. package/src/reconciliation/enums/ReconciliationFeedErrorCodeEnum.ts +4 -0
  199. package/src/reconciliation/enums/ReconciliationFeedOwnerEnum.ts +9 -0
  200. package/src/reconciliation/enums/ReconciliationItemStateEnum.ts +23 -0
  201. package/src/reconciliation/enums/ReconciliationLayerEnum.ts +8 -0
  202. package/src/reconciliation/enums/ReconciliationPeriodEnum.ts +6 -0
  203. package/src/reconciliation/enums/ReconciliationResolutionArchiveReasonEnum.ts +6 -0
  204. package/src/reconciliation/enums/ReconciliationResolutionStatusEnum.ts +9 -0
  205. package/src/reconciliation/enums/ReconciliationResolutionTypeEnum.ts +7 -0
  206. package/src/reconciliation/enums/ReconciliationRuleTypeEnum.ts +7 -0
  207. package/src/reconciliation/enums/ReconciliationRunStatusEnum.ts +6 -0
  208. package/src/reconciliation/enums/ReconciliationSourceRoleEnum.ts +6 -0
  209. package/src/reconciliation/events/ReconciliationItemMatchedEventDetail.ts +25 -0
  210. package/src/reconciliation/index.ts +40 -0
  211. package/src/retailWizard/catalog/privateSaleDetailFields.ts +15 -0
  212. package/src/retailWizard/constants/retailWizardValidation.ts +2 -0
  213. package/src/retailWizard/dtos/requests/PrivateGetSaleRequest.ts +26 -0
  214. package/src/retailWizard/dtos/responses/PrivateGetSaleResponse.ts +16 -0
  215. package/src/retailWizard/index.ts +6 -0
  216. package/src/transaction/dtos/TransactionCreateRequest.ts +12 -0
  217. package/src/transactionProcessor/dtos/PrivateAuthorizeReconciliationAdjustmentRequest.ts +101 -0
  218. package/src/transactionProcessor/dtos/PrivateAuthorizeReconciliationAdjustmentResponse.ts +7 -0
  219. package/src/transactionProcessor/dtos/ReconciliationAdjustmentReference.ts +15 -0
  220. package/src/transactionProcessor/index.ts +3 -0
  221. package/src/transferNote/constants/transferNoteDefaultFees.ts +7 -0
  222. package/src/transferNote/constants/transferNoteErrorHttpStatus.ts +28 -0
  223. package/src/transferNote/constants/transferNoteValidation.ts +10 -0
  224. package/src/transferNote/dtos/TransferNote.ts +89 -0
  225. package/src/transferNote/dtos/TransferNoteConfigRecords.ts +55 -0
  226. package/src/transferNote/dtos/TransferNoteFeedRecords.ts +35 -0
  227. package/src/transferNote/dtos/TransferNoteHistoryEntry.ts +17 -0
  228. package/src/transferNote/dtos/TransferNoteItem.ts +38 -0
  229. package/src/transferNote/dtos/TransferNoteSignedUrl.ts +5 -0
  230. package/src/transferNote/dtos/requests/PrivateTransferNoteRequests.ts +195 -0
  231. package/src/transferNote/dtos/requests/RetailerTransferNoteRequests.ts +28 -0
  232. package/src/transferNote/dtos/requests/TransferNoteActionRequests.ts +72 -0
  233. package/src/transferNote/dtos/requests/TransferNoteConfigRequests.ts +115 -0
  234. package/src/transferNote/dtos/requests/TransferNoteQueries.ts +78 -0
  235. package/src/transferNote/dtos/requests/transferNoteRequestDecorators.ts +72 -0
  236. package/src/transferNote/dtos/responses/PrivateTransferNoteResponses.ts +36 -0
  237. package/src/transferNote/dtos/responses/RetailerTransferNoteResponses.ts +19 -0
  238. package/src/transferNote/dtos/responses/TransferNoteConfigResponses.ts +8 -0
  239. package/src/transferNote/dtos/responses/TransferNoteResponses.ts +51 -0
  240. package/src/transferNote/enums/TransferNoteConceptEnum.ts +16 -0
  241. package/src/transferNote/enums/TransferNoteConceptSignEnum.ts +5 -0
  242. package/src/transferNote/enums/TransferNoteConfigRecordTypeEnum.ts +7 -0
  243. package/src/transferNote/enums/TransferNoteConfirmationSourceEnum.ts +5 -0
  244. package/src/transferNote/enums/TransferNoteConfirmationTypeEnum.ts +5 -0
  245. package/src/transferNote/enums/TransferNoteDisputeCategoryEnum.ts +7 -0
  246. package/src/transferNote/enums/TransferNoteDisputeDecisionEnum.ts +5 -0
  247. package/src/transferNote/enums/TransferNoteErrorCodeEnum.ts +34 -0
  248. package/src/transferNote/enums/TransferNoteFeedConceptEnum.ts +5 -0
  249. package/src/transferNote/enums/TransferNoteHistoryActionEnum.ts +13 -0
  250. package/src/transferNote/enums/TransferNoteIssueOriginEnum.ts +6 -0
  251. package/src/transferNote/enums/TransferNoteItemStatusEnum.ts +5 -0
  252. package/src/transferNote/enums/TransferNotePartyTypeEnum.ts +6 -0
  253. package/src/transferNote/enums/TransferNoteStatusEnum.ts +9 -0
  254. package/src/transferNote/events/TransferNoteReconciledEventDetail.ts +22 -0
  255. package/src/transferNote/index.ts +45 -0
  256. package/src/transferNote/validators/IsTransferNoteSelectionConstraint.ts +16 -0
@@ -0,0 +1,202 @@
1
+ import 'reflect-metadata';
2
+ import { plainToInstance } from 'class-transformer';
3
+ import { validateSync } from 'class-validator';
4
+ import * as TransferNote from '../../../src/transferNote';
5
+ import { CurrencyId } from '../../../src/currency/enums/CurrencyId';
6
+
7
+ const {
8
+ UpdateTransferNoteConfigRequest,
9
+ TransferNoteConfigRecordTypeEnum,
10
+ TransferNotePartyTypeEnum,
11
+ TransferNoteConceptEnum,
12
+ TransferNoteConceptSignEnum,
13
+ PrivateIssueTransferNoteRequest,
14
+ PrivateCaptureTransferNoteSpeiRequest,
15
+ PrivateGetTransferNoteQuery,
16
+ PrivateListTransferNotesQuery,
17
+ PrivateConfirmTransferNoteSettlementRequest,
18
+ PrivateRunTransferNoteCutoffRequest,
19
+ PrivateCreateTransferNoteAdjustmentRequest,
20
+ PrivateGetTransferNoteItemBySourceQuery,
21
+ TransferNoteFeedConceptEnum,
22
+ TransferNoteErrorCodeEnum,
23
+ TRANSFER_NOTE_ERROR_HTTP_STATUS,
24
+ TRANSFER_NOTE_DEFAULT_FEE_CENTS,
25
+ } = TransferNote;
26
+
27
+ function errorsOf<T extends object>(cls: new () => T, payload: Record<string, unknown>): string[] {
28
+ const dto = plainToInstance(cls, payload, { excludeExtraneousValues: true });
29
+ return validateSync(dto).map((e) => e.property);
30
+ }
31
+
32
+ const service = { tenantId: 'surekeep', author: 'conciliacion-dashboard' };
33
+ const caller = { ...service, actor: 'operador@fsa.mx' };
34
+ const longReason = 'emisión manual por corte fallido del lunes';
35
+
36
+ describe('UpdateTransferNoteConfigRequest', () => {
37
+ it('acepta un registro de cada tipo con su sub-shape', () => {
38
+ expect(
39
+ errorsOf(UpdateTransferNoteConfigRequest, {
40
+ recordType: TransferNoteConfigRecordTypeEnum.TENANT,
41
+ tenant: { activeFrom: '2026-11-02', currency: CurrencyId.MXN },
42
+ }),
43
+ ).toEqual([]);
44
+ expect(
45
+ errorsOf(UpdateTransferNoteConfigRequest, {
46
+ recordType: TransferNoteConfigRecordTypeEnum.PARTY,
47
+ party: {
48
+ partyType: TransferNotePartyTypeEnum.RETAILER,
49
+ displayName: 'Tienda Centro',
50
+ retailerId: 'r-1',
51
+ clabe: '012180001234567891',
52
+ contactEmail: 'pagos@tienda.mx',
53
+ },
54
+ }),
55
+ ).toEqual([]);
56
+ expect(
57
+ errorsOf(UpdateTransferNoteConfigRequest, {
58
+ recordType: TransferNoteConfigRecordTypeEnum.CONCEPT,
59
+ concept: {
60
+ payerPartyType: TransferNotePartyTypeEnum.SOFOM,
61
+ payeePartyType: TransferNotePartyTypeEnum.RETAILER,
62
+ sign: TransferNoteConceptSignEnum.POSITIVE,
63
+ activeFrom: '2026-11-02',
64
+ rateCents: 5000,
65
+ },
66
+ }),
67
+ ).toEqual([]);
68
+ expect(
69
+ errorsOf(UpdateTransferNoteConfigRequest, {
70
+ recordType: TransferNoteConfigRecordTypeEnum.PAIR,
71
+ pair: { payerPartyId: 'fsa', payeePartyId: 'sk', activeFrom: '2026-11-02' },
72
+ }),
73
+ ).toEqual([]);
74
+ });
75
+
76
+ it('rechaza tipo desconocido y registro sin su sub-shape', () => {
77
+ expect(errorsOf(UpdateTransferNoteConfigRequest, { recordType: 'GLOBAL' })).toContain('recordType');
78
+ expect(errorsOf(UpdateTransferNoteConfigRequest, { recordType: TransferNoteConfigRecordTypeEnum.PAIR })).toContain('pair');
79
+ });
80
+
81
+ it('valida el sub-shape: CLABE de 18 dígitos, correo y retailerId de un retailer', () => {
82
+ const errors = errorsOf(UpdateTransferNoteConfigRequest, {
83
+ recordType: TransferNoteConfigRecordTypeEnum.PARTY,
84
+ party: { partyType: TransferNotePartyTypeEnum.RETAILER, displayName: 'Tienda', clabe: '123', contactEmail: 'x' },
85
+ });
86
+ expect(errors).toContain('party');
87
+ });
88
+
89
+ it('no tiene campo de comisión por cobranza', () => {
90
+ const dto = plainToInstance(
91
+ UpdateTransferNoteConfigRequest,
92
+ { recordType: 'TENANT', tenant: { activeFrom: '2026-11-02', currency: 'MXN', collectionFeeCents: 100 } },
93
+ { excludeExtraneousValues: true },
94
+ );
95
+ expect(dto.tenant).not.toHaveProperty('collectionFeeCents');
96
+ });
97
+ });
98
+
99
+ describe('espejo privado', () => {
100
+ it('agrega tenantId, author y actor a la versión pública', () => {
101
+ expect(errorsOf(PrivateIssueTransferNoteRequest, { ...caller, pairKey: 'p-1', isoWeek: '2026-W43', reason: longReason })).toEqual([]);
102
+ expect(errorsOf(PrivateIssueTransferNoteRequest, { pairKey: 'p-1', isoWeek: '2026-W43', reason: longReason })).toEqual(
103
+ expect.arrayContaining(['tenantId', 'author', 'actor']),
104
+ );
105
+ expect(errorsOf(PrivateIssueTransferNoteRequest, { ...caller, actor: 'operador', pairKey: 'p-1', isoWeek: '2026-W43', reason: longReason })).toContain('actor');
106
+ expect(
107
+ errorsOf(PrivateCaptureTransferNoteSpeiRequest, {
108
+ ...caller,
109
+ trackingKey: 'K1',
110
+ paidAt: '2026-10-29T15:00:00.000Z',
111
+ amountCents: 100,
112
+ }),
113
+ ).toEqual([]);
114
+ });
115
+
116
+ it('las lecturas privadas también exigen author y actor', () => {
117
+ expect(errorsOf(PrivateGetTransferNoteQuery, caller)).toEqual([]);
118
+ expect(errorsOf(PrivateGetTransferNoteQuery, { tenantId: 'surekeep' })).toEqual(expect.arrayContaining(['author', 'actor']));
119
+ expect(errorsOf(PrivateListTransferNotesQuery, { ...caller, limit: '20' })).toEqual([]);
120
+ });
121
+
122
+ it('confirm-settlement pide el caller con el email del operador', () => {
123
+ expect(errorsOf(PrivateConfirmTransferNoteSettlementRequest, caller)).toEqual([]);
124
+ expect(errorsOf(PrivateConfirmTransferNoteSettlementRequest, service)).toContain('actor');
125
+ });
126
+
127
+ it('el corte manual pide tenant, semana y author', () => {
128
+ expect(errorsOf(PrivateRunTransferNoteCutoffRequest, { ...service, isoWeek: '2026-W43' })).toEqual([]);
129
+ expect(errorsOf(PrivateRunTransferNoteCutoffRequest, { ...service, isoWeek: 'W43' })).toContain('isoWeek');
130
+ expect(Object.keys(plainToInstance(PrivateRunTransferNoteCutoffRequest, caller, { excludeExtraneousValues: true }))).not.toContain('actor');
131
+ });
132
+
133
+ it('el ajuste es idempotente por adjustmentKey y lleva monto entero distinto de cero', () => {
134
+ const adjustment = {
135
+ ...service,
136
+ adjustmentKey: 'surekeep#def-1#item-9',
137
+ sourceItemId: 'item-9',
138
+ amountCents: -1500,
139
+ reason: 'cobro duplicado',
140
+ };
141
+ expect(errorsOf(PrivateCreateTransferNoteAdjustmentRequest, adjustment)).toEqual([]);
142
+ expect(errorsOf(PrivateCreateTransferNoteAdjustmentRequest, { ...adjustment, adjustmentKey: '', amountCents: 0 })).toEqual(
143
+ expect.arrayContaining(['adjustmentKey', 'amountCents']),
144
+ );
145
+ });
146
+
147
+ it('by-source pide author, concepto del item y registro de origen, sin actor', () => {
148
+ expect(
149
+ errorsOf(PrivateGetTransferNoteItemBySourceQuery, {
150
+ tenantId: 'surekeep',
151
+ author: 'reconciliation-engine-business',
152
+ concept: TransferNoteConceptEnum.ORIGINATION_BONUS,
153
+ sourceRecordId: 'contract-1',
154
+ }),
155
+ ).toEqual([]);
156
+ expect(errorsOf(PrivateGetTransferNoteItemBySourceQuery, { tenantId: 'surekeep', concept: 'SIGNED_CREDIT' })).toEqual(
157
+ expect.arrayContaining(['author', 'concept', 'sourceRecordId']),
158
+ );
159
+ expect(new PrivateGetTransferNoteItemBySourceQuery()).toBeInstanceOf(TransferNote.PrivateTransferNoteCaller);
160
+ expect(new PrivateGetTransferNoteItemBySourceQuery()).not.toBeInstanceOf(TransferNote.PrivateTransferNoteOperatorCaller);
161
+ });
162
+ });
163
+
164
+ describe('catálogos', () => {
165
+ it('conceptos de REQ-48 y feeds de notas', () => {
166
+ expect(Object.values(TransferNoteConceptEnum)).toEqual(
167
+ expect.arrayContaining([
168
+ 'INSTALLMENT_COLLECTION',
169
+ 'CREDIT_PROMOTION_REIMBURSEMENT',
170
+ 'SALE_PROMOTION_REIMBURSEMENT',
171
+ 'DEVICE_PAYMENT',
172
+ 'DOWN_PAYMENT',
173
+ 'ORIGINATION_BONUS',
174
+ 'ACCOUNT_OPENING',
175
+ 'ADJUSTMENT',
176
+ ]),
177
+ );
178
+ expect(Object.values(TransferNoteFeedConceptEnum)).toEqual(['TRANSFER_NOTE_ITEM', 'TRANSFER_NOTE_SETTLEMENT']);
179
+ });
180
+
181
+ it('los bonos de retail-customer viajan en SALE_PROMOTION_REIMBURSEMENT', () => {
182
+ expect(Object.values(TransferNoteConceptEnum)).not.toContain('WELCOME_BONUS_REIMBURSEMENT');
183
+ expect(Object.values(TransferNoteConceptEnum)).not.toContain('REFERRAL_BONUS_REIMBURSEMENT');
184
+ expect(Object.values(TransferNoteConceptEnum)).toContain('SALE_COMMISSION');
185
+ });
186
+
187
+ it('tarifas por omisión de REQ-52 en centavos', () => {
188
+ expect(TRANSFER_NOTE_DEFAULT_FEE_CENTS).toEqual({
189
+ [TransferNoteConceptEnum.ORIGINATION_BONUS]: 5000,
190
+ [TransferNoteConceptEnum.ACCOUNT_OPENING]: 2500,
191
+ });
192
+ });
193
+
194
+ it('cada code tiene un status del catálogo cerrado', () => {
195
+ for (const code of Object.values(TransferNoteErrorCodeEnum)) {
196
+ expect([400, 404, 409, 422, 502]).toContain(TRANSFER_NOTE_ERROR_HTTP_STATUS[code]);
197
+ }
198
+ expect(TRANSFER_NOTE_ERROR_HTTP_STATUS[TransferNoteErrorCodeEnum.WEEK_ALREADY_CUT]).toBe(409);
199
+ expect(TRANSFER_NOTE_ERROR_HTTP_STATUS[TransferNoteErrorCodeEnum.AUTHOR_NOT_ALLOWED]).toBe(422);
200
+ expect(TRANSFER_NOTE_ERROR_HTTP_STATUS[TransferNoteErrorCodeEnum.TRANSFER_NOTE_ITEM_NOT_FOUND]).toBe(404);
201
+ });
202
+ });
@@ -0,0 +1,112 @@
1
+ import 'reflect-metadata';
2
+ import { readdirSync, readFileSync, statSync } from 'fs';
3
+ import { join } from 'path';
4
+ import * as Reconciliation from '../../../src/reconciliation';
5
+ import * as TransferNote from '../../../src/transferNote';
6
+ import { CurrencyId } from '../../../src/currency/enums/CurrencyId';
7
+
8
+ const { ReconciliationFeedConceptEnum, ReconciliationFeedErrorCodeEnum, RECONCILIATION_FEED_ERROR_HTTP_STATUS } = Reconciliation;
9
+ const { TransferNoteConceptEnum, TransferNotePartyTypeEnum, TransferNoteStatusEnum, TransferNoteErrorCodeEnum } = TransferNote;
10
+
11
+ // Lo que lee el cliente genérico de feeds del motor, sin saber de qué dueño viene.
12
+ const readGeneric = (record: Reconciliation.ReconciliationFeedRecord): string =>
13
+ `${record.concept}#${record.matchKey}#${record.amountCents}#${record.refs.reversesRecordId ?? ''}`;
14
+
15
+ const sourceFiles = (dir: string): string[] =>
16
+ readdirSync(dir).flatMap((name) => {
17
+ const path = join(dir, name);
18
+ return statSync(path).isDirectory() ? sourceFiles(path) : [path];
19
+ });
20
+
21
+ describe('eventos de transferNote', () => {
22
+ it('TransferNoteReconciled vive en transferNote con su source y detailType', () => {
23
+ expect(TransferNote.TRANSFER_NOTE_EVENTS_SOURCE).toBe('fiado.transferNote');
24
+ expect(TransferNote.TransferNoteEventDetailTypeEnum.TRANSFER_NOTE_RECONCILED).toBe('transferNote.TransferNoteReconciled');
25
+ const detail: TransferNote.TransferNoteReconciledEventDetail = {
26
+ eventId: 'surekeep#n-1#RECONCILED',
27
+ tenantId: 'surekeep',
28
+ noteId: 'n-1',
29
+ pairKey: 'FSA#SK',
30
+ isoWeek: '2026-W44',
31
+ netAmountCents: 125000,
32
+ currency: CurrencyId.MXN,
33
+ reconciledAt: '2026-10-29T10:00:00.000Z',
34
+ };
35
+ expect(detail.noteId).toBe('n-1');
36
+ });
37
+ });
38
+
39
+ describe('registros de feed de notas con la forma base', () => {
40
+ it('un item de nota se lee con el cliente genérico y su reversa va en refs', () => {
41
+ const reversal: TransferNote.TransferNoteItemFeedRecord = {
42
+ recordId: 'it-2',
43
+ tenantId: 'surekeep',
44
+ concept: ReconciliationFeedConceptEnum.TRANSFER_NOTE_ITEM,
45
+ matchKey: 'att-1',
46
+ amountCents: -15000,
47
+ currency: CurrencyId.MXN,
48
+ occurredAt: '2026-10-20T15:00:00.000Z',
49
+ feedDay: '2026-10-27',
50
+ refs: { noteId: 'n-1', itemId: 'it-2', attemptId: 'att-1', creditId: 'cr-1', reversesRecordId: 'it-1' },
51
+ itemConcept: TransferNoteConceptEnum.INSTALLMENT_COLLECTION,
52
+ pairKey: 'FSA#SK',
53
+ sourceRecordId: 'pay-1#rev',
54
+ includedAt: '2026-10-27T06:01:00.000Z',
55
+ };
56
+ expect(readGeneric(reversal)).toBe('TRANSFER_NOTE_ITEM#att-1#-15000#it-1');
57
+ expect(Object.keys(reversal)).not.toContain('reversedItemId');
58
+ expect(Object.keys(reversal)).not.toContain('noteId');
59
+ });
60
+
61
+ it('la liquidación de una nota se lee con el cliente genérico', () => {
62
+ const settlement: TransferNote.TransferNoteSettlementFeedRecord = {
63
+ recordId: 'n-1',
64
+ tenantId: 'surekeep',
65
+ concept: ReconciliationFeedConceptEnum.TRANSFER_NOTE_SETTLEMENT,
66
+ matchKey: 'n-1',
67
+ amountCents: 125000,
68
+ currency: CurrencyId.MXN,
69
+ occurredAt: '2026-10-27T06:01:00.000Z',
70
+ feedDay: '2026-10-27',
71
+ counterpartyType: TransferNotePartyTypeEnum.RETAILER,
72
+ refs: { noteId: 'n-1', trackingKey: 'BBVA123', retailerId: 'r-1' },
73
+ pairKey: 'FSA#SK',
74
+ payerPartyType: TransferNotePartyTypeEnum.GATEWAY,
75
+ payerPartyId: 'fsa',
76
+ payeePartyType: TransferNotePartyTypeEnum.RETAILER,
77
+ payeePartyId: 'r-1',
78
+ status: TransferNoteStatusEnum.SENT,
79
+ dueAt: '2026-10-29T06:00:00.000Z',
80
+ payeeClabe: '012180001234567890',
81
+ };
82
+ expect(readGeneric(settlement)).toBe('TRANSFER_NOTE_SETTLEMENT#n-1#125000#');
83
+ expect(Object.keys(settlement)).not.toContain('netAmountCents');
84
+ expect(Object.keys(settlement)).not.toContain('issuedAt');
85
+ });
86
+
87
+ it('los refs de notas no admiten llaves fuera de la lista cerrada', () => {
88
+ const refs: TransferNote.TransferNoteItemFeedRecord['refs'] = {
89
+ noteId: 'n-1',
90
+ itemId: 'it-1',
91
+ // @ts-expect-error sourceRecordId no está en la lista cerrada de refs
92
+ sourceRecordId: 'pay-1',
93
+ };
94
+ expect(refs.noteId).toBe('n-1');
95
+ });
96
+ });
97
+
98
+ describe('FEED_RECORD_NOT_FOUND con una sola fuente', () => {
99
+ it('transferNote reusa el code y el status del feed genérico', () => {
100
+ expect(TransferNoteErrorCodeEnum.FEED_RECORD_NOT_FOUND).toBe(ReconciliationFeedErrorCodeEnum.FEED_RECORD_NOT_FOUND);
101
+ expect(TransferNote.TRANSFER_NOTE_ERROR_HTTP_STATUS[TransferNoteErrorCodeEnum.FEED_RECORD_NOT_FOUND]).toBe(
102
+ RECONCILIATION_FEED_ERROR_HTTP_STATUS[ReconciliationFeedErrorCodeEnum.FEED_RECORD_NOT_FOUND],
103
+ );
104
+ });
105
+
106
+ it('el string literal solo se declara en reconciliation', () => {
107
+ const declaring = [...sourceFiles(join(__dirname, '../../../src/transferNote')), ...sourceFiles(join(__dirname, '../../../src/reconciliation'))]
108
+ .filter((file) => readFileSync(file, 'utf8').includes("'FEED_RECORD_NOT_FOUND'"))
109
+ .map((file) => file.replace(/.*\/src\//, 'src/'));
110
+ expect(declaring).toEqual(['src/reconciliation/enums/ReconciliationFeedErrorCodeEnum.ts']);
111
+ });
112
+ });
@@ -0,0 +1,138 @@
1
+ import 'reflect-metadata';
2
+ import { plainToInstance } from 'class-transformer';
3
+ import { validateSync } from 'class-validator';
4
+ import * as TransferNote from '../../../src/transferNote';
5
+ import { TransferNote as FromRoot } from '../../../src';
6
+
7
+ const {
8
+ IssueTransferNoteRequest,
9
+ PreviewTransferNoteRequest,
10
+ CaptureTransferNoteSpeiRequest,
11
+ CaptureRetailerTransferNoteSpeiRequest,
12
+ RevertTransferNoteSpeiRequest,
13
+ CancelTransferNoteRequest,
14
+ DisputeTransferNoteRequest,
15
+ ResolveTransferNoteDisputeRequest,
16
+ ListTransferNotesQuery,
17
+ ListRetailerTransferNotesQuery,
18
+ ListTransferNotePoolQuery,
19
+ ListTransferNoteItemsQuery,
20
+ TransferNoteDisputeCategoryEnum,
21
+ TransferNoteDisputeDecisionEnum,
22
+ TransferNoteStatusEnum,
23
+ TransferNoteItemStatusEnum,
24
+ TransferNoteConceptEnum,
25
+ } = TransferNote;
26
+
27
+ function errorsOf<T extends object>(cls: new () => T, payload: Record<string, unknown>): string[] {
28
+ const dto = plainToInstance(cls, payload, { excludeExtraneousValues: true });
29
+ return validateSync(dto).map((e) => e.property);
30
+ }
31
+
32
+ const longReason = 'el corte omitió dos cobros de la semana';
33
+
34
+ describe('export del dominio', () => {
35
+ it('se exporta desde el index raíz', () => {
36
+ expect(FromRoot.IssueTransferNoteRequest).toBe(IssueTransferNoteRequest);
37
+ expect(FromRoot.TransferNoteStatusEnum.ISSUED).toBe('ISSUED');
38
+ });
39
+ });
40
+
41
+ describe('IssueTransferNoteRequest', () => {
42
+ it('acepta selección de items o par + semana, con razón de 20+', () => {
43
+ expect(errorsOf(IssueTransferNoteRequest, { pairKey: 'p-1', itemIds: ['i-1'], reason: longReason })).toEqual([]);
44
+ expect(errorsOf(IssueTransferNoteRequest, { pairKey: 'p-1', isoWeek: '2026-W43', reason: longReason })).toEqual([]);
45
+ });
46
+
47
+ it('exige exactamente uno de itemIds o isoWeek', () => {
48
+ expect(errorsOf(IssueTransferNoteRequest, { pairKey: 'p-1', reason: longReason })).toContain('itemIds');
49
+ expect(
50
+ errorsOf(IssueTransferNoteRequest, { pairKey: 'p-1', itemIds: ['i-1'], isoWeek: '2026-W43', reason: longReason }),
51
+ ).toContain('itemIds');
52
+ });
53
+
54
+ it('rechaza razón corta, semana mal formada y selección vacía', () => {
55
+ const errors = errorsOf(IssueTransferNoteRequest, { pairKey: '', isoWeek: '2026-43', reason: 'corta' });
56
+ expect(errors).toEqual(expect.arrayContaining(['pairKey', 'isoWeek', 'reason']));
57
+ expect(errorsOf(IssueTransferNoteRequest, { pairKey: 'p-1', itemIds: [], reason: longReason })).toContain('itemIds');
58
+ });
59
+
60
+ it('cuenta la razón sin espacios de relleno', () => {
61
+ expect(errorsOf(IssueTransferNoteRequest, { pairKey: 'p-1', isoWeek: '2026-W43', reason: ` corta${' '.repeat(20)}` })).toContain(
62
+ 'reason',
63
+ );
64
+ });
65
+ });
66
+
67
+ describe('PreviewTransferNoteRequest', () => {
68
+ it('no pide razón y aplica la misma selección', () => {
69
+ expect(errorsOf(PreviewTransferNoteRequest, { pairKey: 'p-1', isoWeek: '2026-W01' })).toEqual([]);
70
+ expect(errorsOf(PreviewTransferNoteRequest, { pairKey: 'p-1' })).toContain('itemIds');
71
+ });
72
+ });
73
+
74
+ describe('captura y reversa de SPEI', () => {
75
+ const spei = { trackingKey: 'BNET01002610290000001', paidAt: '2026-10-29T15:00:00.000Z', amountCents: 125000 };
76
+
77
+ it('acepta clave, fecha ISO y monto entero positivo', () => {
78
+ expect(errorsOf(CaptureTransferNoteSpeiRequest, spei)).toEqual([]);
79
+ expect(errorsOf(CaptureRetailerTransferNoteSpeiRequest, spei)).toEqual([]);
80
+ });
81
+
82
+ it('rechaza clave vacía, fecha inválida y monto no entero o no positivo', () => {
83
+ const errors = errorsOf(CaptureTransferNoteSpeiRequest, { trackingKey: '', paidAt: 'hoy', amountCents: 10.5 });
84
+ expect(errors).toEqual(expect.arrayContaining(['trackingKey', 'paidAt', 'amountCents']));
85
+ expect(errorsOf(CaptureTransferNoteSpeiRequest, { ...spei, amountCents: 0 })).toContain('amountCents');
86
+ });
87
+
88
+ it('la reversa y la cancelación exigen razón', () => {
89
+ expect(errorsOf(RevertTransferNoteSpeiRequest, { reason: 'SPEI duplicado' })).toEqual([]);
90
+ expect(errorsOf(RevertTransferNoteSpeiRequest, { reason: ' ' })).toContain('reason');
91
+ expect(errorsOf(CancelTransferNoteRequest, {})).toContain('reason');
92
+ });
93
+ });
94
+
95
+ describe('objeción', () => {
96
+ it('acepta las 4 categorías con razón de 20+', () => {
97
+ for (const category of Object.values(TransferNoteDisputeCategoryEnum)) {
98
+ expect(errorsOf(DisputeTransferNoteRequest, { category, reason: longReason })).toEqual([]);
99
+ }
100
+ expect(Object.values(TransferNoteDisputeCategoryEnum)).toHaveLength(4);
101
+ });
102
+
103
+ it('rechaza categoría desconocida y razón corta', () => {
104
+ expect(errorsOf(DisputeTransferNoteRequest, { category: 'LATE', reason: 'mal' })).toEqual(
105
+ expect.arrayContaining(['category', 'reason']),
106
+ );
107
+ });
108
+
109
+ it('la resolución acepta o rechaza con razón', () => {
110
+ expect(errorsOf(ResolveTransferNoteDisputeRequest, { decision: TransferNoteDisputeDecisionEnum.ACCEPT, reason: 'faltaban items' })).toEqual([]);
111
+ expect(errorsOf(ResolveTransferNoteDisputeRequest, { decision: 'MAYBE' })).toEqual(expect.arrayContaining(['decision', 'reason']));
112
+ });
113
+ });
114
+
115
+ describe('queries de listado', () => {
116
+ it('acepta filtros, límite y cursor', () => {
117
+ const query = { status: TransferNoteStatusEnum.SENT, isoWeek: '2026-W43', limit: '50', nextToken: 'abc' };
118
+ expect(errorsOf(ListTransferNotesQuery, query)).toEqual([]);
119
+ expect(errorsOf(ListRetailerTransferNotesQuery, query)).toEqual([]);
120
+ expect(
121
+ errorsOf(ListTransferNotePoolQuery, {
122
+ pairKey: 'p-1',
123
+ status: TransferNoteItemStatusEnum.POOLED,
124
+ concept: TransferNoteConceptEnum.INSTALLMENT_COLLECTION,
125
+ from: '2026-10-19',
126
+ to: '2026-10-25',
127
+ }),
128
+ ).toEqual([]);
129
+ expect(errorsOf(ListTransferNoteItemsQuery, { limit: '10' })).toEqual([]);
130
+ });
131
+
132
+ it('rechaza estado desconocido y límite fuera de rango', () => {
133
+ expect(errorsOf(ListTransferNotesQuery, { status: 'PAID', limit: '500' })).toEqual(expect.arrayContaining(['status', 'limit']));
134
+ expect(errorsOf(ListTransferNotePoolQuery, { status: TransferNoteStatusEnum.ISSUED, from: 'ayer' })).toEqual(
135
+ expect.arrayContaining(['status', 'from']),
136
+ );
137
+ });
138
+ });
@@ -1,10 +1,16 @@
1
1
  export declare class BankAccountMCSendTransferRequest {
2
2
  transactionNumber: string;
3
3
  amount: number;
4
- beneficiaryEmail: string;
5
- beneficiaryPhoneNumber: string;
4
+ /** Intención por email/teléfono: obligatorios salvo que venga beneficiaryExternalAccountId. */
5
+ beneficiaryEmail?: string;
6
+ beneficiaryPhoneNumber?: string;
6
7
  beneficiaryName?: string;
7
8
  beneficiaryLastName?: string;
8
9
  concept?: string;
9
10
  externalAccountId?: string;
11
+ /**
12
+ * Push directo a una tarjeta del mismo programa (CARD_PUSH_FUNDS): cd_ de la tarjeta del
13
+ * beneficiario, usuario de Fiado. Si viene, CP acredita en la misma llamada sin intención.
14
+ */
15
+ beneficiaryExternalAccountId?: string;
10
16
  }
@@ -1,6 +1,9 @@
1
1
  import { TransactionStatusEnum } from "../../transaction";
2
2
  export declare class BankAccountMCSendTransferResponse {
3
+ /** Ids tx_ de los movimientos contables en CP, unidos por "|". */
3
4
  externalTransactionId: string;
5
+ /** Id mt_ de la network transfer en CP: sirve para consultar, cancelar o auditar el envío. */
6
+ externalTransferId?: string;
4
7
  transactionStatus: TransactionStatusEnum;
5
8
  transactionNumber: string;
6
9
  }
package/bin/index.d.ts CHANGED
@@ -134,3 +134,5 @@ export * as Meetings from './meetings';
134
134
  export * as LoanRetailAudit from './loanRetailAudit';
135
135
  export * as TaskManager from './task-manager-business';
136
136
  export * as CustomerMessages from './customerMessages';
137
+ export * as TransferNote from './transferNote';
138
+ export * as Reconciliation from './reconciliation';
package/bin/index.js CHANGED
@@ -38,7 +38,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
39
  exports.CentralPayments = exports.Helpdesk = exports.FiadoApiResponse = exports.Auth = exports.LegalDocumentsBusiness = exports.Role = exports.STPAccount = exports.RiskProfile = exports.FraudPreventionEngine = exports.BBVARst = exports.Stp = exports.BenefitCenter = exports.FiadoIncFavorite = exports.BankAccount = exports.P2pContact = exports.CreditContract = exports.Contract = exports.ProductCatalog = exports.ContactInfo = exports.TransactionAnalytics = exports.Transaction = exports.TransactionProcessor = exports.GenericMessage = exports.EventBridgeMessage = exports.SessionActivity = exports.MessageMoments = exports.NotificationMessages = exports.ServicePayment = exports.Header = exports.Identity = exports.UserTags = exports.Group = exports.File = exports.ExchangeRate = exports.Directory = exports.Currency = exports.Country = exports.Card = exports.Authentication = exports.AppContent = exports.App = exports.Offices = exports.Places = exports.Address = exports.Beneficiary = exports.Activity = exports.Biometrics = exports.MetamapConnector = exports.Account = exports.Crypto = void 0;
40
40
  exports.RetailCatalog = exports.RetailCommission = exports.RetailOrg = exports.EmailVerification = exports.NetworkConnector = exports.Modelias = exports.TotpSecurity = exports.Passport = exports.WalletFunding = exports.Remittance = exports.PlatformRbac = exports.CognitoBackofficeConnector = exports.WhatsappConnector = exports.TwilioConnector = exports.MessagesConnector = exports.Mdm = exports.MilestoneBusiness = exports.GsfConnector = exports.CirculoCredito = exports.CreditStatements = exports.Sentry = exports.AiEngine = exports.Funnel = exports.TeamsConnector = exports.PlatformErrorEvents = exports.CustomerFile = exports.CreditBackoffice = exports.CreditDashboard = exports.CreditEngine = exports.Credit = exports.ComissionBusiness = exports.UsMarketGrowthBusiness = exports.ReferralBusiness = exports.ZendeskMessaging = exports.NotificationWS = exports.Event = exports.PayrollBusiness = exports.Cnbv = exports.DirectorySetting = exports.InvoiceCollector = exports.Collector = exports.Pricelist = exports.Company = exports.Services = exports.AccountIssuanceBusiness = exports.AppSelectionData = exports.Device = exports.Observations = exports.IssuanceBusiness = exports.Blacklist = void 0;
41
- exports.CustomerMessages = exports.TaskManager = exports.LoanRetailAudit = exports.Meetings = exports.Rules = exports.PdfRender = exports.DatalakeReports = exports.RewardsEligibility = exports.Rewards = exports.DynamicForm = exports.FileStorage = exports.MoneyTransfer = exports.RetailLoan = exports.Membership = exports.WebhookBusiness = exports.PeopleBusiness = exports.UserConfirmations = exports.Collection = exports.Shipping = exports.PhoneSales = exports.Onboarding = exports.Kyc = exports.LoanScoring = exports.LoanCredit = exports.LoanCollectorAssignment = exports.LoanOfferings = exports.Shortlink = exports.LoanConfig = exports.DatalakeQuery = exports.RetailIntegration = exports.RetailPromotions = exports.RetailWizard = exports.RetailCustomer = exports.RetailCards = void 0;
41
+ exports.Reconciliation = exports.TransferNote = exports.CustomerMessages = exports.TaskManager = exports.LoanRetailAudit = exports.Meetings = exports.Rules = exports.PdfRender = exports.DatalakeReports = exports.RewardsEligibility = exports.Rewards = exports.DynamicForm = exports.FileStorage = exports.MoneyTransfer = exports.RetailLoan = exports.Membership = exports.WebhookBusiness = exports.PeopleBusiness = exports.UserConfirmations = exports.Collection = exports.Shipping = exports.PhoneSales = exports.Onboarding = exports.Kyc = exports.LoanScoring = exports.LoanCredit = exports.LoanCollectorAssignment = exports.LoanOfferings = exports.Shortlink = exports.LoanConfig = exports.DatalakeQuery = exports.RetailIntegration = exports.RetailPromotions = exports.RetailWizard = exports.RetailCustomer = exports.RetailCards = void 0;
42
42
  exports.Crypto = __importStar(require("./crypto"));
43
43
  exports.Account = __importStar(require("./account"));
44
44
  exports.MetamapConnector = __importStar(require("./metamapConnector"));
@@ -263,3 +263,9 @@ exports.LoanRetailAudit = __importStar(require("./loanRetailAudit"));
263
263
  exports.TaskManager = __importStar(require("./task-manager-business"));
264
264
  // CustomerMessages: historial de mensajes del cliente por venta o crédito, contador de cobranza y envío manual.
265
265
  exports.CustomerMessages = __importStar(require("./customerMessages"));
266
+ // TransferNote: contrato de transfer-note-business (notas de transferencia entre partes de un tenant):
267
+ // endpoints públicos, rutas de retailer, espejo privado con author, ajustes y registros de sus feeds.
268
+ exports.TransferNote = __importStar(require("./transferNote"));
269
+ // Reconciliation: contrato de reconciliation-engine-business (definiciones, corridas, partidas y resoluciones),
270
+ // su espejo privado con author, el feed genérico que implementa cada dueño y sus eventos.
271
+ exports.Reconciliation = __importStar(require("./reconciliation"));
@@ -35,5 +35,16 @@ export declare enum AuditTrailActionEnum {
35
35
  ADJUST = "ADJUST",
36
36
  PAUSE = "PAUSE",
37
37
  RESUME = "RESUME",
38
- EXPIRE = "EXPIRE"
38
+ EXPIRE = "EXPIRE",
39
+ TRANSFER_NOTE_ISSUE = "TRANSFER_NOTE_ISSUE",
40
+ TRANSFER_NOTE_SPEI_CAPTURE = "TRANSFER_NOTE_SPEI_CAPTURE",
41
+ TRANSFER_NOTE_SPEI_REVERT = "TRANSFER_NOTE_SPEI_REVERT",
42
+ TRANSFER_NOTE_RECEPTION_CONFIRM = "TRANSFER_NOTE_RECEPTION_CONFIRM",
43
+ TRANSFER_NOTE_SETTLEMENT_CONFIRM = "TRANSFER_NOTE_SETTLEMENT_CONFIRM",
44
+ TRANSFER_NOTE_CANCEL = "TRANSFER_NOTE_CANCEL",
45
+ TRANSFER_NOTE_DISPUTE = "TRANSFER_NOTE_DISPUTE",
46
+ TRANSFER_NOTE_DISPUTE_RESOLVE = "TRANSFER_NOTE_DISPUTE_RESOLVE",
47
+ RECONCILIATION_ITEM_RESOLVE = "RECONCILIATION_ITEM_RESOLVE",
48
+ RECONCILIATION_ITEM_REACTIVATE = "RECONCILIATION_ITEM_REACTIVATE",
49
+ RECONCILIATION_ITEM_NOTE = "RECONCILIATION_ITEM_NOTE"
39
50
  }
@@ -40,4 +40,16 @@ var AuditTrailActionEnum;
40
40
  AuditTrailActionEnum["PAUSE"] = "PAUSE";
41
41
  AuditTrailActionEnum["RESUME"] = "RESUME";
42
42
  AuditTrailActionEnum["EXPIRE"] = "EXPIRE";
43
+ // M8: la configuración de notas y de definiciones reusa UPDATE.
44
+ AuditTrailActionEnum["TRANSFER_NOTE_ISSUE"] = "TRANSFER_NOTE_ISSUE";
45
+ AuditTrailActionEnum["TRANSFER_NOTE_SPEI_CAPTURE"] = "TRANSFER_NOTE_SPEI_CAPTURE";
46
+ AuditTrailActionEnum["TRANSFER_NOTE_SPEI_REVERT"] = "TRANSFER_NOTE_SPEI_REVERT";
47
+ AuditTrailActionEnum["TRANSFER_NOTE_RECEPTION_CONFIRM"] = "TRANSFER_NOTE_RECEPTION_CONFIRM";
48
+ AuditTrailActionEnum["TRANSFER_NOTE_SETTLEMENT_CONFIRM"] = "TRANSFER_NOTE_SETTLEMENT_CONFIRM";
49
+ AuditTrailActionEnum["TRANSFER_NOTE_CANCEL"] = "TRANSFER_NOTE_CANCEL";
50
+ AuditTrailActionEnum["TRANSFER_NOTE_DISPUTE"] = "TRANSFER_NOTE_DISPUTE";
51
+ AuditTrailActionEnum["TRANSFER_NOTE_DISPUTE_RESOLVE"] = "TRANSFER_NOTE_DISPUTE_RESOLVE";
52
+ AuditTrailActionEnum["RECONCILIATION_ITEM_RESOLVE"] = "RECONCILIATION_ITEM_RESOLVE";
53
+ AuditTrailActionEnum["RECONCILIATION_ITEM_REACTIVATE"] = "RECONCILIATION_ITEM_REACTIVATE";
54
+ AuditTrailActionEnum["RECONCILIATION_ITEM_NOTE"] = "RECONCILIATION_ITEM_NOTE";
43
55
  })(AuditTrailActionEnum || (exports.AuditTrailActionEnum = AuditTrailActionEnum = {}));
@@ -8,5 +8,9 @@ export declare enum LoanAuditEntityTypeEnum {
8
8
  SEGMENT = "SEGMENT",
9
9
  LOAN_PARAMETER = "LoanParameter",
10
10
  LOAN_ASSIGNMENT_RULE = "LoanAssignmentRule",
11
- LOAN_COLLECTOR_ASSIGNMENT = "LoanCollectorAssignment"
11
+ LOAN_COLLECTOR_ASSIGNMENT = "LoanCollectorAssignment",
12
+ TRANSFER_NOTE = "TRANSFER_NOTE",
13
+ TRANSFER_NOTE_CONFIG = "TRANSFER_NOTE_CONFIG",
14
+ RECONCILIATION_DEFINITION = "RECONCILIATION_DEFINITION",
15
+ RECONCILIATION_ITEM = "RECONCILIATION_ITEM"
12
16
  }
@@ -13,4 +13,8 @@ var LoanAuditEntityTypeEnum;
13
13
  LoanAuditEntityTypeEnum["LOAN_PARAMETER"] = "LoanParameter";
14
14
  LoanAuditEntityTypeEnum["LOAN_ASSIGNMENT_RULE"] = "LoanAssignmentRule";
15
15
  LoanAuditEntityTypeEnum["LOAN_COLLECTOR_ASSIGNMENT"] = "LoanCollectorAssignment";
16
+ LoanAuditEntityTypeEnum["TRANSFER_NOTE"] = "TRANSFER_NOTE";
17
+ LoanAuditEntityTypeEnum["TRANSFER_NOTE_CONFIG"] = "TRANSFER_NOTE_CONFIG";
18
+ LoanAuditEntityTypeEnum["RECONCILIATION_DEFINITION"] = "RECONCILIATION_DEFINITION";
19
+ LoanAuditEntityTypeEnum["RECONCILIATION_ITEM"] = "RECONCILIATION_ITEM";
16
20
  })(LoanAuditEntityTypeEnum || (exports.LoanAuditEntityTypeEnum = LoanAuditEntityTypeEnum = {}));
@@ -0,0 +1,6 @@
1
+ import { ReconciliationErrorCodeEnum as C } from '../enums/ReconciliationErrorCodeEnum';
2
+ import { ReconciliationFeedErrorCodeEnum } from '../enums/ReconciliationFeedErrorCodeEnum';
3
+ /** Status HTTP de cada code: 404 no existe · 409 conflicto de estado · 422 regla de negocio · 502 falló el dueño del dinero. */
4
+ export declare const RECONCILIATION_ERROR_HTTP_STATUS: Readonly<Record<C, 404 | 409 | 422 | 502>>;
5
+ /** Status HTTP de los codes del feed genérico. */
6
+ export declare const RECONCILIATION_FEED_ERROR_HTTP_STATUS: Readonly<Record<ReconciliationFeedErrorCodeEnum, 404>>;
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RECONCILIATION_FEED_ERROR_HTTP_STATUS = exports.RECONCILIATION_ERROR_HTTP_STATUS = void 0;
4
+ const ReconciliationErrorCodeEnum_1 = require("../enums/ReconciliationErrorCodeEnum");
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. */
7
+ exports.RECONCILIATION_ERROR_HTTP_STATUS = {
8
+ [ReconciliationErrorCodeEnum_1.ReconciliationErrorCodeEnum.DEFINITION_NOT_FOUND]: 404,
9
+ [ReconciliationErrorCodeEnum_1.ReconciliationErrorCodeEnum.RUN_IN_PROGRESS]: 409,
10
+ [ReconciliationErrorCodeEnum_1.ReconciliationErrorCodeEnum.ITEM_NOT_FOUND]: 404,
11
+ [ReconciliationErrorCodeEnum_1.ReconciliationErrorCodeEnum.ITEM_ALREADY_RESOLVED]: 409,
12
+ [ReconciliationErrorCodeEnum_1.ReconciliationErrorCodeEnum.ADJUSTMENT_IN_PROGRESS]: 409,
13
+ [ReconciliationErrorCodeEnum_1.ReconciliationErrorCodeEnum.ADJUSTMENT_UNDER_EXECUTED]: 422,
14
+ [ReconciliationErrorCodeEnum_1.ReconciliationErrorCodeEnum.ADJUSTMENT_NOT_ALLOWED]: 422,
15
+ [ReconciliationErrorCodeEnum_1.ReconciliationErrorCodeEnum.ADJUSTMENT_REJECTED]: 422,
16
+ [ReconciliationErrorCodeEnum_1.ReconciliationErrorCodeEnum.ADJUSTMENT_UNAVAILABLE]: 502,
17
+ [ReconciliationErrorCodeEnum_1.ReconciliationErrorCodeEnum.ITEM_ADJUSTED]: 409,
18
+ [ReconciliationErrorCodeEnum_1.ReconciliationErrorCodeEnum.AUTHOR_NOT_ALLOWED]: 422,
19
+ };
20
+ /** Status HTTP de los codes del feed genérico. */
21
+ exports.RECONCILIATION_FEED_ERROR_HTTP_STATUS = {
22
+ [ReconciliationFeedErrorCodeEnum_1.ReconciliationFeedErrorCodeEnum.FEED_RECORD_NOT_FOUND]: 404,
23
+ };
@@ -0,0 +1,8 @@
1
+ /** Periodo de una corrida: día `YYYY-MM-DD`, semana ISO `YYYY-Www` o mes `YYYY-MM`. */
2
+ export declare const RECONCILIATION_PERIOD_KEY_PATTERN: RegExp;
3
+ /** Mes `YYYY-MM`. */
4
+ export declare const RECONCILIATION_MONTH_PATTERN: RegExp;
5
+ /** Largo mínimo de una nota de investigación. */
6
+ export declare const RECONCILIATION_MIN_NOTE_LENGTH = 10;
7
+ /** Registros por página de un feed de dueño. */
8
+ export declare const RECONCILIATION_FEED_PAGE_SIZE = 500;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RECONCILIATION_FEED_PAGE_SIZE = exports.RECONCILIATION_MIN_NOTE_LENGTH = exports.RECONCILIATION_MONTH_PATTERN = exports.RECONCILIATION_PERIOD_KEY_PATTERN = void 0;
4
+ /** Periodo de una corrida: día `YYYY-MM-DD`, semana ISO `YYYY-Www` o mes `YYYY-MM`. */
5
+ exports.RECONCILIATION_PERIOD_KEY_PATTERN = /^\d{4}-((0[1-9]|1[0-2])(-(0[1-9]|[12]\d|3[01]))?|W(0[1-9]|[1-4]\d|5[0-3]))$/;
6
+ /** Mes `YYYY-MM`. */
7
+ exports.RECONCILIATION_MONTH_PATTERN = /^\d{4}-(0[1-9]|1[0-2])$/;
8
+ /** Largo mínimo de una nota de investigación. */
9
+ exports.RECONCILIATION_MIN_NOTE_LENGTH = 10;
10
+ /** Registros por página de un feed de dueño. */
11
+ exports.RECONCILIATION_FEED_PAGE_SIZE = 500;