@artu-ai/compliance-sdk 0.9.1 → 0.9.2

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 (205) hide show
  1. package/dist/errors/api.d.ts.map +1 -1
  2. package/dist/errors/base.d.ts.map +1 -1
  3. package/dist/errors/index.d.ts.map +1 -1
  4. package/dist/errors/upload.d.ts.map +1 -1
  5. package/dist/errors/validation.d.ts.map +1 -1
  6. package/dist/exports/base.d.ts.map +1 -1
  7. package/dist/exports/index.d.ts.map +1 -1
  8. package/dist/exports/mexico/actividad-vulnerable/avi.d.ts.map +1 -1
  9. package/dist/exports/mexico/actividad-vulnerable/jys.d.ts.map +1 -1
  10. package/dist/exports/mexico/actividad-vulnerable/mjr.d.ts.map +1 -1
  11. package/dist/exports/mexico/actividad-vulnerable/tsc.d.ts.map +1 -1
  12. package/dist/exports/mexico/cnbv/transmisor.d.ts +211 -0
  13. package/dist/exports/mexico/cnbv/transmisor.d.ts.map +1 -0
  14. package/dist/exports/mexico/cnbv/transmisor.js +100 -0
  15. package/dist/exports/mexico/index.d.ts +1 -0
  16. package/dist/exports/mexico/index.d.ts.map +1 -1
  17. package/dist/exports/mexico/index.js +4 -0
  18. package/dist/models/Address.d.ts.map +1 -1
  19. package/dist/models/Alert.d.ts.map +1 -1
  20. package/dist/models/AlertItem.d.ts.map +1 -1
  21. package/dist/models/BankAccount.d.ts.map +1 -1
  22. package/dist/models/Client.d.ts +11 -1
  23. package/dist/models/Client.d.ts.map +1 -1
  24. package/dist/models/Client.js +14 -0
  25. package/dist/models/ContactMethod.d.ts.map +1 -1
  26. package/dist/models/Document.d.ts.map +1 -1
  27. package/dist/models/LinkedClient.d.ts.map +1 -1
  28. package/dist/models/Transaction.d.ts.map +1 -1
  29. package/dist/models/base.d.ts.map +1 -1
  30. package/dist/models/index.d.ts +1 -0
  31. package/dist/models/index.d.ts.map +1 -1
  32. package/dist/models/index.js +3 -0
  33. package/dist/models/mex/MexAddress.d.ts.map +1 -1
  34. package/dist/models/mex/MexAlert.d.ts.map +1 -1
  35. package/dist/models/mex/MexAlertItem.d.ts.map +1 -1
  36. package/dist/models/mex/MexBankAccount.d.ts.map +1 -1
  37. package/dist/models/mex/MexClient.d.ts +8 -0
  38. package/dist/models/mex/MexClient.d.ts.map +1 -1
  39. package/dist/models/mex/MexClient.js +18 -0
  40. package/dist/models/mex/MexDocument.d.ts.map +1 -1
  41. package/dist/models/mex/MexTransaction.d.ts.map +1 -1
  42. package/dist/models/mex/actividad-vulnerable/MexActividadVulnerableAlert.d.ts.map +1 -1
  43. package/dist/models/mex/actividad-vulnerable/MexActividadVulnerableAlertItem.d.ts.map +1 -1
  44. package/dist/models/mex/actividad-vulnerable/MexActividadVulnerableClient.d.ts.map +1 -1
  45. package/dist/models/mex/actividad-vulnerable/MexActividadVulnerableTransaction.d.ts.map +1 -1
  46. package/dist/models/mex/actividad-vulnerable/avi/MexAVIAlert.d.ts.map +1 -1
  47. package/dist/models/mex/actividad-vulnerable/avi/MexAVIAlertItem.d.ts.map +1 -1
  48. package/dist/models/mex/actividad-vulnerable/avi/MexAVIClient.d.ts.map +1 -1
  49. package/dist/models/mex/actividad-vulnerable/avi/MexAVITransaction.d.ts.map +1 -1
  50. package/dist/models/mex/actividad-vulnerable/index.d.ts.map +1 -1
  51. package/dist/models/mex/actividad-vulnerable/jys/MexJYSAlert.d.ts.map +1 -1
  52. package/dist/models/mex/actividad-vulnerable/jys/MexJYSAlertItem.d.ts.map +1 -1
  53. package/dist/models/mex/actividad-vulnerable/jys/MexJYSClient.d.ts.map +1 -1
  54. package/dist/models/mex/actividad-vulnerable/jys/MexJYSTransaction.d.ts.map +1 -1
  55. package/dist/models/mex/actividad-vulnerable/mjr/MexMJRAlert.d.ts.map +1 -1
  56. package/dist/models/mex/actividad-vulnerable/mjr/MexMJRAlertItem.d.ts.map +1 -1
  57. package/dist/models/mex/actividad-vulnerable/mjr/MexMJRClient.d.ts.map +1 -1
  58. package/dist/models/mex/actividad-vulnerable/mjr/MexMJRTransaction.d.ts.map +1 -1
  59. package/dist/models/mex/actividad-vulnerable/tsc/MexTSCAlert.d.ts.map +1 -1
  60. package/dist/models/mex/actividad-vulnerable/tsc/MexTSCAlertItem.d.ts.map +1 -1
  61. package/dist/models/mex/actividad-vulnerable/tsc/MexTSCClient.d.ts.map +1 -1
  62. package/dist/models/mex/actividad-vulnerable/tsc/MexTSCTransaction.d.ts.map +1 -1
  63. package/dist/models/mex/cnbv/index.d.ts +5 -0
  64. package/dist/models/mex/cnbv/index.d.ts.map +1 -0
  65. package/dist/models/mex/cnbv/index.js +4 -0
  66. package/dist/models/mex/cnbv/transmisor/MexTransmisorAlert.d.ts +79 -0
  67. package/dist/models/mex/cnbv/transmisor/MexTransmisorAlert.d.ts.map +1 -0
  68. package/dist/models/mex/cnbv/transmisor/MexTransmisorAlert.js +95 -0
  69. package/dist/models/mex/cnbv/transmisor/MexTransmisorAlertItem.d.ts +55 -0
  70. package/dist/models/mex/cnbv/transmisor/MexTransmisorAlertItem.d.ts.map +1 -0
  71. package/dist/models/mex/cnbv/transmisor/MexTransmisorAlertItem.js +63 -0
  72. package/dist/models/mex/cnbv/transmisor/MexTransmisorClient.d.ts +50 -0
  73. package/dist/models/mex/cnbv/transmisor/MexTransmisorClient.d.ts.map +1 -0
  74. package/dist/models/mex/cnbv/transmisor/MexTransmisorClient.js +71 -0
  75. package/dist/models/mex/cnbv/transmisor/MexTransmisorTransaction.d.ts +50 -0
  76. package/dist/models/mex/cnbv/transmisor/MexTransmisorTransaction.d.ts.map +1 -0
  77. package/dist/models/mex/cnbv/transmisor/MexTransmisorTransaction.js +70 -0
  78. package/dist/models/mex/cnbv/transmisor/index.d.ts +8 -0
  79. package/dist/models/mex/cnbv/transmisor/index.d.ts.map +1 -0
  80. package/dist/models/mex/cnbv/transmisor/index.js +7 -0
  81. package/dist/models/mex/index.d.ts +1 -0
  82. package/dist/models/mex/index.d.ts.map +1 -1
  83. package/dist/models/mex/index.js +2 -0
  84. package/dist/models/types.d.ts.map +1 -1
  85. package/dist/namespaces/mexico/actividad-vulnerable/avi/index.d.ts.map +1 -1
  86. package/dist/namespaces/mexico/actividad-vulnerable/index.d.ts.map +1 -1
  87. package/dist/namespaces/mexico/actividad-vulnerable/jys/index.d.ts.map +1 -1
  88. package/dist/namespaces/mexico/actividad-vulnerable/tsc/index.d.ts.map +1 -1
  89. package/dist/namespaces/mexico/cnbv/index.d.ts +151 -0
  90. package/dist/namespaces/mexico/cnbv/index.d.ts.map +1 -0
  91. package/dist/namespaces/mexico/cnbv/index.js +24 -0
  92. package/dist/namespaces/mexico/cnbv/transmisor/index.d.ts +220 -0
  93. package/dist/namespaces/mexico/cnbv/transmisor/index.d.ts.map +1 -0
  94. package/dist/namespaces/mexico/cnbv/transmisor/index.js +40 -0
  95. package/dist/namespaces/mexico/index.d.ts +233 -1
  96. package/dist/namespaces/mexico/index.d.ts.map +1 -1
  97. package/dist/namespaces/mexico/index.js +7 -1
  98. package/dist/resources/addresses.d.ts.map +1 -1
  99. package/dist/resources/alerts.d.ts.map +1 -1
  100. package/dist/resources/bank-accounts.d.ts.map +1 -1
  101. package/dist/resources/base.d.ts +9 -1
  102. package/dist/resources/base.d.ts.map +1 -1
  103. package/dist/resources/base.js +13 -1
  104. package/dist/resources/clients.d.ts.map +1 -1
  105. package/dist/resources/contact-methods.d.ts.map +1 -1
  106. package/dist/resources/documents.d.ts.map +1 -1
  107. package/dist/resources/exchange-rates.d.ts.map +1 -1
  108. package/dist/resources/index.d.ts.map +1 -1
  109. package/dist/resources/mex/actividad-vulnerable/avi/alerts.d.ts.map +1 -1
  110. package/dist/resources/mex/actividad-vulnerable/avi/clients.d.ts.map +1 -1
  111. package/dist/resources/mex/actividad-vulnerable/avi/transactions.d.ts.map +1 -1
  112. package/dist/resources/mex/actividad-vulnerable/avi/transactions.js +8 -1
  113. package/dist/resources/mex/actividad-vulnerable/jys/alerts.d.ts.map +1 -1
  114. package/dist/resources/mex/actividad-vulnerable/jys/clients.d.ts.map +1 -1
  115. package/dist/resources/mex/actividad-vulnerable/jys/transactions.d.ts.map +1 -1
  116. package/dist/resources/mex/actividad-vulnerable/jys/transactions.js +8 -1
  117. package/dist/resources/mex/actividad-vulnerable/mjr/alerts.d.ts.map +1 -1
  118. package/dist/resources/mex/actividad-vulnerable/mjr/clients.d.ts.map +1 -1
  119. package/dist/resources/mex/actividad-vulnerable/mjr/transactions.d.ts.map +1 -1
  120. package/dist/resources/mex/actividad-vulnerable/mjr/transactions.js +8 -1
  121. package/dist/resources/mex/actividad-vulnerable/tsc/alerts.d.ts.map +1 -1
  122. package/dist/resources/mex/actividad-vulnerable/tsc/clients.d.ts.map +1 -1
  123. package/dist/resources/mex/actividad-vulnerable/tsc/transactions.d.ts.map +1 -1
  124. package/dist/resources/mex/actividad-vulnerable/tsc/transactions.js +8 -1
  125. package/dist/resources/mex/addresses.d.ts.map +1 -1
  126. package/dist/resources/mex/alerts.d.ts.map +1 -1
  127. package/dist/resources/mex/bank-accounts.d.ts.map +1 -1
  128. package/dist/resources/mex/clients.d.ts.map +1 -1
  129. package/dist/resources/mex/cnbv/index.d.ts +5 -0
  130. package/dist/resources/mex/cnbv/index.d.ts.map +1 -0
  131. package/dist/resources/mex/cnbv/index.js +4 -0
  132. package/dist/resources/mex/cnbv/transmisor/addresses.d.ts +88 -0
  133. package/dist/resources/mex/cnbv/transmisor/addresses.d.ts.map +1 -0
  134. package/dist/resources/mex/cnbv/transmisor/addresses.js +232 -0
  135. package/dist/resources/mex/cnbv/transmisor/alerts.d.ts +72 -0
  136. package/dist/resources/mex/cnbv/transmisor/alerts.d.ts.map +1 -0
  137. package/dist/resources/mex/cnbv/transmisor/alerts.js +364 -0
  138. package/dist/resources/mex/cnbv/transmisor/clients.d.ts +135 -0
  139. package/dist/resources/mex/cnbv/transmisor/clients.d.ts.map +1 -0
  140. package/dist/resources/mex/cnbv/transmisor/clients.js +259 -0
  141. package/dist/resources/mex/cnbv/transmisor/index.d.ts +8 -0
  142. package/dist/resources/mex/cnbv/transmisor/index.d.ts.map +1 -0
  143. package/dist/resources/mex/cnbv/transmisor/index.js +7 -0
  144. package/dist/resources/mex/cnbv/transmisor/transactions.d.ts +56 -0
  145. package/dist/resources/mex/cnbv/transmisor/transactions.d.ts.map +1 -0
  146. package/dist/resources/mex/cnbv/transmisor/transactions.js +241 -0
  147. package/dist/resources/mex/ebr.d.ts.map +1 -1
  148. package/dist/resources/mex/index.d.ts +1 -0
  149. package/dist/resources/mex/index.d.ts.map +1 -1
  150. package/dist/resources/mex/index.js +2 -0
  151. package/dist/resources/mex/transactions.d.ts.map +1 -1
  152. package/dist/resources/transactions.d.ts.map +1 -1
  153. package/dist/sdk/ComplianceSDK.d.ts +12 -2
  154. package/dist/sdk/ComplianceSDK.d.ts.map +1 -1
  155. package/dist/sdk/ComplianceSDK.js +16 -2
  156. package/dist/sdk/base.d.ts.map +1 -1
  157. package/dist/sdk/index.d.ts +1 -1
  158. package/dist/sdk/index.d.ts.map +1 -1
  159. package/dist/sdk/mex/ComplianceSDK.d.ts.map +1 -1
  160. package/dist/sdk/mex/ComplianceSDK.js +2 -2
  161. package/dist/sdk/mex/actividad-vulnerable/avi/ComplianceSDK.d.ts.map +1 -1
  162. package/dist/sdk/mex/actividad-vulnerable/avi/index.d.ts.map +1 -1
  163. package/dist/sdk/mex/actividad-vulnerable/avi/types.d.ts.map +1 -1
  164. package/dist/sdk/mex/actividad-vulnerable/index.d.ts.map +1 -1
  165. package/dist/sdk/mex/actividad-vulnerable/jys/ComplianceSDK.d.ts.map +1 -1
  166. package/dist/sdk/mex/actividad-vulnerable/jys/index.d.ts.map +1 -1
  167. package/dist/sdk/mex/actividad-vulnerable/jys/types.d.ts.map +1 -1
  168. package/dist/sdk/mex/actividad-vulnerable/mjr/ComplianceSDK.d.ts.map +1 -1
  169. package/dist/sdk/mex/actividad-vulnerable/mjr/index.d.ts.map +1 -1
  170. package/dist/sdk/mex/actividad-vulnerable/mjr/types.d.ts.map +1 -1
  171. package/dist/sdk/mex/actividad-vulnerable/tsc/ComplianceSDK.d.ts.map +1 -1
  172. package/dist/sdk/mex/actividad-vulnerable/tsc/index.d.ts.map +1 -1
  173. package/dist/sdk/mex/actividad-vulnerable/tsc/types.d.ts.map +1 -1
  174. package/dist/sdk/mex/cnbv/index.d.ts +11 -0
  175. package/dist/sdk/mex/cnbv/index.d.ts.map +1 -0
  176. package/dist/sdk/mex/cnbv/index.js +19 -0
  177. package/dist/sdk/mex/cnbv/transmisor/ComplianceSDK.d.ts +46 -0
  178. package/dist/sdk/mex/cnbv/transmisor/ComplianceSDK.d.ts.map +1 -0
  179. package/dist/sdk/mex/cnbv/transmisor/ComplianceSDK.js +39 -0
  180. package/dist/sdk/mex/cnbv/transmisor/index.d.ts +8 -0
  181. package/dist/sdk/mex/cnbv/transmisor/index.d.ts.map +1 -0
  182. package/dist/sdk/mex/cnbv/transmisor/index.js +9 -0
  183. package/dist/sdk/mex/cnbv/transmisor/types.d.ts +36 -0
  184. package/dist/sdk/mex/cnbv/transmisor/types.d.ts.map +1 -0
  185. package/dist/sdk/mex/cnbv/transmisor/types.js +20 -0
  186. package/dist/sdk/mex/index.d.ts +2 -1
  187. package/dist/sdk/mex/index.d.ts.map +1 -1
  188. package/dist/sdk/mex/index.js +6 -1
  189. package/dist/sdk/mex/types.d.ts +9 -2
  190. package/dist/sdk/mex/types.d.ts.map +1 -1
  191. package/dist/sdk/resource-registry.d.ts +1 -1
  192. package/dist/sdk/resource-registry.d.ts.map +1 -1
  193. package/dist/sdk/resource-registry.js +9 -6
  194. package/dist/sdk/sdk-registry.d.ts.map +1 -1
  195. package/dist/sdk/types.d.ts +11 -4
  196. package/dist/sdk/types.d.ts.map +1 -1
  197. package/dist/sdk/types.js +8 -3
  198. package/dist/utils/environment.d.ts.map +1 -1
  199. package/dist/utils/filters.d.ts.map +1 -1
  200. package/dist/utils/index.d.ts.map +1 -1
  201. package/dist/utils/pagination.d.ts.map +1 -1
  202. package/dist/utils/session.d.ts.map +1 -1
  203. package/dist/utils/trpc-client.d.ts.map +1 -1
  204. package/dist/utils/upload.d.ts.map +1 -1
  205. package/package.json +6 -2
