@devizovaburza/mdm-sdk 0.0.19 → 1.0.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.
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,45 +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
- const docService = context.env.DOCUMENT_SERVICE;
14097
- for (const doc of identityDocuments) {
14098
- await mdm.createIdDocument({
14099
- partyId: repParty.id,
14100
- idDocument: {
14101
- partyId: repParty.id,
14102
- idDocType: doc.idDocType,
14103
- idDocNumber: doc.idDocNumber,
14104
- idDocHolderName: `${individual.name} ${individual.surname}`,
14105
- issueDate: doc.issueDate,
14106
- expirationDate: doc.expirationDate,
14107
- issuer: doc.issuer,
14108
- frontImageUri: doc.frontImageUri,
14109
- backImageUri: doc.backImageUri
14110
- }
14111
- });
14112
- if (doc.frontImageUri) {
14113
- await docService.acknowledgeDocument({
14114
- storageUrl: doc.frontImageUri,
14115
- entityId: repParty.id
14116
- });
14117
- }
14118
- if (doc.backImageUri) {
14119
- await docService.acknowledgeDocument({
14120
- storageUrl: doc.backImageUri,
14121
- entityId: repParty.id
14122
- });
14123
- }
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
14124
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
+ });
14125
14272
  }
14126
14273
  }
14127
14274
  }
