@api-client/core 0.18.24 → 0.18.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/build/src/modeling/DomainEntity.d.ts +6 -1
  2. package/build/src/modeling/DomainEntity.d.ts.map +1 -1
  3. package/build/src/modeling/DomainEntity.js +24 -5
  4. package/build/src/modeling/DomainEntity.js.map +1 -1
  5. package/build/src/modeling/Semantics.d.ts +254 -0
  6. package/build/src/modeling/Semantics.d.ts.map +1 -1
  7. package/build/src/modeling/Semantics.js +328 -0
  8. package/build/src/modeling/Semantics.js.map +1 -1
  9. package/build/src/modeling/definitions/Email.js +1 -1
  10. package/build/src/modeling/definitions/Email.js.map +1 -1
  11. package/build/src/modeling/definitions/Password.d.ts.map +1 -1
  12. package/build/src/modeling/definitions/Password.js +1 -3
  13. package/build/src/modeling/definitions/Password.js.map +1 -1
  14. package/build/src/modeling/helpers/Intelisense.d.ts +7 -7
  15. package/build/src/modeling/helpers/Intelisense.d.ts.map +1 -1
  16. package/build/src/modeling/helpers/Intelisense.js +24 -58
  17. package/build/src/modeling/helpers/Intelisense.js.map +1 -1
  18. package/build/src/modeling/templates/meta/blog-publishing-platform.json +1 -1
  19. package/build/src/modeling/templates/meta/financial-services-platform.json +1 -1
  20. package/build/src/modeling/templates/meta/index.d.ts +1 -1
  21. package/build/src/modeling/templates/meta/index.js +1 -1
  22. package/build/src/modeling/templates/meta/index.js.map +1 -1
  23. package/build/src/modeling/templates/meta/iot-smart-home-platform.json +1 -1
  24. package/build/src/modeling/templates/verticals/business-services/financial-services-domain.d.ts.map +1 -1
  25. package/build/src/modeling/templates/verticals/business-services/financial-services-domain.js +248 -63
  26. package/build/src/modeling/templates/verticals/business-services/financial-services-domain.js.map +1 -1
  27. package/build/src/modeling/templates/verticals/technology-media/blog-domain.js +5 -5
  28. package/build/src/modeling/templates/verticals/technology-media/blog-domain.js.map +1 -1
  29. package/build/src/modeling/templates/verticals/technology-media/iot-smart-home-domain.d.ts.map +1 -1
  30. package/build/src/modeling/templates/verticals/technology-media/iot-smart-home-domain.js +2 -0
  31. package/build/src/modeling/templates/verticals/technology-media/iot-smart-home-domain.js.map +1 -1
  32. package/build/src/modeling/validation/postgresql.d.ts.map +1 -1
  33. package/build/src/modeling/validation/postgresql.js +0 -1
  34. package/build/src/modeling/validation/postgresql.js.map +1 -1
  35. package/build/src/runtime/modeling/Semantics.d.ts +84 -0
  36. package/build/src/runtime/modeling/Semantics.d.ts.map +1 -0
  37. package/build/src/runtime/modeling/Semantics.js +124 -0
  38. package/build/src/runtime/modeling/Semantics.js.map +1 -0
  39. package/build/tsconfig.tsbuildinfo +1 -1
  40. package/data/models/example-generator-api.json +8 -8
  41. package/package.json +1 -1
  42. package/src/modeling/DomainEntity.ts +27 -5
  43. package/src/modeling/Semantics.ts +493 -0
  44. package/src/modeling/definitions/Email.ts +1 -1
  45. package/src/modeling/definitions/Password.ts +1 -3
  46. package/src/modeling/helpers/Intelisense.ts +33 -65
  47. package/src/modeling/templates/meta/blog-publishing-platform.json +1 -1
  48. package/src/modeling/templates/meta/financial-services-platform.json +1 -1
  49. package/src/modeling/templates/meta/iot-smart-home-platform.json +1 -1
  50. package/src/modeling/templates/verticals/business-services/financial-services-domain.ts +285 -65
  51. package/src/modeling/templates/verticals/technology-media/blog-domain.ts +5 -5
  52. package/src/modeling/templates/verticals/technology-media/iot-smart-home-domain.ts +2 -0
  53. package/src/modeling/validation/postgresql.ts +0 -1
  54. package/src/runtime/modeling/Semantics.ts +196 -0
  55. package/tests/unit/modeling/client_ip_address_semantic.spec.ts +71 -0
  56. package/tests/unit/modeling/definitions/password.spec.ts +0 -2
  57. package/tests/unit/modeling/domain_entity_parents.spec.ts +243 -0
  58. package/tests/unit/modeling/semantic_runtime.spec.ts +113 -0
  59. package/tests/unit/modeling/semantics.spec.ts +68 -0