@@ -0,0 +1,232 @@
1
+ /**
2
+ * Transmisor (CNBV Money Transmitters) Addresses Resource
3
+ *
4
+ * Extends MexAddressesResource with Transmisor-specific behavior:
5
+ * - Accepts flattened CreateTransmisorAddressInput (localidad at root level)
6
+ * - Nests localidad into jurisdictions.MX.cnbv.TRANSMISOR
7
+ */
8
+ import { createTransmisorAddressInputSchema, replaceSyncItemSchema, updateTransmisorAddressInputSchema, upsertTransmisorAddressInputSchema, } from "@artu-ai/shared";
9
+ import { z } from "zod";
10
+ import { MexAddressesResource } from "../../addresses";
11
+ // ===========================
12
+ // TransmisorAddressesResource
13
+ // ===========================
14
+ /**
15
+ * Transmisor (CNBV Money Transmitters) scoped addresses resource.
16
+ *
17
+ * Extends MexAddressesResource with Transmisor-specific address fields
18
+ * (localidad) that are nested into jurisdictions.MX.cnbv.TRANSMISOR.
19
+ *
20
+ * @example
21
+ * ```typescript
22
+ * const sdk = new ComplianceSDK({
23
+ * apiKey,
24
+ * environment: "test",
25
+ * jurisdiction: "MX",
26
+ * cnbv: "TRANSMISOR",
27
+ * });
28
+ *
29
+ * const address = await sdk.addresses.create({
30
+ * clientId: "client_123",
31
+ * street: "Paseo de la Reforma",
32
+ * exteriorNumber: "222",
33
+ * neighborhood: "Juárez",
34
+ * city: "Ciudad de México",
35
+ * state: "CDMX",
36
+ * postalCode: "06600",
37
+ * country: "MX",
38
+ * localidad: "00901003",
39
+ * type: "home",
40
+ * });
41
+ * ```
42
+ */
43
+ export class TransmisorAddressesResource extends MexAddressesResource {
44
+ // ─────────────────────────────────────────────────────────────────
45
+ // CRUD Operations
46
+ // ─────────────────────────────────────────────────────────────────
47
+ async create(data) {
48
+ const validated = this.validate(createTransmisorAddressInputSchema, data);
49
+ const nestedData = this.transformToNested(validated);
50
+ const response = await this.execute(() => this.trpc.addresses.create.mutate(nestedData));
51
+ return this.instantiate(response);
52
+ }
53
+ async update(id, data) {
54
+ const validated = this.validate(updateTransmisorAddressInputSchema, data);
55
+ const nestedData = this.transformUpdateToNested(validated);
56
+ const response = await this.execute(() => this.trpc.addresses.update.mutate({ id, data: nestedData }));
57
+ return this.instantiate(response);
58
+ }
59
+ async createMany(addresses, options = {}) {
60
+ const atomic = options.atomic ?? true;
61
+ const validated = this.validate(z.array(createTransmisorAddressInputSchema), addresses);
62
+ const nestedItems = validated.map((a) => this.transformToNested(a));
63
+ const response = await this.execute(() => this.trpc.addresses.createMany.mutate({ items: nestedItems, atomic }));
64
+ if (response.atomic) {
65
+ return {
66
+ atomic: true,
67
+ data: response.data.map((a) => this.instantiate(a)),
68
+ };
69
+ }
70
+ else {
71
+ return {
72
+ atomic: false,
73
+ succeeded: response.succeeded.map((item) => ({
74
+ index: item.index,
75
+ data: this.instantiate(item.data),
76
+ })),
77
+ failed: response.failed,
78
+ };
79
+ }
80
+ }
81
+ async updateMany(updates, options = {}) {
82
+ const atomic = options.atomic ?? true;
83
+ const updateItemSchema = z.object({
84
+ id: z.uuid(),
85
+ data: updateTransmisorAddressInputSchema,
86
+ });
87
+ const validated = this.validate(z.array(updateItemSchema), updates);
88
+ const nestedUpdates = validated.map((u) => ({
89
+ id: u.id,
90
+ data: this.transformUpdateToNested(u.data),
91
+ }));
92
+ const response = await this.execute(() => this.trpc.addresses.updateMany.mutate({ items: nestedUpdates, atomic }));
93
+ if (response.atomic) {
94
+ return {
95
+ atomic: true,
96
+ data: response.data.map((a) => this.instantiate(a)),
97
+ };
98
+ }
99
+ else {
100
+ return {
101
+ atomic: false,
102
+ succeeded: response.succeeded.map((item) => ({
103
+ index: item.index,
104
+ data: this.instantiate(item.data),
105
+ })),
106
+ failed: response.failed,
107
+ };
108
+ }
109
+ }
110
+ // ─────────────────────────────────────────────────────────────────
111
+ // Upsert Operations
112
+ // ─────────────────────────────────────────────────────────────────
113
+ async upsertByExternalId(data) {
114
+ const validated = this.validate(upsertTransmisorAddressInputSchema, data);
115
+ const nestedData = this.transformToNested(validated);
116
+ const response = await this.execute(() => this.trpc.addresses.upsertByExternalId.mutate(nestedData));
117
+ return {
118
+ data: this.instantiate(response.data),
119
+ action: response.action,
120
+ };
121
+ }
122
+ async upsertManyByExternalId(addresses, options = {}) {
123
+ const atomic = options.atomic ?? true;
124
+ const validated = this.validate(z.array(upsertTransmisorAddressInputSchema), addresses);
125
+ const nestedItems = validated.map((a) => this.transformToNested(a));
126
+ const response = await this.execute(() => this.trpc.addresses.upsertManyByExternalId.mutate({
127
+ items: nestedItems,
128
+ atomic,
129
+ }));
130
+ if (response.atomic) {
131
+ return {
132
+ atomic: true,
133
+ data: response.data.map((item) => ({
134
+ data: this.instantiate(item.data),
135
+ action: item.action,
136
+ })),
137
+ };
138
+ }
139
+ else {
140
+ return {
141
+ atomic: false,
142
+ succeeded: response.succeeded.map((item) => ({
143
+ index: item.index,
144
+ data: {
145
+ data: this.instantiate(item.data.data),
146
+ action: item.data.action,
147
+ },
148
+ })),
149
+ failed: response.failed,
150
+ };
151
+ }
152
+ }
153
+ async sync(clientId, items, options) {
154
+ const itemsWithClientId = items.map((item) => {
155
+ if (!("id" in item) || !item.id) {
156
+ return { ...item, clientId };
157
+ }
158
+ return item;
159
+ });
160
+ const validated = this.validate(z.array(replaceSyncItemSchema(createTransmisorAddressInputSchema, updateTransmisorAddressInputSchema)), itemsWithClientId);
161
+ const nestedItems = [];
162
+ for (const item of validated) {
163
+ if ("_delete" in item && item._delete) {
164
+ nestedItems.push(item);
165
+ }
166
+ else if ("id" in item && item.id) {
167
+ const { id, ...data } = item;
168
+ const transformed = this.transformUpdateToNested(data);
169
+ nestedItems.push({
170
+ id,
171
+ ...transformed,
172
+ });
173
+ }
174
+ else {
175
+ const transformed = this.transformToNested(item);
176
+ nestedItems.push(transformed);
177
+ }
178
+ }
179
+ const result = await super.sync(clientId, nestedItems, options);
180
+ return result;
181
+ }
182
+ // ─────────────────────────────────────────────────────────────────
183
+ // Protected Helpers
184
+ // ─────────────────────────────────────────────────────────────────
185
+ /**
186
+ * Transforms flattened Transmisor input to nested API format.
187
+ *
188
+ * Extracts localidad and nests it into jurisdictions.MX.cnbv.TRANSMISOR.
189
+ * Delegates base + MX fields to parent.
190
+ */
191
+ transformToNested(data) {
192
+ const { localidad, ...mexData } = data;
193
+ const nested = super.transformToNested(mexData);
194
+ const mexJurisdiction = (nested.jurisdictions?.MX ?? {});
195
+ return {
196
+ ...nested,
197
+ jurisdictions: {
198
+ MX: {
199
+ ...mexJurisdiction,
200
+ cnbv: {
201
+ TRANSMISOR: { localidad },
202
+ },
203
+ },
204
+ },
205
+ };
206
+ }
207
+ /**
208
+ * Transforms flattened Transmisor update input to nested API format.
209
+ *
210
+ * Always includes cnbv.TRANSMISOR marker for filterability.
211
+ */
212
+ transformUpdateToNested(data) {
213
+ const { localidad, ...mexData } = data;
214
+ const nested = super.transformUpdateToNested(mexData);
215
+ const mexJurisdiction = (nested.jurisdictions?.MX ?? {});
216
+ const transmisorData = {};
217
+ if (localidad !== undefined)
218
+ transmisorData.localidad = localidad;
219
+ return {
220
+ ...nested,
221
+ jurisdictions: {
222
+ MX: {
223
+ ...mexJurisdiction,
224
+ cnbv: {
225
+ ...mexJurisdiction.cnbv,
226
+ TRANSMISOR: transmisorData,
227
+ },
228
+ },
229
+ },
230
+ };
231
+ }
232
+ }
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Transmisor (CNBV Money Transmitters) Alerts Resource
3
+ *
4
+ * Extends MexAlertsResource with Transmisor-specific behavior:
5
+ * - Accepts flattened CreateTransmisorAlertInput
6
+ * - Returns MexTransmisorAlert models
7
+ * - Nests Transmisor fields under jurisdictions.MX.cnbv.TRANSMISOR
8
+ */
9
+ import type { CreateAlertInput, UpdateAlertInput, CreateAlertItemInput, UpdateAlertItemInput, CreateTransmisorAlertInput, UpdateTransmisorAlertInput, UpsertTransmisorAlertInput, CreateTransmisorAlertItemInput, UpdateTransmisorAlertItemInput, SubmitTransmisorAlertInput, ListOptions, PaginatedResponse, AtomicBatchResult, PartialBatchResult, ValidationResult, GenerateResult, SubmissionResult, TransmisorAlertDefaultsInput, UpsertResult } from "@artu-ai/shared";
10
+ import type { TransmisorAlertFilter, TransmisorAlertSort, TransmisorAlertItemFilter, AlertSort, AlertItemFilter, AlertItemSort } from "@artu-ai/shared";
11
+ import { MexAlertsResource } from "../../alerts";
12
+ import { MexTransmisorAlert, MexTransmisorAlertItem, type AlertData, type AlertItemData } from "../../../../models";
13
+ export declare class TransmisorAlertsResource extends MexAlertsResource<TransmisorAlertSort, TransmisorAlertDefaultsInput> {
14
+ create(data: CreateTransmisorAlertInput): Promise<MexTransmisorAlert>;
15
+ retrieve(id: string): Promise<MexTransmisorAlert>;
16
+ retrieveByMetadata(key: string, value: string): Promise<MexTransmisorAlert>;
17
+ retrieveByExternalId(externalId: string): Promise<MexTransmisorAlert>;
18
+ update(id: string, data: UpdateTransmisorAlertInput): Promise<MexTransmisorAlert>;
19
+ list(options?: ListOptions<TransmisorAlertFilter, TransmisorAlertSort>): Promise<PaginatedResponse<MexTransmisorAlert>>;
20
+ iterate(options?: {
21
+ filter?: TransmisorAlertFilter;
22
+ sort?: TransmisorAlertSort;
23
+ pageSize?: number;
24
+ }): AsyncGenerator<MexTransmisorAlert, void, undefined>;
25
+ count(filter?: TransmisorAlertFilter): Promise<number>;
26
+ createMany(alerts: CreateTransmisorAlertInput[], options?: {
27
+ atomic?: true;
28
+ }): Promise<AtomicBatchResult<MexTransmisorAlert>>;
29
+ createMany(alerts: CreateTransmisorAlertInput[], options: {
30
+ atomic: false;
31
+ }): Promise<PartialBatchResult<MexTransmisorAlert>>;
32
+ updateMany(updates: {
33
+ id: string;
34
+ data: UpdateTransmisorAlertInput;
35
+ }[], options?: {
36
+ atomic?: true;
37
+ }): Promise<AtomicBatchResult<MexTransmisorAlert>>;
38
+ updateMany(updates: {
39
+ id: string;
40
+ data: UpdateTransmisorAlertInput;
41
+ }[], options: {
42
+ atomic: false;
43
+ }): Promise<PartialBatchResult<MexTransmisorAlert>>;
44
+ upsertByExternalId(data: UpsertTransmisorAlertInput): Promise<UpsertResult<MexTransmisorAlert>>;
45
+ addItem(alertId: string, data: CreateTransmisorAlertItemInput): Promise<MexTransmisorAlertItem>;
46
+ getItem(alertId: string, itemId: string): Promise<MexTransmisorAlertItem>;
47
+ updateItem(alertId: string, itemId: string, data: UpdateTransmisorAlertItemInput): Promise<MexTransmisorAlertItem>;
48
+ listItems(alertId: string, options?: ListOptions<TransmisorAlertItemFilter, AlertItemSort>): Promise<PaginatedResponse<MexTransmisorAlertItem>>;
49
+ protected applyScopeToItemFilter(filter?: TransmisorAlertItemFilter): AlertItemFilter | undefined;
50
+ addItems(alertId: string, items: CreateTransmisorAlertItemInput[]): Promise<{
51
+ added: number;
52
+ items: MexTransmisorAlertItem[];
53
+ }>;
54
+ validateAlert(alertId: string, defaults: TransmisorAlertDefaultsInput): Promise<ValidationResult>;
55
+ generateAlert(alertId: string, defaults: TransmisorAlertDefaultsInput): Promise<GenerateResult>;
56
+ submit(input: SubmitTransmisorAlertInput): Promise<SubmissionResult>;
57
+ protected applyScopeToSort(sort?: TransmisorAlertSort): AlertSort | undefined;
58
+ protected transformToNested(data: CreateTransmisorAlertInput): CreateAlertInput;
59
+ protected transformUpdateToNested(data: UpdateTransmisorAlertInput): UpdateAlertInput;
60
+ protected instantiate(data: AlertData): MexTransmisorAlert;
61
+ protected instantiateItem(data: AlertItemData): MexTransmisorAlertItem;
62
+ protected transformItemToNested(data: CreateTransmisorAlertItemInput): CreateAlertItemInput;
63
+ protected transformItemUpdateToNested(data: UpdateTransmisorAlertItemInput): UpdateAlertItemInput;
64
+ /**
65
+ * Transforms Transmisor defaults to nested API format for validate/generate.
66
+ */
67
+ protected transformDefaultsToNested(alertId: string, defaults: TransmisorAlertDefaultsInput): {
68
+ alertId: string;
69
+ jurisdictions: unknown;
70
+ };
71
+ }
72
+ //# sourceMappingURL=alerts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alerts.d.ts","sourceRoot":"","sources":["../../../../../src/resources/mex/cnbv/transmisor/alerts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,364 @@
1
+ /**
2
+ * Transmisor (CNBV Money Transmitters) Alerts Resource
3
+ *
4
+ * Extends MexAlertsResource with Transmisor-specific behavior:
5
+ * - Accepts flattened CreateTransmisorAlertInput
6
+ * - Returns MexTransmisorAlert models
7
+ * - Nests Transmisor fields under jurisdictions.MX.cnbv.TRANSMISOR
8
+ */
9
+ import { z } from "zod";
10
+ import { createTransmisorAlertInputSchema, updateTransmisorAlertInputSchema, upsertTransmisorAlertInputSchema, createTransmisorAlertItemInputSchema, updateTransmisorAlertItemInputSchema, submitTransmisorAlertInputSchema, transmisorDefaultsInputSchema, transformSort, transmisorAlertFieldMapping, } from "@artu-ai/shared";
11
+ import { MexAlertsResource } from "../../alerts";
12
+ import { MexTransmisorAlert, MexTransmisorAlertItem, } from "../../../../models";
13
+ // ===========================
14
+ // TransmisorAlertsResource
15
+ // ===========================
16
+ export class TransmisorAlertsResource extends MexAlertsResource {
17
+ // ─────────────────────────────────────────────────────────────────
18
+ // Alert CRUD
19
+ // ─────────────────────────────────────────────────────────────────
20
+ async create(data) {
21
+ const validated = this.validate(createTransmisorAlertInputSchema, data);
22
+ const nestedData = this.transformToNested(validated);
23
+ const response = await this.execute(() => this.trpc.alerts.create.mutate(nestedData));
24
+ return this.instantiate(response);
25
+ }
26
+ async retrieve(id) {
27
+ const response = await this.execute(() => this.trpc.alerts.retrieve.query({ id }));
28
+ return this.instantiate(response);
29
+ }
30
+ async retrieveByMetadata(key, value) {
31
+ const response = await this.execute(() => this.trpc.alerts.retrieveByMetadata.query({ key, value }));
32
+ return this.instantiate(response);
33
+ }
34
+ async retrieveByExternalId(externalId) {
35
+ const response = await this.execute(() => this.trpc.alerts.retrieveByExternalId.query({ externalId }));
36
+ return this.instantiate(response);
37
+ }
38
+ async update(id, data) {
39
+ const validated = this.validate(updateTransmisorAlertInputSchema, data);
40
+ const nestedData = this.transformUpdateToNested(validated);
41
+ const response = await this.execute(() => this.trpc.alerts.update.mutate({ id, data: nestedData }));
42
+ return this.instantiate(response);
43
+ }
44
+ // ─────────────────────────────────────────────────────────────────
45
+ // List & Pagination
46
+ // ─────────────────────────────────────────────────────────────────
47
+ async list(options) {
48
+ const scopedFilter = this.applyScopeToFilter(options?.filter);
49
+ const scopedSort = this.applyScopeToSort(options?.sort);
50
+ const response = await this.execute(() => this.trpc.alerts.list.query({
51
+ ...options,
52
+ filter: scopedFilter,
53
+ sort: scopedSort,
54
+ }));
55
+ return {
56
+ data: response.data.map((r) => this.instantiate(r)),
57
+ pagination: response.pagination,
58
+ };
59
+ }
60
+ iterate(options) {
61
+ const scopedFilter = this.applyScopeToFilter(options?.filter);
62
+ return this.createIterator({
63
+ filter: scopedFilter,
64
+ sort: options?.sort,
65
+ pageSize: options?.pageSize,
66
+ });
67
+ }
68
+ async count(filter) {
69
+ const scopedFilter = this.applyScopeToFilter(filter);
70
+ const response = await this.execute(() => this.trpc.alerts.count.query({ filter: scopedFilter }));
71
+ return response.count;
72
+ }
73
+ async createMany(alerts, options = {}) {
74
+ const atomic = options.atomic ?? true;
75
+ const validated = this.validate(z.array(createTransmisorAlertInputSchema), alerts);
76
+ const nestedItems = validated.map((r) => this.transformToNested(r));
77
+ const response = await this.execute(() => this.trpc.alerts.createMany.mutate({ items: nestedItems, atomic }));
78
+ if (response.atomic) {
79
+ return {
80
+ atomic: true,
81
+ data: response.data.map((r) => this.instantiate(r)),
82
+ };
83
+ }
84
+ else {
85
+ return {
86
+ atomic: false,
87
+ succeeded: response.succeeded.map((item) => ({
88
+ index: item.index,
89
+ data: this.instantiate(item.data),
90
+ })),
91
+ failed: response.failed,
92
+ };
93
+ }
94
+ }
95
+ async updateMany(updates, options = {}) {
96
+ const atomic = options.atomic ?? true;
97
+ const updateItemSchema = z.object({
98
+ id: z.uuid(),
99
+ data: updateTransmisorAlertInputSchema,
100
+ });
101
+ const validated = this.validate(z.array(updateItemSchema), updates);
102
+ const nestedUpdates = validated.map((u) => ({
103
+ id: u.id,
104
+ data: this.transformUpdateToNested(u.data),
105
+ }));
106
+ const response = await this.execute(() => this.trpc.alerts.updateMany.mutate({ items: nestedUpdates, atomic }));
107
+ if (response.atomic) {
108
+ return {
109
+ atomic: true,
110
+ data: response.data.map((r) => this.instantiate(r)),
111
+ };
112
+ }
113
+ else {
114
+ return {
115
+ atomic: false,
116
+ succeeded: response.succeeded.map((item) => ({
117
+ index: item.index,
118
+ data: this.instantiate(item.data),
119
+ })),
120
+ failed: response.failed,
121
+ };
122
+ }
123
+ }
124
+ // ─────────────────────────────────────────────────────────────────
125
+ // Upsert Operations
126
+ // ─────────────────────────────────────────────────────────────────
127
+ async upsertByExternalId(data) {
128
+ const validated = this.validate(upsertTransmisorAlertInputSchema, data);
129
+ const nestedData = this.transformToNested(validated);
130
+ const response = await this.execute(() => this.trpc.alerts.upsertByExternalId.mutate(nestedData));
131
+ return {
132
+ data: this.instantiate(response.data),
133
+ action: response.action,
134
+ };
135
+ }
136
+ // ─────────────────────────────────────────────────────────────────
137
+ // Alert Items
138
+ // ─────────────────────────────────────────────────────────────────
139
+ async addItem(alertId, data) {
140
+ const validated = this.validate(createTransmisorAlertItemInputSchema, data);
141
+ const nestedData = this.transformItemToNested(validated);
142
+ const response = await this.execute(() => this.trpc.alerts.addItem.mutate({ alertId, data: nestedData }));
143
+ return this.instantiateItem(response);
144
+ }
145
+ async getItem(alertId, itemId) {
146
+ const response = await this.execute(() => this.trpc.alerts.getItem.query({ alertId, itemId }));
147
+ return this.instantiateItem(response);
148
+ }
149
+ async updateItem(alertId, itemId, data) {
150
+ const validated = this.validate(updateTransmisorAlertItemInputSchema, data);
151
+ const nestedData = this.transformItemUpdateToNested(validated);
152
+ const response = await this.execute(() => this.trpc.alerts.updateItem.mutate({
153
+ alertId,
154
+ itemId,
155
+ data: nestedData,
156
+ }));
157
+ return this.instantiateItem(response);
158
+ }
159
+ async listItems(alertId, options) {
160
+ const scopedFilter = this.applyScopeToItemFilter(options?.filter);
161
+ const response = await this.execute(() => this.trpc.alerts.listItems.query({
162
+ alertId,
163
+ ...options,
164
+ filter: scopedFilter,
165
+ }));
166
+ return {
167
+ data: response.data.map((i) => this.instantiateItem(i)),
168
+ pagination: response.pagination,
169
+ };
170
+ }
171
+ applyScopeToItemFilter(filter) {
172
+ if (!filter)
173
+ return undefined;
174
+ const { isPrimary, ...baseFields } = filter;
175
+ if (isPrimary === undefined) {
176
+ return baseFields;
177
+ }
178
+ return {
179
+ ...baseFields,
180
+ jurisdictions: {
181
+ MX: {
182
+ cnbv: {
183
+ TRANSMISOR: { isPrimary },
184
+ },
185
+ },
186
+ },
187
+ };
188
+ }
189
+ async addItems(alertId, items) {
190
+ const validated = this.validate(z.array(createTransmisorAlertItemInputSchema), items);
191
+ const nestedItems = validated.map((i) => this.transformItemToNested(i));
192
+ const response = await this.execute(() => this.trpc.alerts.addItems.mutate({ alertId, items: nestedItems }));
193
+ return {
194
+ added: response.added,
195
+ items: response.items.map((i) => this.instantiateItem(i)),
196
+ };
197
+ }
198
+ // ─────────────────────────────────────────────────────────────────
199
+ // Validation
200
+ // ─────────────────────────────────────────────────────────────────
201
+ async validateAlert(alertId, defaults) {
202
+ const validated = this.validate(transmisorDefaultsInputSchema, defaults);
203
+ const nestedInput = this.transformDefaultsToNested(alertId, validated);
204
+ return this.execute(() => this.trpc.alerts.validate.mutate(nestedInput));
205
+ }
206
+ // ─────────────────────────────────────────────────────────────────
207
+ // Generation
208
+ // ─────────────────────────────────────────────────────────────────
209
+ async generateAlert(alertId, defaults) {
210
+ const validated = this.validate(transmisorDefaultsInputSchema, defaults);
211
+ const nestedInput = this.transformDefaultsToNested(alertId, validated);
212
+ return this.execute(() => this.trpc.alerts.generate.mutate(nestedInput));
213
+ }
214
+ // ─────────────────────────────────────────────────────────────────
215
+ // Submission
216
+ // ─────────────────────────────────────────────────────────────────
217
+ async submit(input) {
218
+ const validated = this.validate(submitTransmisorAlertInputSchema, input);
219
+ const jurisdictions = {
220
+ MX: {
221
+ cnbv: {
222
+ TRANSMISOR: {
223
+ acuseRecibo: validated.acuseRecibo,
224
+ notes: validated.notes,
225
+ },
226
+ },
227
+ },
228
+ };
229
+ return this.execute(() => this.trpc.alerts.submit.mutate({
230
+ alertId: validated.alertId,
231
+ jurisdictions,
232
+ }));
233
+ }
234
+ // ─────────────────────────────────────────────────────────────────
235
+ // Protected Helpers
236
+ // ─────────────────────────────────────────────────────────────────
237
+ applyScopeToSort(sort) {
238
+ if (!sort || sort.length === 0) {
239
+ return undefined;
240
+ }
241
+ return transformSort(sort, transmisorAlertFieldMapping);
242
+ }
243
+ transformToNested(data) {
244
+ const { tipoReporte, periodoReporte, organoSupervisor, claveSujetoObligado, agenteNombre, agenteApellidoPaterno, agenteApellidoMaterno, agenteRfc, ...baseFields } = data;
245
+ return {
246
+ ...baseFields,
247
+ jurisdictions: {
248
+ MX: {
249
+ cnbv: {
250
+ TRANSMISOR: {
251
+ tipoReporte,
252
+ periodoReporte,
253
+ organoSupervisor,
254
+ claveSujetoObligado,
255
+ agenteNombre,
256
+ agenteApellidoPaterno,
257
+ agenteApellidoMaterno,
258
+ agenteRfc,
259
+ },
260
+ },
261
+ },
262
+ },
263
+ };
264
+ }
265
+ transformUpdateToNested(data) {
266
+ const { tipoReporte, periodoReporte, organoSupervisor, claveSujetoObligado, agenteNombre, agenteApellidoPaterno, agenteApellidoMaterno, agenteRfc, ...baseFields } = data;
267
+ const transmisorData = {};
268
+ if (tipoReporte !== undefined)
269
+ transmisorData.tipoReporte = tipoReporte;
270
+ if (periodoReporte !== undefined)
271
+ transmisorData.periodoReporte = periodoReporte;
272
+ if (organoSupervisor !== undefined)
273
+ transmisorData.organoSupervisor = organoSupervisor;
274
+ if (claveSujetoObligado !== undefined)
275
+ transmisorData.claveSujetoObligado = claveSujetoObligado;
276
+ if (agenteNombre !== undefined)
277
+ transmisorData.agenteNombre = agenteNombre;
278
+ if (agenteApellidoPaterno !== undefined)
279
+ transmisorData.agenteApellidoPaterno = agenteApellidoPaterno;
280
+ if (agenteApellidoMaterno !== undefined)
281
+ transmisorData.agenteApellidoMaterno = agenteApellidoMaterno;
282
+ if (agenteRfc !== undefined)
283
+ transmisorData.agenteRfc = agenteRfc;
284
+ return {
285
+ ...baseFields,
286
+ jurisdictions: {
287
+ MX: {
288
+ cnbv: {
289
+ TRANSMISOR: transmisorData,
290
+ },
291
+ },
292
+ },
293
+ };
294
+ }
295
+ instantiate(data) {
296
+ return new MexTransmisorAlert(data);
297
+ }
298
+ instantiateItem(data) {
299
+ return new MexTransmisorAlertItem(data);
300
+ }
301
+ transformItemToNested(data) {
302
+ const { isPrimary, fechaDeteccion, descripcionOperacion, razones, ...baseFields } = data;
303
+ const transmisorData = {};
304
+ if (isPrimary !== undefined)
305
+ transmisorData.isPrimary = isPrimary;
306
+ if (fechaDeteccion !== undefined)
307
+ transmisorData.fechaDeteccion = fechaDeteccion;
308
+ if (descripcionOperacion !== undefined)
309
+ transmisorData.descripcionOperacion = descripcionOperacion;
310
+ if (razones !== undefined)
311
+ transmisorData.razones = razones;
312
+ return {
313
+ ...baseFields,
314
+ jurisdictions: {
315
+ MX: {
316
+ cnbv: {
317
+ TRANSMISOR: transmisorData,
318
+ },
319
+ },
320
+ },
321
+ };
322
+ }
323
+ transformItemUpdateToNested(data) {
324
+ const { isPrimary, fechaDeteccion, descripcionOperacion, razones, ...baseFields } = data;
325
+ const transmisorData = {};
326
+ if (isPrimary !== undefined)
327
+ transmisorData.isPrimary = isPrimary;
328
+ if (fechaDeteccion !== undefined)
329
+ transmisorData.fechaDeteccion = fechaDeteccion;
330
+ if (descripcionOperacion !== undefined)
331
+ transmisorData.descripcionOperacion = descripcionOperacion;
332
+ if (razones !== undefined)
333
+ transmisorData.razones = razones;
334
+ if (Object.keys(transmisorData).length === 0) {
335
+ return baseFields;
336
+ }
337
+ return {
338
+ ...baseFields,
339
+ jurisdictions: {
340
+ MX: {
341
+ cnbv: {
342
+ TRANSMISOR: transmisorData,
343
+ },
344
+ },
345
+ },
346
+ };
347
+ }
348
+ /**
349
+ * Transforms Transmisor defaults to nested API format for validate/generate.
350
+ */
351
+ transformDefaultsToNested(alertId, defaults) {
352
+ return {
353
+ alertId,
354
+ jurisdictions: {
355
+ MX: {
356
+ cnbv: {
357
+ ...defaults,
358
+ TRANSMISOR: defaults,
359
+ },
360
+ },
361
+ },
362
+ };
363
+ }
364
+ }