@devizovaburza/mdm-sdk 0.0.18 → 0.0.20

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.
package/dist/v1/index.cjs CHANGED
@@ -12639,7 +12639,8 @@ const organization = sqliteTable("organization", {
12639
12639
  enum: generalCodes.COUNTRY_CODES_2
12640
12640
  }),
12641
12641
  vatId: text("vat_id"),
12642
- court: text("court", { enum: COURT })
12642
+ court: text("court", { enum: COURT }),
12643
+ registerUri: text("register_uri")
12643
12644
  });
12644
12645
 
12645
12646
  const partyRelationship = sqliteTable("party_relationship", {
@@ -12684,7 +12685,8 @@ const bankAccount = sqliteTable("bank_account", {
12684
12685
  ...base,
12685
12686
  internalId: text("internal_id"),
12686
12687
  ...bankAccount$1,
12687
- partyId: text("party_id").notNull().references(() => party.id)
12688
+ partyId: text("party_id").notNull().references(() => party.id),
12689
+ statementUri: text("statement_uri")
12688
12690
  });
12689
12691
 
12690
12692
  const aml = sqliteTable("aml", {
@@ -12996,7 +12998,8 @@ const bankAccountUpsertSchema = bankAccountBaseInsertSchema.required({
12996
12998
  id: true
12997
12999
  });
12998
13000
  const bankAccountSelectSchema = bankAccountUpdateSchema.required().extend({
12999
- bankCode: zodOpenapi.z.string().nullable()
13001
+ bankCode: zodOpenapi.z.string().nullable(),
13002
+ statementUri: zodOpenapi.z.string().nullable()
13000
13003
  });
13001
13004
  zodOpenapi.z.array(bankAccountSelectSchema);
13002
13005
 
@@ -13084,7 +13087,8 @@ const organizationInsertSchema = zodOpenapi.z.object({
13084
13087
  operationCountries: zodOpenapi.z.string(),
13085
13088
  riskyBusinessType: zodOpenapi.z.string().optional().nullable(),
13086
13089
  vatId: zodOpenapi.z.string().optional().nullable(),
13087
- court: zodOpenapi.z.enum(COURT).optional().nullable()
13090
+ court: zodOpenapi.z.enum(COURT).optional().nullable(),
13091
+ registerUri: zodOpenapi.z.string().optional().nullable()
13088
13092
  });
13089
13093
  const organizationUpdateSchema$1 = zodOpenapi.z.object({
13090
13094
  partyId: zodOpenapi.z.uuid().optional(),
@@ -13112,7 +13116,8 @@ const organizationUpdateSchema$1 = zodOpenapi.z.object({
13112
13116
  operationCountries: zodOpenapi.z.string(),
13113
13117
  riskyBusinessType: zodOpenapi.z.string().optional().nullable(),
13114
13118
  vatId: zodOpenapi.z.string().optional().nullable(),
13115
- court: zodOpenapi.z.enum(COURT).optional().nullable()
13119
+ court: zodOpenapi.z.enum(COURT).optional().nullable(),
13120
+ registerUri: zodOpenapi.z.string().optional().nullable()
13116
13121
  });
13117
13122
  const organizationOutputSchema = zodOpenapi.z.object({
13118
13123
  id: zodOpenapi.z.uuid(),
@@ -13144,12 +13149,48 @@ const organizationOutputSchema = zodOpenapi.z.object({
13144
13149
  stayAbroadCountries: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).nullable(),
13145
13150
  vatId: zodOpenapi.z.string().nullable(),
13146
13151
  court: zodOpenapi.z.enum(COURT).nullable(),
13152
+ registerUri: zodOpenapi.z.string().nullable(),
13147
13153
  createdAt: zodOpenapi.z.coerce.date().nullable(),
13148
13154
  updatedAt: zodOpenapi.z.coerce.date().nullable()
13149
13155
  });
13150
13156
  const organizationSelectSchema = organizationOutputSchema;
13151
13157
  zodOpenapi.z.array(organizationOutputSchema);
13152
13158
 
13159
+ createInsertSchema(idDocument);
13160
+ createUpdateSchema(idDocument);
13161
+ const idDocumentBaseSelectSchema = createSelectSchema(idDocument);
13162
+ const idDocumentInsertSchema = zodOpenapi.z.object({
13163
+ partyId: zodOpenapi.z.uuid(),
13164
+ internalId: zodOpenapi.z.string().optional().nullable(),
13165
+ idDocType: zodOpenapi.z.enum(ID_DOC_TYPE),
13166
+ idDocNumber: zodOpenapi.z.string(),
13167
+ idDocHolderName: zodOpenapi.z.string(),
13168
+ issueDate: zodOpenapi.z.date().optional().nullable(),
13169
+ expirationDate: zodOpenapi.z.date().optional().nullable(),
13170
+ issuer: zodOpenapi.z.string().optional().nullable(),
13171
+ countryOfIssue: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional().nullable(),
13172
+ frontImageUri: zodOpenapi.z.url().optional().nullable(),
13173
+ backImageUri: zodOpenapi.z.url().optional().nullable(),
13174
+ idDocStatus: zodOpenapi.z.enum(ID_DOC_STATUS).optional().nullable()
13175
+ });
13176
+ const idDocumentUpdateSchema = zodOpenapi.z.object({
13177
+ id: zodOpenapi.z.uuid(),
13178
+ partyId: zodOpenapi.z.uuid().optional(),
13179
+ internalId: zodOpenapi.z.string().optional().nullable(),
13180
+ idDocType: zodOpenapi.z.enum(ID_DOC_TYPE).optional(),
13181
+ idDocNumber: zodOpenapi.z.string().optional(),
13182
+ idDocHolderName: zodOpenapi.z.string().optional(),
13183
+ issueDate: zodOpenapi.z.date().optional().nullable(),
13184
+ expirationDate: zodOpenapi.z.date().optional().nullable(),
13185
+ issuer: zodOpenapi.z.string().optional().nullable(),
13186
+ countryOfIssue: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional().nullable(),
13187
+ frontImageUri: zodOpenapi.z.url("Invalid URL format").optional().nullable(),
13188
+ backImageUri: zodOpenapi.z.url("Invalid URL format").optional().nullable(),
13189
+ idDocStatus: zodOpenapi.z.enum(ID_DOC_STATUS).optional().nullable()
13190
+ });
13191
+ const idDocumentSelectSchema = idDocumentBaseSelectSchema;
13192
+ const idDocumentSyncSchema = idDocumentInsertSchema.omit({ partyId: true }).extend({ id: zodOpenapi.z.uuid().optional(), idDocHolderName: zodOpenapi.z.string().optional() });
13193
+
13153
13194
  zodOpenapi.z.discriminatedUnion("partyType", [
13154
13195
  zodOpenapi.z.object({
13155
13196
  partyType: zodOpenapi.z.literal("INDIVIDUAL"),
@@ -13164,7 +13205,9 @@ const disponentCreateSchema = zodOpenapi.z.discriminatedUnion("partyType", [
13164
13205
  zodOpenapi.z.object({
13165
13206
  partyType: zodOpenapi.z.literal("INDIVIDUAL"),
13166
13207
  relationshipType: zodOpenapi.z.enum(PARTY_RELATIONSHIP_TYPE).optional(),
13167
- data: individualInsertSchema$1.omit({ partyId: true })
13208
+ data: individualInsertSchema$1.omit({ partyId: true }).extend({
13209
+ identityDocuments: zodOpenapi.z.array(idDocumentSyncSchema).nullable().optional()
13210
+ })
13168
13211
  }),
13169
13212
  zodOpenapi.z.object({
13170
13213
  partyType: zodOpenapi.z.literal("ORGANIZATION"),
@@ -13186,7 +13229,10 @@ const disponentSyncSchema$1 = zodOpenapi.z.discriminatedUnion("partyType", [
13186
13229
  zodOpenapi.z.object({
13187
13230
  partyType: zodOpenapi.z.literal("INDIVIDUAL"),
13188
13231
  relationshipType: zodOpenapi.z.enum(PARTY_RELATIONSHIP_TYPE).optional(),
13189
- data: individualInsertSchema$1.omit({ partyId: true }).extend({ id: zodOpenapi.z.uuid().optional() })
13232
+ data: individualInsertSchema$1.omit({ partyId: true }).extend({
13233
+ id: zodOpenapi.z.uuid().optional(),
13234
+ identityDocuments: zodOpenapi.z.array(idDocumentSyncSchema).nullable().optional()
13235
+ })
13190
13236
  }),
13191
13237
  zodOpenapi.z.object({
13192
13238
  partyType: zodOpenapi.z.literal("ORGANIZATION"),
@@ -13197,7 +13243,9 @@ const disponentSyncSchema$1 = zodOpenapi.z.discriminatedUnion("partyType", [
13197
13243
  const disponentSelectSchema = zodOpenapi.z.discriminatedUnion("partyType", [
13198
13244
  zodOpenapi.z.object({
13199
13245
  partyType: zodOpenapi.z.literal("INDIVIDUAL"),
13200
- data: individualSelectSchema
13246
+ data: individualSelectSchema.extend({
13247
+ identityDocuments: zodOpenapi.z.array(idDocumentSelectSchema).nullable()
13248
+ })
13201
13249
  }),
13202
13250
  zodOpenapi.z.object({
13203
13251
  partyType: zodOpenapi.z.literal("ORGANIZATION"),
@@ -13207,39 +13255,6 @@ const disponentSelectSchema = zodOpenapi.z.discriminatedUnion("partyType", [
13207
13255
  zodOpenapi.z.array(disponentSelectSchema).optional();
13208
13256
  zodOpenapi.z.array(disponentUpdateSchema).optional();
13209
13257
 
13210
- createInsertSchema(idDocument);
13211
- createUpdateSchema(idDocument);
13212
- createSelectSchema(idDocument);
13213
- const idDocumentInsertSchema = zodOpenapi.z.object({
13214
- partyId: zodOpenapi.z.uuid(),
13215
- internalId: zodOpenapi.z.string().optional().nullable(),
13216
- idDocType: zodOpenapi.z.enum(ID_DOC_TYPE),
13217
- idDocNumber: zodOpenapi.z.string(),
13218
- idDocHolderName: zodOpenapi.z.string(),
13219
- issueDate: zodOpenapi.z.date().optional().nullable(),
13220
- expirationDate: zodOpenapi.z.date().optional().nullable(),
13221
- issuer: zodOpenapi.z.string().optional().nullable(),
13222
- countryOfIssue: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional().nullable(),
13223
- frontImageUri: zodOpenapi.z.url().optional().nullable(),
13224
- backImageUri: zodOpenapi.z.url().optional().nullable(),
13225
- idDocStatus: zodOpenapi.z.enum(ID_DOC_STATUS).optional().nullable()
13226
- });
13227
- const idDocumentUpdateSchema = zodOpenapi.z.object({
13228
- id: zodOpenapi.z.uuid(),
13229
- partyId: zodOpenapi.z.uuid().optional(),
13230
- internalId: zodOpenapi.z.string().optional().nullable(),
13231
- idDocType: zodOpenapi.z.enum(ID_DOC_TYPE).optional(),
13232
- idDocNumber: zodOpenapi.z.string().optional(),
13233
- idDocHolderName: zodOpenapi.z.string().optional(),
13234
- issueDate: zodOpenapi.z.date().optional().nullable(),
13235
- expirationDate: zodOpenapi.z.date().optional().nullable(),
13236
- issuer: zodOpenapi.z.string().optional().nullable(),
13237
- countryOfIssue: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional().nullable(),
13238
- frontImageUri: zodOpenapi.z.url("Invalid URL format").optional().nullable(),
13239
- backImageUri: zodOpenapi.z.url("Invalid URL format").optional().nullable(),
13240
- idDocStatus: zodOpenapi.z.enum(ID_DOC_STATUS).optional().nullable()
13241
- });
13242
-
13243
13258
  const recipientBaseInsertSchema = createInsertSchema(recipient);
13244
13259
  const recipientBaseUpdateSchema = createUpdateSchema(recipient);
13245
13260
  createSelectSchema(recipient);
@@ -13250,7 +13265,9 @@ const recipientInsertSchema = bankAccountInsertSchema;
13250
13265
  const recipientUpdateSchema = recipientBaseUpdateSchema.required({
13251
13266
  id: true
13252
13267
  });
13253
- const recipientSelectSchema = bankAccountSelectSchema;
13268
+ const recipientSelectSchema = bankAccountSelectSchema.omit({
13269
+ statementUri: true
13270
+ });
13254
13271
 
13255
13272
  const productTxsConfigSchema = zodOpenapi.z.object({
13256
13273
  fee: zodOpenapi.z.number(),
@@ -13295,7 +13312,6 @@ const productsOutputSchema$1 = zodOpenapi.z.object({
13295
13312
  cbs: productCbsConfigSchema.nullable()
13296
13313
  });
13297
13314
 
13298
- const idDocumentSyncSchema = idDocumentInsertSchema.omit({ partyId: true }).extend({ id: zodOpenapi.z.uuid().optional(), idDocHolderName: zodOpenapi.z.string().optional() });
13299
13315
  const legalRepresentativeSyncSchema$1 = individualInsertSchema$1.omit({ partyId: true }).extend({
13300
13316
  id: zodOpenapi.z.uuid().optional(),
13301
13317
  dateOfEstablishment: zodOpenapi.z.string(),
@@ -13344,20 +13360,24 @@ const partyOutputSchema$1 = zodOpenapi.z.object({
13344
13360
  const createPartySchema = partySchema$2.omit({ id: true });
13345
13361
  zodOpenapi.z.object({
13346
13362
  party: createPartySchema,
13347
- personalData: individualInsertSchema$1.omit({ partyId: true }).nullable(),
13363
+ personalData: individualInsertSchema$1.omit({ partyId: true }).extend({
13364
+ identityDocuments: zodOpenapi.z.array(idDocumentSyncSchema).nullable().optional()
13365
+ }).nullable(),
13348
13366
  organizationData: organizationInsertSchema.omit({ partyId: true }).nullable(),
13349
13367
  bankAccounts: zodOpenapi.z.array(bankAccountInsertSchema.omit({ partyId: true })).nullable(),
13350
13368
  recipients: zodOpenapi.z.array(recipientInsertSchema.omit({ partyId: true })).nullable(),
13351
13369
  disponents: zodOpenapi.z.array(disponentCreateSchema).nullable(),
13352
13370
  addresses: zodOpenapi.z.array(addressInsertSchema.omit({ partyId: true })),
13353
- aml: amlInsertSchema.omit({ partyId: true }),
13371
+ aml: amlInsertSchema.omit({ partyId: true }).optional().nullable(),
13354
13372
  products: productsInputSchema$2.optional(),
13355
13373
  traderIds: zodOpenapi.z.array(zodOpenapi.z.uuid()).optional()
13356
13374
  });
13357
13375
  zodOpenapi.z.object({
13358
13376
  partyId: zodOpenapi.z.uuid(),
13359
13377
  party: partySchema$2,
13360
- personalData: individualUpdateSchema$1.optional(),
13378
+ personalData: individualUpdateSchema$1.extend({
13379
+ identityDocuments: zodOpenapi.z.array(idDocumentSyncSchema).nullable().optional()
13380
+ }).optional(),
13361
13381
  organizationData: organizationUpdateSchema$1.optional(),
13362
13382
  bankAccounts: zodOpenapi.z.array(bankAccountUpsertSchema.partial({ id: true })).optional(),
13363
13383
  recipients: zodOpenapi.z.array(recipientUpsertSchema.partial({ id: true })).optional(),
@@ -13371,7 +13391,9 @@ zodOpenapi.z.object({
13371
13391
  });
13372
13392
  const partySelectOutputSchema = zodOpenapi.z.object({
13373
13393
  party: partyOutputSchema$1.nullable(),
13374
- personalData: individualSelectSchema.nullable(),
13394
+ personalData: individualSelectSchema.extend({
13395
+ identityDocuments: zodOpenapi.z.array(idDocumentSelectSchema).nullable()
13396
+ }).nullable(),
13375
13397
  organizationData: organizationSelectSchema.nullable(),
13376
13398
  aml: amlSelectSchema.nullable(),
13377
13399
  bankAccounts: zodOpenapi.z.array(bankAccountSelectSchema).nullable(),
@@ -13386,7 +13408,9 @@ const partySelectOutputSchema = zodOpenapi.z.object({
13386
13408
  zodOpenapi.z.array(partySelectOutputSchema);
13387
13409
  const partySelectDataSchema = zodOpenapi.z.object({
13388
13410
  party: partyOutputSchema$1.nullable(),
13389
- personalData: individualSelectSchema.nullable(),
13411
+ personalData: individualSelectSchema.extend({
13412
+ identityDocuments: zodOpenapi.z.array(idDocumentSelectSchema).nullable()
13413
+ }).nullable(),
13390
13414
  organizationData: organizationSelectSchema.nullable(),
13391
13415
  aml: amlSelectSchema.nullable()
13392
13416
  });
@@ -13741,6 +13765,15 @@ const partySchema$1 = zodOpenapi.z.object({
13741
13765
  note: zodOpenapi.z.string().optional(),
13742
13766
  countryCode: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional()
13743
13767
  });
13768
+ const idDocumentInputSchema$1 = zodOpenapi.z.object({
13769
+ idDocType: zodOpenapi.z.enum(ID_DOC_TYPE),
13770
+ idDocNumber: zodOpenapi.z.string(),
13771
+ issueDate: zodOpenapi.z.date().optional(),
13772
+ expirationDate: zodOpenapi.z.date().optional(),
13773
+ issuer: zodOpenapi.z.string().optional(),
13774
+ frontImageUri: zodOpenapi.z.string().optional(),
13775
+ backImageUri: zodOpenapi.z.string().optional()
13776
+ });
13744
13777
  const individualInsertSchema = zodOpenapi.z.object({
13745
13778
  internalId: zodOpenapi.z.string().optional(),
13746
13779
  name: zodOpenapi.z.string().min(1, "Jm\xE9no je povinn\xE9"),
@@ -13766,7 +13799,8 @@ const individualInsertSchema = zodOpenapi.z.object({
13766
13799
  deathNotification: zodOpenapi.z.date().optional(),
13767
13800
  pin: zodOpenapi.z.string().optional(),
13768
13801
  stayAbroad: zodOpenapi.z.boolean().optional(),
13769
- stayAbroadCountries: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional()
13802
+ stayAbroadCountries: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional(),
13803
+ identityDocuments: zodOpenapi.z.array(idDocumentInputSchema$1).optional()
13770
13804
  });
13771
13805
  const createOrganizationInputSchema = zodOpenapi.z.object({
13772
13806
  internalId: zodOpenapi.z.string().optional(),
@@ -13793,7 +13827,8 @@ const createOrganizationInputSchema = zodOpenapi.z.object({
13793
13827
  operationCountries: zodOpenapi.z.string(),
13794
13828
  riskyBusinessType: zodOpenapi.z.string().optional(),
13795
13829
  vatId: zodOpenapi.z.string().optional(),
13796
- court: zodOpenapi.z.enum(COURT).optional()
13830
+ court: zodOpenapi.z.enum(COURT).optional(),
13831
+ registerUri: zodOpenapi.z.string().optional()
13797
13832
  });
13798
13833
  const updateBankAccountSchema = zodOpenapi.z.object({
13799
13834
  ...bankAccountMetadataSchema.shape,
@@ -13806,7 +13841,8 @@ const updateBankAccountSchema = zodOpenapi.z.object({
13806
13841
  number: zodOpenapi.z.string().min(1, "\u010C\xEDslo \xFA\u010Dtu je povinn\xE9").optional(),
13807
13842
  currency: zodOpenapi.z.enum(generalCodes.CURRENCY_CODES, "M\u011Bna je povinn\xE1"),
13808
13843
  countryCode: bankAccountMetadataSchema.shape.countryCode.nonoptional(),
13809
- id: bankAccountMetadataSchema.shape.id.nonoptional()
13844
+ id: bankAccountMetadataSchema.shape.id.nonoptional(),
13845
+ statementUri: zodOpenapi.z.string().optional()
13810
13846
  });
13811
13847
  const bankAccountInputSchema = updateBankAccountSchema.required({
13812
13848
  holderName: true,
@@ -13934,15 +13970,6 @@ const ownerInputSchema = zodOpenapi.z.object({
13934
13970
  sharePercentage: zodOpenapi.z.number({ error: "Pod\xEDl na spole\u010Dnosti je povinn\xFD" }).min(1, "Pod\xEDl na spole\u010Dnosti je povinn\xFD").max(100),
13935
13971
  shareEstablishedAt: zodOpenapi.z.string().min(1, "Datum vzniku pod\xEDlu je povinn\xFD")
13936
13972
  });
13937
- const idDocumentInputSchema$1 = zodOpenapi.z.object({
13938
- idDocType: zodOpenapi.z.enum(ID_DOC_TYPE),
13939
- idDocNumber: zodOpenapi.z.string(),
13940
- issueDate: zodOpenapi.z.date().optional(),
13941
- expirationDate: zodOpenapi.z.date().optional(),
13942
- issuer: zodOpenapi.z.string().optional(),
13943
- frontImageUri: zodOpenapi.z.string().optional(),
13944
- backImageUri: zodOpenapi.z.string().optional()
13945
- });
13946
13973
  const legalRepresentativeInputSchema = zodOpenapi.z.object({
13947
13974
  titleBefore: zodOpenapi.z.string().optional(),
13948
13975
  name: zodOpenapi.z.string().min(1, "Jm\xE9no je povinn\xE9"),
@@ -14022,8 +14049,15 @@ new zodOpenapi.OpenAPIHono().openapi(
14022
14049
  createPartyRoute,
14023
14050
  async (context) => {
14024
14051
  const { owners, legalRepresentatives, ...partyInput } = context.req.valid("json");
14052
+ const disponentsWithDocs = (partyInput.disponents ?? []).filter(
14053
+ (d) => d.partyType === "INDIVIDUAL" && !!d.data.identityDocuments?.length
14054
+ );
14055
+ const disponentsForBatch = (partyInput.disponents ?? []).filter(
14056
+ (d) => !(d.partyType === "INDIVIDUAL" && !!d.data.identityDocuments?.length)
14057
+ );
14025
14058
  const { data: partyData, error } = await context.env.MASTER_DATA_MANAGEMENT_SERVICE.createParty({
14026
14059
  ...partyInput,
14060
+ disponents: disponentsForBatch,
14027
14061
  party: { ...partyInput.party, isRoot: true }
14028
14062
  });
14029
14063
  if (!partyData || error) {
@@ -14035,6 +14069,104 @@ new zodOpenapi.OpenAPIHono().openapi(
14035
14069
  );
14036
14070
  }
14037
14071
  const mdm = context.env.MASTER_DATA_MANAGEMENT_SERVICE;
14072
+ const docService = context.env.DOCUMENT_SERVICE;
14073
+ if (partyInput.organizationData?.registerUri) {
14074
+ await docService.acknowledgeDocument({
14075
+ storageUrl: partyInput.organizationData.registerUri,
14076
+ entityId: partyData.id
14077
+ });
14078
+ }
14079
+ for (const ba of partyInput.bankAccounts ?? []) {
14080
+ if (ba.statementUri) {
14081
+ await docService.acknowledgeDocument({
14082
+ storageUrl: ba.statementUri,
14083
+ entityId: partyData.id
14084
+ });
14085
+ }
14086
+ }
14087
+ for (const [i, doc] of (partyInput.personalData?.identityDocuments ?? []).entries()) {
14088
+ const idDocId = partyData.personalIdDocIds?.[i] ?? partyData.id;
14089
+ if (doc.frontImageUri) {
14090
+ await docService.acknowledgeDocument({
14091
+ storageUrl: doc.frontImageUri,
14092
+ entityId: idDocId
14093
+ });
14094
+ }
14095
+ if (doc.backImageUri) {
14096
+ await docService.acknowledgeDocument({
14097
+ storageUrl: doc.backImageUri,
14098
+ entityId: idDocId
14099
+ });
14100
+ }
14101
+ }
14102
+ for (const disponent of disponentsWithDocs) {
14103
+ const { identityDocuments, ...individualData } = disponent.data;
14104
+ const { data: disponentParty, error: disponentError } = await mdm.createParty({
14105
+ party: {
14106
+ partyType: "INDIVIDUAL",
14107
+ language: partyInput.party.language,
14108
+ customerStatus: "NEW"
14109
+ },
14110
+ personalData: individualData,
14111
+ organizationData: null,
14112
+ bankAccounts: null,
14113
+ recipients: null,
14114
+ disponents: null,
14115
+ addresses: [],
14116
+ aml: null
14117
+ });
14118
+ if (!disponentParty || disponentError) {
14119
+ return context.json(
14120
+ { message: "Could not create disponent party" },
14121
+ 500
14122
+ );
14123
+ }
14124
+ const { error: linkDisponentError } = await mdm.linkPartyToParty({
14125
+ fromPartyId: disponentParty.id,
14126
+ toPartyId: partyData.id,
14127
+ relationshipType: "AUTHORIZED_SIGNATORY"
14128
+ });
14129
+ if (linkDisponentError) {
14130
+ return context.json(
14131
+ { message: "Could not link disponent to party" },
14132
+ 500
14133
+ );
14134
+ }
14135
+ for (const doc of identityDocuments ?? []) {
14136
+ const { data: createdIdDoc, error: idDocError } = await mdm.createIdDocument({
14137
+ partyId: disponentParty.id,
14138
+ idDocument: {
14139
+ partyId: disponentParty.id,
14140
+ idDocType: doc.idDocType,
14141
+ idDocNumber: doc.idDocNumber,
14142
+ idDocHolderName: `${individualData.name} ${individualData.surname}`,
14143
+ issueDate: doc.issueDate,
14144
+ expirationDate: doc.expirationDate,
14145
+ issuer: doc.issuer,
14146
+ frontImageUri: doc.frontImageUri,
14147
+ backImageUri: doc.backImageUri
14148
+ }
14149
+ });
14150
+ if (!createdIdDoc || idDocError) {
14151
+ return context.json(
14152
+ { message: "Could not create disponent identity document" },
14153
+ 500
14154
+ );
14155
+ }
14156
+ if (doc.frontImageUri) {
14157
+ await docService.acknowledgeDocument({
14158
+ storageUrl: doc.frontImageUri,
14159
+ entityId: createdIdDoc.id
14160
+ });
14161
+ }
14162
+ if (doc.backImageUri) {
14163
+ await docService.acknowledgeDocument({
14164
+ storageUrl: doc.backImageUri,
14165
+ entityId: createdIdDoc.id
14166
+ });
14167
+ }
14168
+ }
14169
+ }
14038
14170
  if (owners?.length) {
14039
14171
  for (const owner of owners) {
14040
14172
  const { address, sharePercentage, shareEstablishedAt, ...individual } = owner;
@@ -14050,7 +14182,7 @@ new zodOpenapi.OpenAPIHono().openapi(
14050
14182
  recipients: null,
14051
14183
  disponents: null,
14052
14184
  addresses: [{ ...address, addressType: "PERMANENT_ADDRESS" }],
14053
- aml: partyInput.aml
14185
+ aml: null
14054
14186
  });
14055
14187
  if (ownerParty && !ownerError) {
14056
14188
  await mdm.linkPartyToParty({
@@ -14083,32 +14215,60 @@ new zodOpenapi.OpenAPIHono().openapi(
14083
14215
  recipients: null,
14084
14216
  disponents: null,
14085
14217
  addresses: [{ ...address, addressType: "PERMANENT_ADDRESS" }],
14086
- aml: partyInput.aml
14218
+ aml: null
14087
14219
  });
14088
- if (repParty && !repError) {
14089
- await mdm.linkPartyToParty({
14090
- fromPartyId: repParty.id,
14091
- toPartyId: partyData.id,
14092
- relationshipType: "BOARD_MEMBER",
14093
- fromDate: new Date(dateOfEstablishment)
14094
- });
14095
- if (identityDocuments?.length) {
14096
- for (const doc of identityDocuments) {
14097
- await mdm.createIdDocument({
14098
- partyId: repParty.id,
14099
- idDocument: {
14100
- partyId: repParty.id,
14101
- idDocType: doc.idDocType,
14102
- idDocNumber: doc.idDocNumber,
14103
- idDocHolderName: `${individual.name} ${individual.surname}`,
14104
- issueDate: doc.issueDate,
14105
- expirationDate: doc.expirationDate,
14106
- issuer: doc.issuer,
14107
- frontImageUri: doc.frontImageUri,
14108
- backImageUri: doc.backImageUri
14109
- }
14110
- });
14220
+ if (!repParty || repError) {
14221
+ return context.json(
14222
+ { message: "Could not create legal representative party" },
14223
+ 500
14224
+ );
14225
+ }
14226
+ const { error: linkRepError } = await mdm.linkPartyToParty({
14227
+ fromPartyId: repParty.id,
14228
+ toPartyId: partyData.id,
14229
+ relationshipType: "BOARD_MEMBER",
14230
+ fromDate: new Date(dateOfEstablishment)
14231
+ });
14232
+ if (linkRepError) {
14233
+ return context.json(
14234
+ { message: "Could not link legal representative to party" },
14235
+ 500
14236
+ );
14237
+ }
14238
+ for (const doc of identityDocuments ?? []) {
14239
+ const { data: createdIdDoc, error: idDocError } = await mdm.createIdDocument({
14240
+ partyId: repParty.id,
14241
+ idDocument: {
14242
+ partyId: repParty.id,
14243
+ idDocType: doc.idDocType,
14244
+ idDocNumber: doc.idDocNumber,
14245
+ idDocHolderName: `${individual.name} ${individual.surname}`,
14246
+ issueDate: doc.issueDate,
14247
+ expirationDate: doc.expirationDate,
14248
+ issuer: doc.issuer,
14249
+ frontImageUri: doc.frontImageUri,
14250
+ backImageUri: doc.backImageUri
14111
14251
  }
14252
+ });
14253
+ if (!createdIdDoc || idDocError) {
14254
+ return context.json(
14255
+ {
14256
+ message: "Could not create legal representative identity document"
14257
+ },
14258
+ 500
14259
+ );
14260
+ }
14261
+ if (doc.frontImageUri) {
14262
+ await docService.acknowledgeDocument({
14263
+ storageUrl: doc.frontImageUri,
14264
+ entityId: createdIdDoc.id
14265
+ });
14266
+ }
14267
+ if (doc.backImageUri) {
14268
+ await docService.acknowledgeDocument({
14269
+ storageUrl: doc.backImageUri,
14270
+ entityId: createdIdDoc.id
14271
+ });
14112
14272
  }
14113
14273
  }
14114
14274
  }
@@ -14131,6 +14291,16 @@ const partySchema = zodOpenapi.z.object({
14131
14291
  note: zodOpenapi.z.string().optional(),
14132
14292
  countryCode: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional()
14133
14293
  });
14294
+ const idDocumentInputSchema = zodOpenapi.z.object({
14295
+ id: zodOpenapi.z.uuid().optional(),
14296
+ idDocType: zodOpenapi.z.enum(ID_DOC_TYPE),
14297
+ idDocNumber: zodOpenapi.z.string(),
14298
+ issueDate: zodOpenapi.z.date().optional(),
14299
+ expirationDate: zodOpenapi.z.date().optional(),
14300
+ issuer: zodOpenapi.z.string().optional(),
14301
+ frontImageUri: zodOpenapi.z.string().optional(),
14302
+ backImageUri: zodOpenapi.z.string().optional()
14303
+ });
14134
14304
  const individualUpdateSchema = zodOpenapi.z.object({
14135
14305
  id: zodOpenapi.z.uuid(),
14136
14306
  partyId: zodOpenapi.z.uuid(),
@@ -14158,7 +14328,8 @@ const individualUpdateSchema = zodOpenapi.z.object({
14158
14328
  deathNotification: zodOpenapi.z.date().optional(),
14159
14329
  pin: zodOpenapi.z.string().optional(),
14160
14330
  stayAbroad: zodOpenapi.z.boolean().optional(),
14161
- stayAbroadCountries: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional()
14331
+ stayAbroadCountries: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional(),
14332
+ identityDocuments: zodOpenapi.z.array(idDocumentInputSchema).optional()
14162
14333
  });
14163
14334
  const organizationUpdateSchema = zodOpenapi.z.object({
14164
14335
  id: zodOpenapi.z.uuid(),
@@ -14187,7 +14358,8 @@ const organizationUpdateSchema = zodOpenapi.z.object({
14187
14358
  operationCountries: zodOpenapi.z.string(),
14188
14359
  riskyBusinessType: zodOpenapi.z.string().optional(),
14189
14360
  vatId: zodOpenapi.z.string().nullable().optional(),
14190
- court: zodOpenapi.z.enum(COURT).nullable().optional()
14361
+ court: zodOpenapi.z.enum(COURT).nullable().optional(),
14362
+ registerUri: zodOpenapi.z.string().optional()
14191
14363
  });
14192
14364
  const syncBankAccountSchema = zodOpenapi.z.object({
14193
14365
  ...bankAccountMetadataSchema.shape,
@@ -14197,7 +14369,8 @@ const syncBankAccountSchema = zodOpenapi.z.object({
14197
14369
  number: zodOpenapi.z.string().optional(),
14198
14370
  currency: bankAccountMetadataSchema.shape.currency.nonoptional(),
14199
14371
  countryCode: bankAccountMetadataSchema.shape.countryCode.nonoptional(),
14200
- id: zodOpenapi.z.uuid().optional()
14372
+ id: zodOpenapi.z.uuid().optional(),
14373
+ statementUri: zodOpenapi.z.string().optional()
14201
14374
  });
14202
14375
  const disponentIndividualSyncDataSchema = zodOpenapi.z.object({
14203
14376
  id: zodOpenapi.z.uuid().optional(),
@@ -14224,7 +14397,8 @@ const disponentIndividualSyncDataSchema = zodOpenapi.z.object({
14224
14397
  deathNotification: zodOpenapi.z.date().optional(),
14225
14398
  pin: zodOpenapi.z.string().optional(),
14226
14399
  stayAbroad: zodOpenapi.z.boolean().optional(),
14227
- stayAbroadCountries: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional()
14400
+ stayAbroadCountries: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional(),
14401
+ identityDocuments: zodOpenapi.z.array(idDocumentInputSchema).optional()
14228
14402
  });
14229
14403
  const disponentOrganizationSyncDataSchema = zodOpenapi.z.object({
14230
14404
  id: zodOpenapi.z.uuid().optional(),
@@ -14249,7 +14423,8 @@ const disponentOrganizationSyncDataSchema = zodOpenapi.z.object({
14249
14423
  companyObjectsDescription: zodOpenapi.z.string(),
14250
14424
  turnover3years: zodOpenapi.z.number(),
14251
14425
  operationCountries: zodOpenapi.z.string(),
14252
- riskyBusinessType: zodOpenapi.z.string().optional()
14426
+ riskyBusinessType: zodOpenapi.z.string().optional(),
14427
+ registerUri: zodOpenapi.z.string().optional()
14253
14428
  });
14254
14429
  const disponentSyncSchema = zodOpenapi.z.discriminatedUnion("partyType", [
14255
14430
  zodOpenapi.z.object({
@@ -14364,15 +14539,6 @@ const ownerSyncSchema = zodOpenapi.z.object({
14364
14539
  sharePercentage: zodOpenapi.z.number().max(100),
14365
14540
  shareEstablishedAt: zodOpenapi.z.string().min(1, "Datum vzniku pod\xEDlu je povinn\xFD")
14366
14541
  });
14367
- const idDocumentInputSchema = zodOpenapi.z.object({
14368
- idDocType: zodOpenapi.z.enum(ID_DOC_TYPE),
14369
- idDocNumber: zodOpenapi.z.string(),
14370
- issueDate: zodOpenapi.z.date().optional(),
14371
- expirationDate: zodOpenapi.z.date().optional(),
14372
- issuer: zodOpenapi.z.string().optional(),
14373
- frontImageUri: zodOpenapi.z.string().optional(),
14374
- backImageUri: zodOpenapi.z.string().optional()
14375
- });
14376
14542
  const legalRepresentativeSyncSchema = zodOpenapi.z.object({
14377
14543
  id: zodOpenapi.z.uuid().optional(),
14378
14544
  titleBefore: zodOpenapi.z.string().optional(),
@@ -14475,6 +14641,78 @@ new zodOpenapi.OpenAPIHono().openapi(
14475
14641
  if (!updatedParty || partyError) {
14476
14642
  return context.json({ message: "Could not update a Party" }, 404);
14477
14643
  }
14644
+ const docService = context.env.DOCUMENT_SERVICE;
14645
+ if (party.organizationData?.registerUri) {
14646
+ await docService.acknowledgeDocument({
14647
+ storageUrl: party.organizationData.registerUri,
14648
+ entityId: partyId
14649
+ });
14650
+ }
14651
+ for (const ba of party.bankAccounts ?? []) {
14652
+ if (ba.statementUri) {
14653
+ await docService.acknowledgeDocument({
14654
+ storageUrl: ba.statementUri,
14655
+ entityId: partyId
14656
+ });
14657
+ }
14658
+ }
14659
+ if (party.personalData?.identityDocuments?.length) {
14660
+ let newDocIdx = 0;
14661
+ for (const doc of party.personalData.identityDocuments) {
14662
+ const idDocEntityId = doc.id ? doc.id : updatedParty.newPersonalIdDocIds?.[newDocIdx++] ?? partyId;
14663
+ if (doc.frontImageUri) {
14664
+ await docService.acknowledgeDocument({
14665
+ storageUrl: doc.frontImageUri,
14666
+ entityId: idDocEntityId
14667
+ });
14668
+ }
14669
+ if (doc.backImageUri) {
14670
+ await docService.acknowledgeDocument({
14671
+ storageUrl: doc.backImageUri,
14672
+ entityId: idDocEntityId
14673
+ });
14674
+ }
14675
+ }
14676
+ }
14677
+ if (party.legalRepresentatives?.length) {
14678
+ let newBmDocIdx = 0;
14679
+ for (const rep of party.legalRepresentatives) {
14680
+ if (rep.id) continue;
14681
+ for (const doc of rep.identityDocuments ?? []) {
14682
+ const idDocEntityId = updatedParty.newBoardMemberIdDocIds?.[newBmDocIdx++] ?? partyId;
14683
+ if (doc.frontImageUri) {
14684
+ await docService.acknowledgeDocument({
14685
+ storageUrl: doc.frontImageUri,
14686
+ entityId: idDocEntityId
14687
+ });
14688
+ }
14689
+ if (doc.backImageUri) {
14690
+ await docService.acknowledgeDocument({
14691
+ storageUrl: doc.backImageUri,
14692
+ entityId: idDocEntityId
14693
+ });
14694
+ }
14695
+ }
14696
+ }
14697
+ for (const rep of party.legalRepresentatives) {
14698
+ if (!rep.id) continue;
14699
+ for (const doc of rep.identityDocuments ?? []) {
14700
+ const idDocEntityId = doc.id ? doc.id : updatedParty.newBoardMemberIdDocIds?.[newBmDocIdx++] ?? partyId;
14701
+ if (doc.frontImageUri) {
14702
+ await docService.acknowledgeDocument({
14703
+ storageUrl: doc.frontImageUri,
14704
+ entityId: idDocEntityId
14705
+ });
14706
+ }
14707
+ if (doc.backImageUri) {
14708
+ await docService.acknowledgeDocument({
14709
+ storageUrl: doc.backImageUri,
14710
+ entityId: idDocEntityId
14711
+ });
14712
+ }
14713
+ }
14714
+ }
14715
+ }
14478
14716
  return context.json(
14479
14717
  {
14480
14718
  message: "Party updated successfully",
@@ -14485,6 +14723,167 @@ new zodOpenapi.OpenAPIHono().openapi(
14485
14723
  }
14486
14724
  );
14487
14725
 
14726
+ const DOCUMENT_SIDE = ["front", "back"];
14727
+ const paramsSchema$2 = zodOpenapi.z.object({
14728
+ partyId: zodOpenapi.z.uuid()
14729
+ });
14730
+ const idDocumentCreateInputSchema = zodOpenapi.z.object({
14731
+ partyId: zodOpenapi.z.uuid(),
14732
+ idDocType: zodOpenapi.z.enum(ID_DOC_TYPE),
14733
+ idDocNumber: zodOpenapi.z.string(),
14734
+ idDocHolderName: zodOpenapi.z.string(),
14735
+ issueDate: zodOpenapi.z.coerce.date().optional(),
14736
+ expirationDate: zodOpenapi.z.coerce.date().optional(),
14737
+ issuer: zodOpenapi.z.string().optional(),
14738
+ countryOfIssue: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional(),
14739
+ idDocStatus: zodOpenapi.z.enum(ID_DOC_STATUS).optional()
14740
+ });
14741
+ const idDocumentMultipartSchema = zodOpenapi.z.object({
14742
+ idDocument: zodOpenapi.z.string(),
14743
+ documentSide: zodOpenapi.z.enum(DOCUMENT_SIDE),
14744
+ file: zodOpenapi.z.any()
14745
+ });
14746
+ const multipartOpenApiSchema = zodOpenapi.z.object({
14747
+ idDocument: zodOpenapi.z.string().openapi({
14748
+ description: "JSON stringified IdDocument payload"
14749
+ }),
14750
+ documentSide: zodOpenapi.z.enum(DOCUMENT_SIDE),
14751
+ file: zodOpenapi.z.any().openapi({
14752
+ type: "string",
14753
+ format: "binary"
14754
+ })
14755
+ });
14756
+ const idDocumentOutputSchema = zodOpenapi.z.object({
14757
+ id: zodOpenapi.z.uuid(),
14758
+ createdAt: zodOpenapi.z.iso.datetime().nullable(),
14759
+ updatedAt: zodOpenapi.z.iso.datetime().nullable(),
14760
+ deletedAt: zodOpenapi.z.iso.datetime().nullable(),
14761
+ partyId: zodOpenapi.z.uuid(),
14762
+ idDocType: zodOpenapi.z.enum(ID_DOC_TYPE),
14763
+ idDocNumber: zodOpenapi.z.string(),
14764
+ idDocHolderName: zodOpenapi.z.string(),
14765
+ issueDate: zodOpenapi.z.iso.datetime().nullable(),
14766
+ expirationDate: zodOpenapi.z.iso.datetime().nullable(),
14767
+ issuer: zodOpenapi.z.string().nullable(),
14768
+ countryOfIssue: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).nullable(),
14769
+ frontImageUri: zodOpenapi.z.string().nullable(),
14770
+ backImageUri: zodOpenapi.z.string().nullable(),
14771
+ idDocStatus: zodOpenapi.z.enum(ID_DOC_STATUS).nullable()
14772
+ });
14773
+ const responseBodySchema$3 = zodOpenapi.z.object({
14774
+ message: zodOpenapi.z.string(),
14775
+ idDocument: idDocumentOutputSchema
14776
+ });
14777
+ const createDocumentRoute = zodOpenapi.createRoute({
14778
+ method: "post",
14779
+ path: "/",
14780
+ summary: "Create ID Document",
14781
+ tags: ["ID Documents"],
14782
+ description: "Creates a new identification document for the specified party and uploads the document image (front or back side). Accepts multipart form data with the document metadata as a JSON string and the file as a binary attachment.",
14783
+ // middleware: [jwt, signature(), idempotency()],
14784
+ // security: [{ JwtAuth: [] }],
14785
+ request: {
14786
+ // headers: z.object({
14787
+ // 'X-Idempotency-Key': XIdempotencyKeyHeaderSchema,
14788
+ // 'X-Signature': XSignatureHeaderSchema,
14789
+ // 'X-Signature-Key': XSignatureKeyHeaderSchema,
14790
+ // }),
14791
+ body: {
14792
+ content: {
14793
+ "multipart/form-data": {
14794
+ schema: multipartOpenApiSchema
14795
+ }
14796
+ },
14797
+ required: true
14798
+ },
14799
+ params: paramsSchema$2
14800
+ },
14801
+ responses: {
14802
+ 200: {
14803
+ description: "Document created and file uploaded",
14804
+ content: {
14805
+ "application/json": {
14806
+ schema: responseBodySchema$3
14807
+ }
14808
+ }
14809
+ },
14810
+ 400: {
14811
+ description: "Invalid request",
14812
+ content: {
14813
+ "application/json": {
14814
+ schema: zodOpenapi.z.object({ message: zodOpenapi.z.string() })
14815
+ }
14816
+ }
14817
+ },
14818
+ 500: {
14819
+ description: "Internal server error",
14820
+ content: {
14821
+ "application/json": {
14822
+ schema: zodOpenapi.z.object({ message: zodOpenapi.z.string() })
14823
+ }
14824
+ }
14825
+ }
14826
+ }
14827
+ });
14828
+ new zodOpenapi.OpenAPIHono().openapi(
14829
+ createDocumentRoute,
14830
+ async (context) => {
14831
+ const rawBody = await context.req.parseBody();
14832
+ const { partyId } = context.req.valid("param");
14833
+ const idDocumentRaw = rawBody.idDocument;
14834
+ const documentSide = rawBody.documentSide;
14835
+ const file = rawBody.file;
14836
+ if (typeof idDocumentRaw !== "string" || !DOCUMENT_SIDE.includes(documentSide) || !(file instanceof File)) {
14837
+ return context.json({ message: "Invalid multipart payload" }, 400);
14838
+ }
14839
+ const idDocumentJson = JSON.parse(JSON.parse(idDocumentRaw));
14840
+ const idDocumentResult = idDocumentCreateInputSchema.safeParse(idDocumentJson);
14841
+ if (!idDocumentResult.success) {
14842
+ console.error(idDocumentResult.error);
14843
+ return context.json({ message: "Could not parse IdDocument" }, 400);
14844
+ }
14845
+ const {
14846
+ data: createdIdDocument,
14847
+ error: createError,
14848
+ message
14849
+ } = await context.env.MASTER_DATA_MANAGEMENT_SERVICE.createIdDocument({
14850
+ idDocument: idDocumentResult.data,
14851
+ partyId
14852
+ });
14853
+ if (!createdIdDocument || createError) {
14854
+ console.error(message);
14855
+ return context.json({ message: "Could not create IdDocument" }, 500);
14856
+ }
14857
+ const bytes = new Uint8Array(await file.arrayBuffer());
14858
+ const { data: uploadResult, error: uploadError } = await context.env.DOCUMENT_SERVICE.uploadDocument({
14859
+ entityType: "client",
14860
+ entityId: createdIdDocument.id,
14861
+ type: "kyc",
14862
+ metadata: {},
14863
+ file: {
14864
+ bytes,
14865
+ type: file.type,
14866
+ name: file.name,
14867
+ size: file.size
14868
+ }
14869
+ });
14870
+ if (!uploadResult || uploadError) {
14871
+ return context.json({ message: "File upload failed" }, 500);
14872
+ }
14873
+ return context.json(
14874
+ {
14875
+ message: "IdDocument created successfully",
14876
+ idDocument: {
14877
+ ...createdIdDocument,
14878
+ frontImageUri: documentSide === "front" ? uploadResult.storageUrl : createdIdDocument.frontImageUri,
14879
+ backImageUri: documentSide === "back" ? uploadResult.storageUrl : createdIdDocument.backImageUri
14880
+ }
14881
+ },
14882
+ 200
14883
+ );
14884
+ }
14885
+ );
14886
+
14488
14887
  const partyBaseOutputSchema = zodOpenapi.z.object({
14489
14888
  customerStatus: zodOpenapi.z.enum(CUSTOMER_STATUS),
14490
14889
  partyType: zodOpenapi.z.enum(PARTY_TYPE),
@@ -14526,7 +14925,8 @@ const individualOutputSchema = zodOpenapi.z.object({
14526
14925
  stayAbroad: zodOpenapi.z.boolean().nullable(),
14527
14926
  stayAbroadCountries: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).nullable(),
14528
14927
  createdAt: zodOpenapi.z.coerce.date().nullable(),
14529
- updatedAt: zodOpenapi.z.coerce.date().nullable()
14928
+ updatedAt: zodOpenapi.z.coerce.date().nullable(),
14929
+ identityDocuments: zodOpenapi.z.array(idDocumentOutputSchema).nullable()
14530
14930
  });
14531
14931
  const createOrganizationOutputSchema = zodOpenapi.z.object({
14532
14932
  partyId: zodOpenapi.z.uuid(),
@@ -14554,7 +14954,8 @@ const createOrganizationOutputSchema = zodOpenapi.z.object({
14554
14954
  operationCountries: zodOpenapi.z.string(),
14555
14955
  riskyBusinessType: zodOpenapi.z.string().nullable(),
14556
14956
  vatId: zodOpenapi.z.string().nullable(),
14557
- court: zodOpenapi.z.enum(COURT).nullable()
14957
+ court: zodOpenapi.z.enum(COURT).nullable(),
14958
+ registerUri: zodOpenapi.z.string().nullable()
14558
14959
  });
14559
14960
  const bankAccountOutputSchema = zodOpenapi.z.object({
14560
14961
  id: zodOpenapi.z.string(),
@@ -14574,7 +14975,8 @@ const bankAccountOutputSchema = zodOpenapi.z.object({
14574
14975
  clabe: zodOpenapi.z.string().nullable(),
14575
14976
  bsb: zodOpenapi.z.string().nullable(),
14576
14977
  brBankNumber: zodOpenapi.z.string().nullable(),
14577
- updatedAt: zodOpenapi.z.coerce.date().nullable()
14978
+ updatedAt: zodOpenapi.z.coerce.date().nullable(),
14979
+ statementUri: zodOpenapi.z.string().nullable()
14578
14980
  });
14579
14981
  const disponentOutputSchema = zodOpenapi.z.discriminatedUnion("partyType", [
14580
14982
  zodOpenapi.z.object({
@@ -14711,6 +15113,9 @@ const productsOutputSchema = zodOpenapi.z.object({
14711
15113
  }).nullable(),
14712
15114
  cbs: zodOpenapi.z.object({}).nullable()
14713
15115
  });
15116
+ const recipientOutputSchema = bankAccountOutputSchema.omit({
15117
+ statementUri: true
15118
+ });
14714
15119
  const partyOutputSchema = zodOpenapi.z.object({
14715
15120
  party: partyBaseOutputSchema.nullable(),
14716
15121
  personalData: individualOutputSchema.nullable(),
@@ -14719,13 +15124,13 @@ const partyOutputSchema = zodOpenapi.z.object({
14719
15124
  disponents: zodOpenapi.z.array(disponentOutputSchema).nullable(),
14720
15125
  addresses: zodOpenapi.z.array(createAddressOutputSchema).nullable(),
14721
15126
  aml: createAmlOutputSchema.nullable(),
14722
- recipients: zodOpenapi.z.array(bankAccountOutputSchema).nullable(),
15127
+ recipients: zodOpenapi.z.array(recipientOutputSchema).nullable(),
14723
15128
  products: productsOutputSchema.nullable(),
14724
15129
  traderIds: zodOpenapi.z.array(zodOpenapi.z.uuid()).nullable(),
14725
15130
  owners: zodOpenapi.z.array(ownerOutputSchema).nullable(),
14726
15131
  legalRepresentatives: zodOpenapi.z.array(legalRepresentativeOutputSchema).nullable()
14727
15132
  });
14728
- const responseBodySchema$3 = zodOpenapi.z.object({
15133
+ const responseBodySchema$2 = zodOpenapi.z.object({
14729
15134
  message: zodOpenapi.z.string(),
14730
15135
  party: partyOutputSchema
14731
15136
  });
@@ -14742,7 +15147,7 @@ const getPartyByPartyIdRoute = zodOpenapi.createRoute({
14742
15147
  200: {
14743
15148
  content: {
14744
15149
  "application/json": {
14745
- schema: responseBodySchema$3
15150
+ schema: responseBodySchema$2
14746
15151
  }
14747
15152
  },
14748
15153
  description: "Get party by party Id"
@@ -14859,167 +15264,6 @@ new zodOpenapi.OpenAPIHono().openapi(
14859
15264
  }
14860
15265
  );
14861
15266
 
14862
- const DOCUMENT_SIDE = ["front", "back"];
14863
- const paramsSchema$2 = zodOpenapi.z.object({
14864
- partyId: zodOpenapi.z.uuid()
14865
- });
14866
- const idDocumentCreateInputSchema = zodOpenapi.z.object({
14867
- partyId: zodOpenapi.z.uuid(),
14868
- idDocType: zodOpenapi.z.enum(ID_DOC_TYPE),
14869
- idDocNumber: zodOpenapi.z.string(),
14870
- idDocHolderName: zodOpenapi.z.string(),
14871
- issueDate: zodOpenapi.z.coerce.date().optional(),
14872
- expirationDate: zodOpenapi.z.coerce.date().optional(),
14873
- issuer: zodOpenapi.z.string().optional(),
14874
- countryOfIssue: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional(),
14875
- idDocStatus: zodOpenapi.z.enum(ID_DOC_STATUS).optional()
14876
- });
14877
- const idDocumentMultipartSchema = zodOpenapi.z.object({
14878
- idDocument: zodOpenapi.z.string(),
14879
- documentSide: zodOpenapi.z.enum(DOCUMENT_SIDE),
14880
- file: zodOpenapi.z.any()
14881
- });
14882
- const multipartOpenApiSchema = zodOpenapi.z.object({
14883
- idDocument: zodOpenapi.z.string().openapi({
14884
- description: "JSON stringified IdDocument payload"
14885
- }),
14886
- documentSide: zodOpenapi.z.enum(DOCUMENT_SIDE),
14887
- file: zodOpenapi.z.any().openapi({
14888
- type: "string",
14889
- format: "binary"
14890
- })
14891
- });
14892
- const idDocumentOutputSchema = zodOpenapi.z.object({
14893
- id: zodOpenapi.z.uuid(),
14894
- createdAt: zodOpenapi.z.iso.datetime().nullable(),
14895
- updatedAt: zodOpenapi.z.iso.datetime().nullable(),
14896
- deletedAt: zodOpenapi.z.iso.datetime().nullable(),
14897
- partyId: zodOpenapi.z.uuid(),
14898
- idDocType: zodOpenapi.z.enum(ID_DOC_TYPE),
14899
- idDocNumber: zodOpenapi.z.string(),
14900
- idDocHolderName: zodOpenapi.z.string(),
14901
- issueDate: zodOpenapi.z.iso.datetime().nullable(),
14902
- expirationDate: zodOpenapi.z.iso.datetime().nullable(),
14903
- issuer: zodOpenapi.z.string().nullable(),
14904
- countryOfIssue: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).nullable(),
14905
- frontImageUri: zodOpenapi.z.string().nullable(),
14906
- backImageUri: zodOpenapi.z.string().nullable(),
14907
- idDocStatus: zodOpenapi.z.enum(ID_DOC_STATUS).nullable()
14908
- });
14909
- const responseBodySchema$2 = zodOpenapi.z.object({
14910
- message: zodOpenapi.z.string(),
14911
- idDocument: idDocumentOutputSchema
14912
- });
14913
- const createDocumentRoute = zodOpenapi.createRoute({
14914
- method: "post",
14915
- path: "/",
14916
- summary: "Create ID Document",
14917
- tags: ["ID Documents"],
14918
- description: "Creates a new identification document for the specified party and uploads the document image (front or back side). Accepts multipart form data with the document metadata as a JSON string and the file as a binary attachment.",
14919
- // middleware: [jwt, signature(), idempotency()],
14920
- // security: [{ JwtAuth: [] }],
14921
- request: {
14922
- // headers: z.object({
14923
- // 'X-Idempotency-Key': XIdempotencyKeyHeaderSchema,
14924
- // 'X-Signature': XSignatureHeaderSchema,
14925
- // 'X-Signature-Key': XSignatureKeyHeaderSchema,
14926
- // }),
14927
- body: {
14928
- content: {
14929
- "multipart/form-data": {
14930
- schema: multipartOpenApiSchema
14931
- }
14932
- },
14933
- required: true
14934
- },
14935
- params: paramsSchema$2
14936
- },
14937
- responses: {
14938
- 200: {
14939
- description: "Document created and file uploaded",
14940
- content: {
14941
- "application/json": {
14942
- schema: responseBodySchema$2
14943
- }
14944
- }
14945
- },
14946
- 400: {
14947
- description: "Invalid request",
14948
- content: {
14949
- "application/json": {
14950
- schema: zodOpenapi.z.object({ message: zodOpenapi.z.string() })
14951
- }
14952
- }
14953
- },
14954
- 500: {
14955
- description: "Internal server error",
14956
- content: {
14957
- "application/json": {
14958
- schema: zodOpenapi.z.object({ message: zodOpenapi.z.string() })
14959
- }
14960
- }
14961
- }
14962
- }
14963
- });
14964
- new zodOpenapi.OpenAPIHono().openapi(
14965
- createDocumentRoute,
14966
- async (context) => {
14967
- const rawBody = await context.req.parseBody();
14968
- const { partyId } = context.req.valid("param");
14969
- const idDocumentRaw = rawBody.idDocument;
14970
- const documentSide = rawBody.documentSide;
14971
- const file = rawBody.file;
14972
- if (typeof idDocumentRaw !== "string" || !DOCUMENT_SIDE.includes(documentSide) || !(file instanceof File)) {
14973
- return context.json({ message: "Invalid multipart payload" }, 400);
14974
- }
14975
- const idDocumentJson = JSON.parse(JSON.parse(idDocumentRaw));
14976
- const idDocumentResult = idDocumentCreateInputSchema.safeParse(idDocumentJson);
14977
- if (!idDocumentResult.success) {
14978
- console.error(idDocumentResult.error);
14979
- return context.json({ message: "Could not parse IdDocument" }, 400);
14980
- }
14981
- const {
14982
- data: createdIdDocument,
14983
- error: createError,
14984
- message
14985
- } = await context.env.MASTER_DATA_MANAGEMENT_SERVICE.createIdDocument({
14986
- idDocument: idDocumentResult.data,
14987
- partyId
14988
- });
14989
- if (!createdIdDocument || createError) {
14990
- console.error(message);
14991
- return context.json({ message: "Could not create IdDocument" }, 500);
14992
- }
14993
- const bytes = new Uint8Array(await file.arrayBuffer());
14994
- const { data: uploadResult, error: uploadError } = await context.env.DOCUMENT_SERVICE.uploadDocument({
14995
- entityType: "client",
14996
- entityId: createdIdDocument.id,
14997
- type: "kyc",
14998
- metadata: {},
14999
- file: {
15000
- bytes,
15001
- type: file.type,
15002
- name: file.name,
15003
- size: file.size
15004
- }
15005
- });
15006
- if (!uploadResult || uploadError) {
15007
- return context.json({ message: "File upload failed" }, 500);
15008
- }
15009
- return context.json(
15010
- {
15011
- message: "IdDocument created successfully",
15012
- idDocument: {
15013
- ...createdIdDocument,
15014
- frontImageUri: documentSide === "front" ? uploadResult.storageUrl : createdIdDocument.frontImageUri,
15015
- backImageUri: documentSide === "back" ? uploadResult.storageUrl : createdIdDocument.backImageUri
15016
- }
15017
- },
15018
- 200
15019
- );
15020
- }
15021
- );
15022
-
15023
15267
  const XIdempotencyKeyHeaderSchema = zodOpenapi.z.string().openapi({
15024
15268
  description: "Unique identifier header to ensure the request is processed only once.",
15025
15269
  example: "4ac15c22-2bd3-426f-b915-bfd5febdb7df"