@@ -147,9 +147,7 @@ export const DEFAULT_PASSWORD_CONFIG: PasswordConfig = {
147
147
  requireNumbers: true,
148
148
  requireUppercase: true,
149
149
  requireLowercase: true,
150
- encryptionAlgorithm: PasswordEncryptionAlgorithm.Bcrypt,
151
- saltRounds: 12,
152
- maxAge: undefined,
150
+ minLength: 8,
153
151
  preventReuse: false,
154
152
  preventReuseCount: 5,
155
153
  allowCommonPasswords: false,
@@ -4,12 +4,12 @@ import type { DomainProperty } from '../DomainProperty.js'
4
4
  import type { DomainAssociation } from '../DomainAssociation.js'
5
5
  import type { IThing } from '../../models/Thing.js'
6
6
  import { SemanticType } from '../Semantics.js'
7
- import { createEmailSemantic } from '../definitions/Email.js'
8
- import { createPasswordSemantic } from '../definitions/Password.js'
7
+ import { createEmailSemantic, DEFAULT_EMAIL_CONFIG } from '../definitions/Email.js'
8
+ import { createPasswordSemantic, DEFAULT_PASSWORD_CONFIG } from '../definitions/Password.js'
9
9
  import { createPhoneSemantic } from '../definitions/Phone.js'
10
10
  import { createPublicUniqueNameSemantic, DEFAULT_PUBLIC_UNIQUE_NAME_CONFIG } from '../definitions/PublicUniqueName.js'
11
11
  import { createDescriptionSemantic } from '../definitions/Description.js'
12
- import { createCurrencySemantic } from '../definitions/Currency.js'
12
+ import { CURRENCY_PRESETS } from '../definitions/Currency.js'
13
13
  import { createStatusSemantic } from '../definitions/Status.js'
14
14
  import { SKU_PRESETS } from '../definitions/SKU.js'
15
15
 
@@ -95,7 +95,7 @@ export function addAutoField(entity: DomainEntity, autoField: string): DomainEle
95
95
  * @param entity The entity to which the ID field will be added.
96
96
  * @returns The added primary field property.
97
97
  */
98
- export function addIdField(entity: DomainEntity, info: Partial<IThing> = {}): DomainElement {
98
+ export function addIdField(entity: DomainEntity, info: Partial<IThing> = {}): DomainProperty {
99
99
  const existing = findIdField(entity, true)
100
100
  if (existing) {
101
101
  // If the ID field already exists, return it.
@@ -121,7 +121,7 @@ export function addIdField(entity: DomainEntity, info: Partial<IThing> = {}): Do
121
121
  * @param entity The entity to which the email field will be added.
122
122
  * @returns The added email field property.
123
123
  */
124
- export function addEmailField(entity: DomainEntity, info: Partial<IThing> = {}): DomainElement {
124
+ export function addEmailField(entity: DomainEntity, info: Partial<IThing> = {}): DomainProperty {
125
125
  const existing = findEmailField(entity, true)
126
126
  if (existing) {
127
127
  return existing
@@ -131,13 +131,8 @@ export function addEmailField(entity: DomainEntity, info: Partial<IThing> = {}):
131
131
  type: 'string',
132
132
  required: true,
133
133
  index: true,
134
- semantics: [
135
- createEmailSemantic({
136
- requireVerification: true,
137
- verificationMethod: 'email',
138
- }),
139
- ],
140
134
  })
135
+ prop.addSemantic(createEmailSemantic(DEFAULT_EMAIL_CONFIG))
141
136
  return prop
142
137
  }
143
138
 
@@ -149,7 +144,7 @@ export function addEmailField(entity: DomainEntity, info: Partial<IThing> = {}):
149
144
  * @param info Additional information for the password field.
150
145
  * @returns The added password field property.
151
146
  */
152
- export function addPasswordField(entity: DomainEntity, info: Partial<IThing> = {}): DomainElement {
147
+ export function addPasswordField(entity: DomainEntity, info: Partial<IThing> = {}): DomainProperty {
153
148
  const existing = findPasswordField(entity, true)
154
149
  if (existing) {
155
150
  return existing
@@ -158,16 +153,8 @@ export function addPasswordField(entity: DomainEntity, info: Partial<IThing> = {
158
153
  info: { name: 'password', displayName: 'Password', ...info },
159
154
  type: 'string',
160
155
  required: true,
161
- semantics: [
162
- createPasswordSemantic({
163
- requireSpecialChars: true,
164
- requireNumbers: true,
165
- requireUppercase: true,
166
- requireLowercase: true,
167
- minLength: 8,
168
- }),
169
- ],
170
156
  })
157
+ prop.addSemantic(createPasswordSemantic(DEFAULT_PASSWORD_CONFIG))
171
158
  return prop
172
159
  }
173
160
 
@@ -177,7 +164,7 @@ export function addPasswordField(entity: DomainEntity, info: Partial<IThing> = {
177
164
  * The version field is used to track the version of the entity.
178
165
  * @returns The added version field property.
179
166
  */
180
- export function addVersionField(entity: DomainEntity, info: Partial<IThing> = {}): DomainElement {
167
+ export function addVersionField(entity: DomainEntity, info: Partial<IThing> = {}): DomainProperty {
181
168
  const existing = findVersionField(entity, true)
182
169
  if (existing) {
183
170
  // If the version field already exists, return it.
@@ -196,7 +183,7 @@ export function addVersionField(entity: DomainEntity, info: Partial<IThing> = {}
196
183
  return prop
197
184
  }
198
185
 
199
- export function addNameField(entity: DomainEntity, info: Partial<IThing> = {}): DomainElement {
186
+ export function addNameField(entity: DomainEntity, info: Partial<IThing> = {}): DomainProperty {
200
187
  const existing = findNameField(entity, true)
201
188
  if (existing) {
202
189
  return existing
@@ -227,7 +214,7 @@ export function addNameField(entity: DomainEntity, info: Partial<IThing> = {}):
227
214
  * @param entity The entity to which the description field will be added.
228
215
  * @returns The added description field property.
229
216
  */
230
- export function addDescriptionField(entity: DomainEntity, info: Partial<IThing> = {}): DomainElement {
217
+ export function addDescriptionField(entity: DomainEntity, info: Partial<IThing> = {}): DomainProperty {
231
218
  const existing = findDescriptionField(entity, true)
232
219
  if (existing) {
233
220
  return existing
@@ -235,8 +222,8 @@ export function addDescriptionField(entity: DomainEntity, info: Partial<IThing>
235
222
  const prop = entity.addProperty({
236
223
  info: { name: 'description', displayName: 'Description', ...info },
237
224
  type: 'string',
238
- semantics: [createDescriptionSemantic()],
239
225
  })
226
+ prop.addSemantic(createDescriptionSemantic())
240
227
  return prop
241
228
  }
242
229
 
@@ -259,7 +246,7 @@ export function addDescriptionField(entity: DomainEntity, info: Partial<IThing>
259
246
  * @param info Additional information about the field.
260
247
  * @returns The added status field property.
261
248
  */
262
- export function addStatusField(entity: DomainEntity, info: Partial<IThing> = {}): DomainElement {
249
+ export function addStatusField(entity: DomainEntity, info: Partial<IThing> = {}): DomainProperty {
263
250
  const existing = findStatusField(entity, true)
264
251
  if (existing) {
265
252
  return existing
@@ -603,15 +590,15 @@ export function addPhoneField(entity: DomainEntity, info: Partial<IThing> = {}):
603
590
  info: { name: 'phone', displayName: 'Phone Number', ...info },
604
591
  type: 'string',
605
592
  index: true,
606
- semantics: [
607
- createPhoneSemantic({
608
- format: 'international',
609
- requireCountryCode: true,
610
- requireVerification: true,
611
- verificationMethod: 'sms',
612
- }),
613
- ],
614
593
  })
594
+ prop.addSemantic(
595
+ createPhoneSemantic({
596
+ format: 'international',
597
+ requireCountryCode: true,
598
+ requireVerification: true,
599
+ verificationMethod: 'sms',
600
+ })
601
+ )
615
602
  return prop
616
603
  }
617
604
 
@@ -640,8 +627,8 @@ export function addAvatarUrlField(entity: DomainEntity, info: Partial<IThing> =
640
627
  const prop = entity.addProperty({
641
628
  info: { name: 'avatar_url', displayName: 'Avatar URL', ...info },
642
629
  type: 'string',
643
- semantics: [{ id: SemanticType.ImageURL }],
644
630
  })
631
+ prop.addSemantic({ id: SemanticType.ImageURL })
645
632
  return prop
646
633
  }
647
634
 
@@ -676,8 +663,8 @@ export function addPublicUniqueNameField(entity: DomainEntity, info: Partial<ITh
676
663
  index: true,
677
664
  required: true,
678
665
  unique: true,
679
- semantics: [createPublicUniqueNameSemantic(DEFAULT_PUBLIC_UNIQUE_NAME_CONFIG)],
680
666
  })
667
+ prop.addSemantic(createPublicUniqueNameSemantic(DEFAULT_PUBLIC_UNIQUE_NAME_CONFIG))
681
668
  return prop
682
669
  }
683
670
 
@@ -707,8 +694,8 @@ export function addSkuField(entity: DomainEntity, info: Partial<IThing> = {}): D
707
694
  type: 'string',
708
695
  required: true,
709
696
  unique: true,
710
- semantics: [{ ...SKU_PRESETS.PRODUCT_STANDARD }],
711
697
  })
698
+ prop.addSemantic({ ...SKU_PRESETS.PRODUCT_STANDARD })
712
699
  return prop
713
700
  }
714
701
 
@@ -748,16 +735,8 @@ export function addPriceField(entity: DomainEntity, info: Partial<IThing> = {}):
748
735
  },
749
736
  },
750
737
  ],
751
- semantics: [
752
- createCurrencySemantic({
753
- storageFormat: 'integer_cents',
754
- defaultCurrency: 'USD',
755
- decimalPlaces: 2,
756
- allowNegative: false,
757
- validateCurrencyCode: true,
758
- }),
759
- ],
760
738
  })
739
+ prop.addSemantic({ ...CURRENCY_PRESETS.USD_CENTS })
761
740
  return prop
762
741
  }
763
742
 
@@ -843,7 +822,9 @@ export function addImagesField(entity: DomainEntity, info: Partial<IThing> = {})
843
822
  info: { name: 'images', displayName: 'Images', ...info },
844
823
  type: 'string',
845
824
  multiple: true,
846
- semantics: [{ id: SemanticType.ImageURL }],
825
+ })
826
+ prop.addSemantic({
827
+ id: SemanticType.ImageURL,
847
828
  })
848
829
  return prop
849
830
  }
@@ -880,7 +861,6 @@ export function addCustomStatusField(
880
861
  info: { name: 'status', displayName: 'Status', ...info },
881
862
  type: 'string',
882
863
  required: true,
883
- semantics: [createStatusSemantic()],
884
864
  schema: {
885
865
  enum: enumValues,
886
866
  defaultValue: {
@@ -889,6 +869,7 @@ export function addCustomStatusField(
889
869
  },
890
870
  },
891
871
  })
872
+ prop.addSemantic(createStatusSemantic())
892
873
  return prop
893
874
  }
894
875
 
@@ -1008,15 +989,8 @@ export function addUnitPriceField(entity: DomainEntity, info: Partial<IThing> =
1008
989
  info: { name: 'unitPrice', displayName: 'Unit Price', ...info },
1009
990
  type: 'number',
1010
991
  required: true,
1011
- semantics: [
1012
- createCurrencySemantic({
1013
- storageFormat: 'integer_cents',
1014
- defaultCurrency: 'USD',
1015
- decimalPlaces: 2,
1016
- allowNegative: false,
1017
- }),
1018
- ],
1019
992
  })
993
+ prop.addSemantic({ ...CURRENCY_PRESETS.USD_CENTS })
1020
994
  return prop
1021
995
  }
1022
996
 
@@ -1029,7 +1003,7 @@ export function addCurrencyAmountField(
1029
1003
  displayName: string,
1030
1004
  info: Partial<IThing> = {}
1031
1005
  ): DomainProperty {
1032
- return entity.addProperty({
1006
+ const prop = entity.addProperty({
1033
1007
  info: {
1034
1008
  name: fieldName,
1035
1009
  displayName,
@@ -1037,15 +1011,9 @@ export function addCurrencyAmountField(
1037
1011
  },
1038
1012
  type: 'number',
1039
1013
  required: true,
1040
- semantics: [
1041
- createCurrencySemantic({
1042
- storageFormat: 'integer_cents',
1043
- defaultCurrency: 'USD',
1044
- decimalPlaces: 2,
1045
- allowNegative: false,
1046
- }),
1047
- ],
1048
1014
  })
1015
+ prop.addSemantic({ ...CURRENCY_PRESETS.USD_CENTS })
1016
+ return prop
1049
1017
  }
1050
1018
 
1051
1019
  /**
@@ -1 +1 @@
1
- {"id":"blog-publishing-platform","name":"Blog Publishing Platform","description":"A comprehensive content management and publishing platform for blogs, magazines, and digital publications. Includes content management, user roles, publishing workflow, and social features.","createdAt":"2025-07-27T21:14:57.328Z","updatedAt":"2025-07-27T21:14:57.328Z","version":"1.0.0","author":"API Now! Core Team","tags":["blog","cms","publishing","content","media","editorial"],"structure":{"domain":{"name":"Blog Publishing Platform","description":"A comprehensive content management and publishing platform for blogs, magazines, and digital publications","totalEntities":8,"totalProperties":68,"totalAssociations":14},"namespaces":[{"name":"ContentManagement","displayName":"Content Management","description":"Core content creation, editing, and organization features","modelCount":2,"entityCount":4,"models":[{"name":"Publications","displayName":"Publications Management","description":"Individual blogs, magazines, or publications within the platform","entityCount":1,"entities":[{"name":"publication","displayName":"Publication","description":"Individual blog or publication site","propertyCount":8,"associationCount":0,"properties":[{"name":"id","displayName":"Publication ID","description":"Unique identifier for the publication","type":"string","primary":true,"readOnly":true,"semantics":[]},{"name":"name","displayName":"Publication Name","description":"Display name of the publication","type":"string","semantics":["Semantic#Title"]},{"name":"slug","displayName":"URL Slug","description":"URL-friendly identifier for the publication","type":"string","required":true,"unique":true,"semantics":["Semantic#PublicUniqueName"]},{"name":"description","displayName":"Description","description":"Publication description and tagline","type":"string","semantics":["Semantic#Description"]},{"name":"domain","displayName":"Custom Domain","description":"Custom domain name for the publication","type":"string","semantics":[]},{"name":"logo_url","displayName":"Logo URL","description":"URL to publication logo image","type":"string","semantics":["Semantic#ImageURL"]},{"name":"status","displayName":"Publication Status","description":"Current status of the publication","type":"string","required":true,"semantics":["Semantic#Status"],"enumValues":["active","suspended","archived"],"defaultValue":"active"},{"name":"created_at","displayName":"Created At","description":"When the publication was created","type":"datetime","readOnly":true,"semantics":["Semantic#CreatedTimestamp"]}],"associations":[],"semantics":[]}]},{"name":"Content","displayName":"Content Management","description":"Posts, pages, and other content types","entityCount":3,"entities":[{"name":"category","displayName":"Content Category","description":"Content categorization for organization and navigation","propertyCount":5,"associationCount":2,"properties":[{"name":"id","displayName":"Category ID","description":"Unique identifier for the category","type":"string","primary":true,"readOnly":true,"semantics":[]},{"name":"name","displayName":"Category Name","description":"Display name of the category","type":"string","semantics":["Semantic#Title"]},{"name":"slug","displayName":"URL Slug","description":"URL-friendly identifier for the category","type":"string","required":true,"unique":true,"semantics":["Semantic#PublicUniqueName"]},{"name":"description","displayName":"Description","description":"Category description","type":"string","semantics":["Semantic#Description"]},{"name":"color","displayName":"Color","description":"Theme color for the category","type":"string","semantics":[]}],"associations":[{"name":"publication","displayName":"Publication","description":"Publication this category belongs to","required":true,"multiple":false,"targetEntities":["publication"],"semantics":[],"cardinality":"One-to-One"},{"name":"parentCategory","displayName":"Parent Category","description":"Parent category for hierarchical organization","required":false,"multiple":false,"targetEntities":["category"],"semantics":[],"cardinality":"One-to-One"}],"semantics":[]},{"name":"Tag","displayName":"Content Tag","description":"Tags for flexible content labeling and discovery","propertyCount":3,"associationCount":1,"properties":[{"name":"id","displayName":"Tag ID","description":"Unique identifier for the tag","type":"string","primary":true,"readOnly":true,"semantics":[]},{"name":"name","displayName":"Tag Name","description":"Display name of the tag","type":"string","semantics":["Semantic#Title"]},{"name":"slug","displayName":"URL Slug","description":"URL-friendly identifier for the tag","type":"string","required":true,"unique":true,"semantics":["Semantic#PublicUniqueName"]}],"associations":[{"name":"publication","displayName":"Publication","description":"Publication this tag belongs to","required":true,"multiple":false,"targetEntities":["publication"],"semantics":[],"cardinality":"One-to-One"}],"semantics":[]},{"name":"Post","displayName":"Blog Post","description":"Individual blog posts and articles","propertyCount":16,"associationCount":4,"properties":[{"name":"id","displayName":"Post ID","description":"Unique identifier for the post","type":"string","primary":true,"readOnly":true,"semantics":[]},{"name":"title","displayName":"Post Title","description":"Title of the blog post","type":"string","required":true,"semantics":["Semantic#Title"]},{"name":"slug","displayName":"URL Slug","description":"URL-friendly identifier for the post","type":"string","required":true,"unique":true,"semantics":["Semantic#PublicUniqueName"]},{"name":"excerpt","displayName":"Excerpt","description":"Brief summary or excerpt of the post","type":"string","semantics":["Semantic#Summary"]},{"name":"content","displayName":"Content","description":"Full content of the post in HTML or Markdown","type":"string","required":true,"semantics":["Semantic#HTML"]},{"name":"content_format","displayName":"Content Format","description":"Format of the content (HTML, Markdown, etc.)","type":"string","required":true,"semantics":[],"enumValues":["html","markdown","richtext"],"defaultValue":"markdown"},{"name":"featured_image_url","displayName":"Featured Image URL","description":"URL to featured image","type":"string","semantics":["Semantic#ImageURL"]},{"name":"status","displayName":"Post Status","description":"Current publishing status of the post","type":"string","required":true,"semantics":["Semantic#Status"],"enumValues":["draft","pending_review","scheduled","published","archived"],"defaultValue":"draft"},{"name":"published_at","displayName":"Published At","description":"When the post was published","type":"datetime","readOnly":true,"semantics":["Semantic#CreatedTimestamp"]},{"name":"scheduled_at","displayName":"Scheduled At","description":"When the post is scheduled to be published","type":"datetime","semantics":[]},{"name":"view_count","displayName":"View Count","description":"Number of times the post has been viewed","type":"number","required":true,"semantics":[]},{"name":"reading_time","displayName":"Reading Time","description":"Estimated reading time in minutes","type":"number","readOnly":true,"semantics":["Semantic#Calculated"]},{"name":"word_count","displayName":"Word Count","description":"Number of words in the post content","type":"number","readOnly":true,"semantics":["Semantic#Calculated"]},{"name":"meta_title","displayName":"Meta Title","description":"SEO meta title","type":"string","semantics":[]},{"name":"meta_description","displayName":"Meta Description","description":"SEO meta description","type":"string","semantics":[]},{"name":"updated_at","displayName":"Updated At","description":"When the post was last updated","type":"datetime","readOnly":true,"semantics":["Semantic#UpdatedTimestamp"]}],"associations":[{"name":"publication","displayName":"Publication","description":"Publication this post belongs to","required":true,"multiple":false,"targetEntities":["publication"],"semantics":[],"cardinality":"One-to-One"},{"name":"categories","displayName":"Post Categories","description":"Categories this post belongs to","required":false,"multiple":true,"targetEntities":["category"],"semantics":["Semantic#Categories"],"cardinality":"One-to-Many"},{"name":"tags","displayName":"Post Tags","description":"Tags associated with this post","required":false,"multiple":true,"targetEntities":["Tag"],"semantics":["Semantic#Tags"],"cardinality":"One-to-Many"},{"name":"author","displayName":"Post Author","description":"Author who wrote this post","required":true,"multiple":false,"targetEntities":["user"],"semantics":["Semantic#ResourceOwnerIdentifier"],"cardinality":"One-to-One"}],"semantics":[]}]}]},{"name":"UserManagement","displayName":"User Management","description":"Authors, editors, subscribers, and user roles management","modelCount":1,"entityCount":1,"models":[{"name":"Users","displayName":"User Management","description":"User accounts and authentication","entityCount":1,"entities":[{"name":"user","displayName":"User Account","description":"User account for authors, editors, and subscribers","propertyCount":13,"associationCount":0,"properties":[{"name":"id","displayName":"User ID","description":"Unique identifier for the user","type":"string","primary":true,"readOnly":true,"semantics":[]},{"name":"email","displayName":"Email Address","description":"User email address for login and communication","type":"string","required":true,"semantics":["Semantic#Email"]},{"name":"password","displayName":"Password","description":"Encrypted password for authentication","type":"string","required":true,"semantics":["Semantic#Password"]},{"name":"username","displayName":"Username","description":"Unique username for the user","type":"string","required":true,"unique":true,"semantics":["Semantic#PublicUniqueName"]},{"name":"display_name","displayName":"Display Name","description":"Public display name for the user","type":"string","required":true,"semantics":[]},{"name":"first_name","displayName":"First Name","description":"User first name","type":"string","semantics":[]},{"name":"last_name","displayName":"Last Name","description":"User last name","type":"string","semantics":[]},{"name":"bio","displayName":"Biography","description":"User biography and description","type":"string","semantics":["Semantic#Description"]},{"name":"avatar_url","displayName":"Avatar URL","description":"URL to user profile picture","type":"string","semantics":["Semantic#ImageURL"]},{"name":"website","displayName":"Website","description":"User personal website URL","type":"string","semantics":["Semantic#URL"]},{"name":"role","displayName":"User Role","description":"User role for permission management","type":"string","required":true,"semantics":["Semantic#Status"],"enumValues":["subscriber","author","editor","admin","super_admin"],"defaultValue":"subscriber"},{"name":"emailVerified","displayName":"Email Verified","description":"Whether the user has verified their email","type":"boolean","required":true,"semantics":[],"defaultValue":"false"},{"name":"created_at","displayName":"Created At","description":"When the user account was created","type":"datetime","readOnly":true,"semantics":["Semantic#CreatedTimestamp"]}],"associations":[],"semantics":["Semantic#User"]}]}]},{"name":"SocialFeatures","displayName":"Social Features","description":"Comments, likes, shares, and social interactions","modelCount":1,"entityCount":1,"models":[{"name":"Comments","displayName":"Comment System","description":"Post comments and replies","entityCount":1,"entities":[{"name":"comment","displayName":"Comment","description":"User comments on posts","propertyCount":7,"associationCount":3,"properties":[{"name":"id","displayName":"Comment ID","description":"Unique identifier for the comment","type":"string","primary":true,"readOnly":true,"semantics":[]},{"name":"content","displayName":"Comment Content","description":"Content of the comment","type":"string","required":true,"semantics":[]},{"name":"author_name","displayName":"Author Name","description":"Name of the comment author (for guest comments)","type":"string","semantics":[]},{"name":"author_email","displayName":"Author Email","description":"Email of the comment author (for guest comments)","type":"string","required":true,"semantics":["Semantic#Email"]},{"name":"status","displayName":"Comment Status","description":"Moderation status of the comment","type":"string","required":true,"semantics":["Semantic#Status"],"enumValues":["pending","approved","rejected","spam"],"defaultValue":"pending"},{"name":"user_agent","displayName":"User Agent","description":"Browser user agent string","type":"string","semantics":[]},{"name":"created_at","displayName":"Created At","description":"When the comment was created","type":"datetime","readOnly":true,"semantics":["Semantic#CreatedTimestamp"]}],"associations":[{"name":"post","displayName":"Post","description":"Post this comment belongs to","required":true,"multiple":false,"targetEntities":["Post"],"semantics":[],"cardinality":"One-to-One"},{"name":"author","displayName":"Comment Author","description":"Registered user who wrote this comment","required":false,"multiple":false,"targetEntities":["user"],"semantics":["Semantic#ResourceOwnerIdentifier"],"cardinality":"One-to-One"},{"name":"parent_comment","displayName":"Parent Comment","description":"Parent comment for replies","required":false,"multiple":false,"targetEntities":["comment"],"semantics":[],"cardinality":"One-to-One"}],"semantics":[]}]}]},{"name":"Analytics","displayName":"Analytics & Tracking","description":"Analytics, metrics, and performance tracking","modelCount":1,"entityCount":1,"models":[{"name":"Analytics","displayName":"Content Analytics","description":"Content performance and user engagement metrics","entityCount":1,"entities":[{"name":"page_view","displayName":"Page View","description":"Individual page view tracking record","propertyCount":6,"associationCount":2,"properties":[{"name":"id","displayName":"Page View ID","description":"Unique identifier for the page view","type":"string","primary":true,"readOnly":true,"semantics":[]},{"name":"path","displayName":"Page Path","description":"URL path of the viewed page","type":"string","required":true,"semantics":[]},{"name":"referrer","displayName":"Referrer","description":"Referring URL","type":"string","semantics":["Semantic#URL"]},{"name":"user_agent","displayName":"User Agent","description":"Browser user agent string","type":"string","semantics":[]},{"name":"session_id","displayName":"Session ID","description":"Visitor session identifier","type":"string","semantics":[]},{"name":"viewed_at","displayName":"Viewed At","description":"When the page was viewed","type":"datetime","readOnly":true,"semantics":["Semantic#CreatedTimestamp"]}],"associations":[{"name":"post","displayName":"Viewed Post","description":"Post that was viewed (if applicable)","required":false,"multiple":false,"targetEntities":["Post"],"semantics":[],"cardinality":"One-to-One"},{"name":"publication","displayName":"Publication","description":"Publication this page view belongs to","required":true,"multiple":false,"targetEntities":["publication"],"semantics":[],"cardinality":"One-to-One"}],"semantics":[]}]}]},{"name":"MediaManagement","displayName":"Media Management","description":"Image, video, and file upload management","modelCount":1,"entityCount":1,"models":[{"name":"Media","displayName":"Media Library","description":"Uploaded files, images, and media assets","entityCount":1,"entities":[{"name":"media_file","displayName":"Media File","description":"Uploaded media files (images, videos, documents)","propertyCount":10,"associationCount":2,"properties":[{"name":"id","displayName":"Media File ID","description":"Unique identifier for the media file","type":"string","primary":true,"readOnly":true,"semantics":[]},{"name":"filename","displayName":"File Name","description":"Original filename of the uploaded file","type":"string","required":true,"semantics":[]},{"name":"storage_key","displayName":"Storage Key","description":"Unique storage key for the file","type":"string","required":true,"unique":true,"semantics":[]},{"name":"url","displayName":"File URL","description":"Public URL to access the file","type":"string","required":true,"semantics":["Semantic#URL"]},{"name":"mime_type","displayName":"MIME Type","description":"MIME type of the file","type":"string","required":true,"semantics":[]},{"name":"file_size","displayName":"File Size","description":"File size in bytes","type":"number","required":true,"semantics":[]},{"name":"width","displayName":"Image Width","description":"Width in pixels (for images)","type":"number","required":true,"semantics":[]},{"name":"height","displayName":"Image Height","description":"Height in pixels (for images)","type":"number","required":true,"semantics":[]},{"name":"alt_text","displayName":"Alt Text","description":"Alternative text for accessibility","type":"string","semantics":[]},{"name":"uploaded_at","displayName":"Uploaded At","description":"When the file was uploaded","type":"datetime","readOnly":true,"semantics":["Semantic#CreatedTimestamp"]}],"associations":[{"name":"uploader","displayName":"File Uploader","description":"User who uploaded this file","required":true,"multiple":false,"targetEntities":["user"],"semantics":["Semantic#ResourceOwnerIdentifier"],"cardinality":"One-to-One"},{"name":"publication","displayName":"Publication","description":"Publication this media file belongs to","required":true,"multiple":false,"targetEntities":["publication"],"semantics":[],"cardinality":"One-to-One"}],"semantics":[]}]}]}]}}
1
+ {"id":"blog-publishing-platform","name":"Blog Publishing Platform","description":"A comprehensive content management and publishing platform for blogs, magazines, and digital publications. Includes content management, user roles, publishing workflow, and social features.","createdAt":"2025-07-27T21:14:57.328Z","updatedAt":"2025-07-27T21:14:57.328Z","version":"1.0.0","author":"API Now! Core Team","tags":["blog","cms","publishing","content","media","editorial"],"structure":{"domain":{"name":"Blog Publishing Platform","description":"A comprehensive content management and publishing platform for blogs, magazines, and digital publications","totalEntities":8,"totalProperties":69,"totalAssociations":14},"namespaces":[{"name":"ContentManagement","displayName":"Content Management","description":"Core content creation, editing, and organization features","modelCount":2,"entityCount":4,"models":[{"name":"Publications","displayName":"Publications Management","description":"Individual blogs, magazines, or publications within the platform","entityCount":1,"entities":[{"name":"publication","displayName":"Publication","description":"Individual blog or publication site","propertyCount":8,"associationCount":0,"properties":[{"name":"id","displayName":"Publication ID","description":"Unique identifier for the publication","type":"string","primary":true,"readOnly":true,"semantics":[]},{"name":"name","displayName":"Publication Name","description":"Display name of the publication","type":"string","semantics":["Semantic#Title"]},{"name":"slug","displayName":"URL Slug","description":"URL-friendly identifier for the publication","type":"string","required":true,"unique":true,"semantics":["Semantic#PublicUniqueName"]},{"name":"description","displayName":"Description","description":"Publication description and tagline","type":"string","semantics":["Semantic#Description"]},{"name":"domain","displayName":"Custom Domain","description":"Custom domain name for the publication","type":"string","semantics":[]},{"name":"logo_url","displayName":"Logo URL","description":"URL to publication logo image","type":"string","semantics":["Semantic#ImageURL"]},{"name":"status","displayName":"Publication Status","description":"Current status of the publication","type":"string","required":true,"semantics":["Semantic#Status"],"enumValues":["active","suspended","archived"],"defaultValue":"active"},{"name":"created_at","displayName":"Created At","description":"When the publication was created","type":"datetime","readOnly":true,"semantics":["Semantic#CreatedTimestamp"]}],"associations":[],"semantics":[]}]},{"name":"Content","displayName":"Content Management","description":"Posts, pages, and other content types","entityCount":3,"entities":[{"name":"category","displayName":"Content Category","description":"Content categorization for organization and navigation","propertyCount":5,"associationCount":2,"properties":[{"name":"id","displayName":"Category ID","description":"Unique identifier for the category","type":"string","primary":true,"readOnly":true,"semantics":[]},{"name":"name","displayName":"Category Name","description":"Display name of the category","type":"string","semantics":["Semantic#Title"]},{"name":"slug","displayName":"URL Slug","description":"URL-friendly identifier for the category","type":"string","required":true,"unique":true,"semantics":["Semantic#PublicUniqueName"]},{"name":"description","displayName":"Description","description":"Category description","type":"string","semantics":["Semantic#Description"]},{"name":"color","displayName":"Color","description":"Theme color for the category","type":"string","semantics":[]}],"associations":[{"name":"publication","displayName":"Publication","description":"Publication this category belongs to","required":true,"multiple":false,"targetEntities":["publication"],"semantics":[],"cardinality":"One-to-One"},{"name":"parentCategory","displayName":"Parent Category","description":"Parent category for hierarchical organization","required":false,"multiple":false,"targetEntities":["category"],"semantics":[],"cardinality":"One-to-One"}],"semantics":[]},{"name":"Tag","displayName":"Content Tag","description":"Tags for flexible content labeling and discovery","propertyCount":3,"associationCount":1,"properties":[{"name":"id","displayName":"Tag ID","description":"Unique identifier for the tag","type":"string","primary":true,"readOnly":true,"semantics":[]},{"name":"name","displayName":"Tag Name","description":"Display name of the tag","type":"string","semantics":["Semantic#Title"]},{"name":"slug","displayName":"URL Slug","description":"URL-friendly identifier for the tag","type":"string","required":true,"unique":true,"semantics":["Semantic#PublicUniqueName"]}],"associations":[{"name":"publication","displayName":"Publication","description":"Publication this tag belongs to","required":true,"multiple":false,"targetEntities":["publication"],"semantics":[],"cardinality":"One-to-One"}],"semantics":[]},{"name":"Post","displayName":"Blog Post","description":"Individual blog posts and articles","propertyCount":16,"associationCount":4,"properties":[{"name":"id","displayName":"Post ID","description":"Unique identifier for the post","type":"string","primary":true,"readOnly":true,"semantics":[]},{"name":"title","displayName":"Post Title","description":"Title of the blog post","type":"string","required":true,"semantics":["Semantic#Title"]},{"name":"slug","displayName":"URL Slug","description":"URL-friendly identifier for the post","type":"string","required":true,"unique":true,"semantics":["Semantic#PublicUniqueName"]},{"name":"excerpt","displayName":"Excerpt","description":"Brief summary or excerpt of the post","type":"string","semantics":["Semantic#Summary"]},{"name":"content","displayName":"Content","description":"Full content of the post in HTML or Markdown","type":"string","required":true,"semantics":["Semantic#HTML"]},{"name":"content_format","displayName":"Content Format","description":"Format of the content (HTML, Markdown, etc.)","type":"string","required":true,"semantics":[],"enumValues":["html","markdown","richtext"],"defaultValue":"markdown"},{"name":"featured_image_url","displayName":"Featured Image URL","description":"URL to featured image","type":"string","semantics":["Semantic#ImageURL"]},{"name":"status","displayName":"Post Status","description":"Current publishing status of the post","type":"string","required":true,"semantics":["Semantic#Status"],"enumValues":["draft","pending_review","scheduled","published","archived"],"defaultValue":"draft"},{"name":"published_at","displayName":"Published At","description":"When the post was published","type":"datetime","readOnly":true,"semantics":["Semantic#CreatedTimestamp"]},{"name":"scheduled_at","displayName":"Scheduled At","description":"When the post is scheduled to be published","type":"datetime","semantics":[]},{"name":"view_count","displayName":"View Count","description":"Number of times the post has been viewed","type":"number","required":true,"semantics":[]},{"name":"reading_time","displayName":"Reading Time","description":"Estimated reading time in minutes","type":"number","readOnly":true,"semantics":["Semantic#Calculated"]},{"name":"word_count","displayName":"Word Count","description":"Number of words in the post content","type":"number","readOnly":true,"semantics":["Semantic#Calculated"]},{"name":"meta_title","displayName":"Meta Title","description":"SEO meta title","type":"string","semantics":[]},{"name":"meta_description","displayName":"Meta Description","description":"SEO meta description","type":"string","semantics":[]},{"name":"updated_at","displayName":"Updated At","description":"When the post was last updated","type":"datetime","readOnly":true,"semantics":["Semantic#UpdatedTimestamp"]}],"associations":[{"name":"publication","displayName":"Publication","description":"Publication this post belongs to","required":true,"multiple":false,"targetEntities":["publication"],"semantics":[],"cardinality":"One-to-One"},{"name":"categories","displayName":"Post Categories","description":"Categories this post belongs to","required":false,"multiple":true,"targetEntities":["category"],"semantics":["Semantic#Categories"],"cardinality":"One-to-Many"},{"name":"tags","displayName":"Post Tags","description":"Tags associated with this post","required":false,"multiple":true,"targetEntities":["Tag"],"semantics":["Semantic#Tags"],"cardinality":"One-to-Many"},{"name":"author","displayName":"Post Author","description":"Author who wrote this post","required":true,"multiple":false,"targetEntities":["user"],"semantics":["Semantic#ResourceOwnerIdentifier"],"cardinality":"One-to-One"}],"semantics":[]}]}]},{"name":"UserManagement","displayName":"User Management","description":"Authors, editors, subscribers, and user roles management","modelCount":1,"entityCount":1,"models":[{"name":"Users","displayName":"User Management","description":"User accounts and authentication","entityCount":1,"entities":[{"name":"user","displayName":"User Account","description":"User account for authors, editors, and subscribers","propertyCount":13,"associationCount":0,"properties":[{"name":"id","displayName":"User ID","description":"Unique identifier for the user","type":"string","primary":true,"readOnly":true,"semantics":[]},{"name":"email","displayName":"Email Address","description":"User email address for login and communication","type":"string","required":true,"semantics":["Semantic#Email"]},{"name":"password","displayName":"Password","description":"Encrypted password for authentication","type":"string","required":true,"semantics":["Semantic#Password"]},{"name":"username","displayName":"Username","description":"Unique username for the user","type":"string","required":true,"unique":true,"semantics":["Semantic#PublicUniqueName"]},{"name":"display_name","displayName":"Display Name","description":"Public display name for the user","type":"string","required":true,"semantics":[]},{"name":"first_name","displayName":"First Name","description":"User first name","type":"string","semantics":[]},{"name":"last_name","displayName":"Last Name","description":"User last name","type":"string","semantics":[]},{"name":"bio","displayName":"Biography","description":"User biography and description","type":"string","semantics":["Semantic#Description"]},{"name":"avatar_url","displayName":"Avatar URL","description":"URL to user profile picture","type":"string","semantics":["Semantic#ImageURL"]},{"name":"website","displayName":"Website","description":"User personal website URL","type":"string","semantics":["Semantic#URL"]},{"name":"role","displayName":"User Role","description":"User role for permission management","type":"string","required":true,"semantics":["Semantic#Status"],"enumValues":["subscriber","author","editor","admin","super_admin"],"defaultValue":"subscriber"},{"name":"emailVerified","displayName":"Email Verified","description":"Whether the user has verified their email","type":"boolean","required":true,"semantics":[],"defaultValue":"false"},{"name":"created_at","displayName":"Created At","description":"When the user account was created","type":"datetime","readOnly":true,"semantics":["Semantic#CreatedTimestamp"]}],"associations":[],"semantics":["Semantic#User"]}]}]},{"name":"SocialFeatures","displayName":"Social Features","description":"Comments, likes, shares, and social interactions","modelCount":1,"entityCount":1,"models":[{"name":"Comments","displayName":"Comment System","description":"Post comments and replies","entityCount":1,"entities":[{"name":"comment","displayName":"Comment","description":"User comments on posts","propertyCount":7,"associationCount":3,"properties":[{"name":"id","displayName":"Comment ID","description":"Unique identifier for the comment","type":"string","primary":true,"readOnly":true,"semantics":[]},{"name":"content","displayName":"Comment Content","description":"Content of the comment","type":"string","required":true,"semantics":[]},{"name":"author_name","displayName":"Author Name","description":"Name of the comment author (for guest comments)","type":"string","semantics":[]},{"name":"author_email","displayName":"Author Email","description":"Email of the comment author (for guest comments)","type":"string","required":true,"semantics":["Semantic#Email"]},{"name":"status","displayName":"Comment Status","description":"Moderation status of the comment","type":"string","required":true,"semantics":["Semantic#Status"],"enumValues":["pending","approved","rejected","spam"],"defaultValue":"pending"},{"name":"user_agent","displayName":"User Agent","description":"Browser user agent string","type":"string","semantics":[]},{"name":"created_at","displayName":"Created At","description":"When the comment was created","type":"datetime","readOnly":true,"semantics":["Semantic#CreatedTimestamp"]}],"associations":[{"name":"post","displayName":"Post","description":"Post this comment belongs to","required":true,"multiple":false,"targetEntities":["Post"],"semantics":[],"cardinality":"One-to-One"},{"name":"author","displayName":"Comment Author","description":"Registered user who wrote this comment","required":false,"multiple":false,"targetEntities":["user"],"semantics":["Semantic#ResourceOwnerIdentifier"],"cardinality":"One-to-One"},{"name":"parent_comment","displayName":"Parent Comment","description":"Parent comment for replies","required":false,"multiple":false,"targetEntities":["comment"],"semantics":[],"cardinality":"One-to-One"}],"semantics":[]}]}]},{"name":"Analytics","displayName":"Analytics & Tracking","description":"Analytics, metrics, and performance tracking","modelCount":1,"entityCount":1,"models":[{"name":"Analytics","displayName":"Content Analytics","description":"Content performance and user engagement metrics","entityCount":1,"entities":[{"name":"page_view","displayName":"Page View","description":"Individual page view tracking record","propertyCount":7,"associationCount":2,"properties":[{"name":"id","displayName":"Page View ID","description":"Unique identifier for the page view","type":"string","primary":true,"readOnly":true,"semantics":[]},{"name":"path","displayName":"Page Path","description":"URL path of the viewed page","type":"string","required":true,"semantics":[]},{"name":"referrer","displayName":"Referrer","description":"Referring URL","type":"string","semantics":["Semantic#URL"]},{"name":"ip_address","displayName":"IP Address","description":"Visitor IP address","type":"string","semantics":["Semantic#ClientIPAddress"]},{"name":"user_agent","displayName":"User Agent","description":"Browser user agent string","type":"string","semantics":[]},{"name":"session_id","displayName":"Session ID","description":"Visitor session identifier","type":"string","semantics":[]},{"name":"viewed_at","displayName":"Viewed At","description":"When the page was viewed","type":"datetime","readOnly":true,"semantics":["Semantic#CreatedTimestamp"]}],"associations":[{"name":"post","displayName":"Viewed Post","description":"Post that was viewed (if applicable)","required":false,"multiple":false,"targetEntities":["Post"],"semantics":[],"cardinality":"One-to-One"},{"name":"publication","displayName":"Publication","description":"Publication this page view belongs to","required":true,"multiple":false,"targetEntities":["publication"],"semantics":[],"cardinality":"One-to-One"}],"semantics":[]}]}]},{"name":"MediaManagement","displayName":"Media Management","description":"Image, video, and file upload management","modelCount":1,"entityCount":1,"models":[{"name":"Media","displayName":"Media Library","description":"Uploaded files, images, and media assets","entityCount":1,"entities":[{"name":"media_file","displayName":"Media File","description":"Uploaded media files (images, videos, documents)","propertyCount":10,"associationCount":2,"properties":[{"name":"id","displayName":"Media File ID","description":"Unique identifier for the media file","type":"string","primary":true,"readOnly":true,"semantics":[]},{"name":"filename","displayName":"File Name","description":"Original filename of the uploaded file","type":"string","required":true,"semantics":[]},{"name":"storage_key","displayName":"Storage Key","description":"Unique storage key for the file","type":"string","required":true,"unique":true,"semantics":[]},{"name":"url","displayName":"File URL","description":"Public URL to access the file","type":"string","required":true,"semantics":["Semantic#URL"]},{"name":"mime_type","displayName":"MIME Type","description":"MIME type of the file","type":"string","required":true,"semantics":[]},{"name":"file_size","displayName":"File Size","description":"File size in bytes","type":"number","required":true,"semantics":[]},{"name":"width","displayName":"Image Width","description":"Width in pixels (for images)","type":"number","required":true,"semantics":[]},{"name":"height","displayName":"Image Height","description":"Height in pixels (for images)","type":"number","required":true,"semantics":[]},{"name":"alt_text","displayName":"Alt Text","description":"Alternative text for accessibility","type":"string","semantics":[]},{"name":"uploaded_at","displayName":"Uploaded At","description":"When the file was uploaded","type":"datetime","readOnly":true,"semantics":["Semantic#CreatedTimestamp"]}],"associations":[{"name":"uploader","displayName":"File Uploader","description":"User who uploaded this file","required":true,"multiple":false,"targetEntities":["user"],"semantics":["Semantic#ResourceOwnerIdentifier"],"cardinality":"One-to-One"},{"name":"publication","displayName":"Publication","description":"Publication this media file belongs to","required":true,"multiple":false,"targetEntities":["publication"],"semantics":[],"cardinality":"One-to-One"}],"semantics":[]}]}]}]}}
@@ -1 +1 @@
1
- {"id":"financial-services-platform","name":"Financial Services Platform","description":"A comprehensive financial services platform with account management, transaction processing, customer management, investment portfolios, and compliance features. Perfect for banks, credit unions, and fintech companies.","createdAt":"2025-01-27T00:00:00.000Z","updatedAt":"2025-01-27T00:00:00.000Z","version":"1.0.0","author":"API Now! Core Team","tags":["finance","banking","investment","compliance","fraud-detection","kyc"],"structure":{"domain":{"name":"Financial Services Platform","description":"A comprehensive financial services platform with account management, transaction processing, customer management, investment portfolios, and compliance features","totalEntities":14,"totalProperties":104,"totalAssociations":14},"namespaces":[{"name":"CustomerManagement","displayName":"Customer Management","description":"Customer profiles, KYC, risk assessment, and segmentation","modelCount":1,"entityCount":3,"models":[{"name":"Customers","displayName":"Customer Management","description":"Customer profiles and information","entityCount":3,"entities":[{"name":"customer","displayName":"Customer","description":"Financial services customer with KYC and risk profile","propertyCount":15,"associationCount":0,"properties":[{"name":"id","displayName":"Customer ID","description":"Unique identifier for the customer","type":"string","primary":true,"readOnly":true,"semantics":[]},{"name":"first_name","displayName":"First Name","description":"Customer first name","type":"string","semantics":[]},{"name":"last_name","displayName":"Last Name","description":"Customer last name","type":"string","semantics":[]},{"name":"date_of_birth","displayName":"Date of Birth","description":"Customer date of birth","type":"date","required":true,"semantics":[]},{"name":"ssn","displayName":"Social Security Number","description":"Customer SSN for identification","type":"string","required":true,"writeOnly":true,"semantics":[]},{"name":"email","displayName":"Email Address","description":"Customer email address","type":"string","required":true,"semantics":["Semantic#Email"]},{"name":"phone","displayName":"Phone Number","description":"Customer phone number","type":"string","semantics":["Semantic#Phone"]},{"name":"address","displayName":"Address","description":"Customer residential address","type":"string","required":true,"semantics":[]},{"name":"city","displayName":"City","description":"Customer city","type":"string","required":true,"semantics":[]},{"name":"state","displayName":"State","description":"Customer state","type":"string","required":true,"semantics":[]},{"name":"zip_code","displayName":"ZIP Code","description":"Customer ZIP code","type":"string","required":true,"semantics":[]},{"name":"status","displayName":"Customer Status","description":"Current status of the customer account","type":"string","required":true,"semantics":["Semantic#Status"],"enumValues":["active","inactive","suspended","pending_verification"],"defaultValue":"active"},{"name":"customer_type","displayName":"Customer Type","description":"Type of customer account","type":"string","required":true,"semantics":[],"enumValues":["individual","business","trust","partnership"]},{"name":"created_at","displayName":"Created At","description":"When the customer account was created","type":"datetime","readOnly":true,"semantics":["Semantic#CreatedTimestamp"]},{"name":"updated_at","displayName":"Updated At","description":"When the customer account was last updated","type":"datetime","readOnly":true,"semantics":["Semantic#UpdatedTimestamp"]}],"associations":[],"semantics":[]},{"name":"kyc","displayName":"KYC Record","description":"Know Your Customer verification and documentation","propertyCount":6,"associationCount":1,"properties":[{"name":"id","displayName":"KYC ID","description":"Unique identifier for the KYC record","type":"string","primary":true,"readOnly":true,"semantics":[]},{"name":"status","displayName":"KYC Status","description":"Current status of KYC verification","type":"string","required":true,"semantics":["Semantic#Status"],"enumValues":["pending","verified","rejected","expired"],"defaultValue":"pending"},{"name":"verification_date","displayName":"Verification Date","description":"Date when KYC was verified","type":"date","semantics":[]},{"name":"document_type","displayName":"Document Type","description":"Type of identification document","type":"string","required":true,"semantics":[],"enumValues":["passport","drivers_license","national_id","utility_bill","bank_statement"]},{"name":"document_number","displayName":"Document Number","description":"Document identification number","type":"string","required":true,"semantics":[]},{"name":"created_at","displayName":"Created At","description":"When the KYC record was created","type":"datetime","readOnly":true,"semantics":["Semantic#CreatedTimestamp"]}],"associations":[{"name":"customer","displayName":"Customer","description":"Customer for this KYC record","required":true,"multiple":false,"targetEntities":["customer"],"semantics":[],"cardinality":"One-to-One"}],"semantics":[]},{"name":"risk_profile","displayName":"Risk Profile","description":"Customer risk assessment and scoring","propertyCount":6,"associationCount":1,"properties":[{"name":"id","displayName":"Risk Profile ID","description":"Unique identifier for the risk profile","type":"string","primary":true,"readOnly":true,"semantics":[]},{"name":"risk_score","displayName":"Risk Score","description":"Numerical risk score (1-100)","type":"number","required":true,"semantics":[]},{"name":"status","displayName":"Risk Level","description":"Risk level classification","type":"string","required":true,"semantics":["Semantic#Status"],"enumValues":["low","medium","high","very_high"],"defaultValue":"low"},{"name":"assessment_date","displayName":"Assessment Date","description":"Date when risk was assessed","type":"date","required":true,"semantics":[]},{"name":"description","displayName":"Description","description":"Risk assessment notes and factors","type":"string","semantics":["Semantic#Description"]},{"name":"created_at","displayName":"Created At","description":"When the risk profile was created","type":"datetime","readOnly":true,"semantics":["Semantic#CreatedTimestamp"]}],"associations":[{"name":"customer","displayName":"Customer","description":"Customer for this risk profile","required":true,"multiple":false,"targetEntities":["customer"],"semantics":[],"cardinality":"One-to-One"}],"semantics":[]}]}]},{"name":"AccountManagement","displayName":"Account Management","description":"Bank accounts, investment accounts, and credit cards","modelCount":1,"entityCount":3,"models":[{"name":"Accounts","displayName":"Account Management","description":"Financial accounts and products","entityCount":3,"entities":[{"name":"bank_account","displayName":"Bank Account","description":"Checking and savings accounts","propertyCount":9,"associationCount":1,"properties":[{"name":"id","displayName":"Account ID","description":"Unique identifier for the account","type":"string","primary":true,"readOnly":true,"semantics":[]},{"name":"account_number","displayName":"Account Number","description":"Bank account number","type":"string","required":true,"unique":true,"semantics":[]},{"name":"routing_number","displayName":"Routing Number","description":"Bank routing number","type":"string","required":true,"semantics":[]},{"name":"account_type","displayName":"Account Type","description":"Type of bank account","type":"string","required":true,"semantics":[],"enumValues":["checking","savings","money_market","cd"]},{"name":"balance","displayName":"Account Balance","description":"Current account balance","type":"number","required":true,"semantics":["Semantic#Currency"]},{"name":"available_balance","displayName":"Available Balance","description":"Available balance for transactions","type":"number","required":true,"semantics":["Semantic#Currency"]},{"name":"status","displayName":"Account Status","description":"Current status of the account","type":"string","required":true,"semantics":["Semantic#Status"],"enumValues":["active","inactive","frozen","closed"],"defaultValue":"active"},{"name":"created_at","displayName":"Created At","description":"When the account was created","type":"datetime","readOnly":true,"semantics":["Semantic#CreatedTimestamp"]},{"name":"updated_at","displayName":"Updated At","description":"When the account was last updated","type":"datetime","readOnly":true,"semantics":["Semantic#UpdatedTimestamp"]}],"associations":[{"name":"customer","displayName":"Account Holder","description":"Customer who owns this account","required":true,"multiple":false,"targetEntities":["customer"],"semantics":[],"cardinality":"One-to-One"}],"semantics":[]},{"name":"investment_account","displayName":"Investment Account","description":"Investment and brokerage accounts","propertyCount":7,"associationCount":1,"properties":[{"name":"id","displayName":"Investment Account ID","description":"Unique identifier for the investment account","type":"string","primary":true,"readOnly":true,"semantics":[]},{"name":"account_number","displayName":"Account Number","description":"Investment account number","type":"string","required":true,"unique":true,"semantics":[]},{"name":"account_type","displayName":"Account Type","description":"Type of investment account","type":"string","required":true,"semantics":[],"enumValues":["individual","joint","ira","401k","roth_ira"]},{"name":"total_value","displayName":"Total Portfolio Value","description":"Total value of all investments","type":"number","required":true,"semantics":["Semantic#Currency"]},{"name":"cash_balance","displayName":"Cash Balance","description":"Available cash balance","type":"number","required":true,"semantics":["Semantic#Currency"]},{"name":"status","displayName":"Account Status","description":"Current status of the investment account","type":"string","required":true,"semantics":["Semantic#Status"],"enumValues":["active","inactive","suspended","closed"],"defaultValue":"active"},{"name":"created_at","displayName":"Created At","description":"When the investment account was created","type":"datetime","readOnly":true,"semantics":["Semantic#CreatedTimestamp"]}],"associations":[{"name":"customer","displayName":"Account Holder","description":"Customer who owns this investment account","required":true,"multiple":false,"targetEntities":["customer"],"semantics":[],"cardinality":"One-to-One"}],"semantics":[]},{"name":"credit_card","displayName":"Credit Card","description":"Credit card accounts and lines of credit","propertyCount":8,"associationCount":1,"properties":[{"name":"id","displayName":"Credit Card ID","description":"Unique identifier for the credit card","type":"string","primary":true,"readOnly":true,"semantics":[]},{"name":"card_number","displayName":"Card Number","description":"Credit card number (masked)","type":"string","required":true,"writeOnly":true,"semantics":[]},{"name":"credit_limit","displayName":"Credit Limit","description":"Total credit limit","type":"number","required":true,"semantics":["Semantic#Currency"]},{"name":"available_credit","displayName":"Available Credit","description":"Available credit remaining","type":"number","required":true,"semantics":["Semantic#Currency"]},{"name":"current_balance","displayName":"Current Balance","description":"Current outstanding balance","type":"number","required":true,"semantics":["Semantic#Currency"]},{"name":"apr","displayName":"APR","description":"Annual Percentage Rate","type":"number","required":true,"semantics":[]},{"name":"status","displayName":"Card Status","description":"Current status of the credit card","type":"string","required":true,"semantics":["Semantic#Status"],"enumValues":["active","inactive","suspended","closed"],"defaultValue":"active"},{"name":"created_at","displayName":"Created At","description":"When the credit card was created","type":"datetime","readOnly":true,"semantics":["Semantic#CreatedTimestamp"]}],"associations":[{"name":"customer","displayName":"Cardholder","description":"Customer who owns this credit card","required":true,"multiple":false,"targetEntities":["customer"],"semantics":[],"cardinality":"One-to-One"}],"semantics":[]}]}]},{"name":"TransactionProcessing","displayName":"Transaction Processing","description":"Payments, transfers, deposits, and withdrawals","modelCount":1,"entityCount":2,"models":[{"name":"Transactions","displayName":"Transaction Management","description":"Financial transactions and transfers","entityCount":2,"entities":[{"name":"transaction","displayName":"Transaction","description":"Financial transaction record","propertyCount":9,"associationCount":2,"properties":[{"name":"id","displayName":"Transaction ID","description":"Unique identifier for the transaction","type":"string","primary":true,"readOnly":true,"semantics":[]},{"name":"transaction_number","displayName":"Transaction Number","description":"Human-readable transaction number","type":"string","required":true,"unique":true,"semantics":[]},{"name":"status","displayName":"Transaction Status","description":"Current status of the transaction","type":"string","required":true,"semantics":["Semantic#Status"],"enumValues":["pending","processing","completed","failed","cancelled"],"defaultValue":"pending"},{"name":"transaction_type","displayName":"Transaction Type","description":"Type of financial transaction","type":"string","required":true,"semantics":[],"enumValues":["deposit","withdrawal","transfer","payment","fee"]},{"name":"amount","displayName":"Transaction Amount","description":"Amount of the transaction","type":"number","required":true,"semantics":["Semantic#Currency"]},{"name":"description","displayName":"Description","description":"Transaction description","type":"string","semantics":[]},{"name":"transaction_date","displayName":"Transaction Date","description":"Date when transaction occurred","type":"date","required":true,"semantics":[]},{"name":"reference_number","displayName":"Reference Number","description":"External reference number","type":"string","semantics":[]},{"name":"created_at","displayName":"Created At","description":"When the transaction was created","type":"datetime","readOnly":true,"semantics":["Semantic#CreatedTimestamp"]}],"associations":[{"name":"customer","displayName":"Customer","description":"Customer who initiated the transaction","required":true,"multiple":false,"targetEntities":["customer"],"semantics":[],"cardinality":"One-to-One"},{"name":"account","displayName":"Account","description":"Account involved in the transaction","required":true,"multiple":false,"targetEntities":["bank_account"],"semantics":[],"cardinality":"One-to-One"}],"semantics":[]},{"name":"transfer","displayName":"Transfer","description":"Money transfers between accounts","propertyCount":5,"associationCount":2,"properties":[{"name":"id","displayName":"Transfer ID","description":"Unique identifier for the transfer","type":"string","primary":true,"readOnly":true,"semantics":[]},{"name":"status","displayName":"Transfer Status","description":"Current status of the transfer","type":"string","required":true,"semantics":["Semantic#Status"],"enumValues":["pending","processing","completed","failed","cancelled"],"defaultValue":"pending"},{"name":"amount","displayName":"Transfer Amount","description":"Amount being transferred","type":"number","required":true,"semantics":["Semantic#Currency"]},{"name":"transfer_date","displayName":"Transfer Date","description":"Date when transfer was initiated","type":"date","required":true,"semantics":[]},{"name":"created_at","displayName":"Created At","description":"When the transfer was created","type":"datetime","readOnly":true,"semantics":["Semantic#CreatedTimestamp"]}],"associations":[{"name":"from_account","displayName":"From Account","description":"Source account for the transfer","required":true,"multiple":false,"targetEntities":["bank_account"],"semantics":[],"cardinality":"One-to-One"},{"name":"to_account","displayName":"To Account","description":"Destination account for the transfer","required":true,"multiple":false,"targetEntities":["bank_account"],"semantics":[],"cardinality":"One-to-One"}],"semantics":[]}]}]},{"name":"InvestmentPortfolio","displayName":"Investment Portfolio","description":"Assets, positions, and performance tracking","modelCount":1,"entityCount":3,"models":[{"name":"Portfolios","displayName":"Portfolio Management","description":"Investment portfolios and assets","entityCount":3,"entities":[{"name":"asset","displayName":"Asset","description":"Investment asset (stocks, bonds, etc.)","propertyCount":7,"associationCount":0,"properties":[{"name":"id","displayName":"Asset ID","description":"Unique identifier for the asset","type":"string","primary":true,"readOnly":true,"semantics":[]},{"name":"symbol","displayName":"Symbol","description":"Asset symbol/ticker","type":"string","required":true,"unique":true,"semantics":[]},{"name":"name","displayName":"Asset Name","description":"Name of the asset","type":"string","semantics":["Semantic#Title"]},{"name":"asset_type","displayName":"Asset Type","description":"Type of investment asset","type":"string","required":true,"semantics":[],"enumValues":["stock","bond","etf","mutual_fund","commodity","crypto"]},{"name":"current_price","displayName":"Current Price","description":"Current market price of the asset","type":"number","required":true,"semantics":["Semantic#Currency"]},{"name":"market_cap","displayName":"Market Cap","description":"Market capitalization","type":"number","required":true,"semantics":["Semantic#Currency"]},{"name":"created_at","displayName":"Created At","description":"When the asset was created","type":"datetime","readOnly":true,"semantics":["Semantic#CreatedTimestamp"]}],"associations":[],"semantics":[]},{"name":"position","displayName":"Position","description":"Investment position in a portfolio","propertyCount":6,"associationCount":2,"properties":[{"name":"id","displayName":"Position ID","description":"Unique identifier for the position","type":"string","primary":true,"readOnly":true,"semantics":[]},{"name":"quantity","displayName":"Quantity","description":"Number of shares/units held","type":"number","required":true,"semantics":[]},{"name":"average_cost","displayName":"Average Cost","description":"Average cost per share/unit","type":"number","required":true,"semantics":["Semantic#Currency"]},{"name":"current_value","displayName":"Current Value","description":"Current market value of the position","type":"number","required":true,"semantics":["Semantic#Currency"]},{"name":"unrealized_gain_loss","displayName":"Unrealized Gain/Loss","description":"Unrealized profit or loss","type":"number","required":true,"semantics":["Semantic#Currency"]},{"name":"created_at","displayName":"Created At","description":"When the position was created","type":"datetime","readOnly":true,"semantics":["Semantic#CreatedTimestamp"]}],"associations":[{"name":"account","displayName":"Investment Account","description":"Account holding this position","required":true,"multiple":false,"targetEntities":["investment_account"],"semantics":[],"cardinality":"One-to-One"},{"name":"asset","displayName":"Asset","description":"Asset for this position","required":true,"multiple":false,"targetEntities":["asset"],"semantics":[],"cardinality":"One-to-One"}],"semantics":[]},{"name":"performance","displayName":"Performance","description":"Portfolio performance tracking","propertyCount":5,"associationCount":1,"properties":[{"name":"id","displayName":"Performance ID","description":"Unique identifier for the performance record","type":"string","primary":true,"readOnly":true,"semantics":[]},{"name":"date","displayName":"Date","description":"Date of performance measurement","type":"date","required":true,"semantics":[]},{"name":"total_value","displayName":"Total Value","description":"Total portfolio value on this date","type":"number","required":true,"semantics":["Semantic#Currency"]},{"name":"return_percentage","displayName":"Return Percentage","description":"Percentage return","type":"number","required":true,"semantics":[]},{"name":"created_at","displayName":"Created At","description":"When the performance record was created","type":"datetime","readOnly":true,"semantics":["Semantic#CreatedTimestamp"]}],"associations":[{"name":"account","displayName":"Investment Account","description":"Account for this performance record","required":true,"multiple":false,"targetEntities":["investment_account"],"semantics":[],"cardinality":"One-to-One"}],"semantics":[]}]}]},{"name":"ComplianceReporting","displayName":"Compliance & Reporting","description":"Regulatory reporting and audit trails","modelCount":1,"entityCount":2,"models":[{"name":"Compliance","displayName":"Compliance Management","description":"Regulatory compliance and reporting","entityCount":2,"entities":[{"name":"audit_trail","displayName":"Audit Trail","description":"System audit trail for compliance","propertyCount":8,"associationCount":0,"properties":[{"name":"id","displayName":"Audit ID","description":"Unique identifier for the audit record","type":"string","primary":true,"readOnly":true,"semantics":[]},{"name":"action","displayName":"Action","description":"Action performed","type":"string","required":true,"semantics":[]},{"name":"entity_type","displayName":"Entity Type","description":"Type of entity affected","type":"string","required":true,"semantics":[]},{"name":"entity_id","displayName":"Entity ID","description":"ID of the affected entity","type":"string","required":true,"semantics":[]},{"name":"user_id","displayName":"User ID","description":"User who performed the action","type":"string","required":true,"semantics":[]},{"name":"ip_address","displayName":"IP Address","description":"IP address of the user","type":"string","semantics":[]},{"name":"description","displayName":"Description","description":"Additional details about the action","type":"string","semantics":["Semantic#Description"]},{"name":"timestamp","displayName":"Timestamp","description":"When the action occurred","type":"datetime","readOnly":true,"semantics":["Semantic#CreatedTimestamp"]}],"associations":[],"semantics":[]},{"name":"regulatory_report","displayName":"Regulatory Report","description":"Regulatory reporting requirements","propertyCount":7,"associationCount":0,"properties":[{"name":"id","displayName":"Report ID","description":"Unique identifier for the report","type":"string","primary":true,"readOnly":true,"semantics":[]},{"name":"name","displayName":"Report Name","description":"Name of the regulatory report","type":"string","semantics":["Semantic#Title"]},{"name":"status","displayName":"Report Status","description":"Current status of the report","type":"string","required":true,"semantics":["Semantic#Status"],"enumValues":["draft","submitted","approved","rejected"],"defaultValue":"draft"},{"name":"report_type","displayName":"Report Type","description":"Type of regulatory report","type":"string","required":true,"semantics":[],"enumValues":["suspicious_activity","large_transaction","annual_report","quarterly_report"]},{"name":"reporting_period","displayName":"Reporting Period","description":"Period covered by the report","type":"string","required":true,"semantics":[]},{"name":"description","displayName":"Description","description":"Report content and details","type":"string","semantics":["Semantic#Description"]},{"name":"created_at","displayName":"Created At","description":"When the report was created","type":"datetime","readOnly":true,"semantics":["Semantic#CreatedTimestamp"]}],"associations":[],"semantics":[]}]}]},{"name":"FraudDetection","displayName":"Fraud Detection","description":"Transaction monitoring and risk scoring","modelCount":1,"entityCount":1,"models":[{"name":"FraudDetection","displayName":"Fraud Detection Management","description":"Fraud detection and monitoring","entityCount":1,"entities":[{"name":"fraud_alert","displayName":"Fraud Alert","description":"Fraud detection alerts and flags","propertyCount":6,"associationCount":2,"properties":[{"name":"id","displayName":"Alert ID","description":"Unique identifier for the fraud alert","type":"string","primary":true,"readOnly":true,"semantics":[]},{"name":"status","displayName":"Alert Status","description":"Current status of the fraud alert","type":"string","required":true,"semantics":["Semantic#Status"],"enumValues":["pending","investigating","resolved","false_positive"],"defaultValue":"pending"},{"name":"alert_type","displayName":"Alert Type","description":"Type of fraud alert","type":"string","required":true,"semantics":[],"enumValues":["suspicious_transaction","unusual_pattern","identity_theft","account_takeover"]},{"name":"risk_score","displayName":"Risk Score","description":"Risk score (1-100)","type":"number","required":true,"semantics":[]},{"name":"description","displayName":"Description","description":"Details about the fraud alert","type":"string","semantics":["Semantic#Description"]},{"name":"created_at","displayName":"Created At","description":"When the fraud alert was created","type":"datetime","readOnly":true,"semantics":["Semantic#CreatedTimestamp"]}],"associations":[{"name":"transaction","displayName":"Transaction","description":"Transaction that triggered the alert","required":false,"multiple":false,"targetEntities":["transaction"],"semantics":[],"cardinality":"One-to-One"},{"name":"customer","displayName":"Customer","description":"Customer associated with the alert","required":true,"multiple":false,"targetEntities":["customer"],"semantics":[],"cardinality":"One-to-One"}],"semantics":[]}]}]}]}}
1
+ {"id":"financial-services-platform","name":"Financial Services Platform","description":"A comprehensive financial services platform with account management, transaction processing, customer management, investment portfolios, and compliance features. Perfect for banks, credit unions, and fintech companies.","createdAt":"2025-01-27T00:00:00.000Z","updatedAt":"2025-01-27T00:00:00.000Z","version":"1.0.0","author":"API Now! Core Team","tags":["finance","banking","investment","compliance","fraud-detection","kyc"],"structure":{"domain":{"name":"Financial Services Platform","description":"A comprehensive financial services platform with account management, transaction processing, customer management, investment portfolios, and compliance features","totalEntities":17,"totalProperties":127,"totalAssociations":17},"namespaces":[{"name":"User Management","displayName":"User & Authentication Management","description":"Unified user authentication, roles, and profile management for customers and employees","modelCount":2,"entityCount":6,"models":[{"name":"Authentication","displayName":"Authentication & Access Control","description":"User authentication, sessions, and access control","entityCount":2,"entities":[{"name":"user","displayName":"User","description":"Unified user entity for both customers and employees with role-based access","propertyCount":14,"associationCount":3,"properties":[{"name":"id","displayName":"User ID","description":"Unique identifier for the user","type":"string","primary":true,"readOnly":true,"semantics":[]},{"name":"username","displayName":"Username","description":"Unique username for login","type":"string","required":true,"unique":true,"semantics":[]},{"name":"password","displayName":"Password","description":"User password (hashed)","type":"string","required":true,"writeOnly":true,"semantics":["Semantic#Password"]},{"name":"email","displayName":"Email Address","description":"User email address","type":"string","required":true,"unique":true,"semantics":["Semantic#Email"]},{"name":"first_name","displayName":"First Name","description":"User first name","type":"string","semantics":[]},{"name":"last_name","displayName":"Last Name","description":"User last name","type":"string","semantics":[]},{"name":"phone","displayName":"Phone Number","description":"User phone number","type":"string","semantics":["Semantic#Phone"]},{"name":"user_type","displayName":"User Type","description":"Type of user account","type":"string","required":true,"semantics":[],"enumValues":["customer","employee","admin","system"]},{"name":"role","displayName":"User Role","description":"User role defining permissions and access level","type":"string","required":true,"semantics":[],"enumValues":["individual_customer","business_customer","premium_customer","private_banking_customer","teller","loan_officer","relationship_manager","compliance_officer","branch_manager","investment_advisor","risk_analyst","system_admin","security_admin","audit_admin"]},{"name":"status","displayName":"User Status","description":"Current status of the user account","type":"string","required":true,"semantics":["Semantic#Status"],"enumValues":["active","inactive","suspended","pending_verification","locked"],"defaultValue":"active"},{"name":"email_verified","displayName":"Email Verified","description":"Whether user email is verified","type":"boolean","required":true,"semantics":[]},{"name":"last_login","displayName":"Last Login","description":"When user last logged in","type":"datetime","semantics":[]},{"name":"created_at","displayName":"Created At","description":"When the user account was created","type":"datetime","readOnly":true,"semantics":["Semantic#CreatedTimestamp"]},{"name":"updated_at","displayName":"Updated At","description":"When the user account was last updated","type":"datetime","readOnly":true,"semantics":["Semantic#UpdatedTimestamp"]}],"associations":[{"name":"sessions","displayName":"User Sessions","description":"Active sessions for this user","required":false,"multiple":true,"targetEntities":["user_session"],"semantics":[],"cardinality":"One-to-Many"},{"name":"customer_profile","displayName":"Customer Profile","description":"Extended customer profile information","required":false,"multiple":false,"targetEntities":["customer_profile"],"semantics":[],"cardinality":"One-to-One"},{"name":"employee_profile","displayName":"Employee Profile","description":"Extended employee profile information","required":false,"multiple":false,"targetEntities":["employee_profile"],"semantics":[],"cardinality":"One-to-One"}],"semantics":["Semantic#User"]},{"name":"user_session","displayName":"User Session","description":"Active user authentication sessions","propertyCount":5,"associationCount":0,"properties":[{"name":"id","displayName":"Session ID","description":"Unique session identifier","type":"string","primary":true,"readOnly":true,"semantics":[]},{"name":"token","displayName":"Session Token","description":"Authentication token for the session","type":"string","required":true,"writeOnly":true,"semantics":[]},{"name":"expires_at","displayName":"Expires At","description":"When the session expires","type":"datetime","required":true,"semantics":[]},{"name":"ip_address","displayName":"IP Address","description":"IP address of the session","type":"string","semantics":["Semantic#ClientIPAddress"]},{"name":"created_at","displayName":"Created At","description":"When the session was created","type":"datetime","readOnly":true,"semantics":["Semantic#CreatedTimestamp"]}],"associations":[],"semantics":[]}]},{"name":"User Profiles","displayName":"User Profile Management","description":"Extended user profile information and preferences","entityCount":4,"entities":[{"name":"customer_profile","displayName":"Customer Profile","description":"Additional profile information specific to customers","propertyCount":10,"associationCount":0,"properties":[{"name":"id","displayName":"Profile ID","description":"Unique profile identifier","type":"string","primary":true,"readOnly":true,"semantics":[]},{"name":"date_of_birth","displayName":"Date of Birth","description":"Customer date of birth","type":"date","required":true,"semantics":[]},{"name":"ssn","displayName":"Social Security Number","description":"Customer SSN for identification","type":"string","required":true,"writeOnly":true,"semantics":[]},{"name":"address","displayName":"Address","description":"Customer residential address","type":"string","required":true,"semantics":[]},{"name":"city","displayName":"City","description":"Customer city","type":"string","required":true,"semantics":[]},{"name":"state","displayName":"State","description":"Customer state","type":"string","required":true,"semantics":[]},{"name":"zip_code","displayName":"ZIP Code","description":"Customer ZIP code","type":"string","required":true,"semantics":[]},{"name":"customer_type","displayName":"Customer Type","description":"Type of customer account","type":"string","required":true,"semantics":[],"enumValues":["individual","business","trust","partnership"]},{"name":"created_at","displayName":"Created At","description":"When the customer profile was created","type":"datetime","readOnly":true,"semantics":["Semantic#CreatedTimestamp"]},{"name":"updated_at","displayName":"Updated At","description":"When the customer profile was last updated","type":"datetime","readOnly":true,"semantics":["Semantic#UpdatedTimestamp"]}],"associations":[],"semantics":[]},{"name":"employee_profile","displayName":"Employee Profile","description":"Additional profile information specific to employees","propertyCount":7,"associationCount":0,"properties":[{"name":"id","displayName":"Employee Profile ID","description":"Unique employee profile identifier","type":"string","primary":true,"readOnly":true,"semantics":[]},{"name":"employee_id","displayName":"Employee ID","description":"Company employee identifier","type":"string","required":true,"unique":true,"semantics":[]},{"name":"department","displayName":"Department","description":"Employee department","type":"string","required":true,"semantics":[],"enumValues":["retail_banking","commercial_banking","investment_services","risk_management","compliance","operations","technology","human_resources","legal"]},{"name":"hire_date","displayName":"Hire Date","description":"Employee hire date","type":"date","required":true,"semantics":[]},{"name":"manager_id","displayName":"Manager ID","description":"Employee manager identifier","type":"string","semantics":[]},{"name":"created_at","displayName":"Created At","description":"When the employee profile was created","type":"datetime","readOnly":true,"semantics":["Semantic#CreatedTimestamp"]},{"name":"updated_at","displayName":"Updated At","description":"When the employee profile was last updated","type":"datetime","readOnly":true,"semantics":["Semantic#UpdatedTimestamp"]}],"associations":[],"semantics":[]},{"name":"kyc_record","displayName":"KYC Record","description":"Know Your Customer verification and documentation","propertyCount":7,"associationCount":1,"properties":[{"name":"id","displayName":"KYC ID","description":"Unique identifier for the KYC record","type":"string","primary":true,"readOnly":true,"semantics":[]},{"name":"status","displayName":"KYC Status","description":"Current status of KYC verification","type":"string","required":true,"semantics":["Semantic#Status"],"enumValues":["pending","verified","rejected","expired"],"defaultValue":"pending"},{"name":"verification_date","displayName":"Verification Date","description":"Date when KYC was verified","type":"date","semantics":[]},{"name":"document_type","displayName":"Document Type","description":"Type of identification document","type":"string","required":true,"semantics":[],"enumValues":["passport","drivers_license","national_id","utility_bill","bank_statement"]},{"name":"document_number","displayName":"Document Number","description":"Document identification number","type":"string","required":true,"semantics":[]},{"name":"created_at","displayName":"Created At","description":"When the KYC record was created","type":"datetime","readOnly":true,"semantics":["Semantic#CreatedTimestamp"]},{"name":"updated_at","displayName":"Updated At","description":"When the KYC record was last updated","type":"datetime","readOnly":true,"semantics":["Semantic#UpdatedTimestamp"]}],"associations":[{"name":"user","displayName":"User","description":"User for this KYC record","required":true,"multiple":false,"targetEntities":["user"],"semantics":[],"cardinality":"One-to-One"}],"semantics":[]},{"name":"risk_profile","displayName":"Risk Profile","description":"Customer risk assessment and scoring","propertyCount":7,"associationCount":1,"properties":[{"name":"id","displayName":"Risk Profile ID","description":"Unique identifier for the risk profile","type":"string","primary":true,"readOnly":true,"semantics":[]},{"name":"risk_score","displayName":"Risk Score","description":"Numerical risk score (1-100)","type":"number","required":true,"semantics":[]},{"name":"status","displayName":"Risk Level","description":"Risk level classification","type":"string","required":true,"semantics":["Semantic#Status"],"enumValues":["low","medium","high","very_high"],"defaultValue":"low"},{"name":"assessment_date","displayName":"Assessment Date","description":"Date when risk was assessed","type":"date","required":true,"semantics":[]},{"name":"description","displayName":"Description","description":"Risk assessment notes and factors","type":"string","semantics":["Semantic#Description"]},{"name":"created_at","displayName":"Created At","description":"When the risk profile was created","type":"datetime","readOnly":true,"semantics":["Semantic#CreatedTimestamp"]},{"name":"updated_at","displayName":"Updated At","description":"When the risk profile was last updated","type":"datetime","readOnly":true,"semantics":["Semantic#UpdatedTimestamp"]}],"associations":[{"name":"user","displayName":"User","description":"User for this risk profile","required":true,"multiple":false,"targetEntities":["user"],"semantics":[],"cardinality":"One-to-One"}],"semantics":[]}]}]},{"name":"AccountManagement","displayName":"Account Management","description":"Bank accounts, investment accounts, and credit cards","modelCount":1,"entityCount":3,"models":[{"name":"Accounts","displayName":"Account Management","description":"Financial accounts and products","entityCount":3,"entities":[{"name":"bank_account","displayName":"Bank Account","description":"Checking and savings accounts","propertyCount":9,"associationCount":1,"properties":[{"name":"id","displayName":"Account ID","description":"Unique identifier for the account","type":"string","primary":true,"readOnly":true,"semantics":[]},{"name":"account_number","displayName":"Account Number","description":"Bank account number","type":"string","required":true,"unique":true,"semantics":[]},{"name":"routing_number","displayName":"Routing Number","description":"Bank routing number","type":"string","required":true,"semantics":[]},{"name":"account_type","displayName":"Account Type","description":"Type of bank account","type":"string","required":true,"semantics":[],"enumValues":["checking","savings","money_market","cd"]},{"name":"balance","displayName":"Account Balance","description":"Current account balance","type":"number","required":true,"semantics":["Semantic#Currency"]},{"name":"available_balance","displayName":"Available Balance","description":"Available balance for transactions","type":"number","required":true,"semantics":["Semantic#Currency"]},{"name":"status","displayName":"Account Status","description":"Current status of the account","type":"string","required":true,"semantics":["Semantic#Status"],"enumValues":["active","inactive","frozen","closed"],"defaultValue":"active"},{"name":"created_at","displayName":"Created At","description":"When the account was created","type":"datetime","readOnly":true,"semantics":["Semantic#CreatedTimestamp"]},{"name":"updated_at","displayName":"Updated At","description":"When the account was last updated","type":"datetime","readOnly":true,"semantics":["Semantic#UpdatedTimestamp"]}],"associations":[{"name":"user","displayName":"Account Holder","description":"User who owns this account","required":true,"multiple":false,"targetEntities":["user"],"semantics":[],"cardinality":"One-to-One"}],"semantics":[]},{"name":"investment_account","displayName":"Investment Account","description":"Investment and brokerage accounts","propertyCount":7,"associationCount":1,"properties":[{"name":"id","displayName":"Investment Account ID","description":"Unique identifier for the investment account","type":"string","primary":true,"readOnly":true,"semantics":[]},{"name":"account_number","displayName":"Account Number","description":"Investment account number","type":"string","required":true,"unique":true,"semantics":[]},{"name":"account_type","displayName":"Account Type","description":"Type of investment account","type":"string","required":true,"semantics":[],"enumValues":["individual","joint","ira","401k","roth_ira"]},{"name":"total_value","displayName":"Total Portfolio Value","description":"Total value of all investments","type":"number","required":true,"semantics":["Semantic#Currency"]},{"name":"cash_balance","displayName":"Cash Balance","description":"Available cash balance","type":"number","required":true,"semantics":["Semantic#Currency"]},{"name":"status","displayName":"Account Status","description":"Current status of the investment account","type":"string","required":true,"semantics":["Semantic#Status"],"enumValues":["active","inactive","suspended","closed"],"defaultValue":"active"},{"name":"created_at","displayName":"Created At","description":"When the investment account was created","type":"datetime","readOnly":true,"semantics":["Semantic#CreatedTimestamp"]}],"associations":[{"name":"user","displayName":"Account Holder","description":"User who owns this investment account","required":true,"multiple":false,"targetEntities":["user"],"semantics":[],"cardinality":"One-to-One"}],"semantics":[]},{"name":"credit_card","displayName":"Credit Card","description":"Credit card accounts and lines of credit","propertyCount":8,"associationCount":1,"properties":[{"name":"id","displayName":"Credit Card ID","description":"Unique identifier for the credit card","type":"string","primary":true,"readOnly":true,"semantics":[]},{"name":"card_number","displayName":"Card Number","description":"Credit card number (masked)","type":"string","required":true,"writeOnly":true,"semantics":[]},{"name":"credit_limit","displayName":"Credit Limit","description":"Total credit limit","type":"number","required":true,"semantics":["Semantic#Currency"]},{"name":"available_credit","displayName":"Available Credit","description":"Available credit remaining","type":"number","required":true,"semantics":["Semantic#Currency"]},{"name":"current_balance","displayName":"Current Balance","description":"Current outstanding balance","type":"number","required":true,"semantics":["Semantic#Currency"]},{"name":"apr","displayName":"APR","description":"Annual Percentage Rate","type":"number","required":true,"semantics":[]},{"name":"status","displayName":"Card Status","description":"Current status of the credit card","type":"string","required":true,"semantics":["Semantic#Status"],"enumValues":["active","inactive","suspended","closed"],"defaultValue":"active"},{"name":"created_at","displayName":"Created At","description":"When the credit card was created","type":"datetime","readOnly":true,"semantics":["Semantic#CreatedTimestamp"]}],"associations":[{"name":"user","displayName":"Cardholder","description":"User who owns this credit card","required":true,"multiple":false,"targetEntities":["user"],"semantics":[],"cardinality":"One-to-One"}],"semantics":[]}]}]},{"name":"Transaction Processing","displayName":"Transaction Processing","description":"Payments, transfers, deposits, and withdrawals","modelCount":1,"entityCount":2,"models":[{"name":"Transactions","displayName":"Transaction Management","description":"Financial transactions and transfers","entityCount":2,"entities":[{"name":"transaction","displayName":"Transaction","description":"Financial transaction record","propertyCount":9,"associationCount":2,"properties":[{"name":"id","displayName":"Transaction ID","description":"Unique identifier for the transaction","type":"string","primary":true,"readOnly":true,"semantics":[]},{"name":"transaction_number","displayName":"Transaction Number","description":"Human-readable transaction number","type":"string","required":true,"unique":true,"semantics":[]},{"name":"status","displayName":"Transaction Status","description":"Current status of the transaction","type":"string","required":true,"semantics":["Semantic#Status"],"enumValues":["pending","processing","completed","failed","cancelled"],"defaultValue":"pending"},{"name":"transaction_type","displayName":"Transaction Type","description":"Type of financial transaction","type":"string","required":true,"semantics":[],"enumValues":["deposit","withdrawal","transfer","payment","fee"]},{"name":"amount","displayName":"Transaction Amount","description":"Amount of the transaction","type":"number","required":true,"semantics":["Semantic#Currency"]},{"name":"description","displayName":"Description","description":"Transaction description","type":"string","semantics":[]},{"name":"transaction_date","displayName":"Transaction Date","description":"Date when transaction occurred","type":"date","required":true,"semantics":[]},{"name":"reference_number","displayName":"Reference Number","description":"External reference number","type":"string","semantics":[]},{"name":"created_at","displayName":"Created At","description":"When the transaction was created","type":"datetime","readOnly":true,"semantics":["Semantic#CreatedTimestamp"]}],"associations":[{"name":"user","displayName":"User","description":"User who initiated the transaction","required":true,"multiple":false,"targetEntities":["user"],"semantics":[],"cardinality":"One-to-One"},{"name":"account","displayName":"Account","description":"Account involved in the transaction","required":true,"multiple":false,"targetEntities":["bank_account"],"semantics":[],"cardinality":"One-to-One"}],"semantics":[]},{"name":"transfer","displayName":"Transfer","description":"Money transfers between accounts","propertyCount":5,"associationCount":2,"properties":[{"name":"id","displayName":"Transfer ID","description":"Unique identifier for the transfer","type":"string","primary":true,"readOnly":true,"semantics":[]},{"name":"status","displayName":"Transfer Status","description":"Current status of the transfer","type":"string","required":true,"semantics":["Semantic#Status"],"enumValues":["pending","processing","completed","failed","cancelled"],"defaultValue":"pending"},{"name":"amount","displayName":"Transfer Amount","description":"Amount being transferred","type":"number","required":true,"semantics":["Semantic#Currency"]},{"name":"transfer_date","displayName":"Transfer Date","description":"Date when transfer was initiated","type":"date","required":true,"semantics":[]},{"name":"created_at","displayName":"Created At","description":"When the transfer was created","type":"datetime","readOnly":true,"semantics":["Semantic#CreatedTimestamp"]}],"associations":[{"name":"from_account","displayName":"From Account","description":"Source account for the transfer","required":true,"multiple":false,"targetEntities":["bank_account"],"semantics":[],"cardinality":"One-to-One"},{"name":"to_account","displayName":"To Account","description":"Destination account for the transfer","required":true,"multiple":false,"targetEntities":["bank_account"],"semantics":[],"cardinality":"One-to-One"}],"semantics":[]}]}]},{"name":"Investment Portfolio","displayName":"Investment Portfolio","description":"Assets, positions, and performance tracking","modelCount":1,"entityCount":3,"models":[{"name":"Portfolios","displayName":"Portfolio Management","description":"Investment portfolios and assets","entityCount":3,"entities":[{"name":"asset","displayName":"Asset","description":"Investment asset (stocks, bonds, etc.)","propertyCount":7,"associationCount":0,"properties":[{"name":"id","displayName":"Asset ID","description":"Unique identifier for the asset","type":"string","primary":true,"readOnly":true,"semantics":[]},{"name":"symbol","displayName":"Symbol","description":"Asset symbol/ticker","type":"string","required":true,"unique":true,"semantics":[]},{"name":"name","displayName":"Asset Name","description":"Name of the asset","type":"string","semantics":["Semantic#Title"]},{"name":"asset_type","displayName":"Asset Type","description":"Type of investment asset","type":"string","required":true,"semantics":[],"enumValues":["stock","bond","etf","mutual_fund","commodity","crypto"]},{"name":"current_price","displayName":"Current Price","description":"Current market price of the asset","type":"number","required":true,"semantics":["Semantic#Currency"]},{"name":"market_cap","displayName":"Market Cap","description":"Market capitalization","type":"number","required":true,"semantics":["Semantic#Currency"]},{"name":"created_at","displayName":"Created At","description":"When the asset was created","type":"datetime","readOnly":true,"semantics":["Semantic#CreatedTimestamp"]}],"associations":[],"semantics":[]},{"name":"position","displayName":"Position","description":"Investment position in a portfolio","propertyCount":6,"associationCount":2,"properties":[{"name":"id","displayName":"Position ID","description":"Unique identifier for the position","type":"string","primary":true,"readOnly":true,"semantics":[]},{"name":"quantity","displayName":"Quantity","description":"Number of shares/units held","type":"number","required":true,"semantics":[]},{"name":"average_cost","displayName":"Average Cost","description":"Average cost per share/unit","type":"number","required":true,"semantics":["Semantic#Currency"]},{"name":"current_value","displayName":"Current Value","description":"Current market value of the position","type":"number","required":true,"semantics":["Semantic#Currency"]},{"name":"unrealized_gain_loss","displayName":"Unrealized Gain/Loss","description":"Unrealized profit or loss","type":"number","required":true,"semantics":["Semantic#Currency"]},{"name":"created_at","displayName":"Created At","description":"When the position was created","type":"datetime","readOnly":true,"semantics":["Semantic#CreatedTimestamp"]}],"associations":[{"name":"account","displayName":"Investment Account","description":"Account holding this position","required":true,"multiple":false,"targetEntities":["investment_account"],"semantics":[],"cardinality":"One-to-One"},{"name":"asset","displayName":"Asset","description":"Asset for this position","required":true,"multiple":false,"targetEntities":["asset"],"semantics":[],"cardinality":"One-to-One"}],"semantics":[]},{"name":"performance","displayName":"Performance","description":"Portfolio performance tracking","propertyCount":5,"associationCount":1,"properties":[{"name":"id","displayName":"Performance ID","description":"Unique identifier for the performance record","type":"string","primary":true,"readOnly":true,"semantics":[]},{"name":"date","displayName":"Date","description":"Date of performance measurement","type":"date","required":true,"semantics":[]},{"name":"total_value","displayName":"Total Value","description":"Total portfolio value on this date","type":"number","required":true,"semantics":["Semantic#Currency"]},{"name":"return_percentage","displayName":"Return Percentage","description":"Percentage return","type":"number","required":true,"semantics":[]},{"name":"created_at","displayName":"Created At","description":"When the performance record was created","type":"datetime","readOnly":true,"semantics":["Semantic#CreatedTimestamp"]}],"associations":[{"name":"account","displayName":"Investment Account","description":"Account for this performance record","required":true,"multiple":false,"targetEntities":["investment_account"],"semantics":[],"cardinality":"One-to-One"}],"semantics":[]}]}]},{"name":"Compliance Reporting","displayName":"Compliance & Reporting","description":"Regulatory reporting and audit trails","modelCount":1,"entityCount":2,"models":[{"name":"Compliance","displayName":"Compliance Management","description":"Regulatory compliance and reporting","entityCount":2,"entities":[{"name":"audit_trail","displayName":"Audit Trail","description":"System audit trail for compliance","propertyCount":8,"associationCount":0,"properties":[{"name":"id","displayName":"Audit ID","description":"Unique identifier for the audit record","type":"string","primary":true,"readOnly":true,"semantics":[]},{"name":"action","displayName":"Action","description":"Action performed","type":"string","required":true,"semantics":[]},{"name":"entity_type","displayName":"Entity Type","description":"Type of entity affected","type":"string","required":true,"semantics":[]},{"name":"entity_id","displayName":"Entity ID","description":"ID of the affected entity","type":"string","required":true,"semantics":[]},{"name":"user_id","displayName":"User ID","description":"User who performed the action","type":"string","required":true,"semantics":[]},{"name":"ip_address","displayName":"IP Address","description":"IP address of the user","type":"string","semantics":["Semantic#ClientIPAddress"]},{"name":"description","displayName":"Description","description":"Additional details about the action","type":"string","semantics":["Semantic#Description"]},{"name":"timestamp","displayName":"Timestamp","description":"When the action occurred","type":"datetime","readOnly":true,"semantics":["Semantic#CreatedTimestamp"]}],"associations":[],"semantics":[]},{"name":"regulatory_report","displayName":"Regulatory Report","description":"Regulatory reporting requirements","propertyCount":7,"associationCount":0,"properties":[{"name":"id","displayName":"Report ID","description":"Unique identifier for the report","type":"string","primary":true,"readOnly":true,"semantics":[]},{"name":"name","displayName":"Report Name","description":"Name of the regulatory report","type":"string","semantics":["Semantic#Title"]},{"name":"status","displayName":"Report Status","description":"Current status of the report","type":"string","required":true,"semantics":["Semantic#Status"],"enumValues":["draft","submitted","approved","rejected"],"defaultValue":"draft"},{"name":"report_type","displayName":"Report Type","description":"Type of regulatory report","type":"string","required":true,"semantics":[],"enumValues":["suspicious_activity","large_transaction","annual_report","quarterly_report"]},{"name":"reporting_period","displayName":"Reporting Period","description":"Period covered by the report","type":"string","required":true,"semantics":[]},{"name":"description","displayName":"Description","description":"Report content and details","type":"string","semantics":["Semantic#Description"]},{"name":"created_at","displayName":"Created At","description":"When the report was created","type":"datetime","readOnly":true,"semantics":["Semantic#CreatedTimestamp"]}],"associations":[],"semantics":[]}]}]},{"name":"FraudDetection","displayName":"Fraud Detection","description":"Transaction monitoring and risk scoring","modelCount":1,"entityCount":1,"models":[{"name":"FraudDetection","displayName":"Fraud Detection Management","description":"Fraud detection and monitoring","entityCount":1,"entities":[{"name":"fraud_alert","displayName":"Fraud Alert","description":"Fraud detection alerts and flags","propertyCount":6,"associationCount":2,"properties":[{"name":"id","displayName":"Alert ID","description":"Unique identifier for the fraud alert","type":"string","primary":true,"readOnly":true,"semantics":[]},{"name":"status","displayName":"Alert Status","description":"Current status of the fraud alert","type":"string","required":true,"semantics":["Semantic#Status"],"enumValues":["pending","investigating","resolved","false_positive"],"defaultValue":"pending"},{"name":"alert_type","displayName":"Alert Type","description":"Type of fraud alert","type":"string","required":true,"semantics":[],"enumValues":["suspicious_transaction","unusual_pattern","identity_theft","account_takeover"]},{"name":"risk_score","displayName":"Risk Score","description":"Risk score (1-100)","type":"number","required":true,"semantics":[]},{"name":"description","displayName":"Description","description":"Details about the fraud alert","type":"string","semantics":["Semantic#Description"]},{"name":"created_at","displayName":"Created At","description":"When the fraud alert was created","type":"datetime","readOnly":true,"semantics":["Semantic#CreatedTimestamp"]}],"associations":[{"name":"transaction","displayName":"Transaction","description":"Transaction that triggered the alert","required":false,"multiple":false,"targetEntities":["transaction"],"semantics":[],"cardinality":"One-to-One"},{"name":"user","displayName":"User","description":"User associated with the alert","required":true,"multiple":false,"targetEntities":["user"],"semantics":[],"cardinality":"One-to-One"}],"semantics":[]}]}]}]}}