@@ -14144,6 +14291,16 @@ const partySchema = zodOpenapi.z.object({
14144
14291
  note: zodOpenapi.z.string().optional(),
14145
14292
  countryCode: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional()
14146
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
+ });
14147
14304
  const individualUpdateSchema = zodOpenapi.z.object({
14148
14305
  id: zodOpenapi.z.uuid(),
14149
14306
  partyId: zodOpenapi.z.uuid(),
@@ -14171,7 +14328,8 @@ const individualUpdateSchema = zodOpenapi.z.object({
14171
14328
  deathNotification: zodOpenapi.z.date().optional(),
14172
14329
  pin: zodOpenapi.z.string().optional(),
14173
14330
  stayAbroad: zodOpenapi.z.boolean().optional(),
14174
- 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()
14175
14333
  });
14176
14334
  const organizationUpdateSchema = zodOpenapi.z.object({
14177
14335
  id: zodOpenapi.z.uuid(),
@@ -14200,7 +14358,8 @@ const organizationUpdateSchema = zodOpenapi.z.object({
14200
14358
  operationCountries: zodOpenapi.z.string(),
14201
14359
  riskyBusinessType: zodOpenapi.z.string().optional(),
14202
14360
  vatId: zodOpenapi.z.string().nullable().optional(),
14203
- court: zodOpenapi.z.enum(COURT).nullable().optional()
14361
+ court: zodOpenapi.z.enum(COURT).nullable().optional(),
14362
+ registerUri: zodOpenapi.z.string().optional()
14204
14363
  });
14205
14364
  const syncBankAccountSchema = zodOpenapi.z.object({
14206
14365
  ...bankAccountMetadataSchema.shape,
@@ -14210,7 +14369,8 @@ const syncBankAccountSchema = zodOpenapi.z.object({
14210
14369
  number: zodOpenapi.z.string().optional(),
14211
14370
  currency: bankAccountMetadataSchema.shape.currency.nonoptional(),
14212
14371
  countryCode: bankAccountMetadataSchema.shape.countryCode.nonoptional(),
14213
- id: zodOpenapi.z.uuid().optional()
14372
+ id: zodOpenapi.z.uuid().optional(),
14373
+ statementUri: zodOpenapi.z.string().optional()
14214
14374
  });
14215
14375
  const disponentIndividualSyncDataSchema = zodOpenapi.z.object({
14216
14376
  id: zodOpenapi.z.uuid().optional(),
@@ -14237,7 +14397,8 @@ const disponentIndividualSyncDataSchema = zodOpenapi.z.object({
14237
14397
  deathNotification: zodOpenapi.z.date().optional(),
14238
14398
  pin: zodOpenapi.z.string().optional(),
14239
14399
  stayAbroad: zodOpenapi.z.boolean().optional(),
14240
- 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()
14241
14402
  });
14242
14403
  const disponentOrganizationSyncDataSchema = zodOpenapi.z.object({
14243
14404
  id: zodOpenapi.z.uuid().optional(),
@@ -14262,7 +14423,8 @@ const disponentOrganizationSyncDataSchema = zodOpenapi.z.object({
14262
14423
  companyObjectsDescription: zodOpenapi.z.string(),
14263
14424
  turnover3years: zodOpenapi.z.number(),
14264
14425
  operationCountries: zodOpenapi.z.string(),
14265
- riskyBusinessType: zodOpenapi.z.string().optional()
14426
+ riskyBusinessType: zodOpenapi.z.string().optional(),
14427
+ registerUri: zodOpenapi.z.string().optional()
14266
14428
  });
14267
14429
  const disponentSyncSchema = zodOpenapi.z.discriminatedUnion("partyType", [
14268
14430
  zodOpenapi.z.object({
@@ -14377,15 +14539,6 @@ const ownerSyncSchema = zodOpenapi.z.object({
14377
14539
  sharePercentage: zodOpenapi.z.number().max(100),
14378
14540
  shareEstablishedAt: zodOpenapi.z.string().min(1, "Datum vzniku pod\xEDlu je povinn\xFD")
14379
14541
  });
14380
- const idDocumentInputSchema = zodOpenapi.z.object({
14381
- idDocType: zodOpenapi.z.enum(ID_DOC_TYPE),
14382
- idDocNumber: zodOpenapi.z.string(),
14383
- issueDate: zodOpenapi.z.date().optional(),
14384
- expirationDate: zodOpenapi.z.date().optional(),
14385
- issuer: zodOpenapi.z.string().optional(),
14386
- frontImageUri: zodOpenapi.z.string().optional(),
14387
- backImageUri: zodOpenapi.z.string().optional()
14388
- });
14389
14542
  const legalRepresentativeSyncSchema = zodOpenapi.z.object({
14390
14543
  id: zodOpenapi.z.uuid().optional(),
14391
14544
  titleBefore: zodOpenapi.z.string().optional(),
@@ -14488,24 +14641,74 @@ new zodOpenapi.OpenAPIHono().openapi(
14488
14641
  if (!updatedParty || partyError) {
14489
14642
  return context.json({ message: "Could not update a Party" }, 404);
14490
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
+ }
14491
14677
  if (party.legalRepresentatives?.length) {
14492
- const docService = context.env.DOCUMENT_SERVICE;
14678
+ let newBmDocIdx = 0;
14493
14679
  for (const rep of party.legalRepresentatives) {
14494
- const repEntityId = rep.id ?? partyId;
14495
- if (rep.identityDocuments?.length) {
14496
- for (const doc of rep.identityDocuments) {
14497
- if (doc.frontImageUri) {
14498
- await docService.acknowledgeDocument({
14499
- storageUrl: doc.frontImageUri,
14500
- entityId: repEntityId
14501
- });
14502
- }
14503
- if (doc.backImageUri) {
14504
- await docService.acknowledgeDocument({
14505
- storageUrl: doc.backImageUri,
14506
- entityId: repEntityId
14507
- });
14508
- }
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
+ });
14509
14712
  }
14510
14713
  }
14511
14714
  }
@@ -14520,53 +14723,215 @@ new zodOpenapi.OpenAPIHono().openapi(
14520
14723
  }
14521
14724
  );
14522
14725
 
14523
- const partyBaseOutputSchema = zodOpenapi.z.object({
14524
- customerStatus: zodOpenapi.z.enum(CUSTOMER_STATUS),
14525
- partyType: zodOpenapi.z.enum(PARTY_TYPE),
14526
- language: zodOpenapi.z.enum(generalCodes.LANGUAGE_CODES),
14527
- id: zodOpenapi.z.uuid(),
14528
- internalId: zodOpenapi.z.string().nullable(),
14529
- note: zodOpenapi.z.string().nullable(),
14530
- countryCode: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).nullable(),
14531
- createdAt: zodOpenapi.z.date().nullable(),
14532
- updatedAt: zodOpenapi.z.date().nullable(),
14533
- isRoot: zodOpenapi.z.boolean()
14726
+ const DOCUMENT_SIDE = ["front", "back"];
14727
+ const paramsSchema$2 = zodOpenapi.z.object({
14728
+ partyId: zodOpenapi.z.uuid()
14534
14729
  });
14535
- const individualOutputSchema = zodOpenapi.z.object({
14536
- id: zodOpenapi.z.uuid(),
14730
+ const idDocumentCreateInputSchema = zodOpenapi.z.object({
14537
14731
  partyId: zodOpenapi.z.uuid(),
14538
- internalId: zodOpenapi.z.string().nullable(),
14539
- name: zodOpenapi.z.string(),
14540
- surname: zodOpenapi.z.string(),
14541
- email: zodOpenapi.z.string().nullable(),
14542
- phone: zodOpenapi.z.string().nullable(),
14543
- birthDate: zodOpenapi.z.string().nullable(),
14544
- birthPlace: zodOpenapi.z.string(),
14545
- countryOfBirth: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).nullable(),
14546
- personalId: zodOpenapi.z.string(),
14547
- gender: zodOpenapi.z.enum(GENDER),
14548
- citizenship: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2),
14549
- citizenshipOther: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).nullable(),
14550
- employer: zodOpenapi.z.string().nullable(),
14551
- employerCountry: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).nullable(),
14552
- registeredNumber: zodOpenapi.z.string().nullable(),
14553
- isPep: zodOpenapi.z.boolean(),
14554
- titleBefore: zodOpenapi.z.string().nullable(),
14555
- titleAfter: zodOpenapi.z.string().nullable(),
14556
- birthSurname: zodOpenapi.z.string().nullable(),
14557
- vocativeTitle: zodOpenapi.z.string().nullable(),
14558
- deathDate: zodOpenapi.z.coerce.date().nullable(),
14559
- deathNotification: zodOpenapi.z.coerce.date().nullable(),
14560
- pin: zodOpenapi.z.string().nullable(),
14561
- stayAbroad: zodOpenapi.z.boolean().nullable(),
14562
- stayAbroadCountries: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).nullable(),
14563
- createdAt: zodOpenapi.z.coerce.date().nullable(),
14564
- updatedAt: zodOpenapi.z.coerce.date().nullable()
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()
14565
14740
  });
14566
- const createOrganizationOutputSchema = zodOpenapi.z.object({
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(),
14567
14761
  partyId: zodOpenapi.z.uuid(),
14568
- internalId: zodOpenapi.z.string().nullable(),
14569
- businessName: zodOpenapi.z.string(),
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
+
14887
+ const partyBaseOutputSchema = zodOpenapi.z.object({
14888
+ customerStatus: zodOpenapi.z.enum(CUSTOMER_STATUS),
14889
+ partyType: zodOpenapi.z.enum(PARTY_TYPE),
14890
+ language: zodOpenapi.z.enum(generalCodes.LANGUAGE_CODES),
14891
+ id: zodOpenapi.z.uuid(),
14892
+ internalId: zodOpenapi.z.string().nullable(),
14893
+ note: zodOpenapi.z.string().nullable(),
14894
+ countryCode: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).nullable(),
14895
+ createdAt: zodOpenapi.z.date().nullable(),
14896
+ updatedAt: zodOpenapi.z.date().nullable(),
14897
+ isRoot: zodOpenapi.z.boolean()
14898
+ });
14899
+ const individualOutputSchema = zodOpenapi.z.object({
14900
+ id: zodOpenapi.z.uuid(),
14901
+ partyId: zodOpenapi.z.uuid(),
14902
+ internalId: zodOpenapi.z.string().nullable(),
14903
+ name: zodOpenapi.z.string(),
14904
+ surname: zodOpenapi.z.string(),
14905
+ email: zodOpenapi.z.string().nullable(),
14906
+ phone: zodOpenapi.z.string().nullable(),
14907
+ birthDate: zodOpenapi.z.string().nullable(),
14908
+ birthPlace: zodOpenapi.z.string(),
14909
+ countryOfBirth: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).nullable(),
14910
+ personalId: zodOpenapi.z.string(),
14911
+ gender: zodOpenapi.z.enum(GENDER),
14912
+ citizenship: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2),
14913
+ citizenshipOther: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).nullable(),
14914
+ employer: zodOpenapi.z.string().nullable(),
14915
+ employerCountry: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).nullable(),
14916
+ registeredNumber: zodOpenapi.z.string().nullable(),
14917
+ isPep: zodOpenapi.z.boolean(),
14918
+ titleBefore: zodOpenapi.z.string().nullable(),
14919
+ titleAfter: zodOpenapi.z.string().nullable(),
14920
+ birthSurname: zodOpenapi.z.string().nullable(),
14921
+ vocativeTitle: zodOpenapi.z.string().nullable(),
14922
+ deathDate: zodOpenapi.z.coerce.date().nullable(),
14923
+ deathNotification: zodOpenapi.z.coerce.date().nullable(),
14924
+ pin: zodOpenapi.z.string().nullable(),
14925
+ stayAbroad: zodOpenapi.z.boolean().nullable(),
14926
+ stayAbroadCountries: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).nullable(),
14927
+ createdAt: zodOpenapi.z.coerce.date().nullable(),
14928
+ updatedAt: zodOpenapi.z.coerce.date().nullable(),
14929
+ identityDocuments: zodOpenapi.z.array(idDocumentOutputSchema).nullable()
14930
+ });
14931
+ const createOrganizationOutputSchema = zodOpenapi.z.object({
14932
+ partyId: zodOpenapi.z.uuid(),
14933
+ internalId: zodOpenapi.z.string().nullable(),
14934
+ businessName: zodOpenapi.z.string(),
14570
14935
  email: zodOpenapi.z.string().nullable(),
14571
14936
  phone: zodOpenapi.z.string().nullable(),
14572
14937
  registeredNumber: zodOpenapi.z.string(),
@@ -14589,7 +14954,8 @@ const createOrganizationOutputSchema = zodOpenapi.z.object({
14589
14954
  operationCountries: zodOpenapi.z.string(),
14590
14955
  riskyBusinessType: zodOpenapi.z.string().nullable(),
14591
14956
  vatId: zodOpenapi.z.string().nullable(),
14592
- court: zodOpenapi.z.enum(COURT).nullable()
14957
+ court: zodOpenapi.z.enum(COURT).nullable(),
14958
+ registerUri: zodOpenapi.z.string().nullable()
14593
14959
  });
14594
14960
  const bankAccountOutputSchema = zodOpenapi.z.object({
14595
14961
  id: zodOpenapi.z.string(),
@@ -14609,7 +14975,8 @@ const bankAccountOutputSchema = zodOpenapi.z.object({
14609
14975
  clabe: zodOpenapi.z.string().nullable(),
14610
14976
  bsb: zodOpenapi.z.string().nullable(),
14611
14977
  brBankNumber: zodOpenapi.z.string().nullable(),
14612
- updatedAt: zodOpenapi.z.coerce.date().nullable()
14978
+ updatedAt: zodOpenapi.z.coerce.date().nullable(),
14979
+ statementUri: zodOpenapi.z.string().nullable()
14613
14980
  });
14614
14981
  const disponentOutputSchema = zodOpenapi.z.discriminatedUnion("partyType", [
14615
14982
  zodOpenapi.z.object({
@@ -14746,6 +15113,9 @@ const productsOutputSchema = zodOpenapi.z.object({
14746
15113
  }).nullable(),
14747
15114
  cbs: zodOpenapi.z.object({}).nullable()
14748
15115
  });
15116
+ const recipientOutputSchema = bankAccountOutputSchema.omit({
15117
+ statementUri: true
15118
+ });
14749
15119
  const partyOutputSchema = zodOpenapi.z.object({
14750
15120
  party: partyBaseOutputSchema.nullable(),
14751
15121
  personalData: individualOutputSchema.nullable(),
@@ -14754,13 +15124,13 @@ const partyOutputSchema = zodOpenapi.z.object({
14754
15124
  disponents: zodOpenapi.z.array(disponentOutputSchema).nullable(),
14755
15125
  addresses: zodOpenapi.z.array(createAddressOutputSchema).nullable(),
14756
15126
  aml: createAmlOutputSchema.nullable(),
14757
- recipients: zodOpenapi.z.array(bankAccountOutputSchema).nullable(),
15127
+ recipients: zodOpenapi.z.array(recipientOutputSchema).nullable(),
14758
15128
  products: productsOutputSchema.nullable(),
14759
15129
  traderIds: zodOpenapi.z.array(zodOpenapi.z.uuid()).nullable(),
14760
15130
  owners: zodOpenapi.z.array(ownerOutputSchema).nullable(),
14761
15131
  legalRepresentatives: zodOpenapi.z.array(legalRepresentativeOutputSchema).nullable()
14762
15132
  });
14763
- const responseBodySchema$3 = zodOpenapi.z.object({
15133
+ const responseBodySchema$2 = zodOpenapi.z.object({
14764
15134
  message: zodOpenapi.z.string(),
14765
15135
  party: partyOutputSchema
14766
15136
  });
@@ -14777,7 +15147,7 @@ const getPartyByPartyIdRoute = zodOpenapi.createRoute({
14777
15147
  200: {
14778
15148
  content: {
14779
15149
  "application/json": {
14780
- schema: responseBodySchema$3
15150
+ schema: responseBodySchema$2
14781
15151
  }
14782
15152
  },
14783
15153
  description: "Get party by party Id"
@@ -14894,167 +15264,6 @@ new zodOpenapi.OpenAPIHono().openapi(
14894
15264
  }
14895
15265
  );
14896
15266
 
14897
- const DOCUMENT_SIDE = ["front", "back"];
14898
- const paramsSchema$2 = zodOpenapi.z.object({
14899
- partyId: zodOpenapi.z.uuid()
14900
- });
14901
- const idDocumentCreateInputSchema = zodOpenapi.z.object({
14902
- partyId: zodOpenapi.z.uuid(),
14903
- idDocType: zodOpenapi.z.enum(ID_DOC_TYPE),
14904
- idDocNumber: zodOpenapi.z.string(),
14905
- idDocHolderName: zodOpenapi.z.string(),
14906
- issueDate: zodOpenapi.z.coerce.date().optional(),
14907
- expirationDate: zodOpenapi.z.coerce.date().optional(),
14908
- issuer: zodOpenapi.z.string().optional(),
14909
- countryOfIssue: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional(),
14910
- idDocStatus: zodOpenapi.z.enum(ID_DOC_STATUS).optional()
14911
- });
14912
- const idDocumentMultipartSchema = zodOpenapi.z.object({
14913
- idDocument: zodOpenapi.z.string(),
14914
- documentSide: zodOpenapi.z.enum(DOCUMENT_SIDE),
14915
- file: zodOpenapi.z.any()
14916
- });
14917
- const multipartOpenApiSchema = zodOpenapi.z.object({
14918
- idDocument: zodOpenapi.z.string().openapi({
14919
- description: "JSON stringified IdDocument payload"
14920
- }),
14921
- documentSide: zodOpenapi.z.enum(DOCUMENT_SIDE),
14922
- file: zodOpenapi.z.any().openapi({
14923
- type: "string",
14924
- format: "binary"
14925
- })
14926
- });
14927
- const idDocumentOutputSchema = zodOpenapi.z.object({
14928
- id: zodOpenapi.z.uuid(),
14929
- createdAt: zodOpenapi.z.iso.datetime().nullable(),
14930
- updatedAt: zodOpenapi.z.iso.datetime().nullable(),
14931
- deletedAt: zodOpenapi.z.iso.datetime().nullable(),
14932
- partyId: zodOpenapi.z.uuid(),
14933
- idDocType: zodOpenapi.z.enum(ID_DOC_TYPE),
14934
- idDocNumber: zodOpenapi.z.string(),
14935
- idDocHolderName: zodOpenapi.z.string(),
14936
- issueDate: zodOpenapi.z.iso.datetime().nullable(),
14937
- expirationDate: zodOpenapi.z.iso.datetime().nullable(),
14938
- issuer: zodOpenapi.z.string().nullable(),
14939
- countryOfIssue: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).nullable(),
14940
- frontImageUri: zodOpenapi.z.string().nullable(),
14941
- backImageUri: zodOpenapi.z.string().nullable(),
14942
- idDocStatus: zodOpenapi.z.enum(ID_DOC_STATUS).nullable()
14943
- });
14944
- const responseBodySchema$2 = zodOpenapi.z.object({
14945
- message: zodOpenapi.z.string(),
14946
- idDocument: idDocumentOutputSchema
14947
- });
14948
- const createDocumentRoute = zodOpenapi.createRoute({
14949
- method: "post",
14950
- path: "/",
14951
- summary: "Create ID Document",
14952
- tags: ["ID Documents"],
14953
- 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.",
14954
- // middleware: [jwt, signature(), idempotency()],
14955
- // security: [{ JwtAuth: [] }],
14956
- request: {
14957
- // headers: z.object({
14958
- // 'X-Idempotency-Key': XIdempotencyKeyHeaderSchema,
14959
- // 'X-Signature': XSignatureHeaderSchema,
14960
- // 'X-Signature-Key': XSignatureKeyHeaderSchema,
14961
- // }),
14962
- body: {
14963
- content: {
14964
- "multipart/form-data": {
14965
- schema: multipartOpenApiSchema
14966
- }
14967
- },
14968
- required: true
14969
- },
14970
- params: paramsSchema$2
14971
- },
14972
- responses: {
14973
- 200: {
14974
- description: "Document created and file uploaded",
14975
- content: {
14976
- "application/json": {
14977
- schema: responseBodySchema$2
14978
- }
14979
- }
14980
- },
14981
- 400: {
14982
- description: "Invalid request",
14983
- content: {
14984
- "application/json": {
14985
- schema: zodOpenapi.z.object({ message: zodOpenapi.z.string() })
14986
- }
14987
- }
14988
- },
14989
- 500: {
14990
- description: "Internal server error",
14991
- content: {
14992
- "application/json": {
14993
- schema: zodOpenapi.z.object({ message: zodOpenapi.z.string() })
14994
- }
14995
- }
14996
- }
14997
- }
14998
- });
14999
- new zodOpenapi.OpenAPIHono().openapi(
15000
- createDocumentRoute,
15001
- async (context) => {
15002
- const rawBody = await context.req.parseBody();
15003
- const { partyId } = context.req.valid("param");
15004
- const idDocumentRaw = rawBody.idDocument;
15005
- const documentSide = rawBody.documentSide;
15006
- const file = rawBody.file;
15007
- if (typeof idDocumentRaw !== "string" || !DOCUMENT_SIDE.includes(documentSide) || !(file instanceof File)) {
15008
- return context.json({ message: "Invalid multipart payload" }, 400);
15009
- }
15010
- const idDocumentJson = JSON.parse(JSON.parse(idDocumentRaw));
15011
- const idDocumentResult = idDocumentCreateInputSchema.safeParse(idDocumentJson);
15012
- if (!idDocumentResult.success) {
15013
- console.error(idDocumentResult.error);
15014
- return context.json({ message: "Could not parse IdDocument" }, 400);
15015
- }
15016
- const {
15017
- data: createdIdDocument,
15018
- error: createError,
15019
- message
15020
- } = await context.env.MASTER_DATA_MANAGEMENT_SERVICE.createIdDocument({
15021
- idDocument: idDocumentResult.data,
15022
- partyId
15023
- });
15024
- if (!createdIdDocument || createError) {
15025
- console.error(message);
15026
- return context.json({ message: "Could not create IdDocument" }, 500);
15027
- }
15028
- const bytes = new Uint8Array(await file.arrayBuffer());
15029
- const { data: uploadResult, error: uploadError } = await context.env.DOCUMENT_SERVICE.uploadDocument({
15030
- entityType: "client",
15031
- entityId: createdIdDocument.id,
15032
- type: "kyc",
15033
- metadata: {},
15034
- file: {
15035
- bytes,
15036
- type: file.type,
15037
- name: file.name,
15038
- size: file.size
15039
- }
15040
- });
15041
- if (!uploadResult || uploadError) {
15042
- return context.json({ message: "File upload failed" }, 500);
15043
- }
15044
- return context.json(
15045
- {
15046
- message: "IdDocument created successfully",
15047
- idDocument: {
15048
- ...createdIdDocument,
15049
- frontImageUri: documentSide === "front" ? uploadResult.storageUrl : createdIdDocument.frontImageUri,
15050
- backImageUri: documentSide === "back" ? uploadResult.storageUrl : createdIdDocument.backImageUri
15051
- }
15052
- },
15053
- 200
15054
- );
15055
- }
15056
- );
15057
-
15058
15267
  const XIdempotencyKeyHeaderSchema = zodOpenapi.z.string().openapi({
15059
15268
  description: "Unique identifier header to ensure the request is processed only once.",
15060
15269
  example: "4ac15c22-2bd3-426f-b915-bfd5febdb7df"