@trycompai/db 1.1.0 → 1.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (244) hide show
  1. package/dist/chunk-Y7OSPXHC.mjs +7199 -0
  2. package/dist/index.js +7188 -3
  3. package/dist/index.mjs +13 -2
  4. package/dist/prisma/schema.prisma +811 -0
  5. package/dist/types.js +7175 -5
  6. package/dist/types.mjs +8 -1
  7. package/package.json +29 -32
  8. package/README.md +0 -79
  9. package/dist/index.d.mts +0 -2
  10. package/dist/index.d.ts +0 -2
  11. package/dist/prisma/migrations/20250403163138_init/migration.sql +0 -611
  12. package/dist/prisma/migrations/20250403165218_archived_on_its_own/migration.sql +0 -29
  13. package/dist/prisma/migrations/20250403194504_risk_assignee/migration.sql +0 -18
  14. package/dist/prisma/migrations/20250403201319_tasks_use_asignee/migration.sql +0 -16
  15. package/dist/prisma/migrations/20250403205655_vendor_assignee/migration.sql +0 -22
  16. package/dist/prisma/migrations/20250403205840_oops_optional/migration.sql +0 -2
  17. package/dist/prisma/migrations/20250403210049_task_assignee_optional_too/migration.sql +0 -8
  18. package/dist/prisma/migrations/20250404004853_stripecustomerid/migration.sql +0 -2
  19. package/dist/prisma/migrations/20250406004306_added_common_comment_table/migration.sql +0 -20
  20. package/dist/prisma/migrations/20250410193847_add_unique_constraint_to_artifact_t_table/migration.sql +0 -30
  21. package/dist/prisma/migrations/20250410193857_remove_published_field_from_evidence/migration.sql +0 -12
  22. package/dist/prisma/migrations/20250414191353_onboarding_experience/migration.sql +0 -25
  23. package/dist/prisma/migrations/20250414203443_added_evidence_to_onboarding/migration.sql +0 -2
  24. package/dist/prisma/migrations/20250417205622_add_global_vendors/migration.sql +0 -26
  25. package/dist/prisma/migrations/20250417205625_update_task_table_and_comments_and_attachments/migration.sql +0 -86
  26. package/dist/prisma/migrations/20250417205627_remove_evidence_table/migration.sql +0 -109
  27. package/dist/prisma/migrations/20250417205629_frequency_task_is_optional/migration.sql +0 -2
  28. package/dist/prisma/migrations/20250418151856_add_comment_relationship_to_attachment_and_vice_versa/migration.sql +0 -8
  29. package/dist/prisma/migrations/20250423154259_make_role_string/migration.sql +0 -9
  30. package/dist/prisma/migrations/20250424165055_update_onboarding_to_use_tasks/migration.sql +0 -9
  31. package/dist/prisma/migrations/20250424170518_remove_evidence_artifact_type/migration.sql +0 -14
  32. package/dist/prisma/migrations/20250428202144_add_website_to_organization/migration.sql +0 -2
  33. package/dist/prisma/migrations/20250429155419_add_company_details_to_onboarding/migration.sql +0 -2
  34. package/dist/prisma/migrations/20250509160401_added_framework_editor/migration.sql +0 -8
  35. package/dist/prisma/migrations/20250509162708_init_framework_editor_tables/migration.sql +0 -122
  36. package/dist/prisma/migrations/20250509172401_drop_slug/migration.sql +0 -11
  37. package/dist/prisma/migrations/20250509232122_trust_portal/migration.sql +0 -24
  38. package/dist/prisma/migrations/20250511040043_add_custom_domain_to_trust_portal/migration.sql +0 -2
  39. package/dist/prisma/migrations/20250511042943_trust_portal_domain_verified/migration.sql +0 -2
  40. package/dist/prisma/migrations/20250512004633_added_identifier/migration.sql +0 -5
  41. package/dist/prisma/migrations/20250512115717_added_framework_status/migration.sql +0 -7
  42. package/dist/prisma/migrations/20250512163351_add_contact_details_trust_portal/migration.sql +0 -2
  43. package/dist/prisma/migrations/20250514143147_remove_unique_constraint_on_integration_name/migration.sql +0 -2
  44. package/dist/prisma/migrations/20250514144228_add_vercel_check/migration.sql +0 -2
  45. package/dist/prisma/migrations/20250514150021_add_vercel_verification/migration.sql +0 -2
  46. package/dist/prisma/migrations/20250514161440_add_dates_to_framework_editor_tables/migration.sql +0 -23
  47. package/dist/prisma/migrations/20250515123635_trust_portal_friendly_url/migration.sql +0 -21
  48. package/dist/prisma/migrations/20250515124040_fix_trust_constraints/migration.sql +0 -11
  49. package/dist/prisma/migrations/20250516125758_patch_framework_id_in_editor/migration.sql +0 -6
  50. package/dist/prisma/migrations/20250516132431_add_many_to_many_support_to_tasks/migration.sql +0 -69
  51. package/dist/prisma/migrations/20250516142234_make_entity_optional/migration.sql +0 -3
  52. package/dist/prisma/migrations/20250516145149_drop_entity_and_entity_type/migration.sql +0 -16
  53. package/dist/prisma/migrations/20250516150558_drop_task_type/migration.sql +0 -2
  54. package/dist/prisma/migrations/20250516160714_insert_hardcoded_framework_to_db/migration.sql +0 -37
  55. package/dist/prisma/migrations/20250516161852_cast_framework_id_and_requirement_id_to_string/migration.sql +0 -5
  56. package/dist/prisma/migrations/20250516162324_convert_ids_to_new_format/migration.sql +0 -31
  57. package/dist/prisma/migrations/20250516162730_convert_framework_id/migration.sql +0 -5
  58. package/dist/prisma/migrations/20250516163156_added_relation_to_framework_and_requirement_maps/migration.sql +0 -5
  59. package/dist/prisma/migrations/20250516164307_drop_enums/migration.sql +0 -5
  60. package/dist/prisma/migrations/20250516194123_add_cal_option/migration.sql +0 -2
  61. package/dist/prisma/migrations/20250518133218_add_booking_details/migration.sql +0 -2
  62. package/dist/prisma/migrations/20250519141733_change_framework_id_to_string/migration.sql +0 -3
  63. package/dist/prisma/migrations/20250519141735_drop_enum_on_requirements_map/migration.sql +0 -2
  64. package/dist/prisma/migrations/20250519142913_add_template_references_to_instances/migration.sql +0 -17
  65. package/dist/prisma/migrations/20250519172353_drop_artifacts/migration.sql +0 -56
  66. package/dist/prisma/migrations/20250519204449_drop_relation_between_controls_and_framewrok_instance/migration.sql +0 -14
  67. package/dist/prisma/migrations/20250519212347_add_visibility_toggle_to_framework_editor/migration.sql +0 -2
  68. package/dist/prisma/migrations/20250520152548_add_approver_to_policy/migration.sql +0 -5
  69. package/dist/prisma/migrations/20250520175109_add_description_to_audit_log_for_convenience/migration.sql +0 -2
  70. package/dist/prisma/migrations/20250520175523_add_member_id_to_log_table/migration.sql +0 -8
  71. package/dist/prisma/migrations/20250521140239_add_entity_type_and_id_for_audit_logs_for_easy_filtering/migration.sql +0 -9
  72. package/dist/prisma/migrations/20250603135046_add_v2_onboarding_requirements/migration.sql +0 -36
  73. package/dist/prisma/migrations/20250604155610_add_job_id_column_to_onboarding/migration.sql +0 -2
  74. package/dist/prisma/migrations/20250605151521_make_framework_visibility_false/migration.sql +0 -2
  75. package/dist/prisma/migrations/20250605184738_add_cascade_to_entities_owned_by_org/migration.sql +0 -29
  76. package/dist/prisma/migrations/20250605184740_add_device_agent_details_to_org/migration.sql +0 -18
  77. package/dist/prisma/migrations/20250609130129_add_not_relevant/migration.sql +0 -2
  78. package/dist/prisma/migrations/20250610215328_add_fleet_label_to_employees/migration.sql +0 -2
  79. package/dist/prisma/migrations/20250611144654_add_is_fleet_setup_flag/migration.sql +0 -2
  80. package/dist/prisma/migrations/20250612160731_remove_unused_cols/migration.sql +0 -10
  81. package/dist/prisma/migrations/20250618001304_add_default_slug/migration.sql +0 -3
  82. package/dist/prisma/migrations/20250623184529_add_subscription_type/migration.sql +0 -12
  83. package/dist/prisma/migrations/20250626021946_add_starter_subscription_type/migration.sql +0 -27
  84. package/dist/prisma/migrations/20250626030206_added_new_subscription_type/migration.sql +0 -2
  85. package/dist/prisma/migrations/20250627180331_add_onboaridng_field/migration.sql +0 -5
  86. package/dist/prisma/migrations/20250627180828_rename_completed_col/migration.sql +0 -15
  87. package/dist/prisma/migrations/20250708152414_add_had_call_col/migration.sql +0 -2
  88. package/dist/prisma/migrations/20250711201749_update_retool_role_to_edit_had_call_column_in_organization_table/migration.sql +0 -7
  89. package/dist/prisma/migrations/20250711204234_add_read_permission_for_where_clause_on_retool_role/migration.sql +0 -8
  90. package/dist/prisma/migrations/20250714153009_remove_stripe_and_add_has_access/migration.sql +0 -31
  91. package/dist/prisma/migrations/20250715200054_add_perms_for_has_access_for_retool/migration.sql +0 -7
  92. package/dist/prisma/migrations/migration_lock.toml +0 -3
  93. package/dist/prisma/schema/attachments.prisma +0 -35
  94. package/dist/prisma/schema/auth.prisma +0 -122
  95. package/dist/prisma/schema/comment.prisma +0 -27
  96. package/dist/prisma/schema/context.prisma +0 -18
  97. package/dist/prisma/schema/control.prisma +0 -21
  98. package/dist/prisma/schema/framework-editor.prisma +0 -96
  99. package/dist/prisma/schema/framework.prisma +0 -14
  100. package/dist/prisma/schema/integration.prisma +0 -32
  101. package/dist/prisma/schema/onboarding.prisma +0 -18
  102. package/dist/prisma/schema/organization.prisma +0 -34
  103. package/dist/prisma/schema/policy.prisma +0 -32
  104. package/dist/prisma/schema/requirement.prisma +0 -15
  105. package/dist/prisma/schema/risk.prisma +0 -57
  106. package/dist/prisma/schema/shared.prisma +0 -104
  107. package/dist/prisma/schema/task.prisma +0 -41
  108. package/dist/prisma/schema/trust.prisma +0 -37
  109. package/dist/prisma/schema/vendor.prisma +0 -56
  110. package/dist/prisma/seed/frameworkEditorSchemas.js +0 -136
  111. package/dist/prisma/seed/frameworkEditorSchemas.ts +0 -178
  112. package/dist/prisma/seed/primitives/FrameworkEditorControlTemplate.json +0 -296
  113. package/dist/prisma/seed/primitives/FrameworkEditorFramework.json +0 -101
  114. package/dist/prisma/seed/primitives/FrameworkEditorPolicyTemplate.json +0 -6057
  115. package/dist/prisma/seed/primitives/FrameworkEditorRequirement.json +0 -7841
  116. package/dist/prisma/seed/primitives/FrameworkEditorTaskTemplate.json +0 -308
  117. package/dist/prisma/seed/primitives/FrameworkEditorVideo.json +0 -47
  118. package/dist/prisma/seed/relations/_FrameworkEditorControlTemplateToFrameworkEditorPolicyTemplate.json +0 -178
  119. package/dist/prisma/seed/relations/_FrameworkEditorControlTemplateToFrameworkEditorRequirement.json +0 -470
  120. package/dist/prisma/seed/relations/_FrameworkEditorControlTemplateToFrameworkEditorTaskTemplate.json +0 -142
  121. package/dist/prisma/seed/seed.js +0 -160
  122. package/dist/prisma/seed/seed.ts +0 -192
  123. package/dist/setup.d.mts +0 -7
  124. package/dist/setup.d.ts +0 -7
  125. package/dist/setup.js +0 -35
  126. package/dist/setup.mjs +0 -10
  127. package/dist/types.d.mts +0 -1
  128. package/dist/types.d.ts +0 -1
  129. package/prisma/functionDefinition.sql +0 -18
  130. package/prisma/migrations/20250403163138_init/migration.sql +0 -611
  131. package/prisma/migrations/20250403165218_archived_on_its_own/migration.sql +0 -29
  132. package/prisma/migrations/20250403194504_risk_assignee/migration.sql +0 -18
  133. package/prisma/migrations/20250403201319_tasks_use_asignee/migration.sql +0 -16
  134. package/prisma/migrations/20250403205655_vendor_assignee/migration.sql +0 -22
  135. package/prisma/migrations/20250403205840_oops_optional/migration.sql +0 -2
  136. package/prisma/migrations/20250403210049_task_assignee_optional_too/migration.sql +0 -8
  137. package/prisma/migrations/20250404004853_stripecustomerid/migration.sql +0 -2
  138. package/prisma/migrations/20250406004306_added_common_comment_table/migration.sql +0 -20
  139. package/prisma/migrations/20250410193847_add_unique_constraint_to_artifact_t_table/migration.sql +0 -30
  140. package/prisma/migrations/20250410193857_remove_published_field_from_evidence/migration.sql +0 -12
  141. package/prisma/migrations/20250414191353_onboarding_experience/migration.sql +0 -25
  142. package/prisma/migrations/20250414203443_added_evidence_to_onboarding/migration.sql +0 -2
  143. package/prisma/migrations/20250417205622_add_global_vendors/migration.sql +0 -26
  144. package/prisma/migrations/20250417205625_update_task_table_and_comments_and_attachments/migration.sql +0 -86
  145. package/prisma/migrations/20250417205627_remove_evidence_table/migration.sql +0 -109
  146. package/prisma/migrations/20250417205629_frequency_task_is_optional/migration.sql +0 -2
  147. package/prisma/migrations/20250418151856_add_comment_relationship_to_attachment_and_vice_versa/migration.sql +0 -8
  148. package/prisma/migrations/20250423154259_make_role_string/migration.sql +0 -9
  149. package/prisma/migrations/20250424165055_update_onboarding_to_use_tasks/migration.sql +0 -9
  150. package/prisma/migrations/20250424170518_remove_evidence_artifact_type/migration.sql +0 -14
  151. package/prisma/migrations/20250428202144_add_website_to_organization/migration.sql +0 -2
  152. package/prisma/migrations/20250429155419_add_company_details_to_onboarding/migration.sql +0 -2
  153. package/prisma/migrations/20250509160401_added_framework_editor/migration.sql +0 -8
  154. package/prisma/migrations/20250509162708_init_framework_editor_tables/migration.sql +0 -122
  155. package/prisma/migrations/20250509172401_drop_slug/migration.sql +0 -11
  156. package/prisma/migrations/20250509232122_trust_portal/migration.sql +0 -24
  157. package/prisma/migrations/20250511040043_add_custom_domain_to_trust_portal/migration.sql +0 -2
  158. package/prisma/migrations/20250511042943_trust_portal_domain_verified/migration.sql +0 -2
  159. package/prisma/migrations/20250512004633_added_identifier/migration.sql +0 -5
  160. package/prisma/migrations/20250512115717_added_framework_status/migration.sql +0 -7
  161. package/prisma/migrations/20250512163351_add_contact_details_trust_portal/migration.sql +0 -2
  162. package/prisma/migrations/20250514143147_remove_unique_constraint_on_integration_name/migration.sql +0 -2
  163. package/prisma/migrations/20250514144228_add_vercel_check/migration.sql +0 -2
  164. package/prisma/migrations/20250514150021_add_vercel_verification/migration.sql +0 -2
  165. package/prisma/migrations/20250514161440_add_dates_to_framework_editor_tables/migration.sql +0 -23
  166. package/prisma/migrations/20250515123635_trust_portal_friendly_url/migration.sql +0 -21
  167. package/prisma/migrations/20250515124040_fix_trust_constraints/migration.sql +0 -11
  168. package/prisma/migrations/20250516125758_patch_framework_id_in_editor/migration.sql +0 -6
  169. package/prisma/migrations/20250516132431_add_many_to_many_support_to_tasks/migration.sql +0 -69
  170. package/prisma/migrations/20250516142234_make_entity_optional/migration.sql +0 -3
  171. package/prisma/migrations/20250516145149_drop_entity_and_entity_type/migration.sql +0 -16
  172. package/prisma/migrations/20250516150558_drop_task_type/migration.sql +0 -2
  173. package/prisma/migrations/20250516160714_insert_hardcoded_framework_to_db/migration.sql +0 -37
  174. package/prisma/migrations/20250516161852_cast_framework_id_and_requirement_id_to_string/migration.sql +0 -5
  175. package/prisma/migrations/20250516162324_convert_ids_to_new_format/migration.sql +0 -31
  176. package/prisma/migrations/20250516162730_convert_framework_id/migration.sql +0 -5
  177. package/prisma/migrations/20250516163156_added_relation_to_framework_and_requirement_maps/migration.sql +0 -5
  178. package/prisma/migrations/20250516164307_drop_enums/migration.sql +0 -5
  179. package/prisma/migrations/20250516194123_add_cal_option/migration.sql +0 -2
  180. package/prisma/migrations/20250518133218_add_booking_details/migration.sql +0 -2
  181. package/prisma/migrations/20250519141733_change_framework_id_to_string/migration.sql +0 -3
  182. package/prisma/migrations/20250519141735_drop_enum_on_requirements_map/migration.sql +0 -2
  183. package/prisma/migrations/20250519142913_add_template_references_to_instances/migration.sql +0 -17
  184. package/prisma/migrations/20250519172353_drop_artifacts/migration.sql +0 -56
  185. package/prisma/migrations/20250519204449_drop_relation_between_controls_and_framewrok_instance/migration.sql +0 -14
  186. package/prisma/migrations/20250519212347_add_visibility_toggle_to_framework_editor/migration.sql +0 -2
  187. package/prisma/migrations/20250520152548_add_approver_to_policy/migration.sql +0 -5
  188. package/prisma/migrations/20250520175109_add_description_to_audit_log_for_convenience/migration.sql +0 -2
  189. package/prisma/migrations/20250520175523_add_member_id_to_log_table/migration.sql +0 -8
  190. package/prisma/migrations/20250521140239_add_entity_type_and_id_for_audit_logs_for_easy_filtering/migration.sql +0 -9
  191. package/prisma/migrations/20250603135046_add_v2_onboarding_requirements/migration.sql +0 -36
  192. package/prisma/migrations/20250604155610_add_job_id_column_to_onboarding/migration.sql +0 -2
  193. package/prisma/migrations/20250605151521_make_framework_visibility_false/migration.sql +0 -2
  194. package/prisma/migrations/20250605184738_add_cascade_to_entities_owned_by_org/migration.sql +0 -29
  195. package/prisma/migrations/20250605184740_add_device_agent_details_to_org/migration.sql +0 -18
  196. package/prisma/migrations/20250609130129_add_not_relevant/migration.sql +0 -2
  197. package/prisma/migrations/20250610215328_add_fleet_label_to_employees/migration.sql +0 -2
  198. package/prisma/migrations/20250611144654_add_is_fleet_setup_flag/migration.sql +0 -2
  199. package/prisma/migrations/20250612160731_remove_unused_cols/migration.sql +0 -10
  200. package/prisma/migrations/20250618001304_add_default_slug/migration.sql +0 -3
  201. package/prisma/migrations/20250623184529_add_subscription_type/migration.sql +0 -12
  202. package/prisma/migrations/20250626021946_add_starter_subscription_type/migration.sql +0 -27
  203. package/prisma/migrations/20250626030206_added_new_subscription_type/migration.sql +0 -2
  204. package/prisma/migrations/20250627180331_add_onboaridng_field/migration.sql +0 -5
  205. package/prisma/migrations/20250627180828_rename_completed_col/migration.sql +0 -15
  206. package/prisma/migrations/20250708152414_add_had_call_col/migration.sql +0 -2
  207. package/prisma/migrations/20250711201749_update_retool_role_to_edit_had_call_column_in_organization_table/migration.sql +0 -7
  208. package/prisma/migrations/20250711204234_add_read_permission_for_where_clause_on_retool_role/migration.sql +0 -8
  209. package/prisma/migrations/20250714153009_remove_stripe_and_add_has_access/migration.sql +0 -31
  210. package/prisma/migrations/20250715200054_add_perms_for_has_access_for_retool/migration.sql +0 -7
  211. package/prisma/migrations/migration_lock.toml +0 -3
  212. package/prisma/randomSecret.sql +0 -12
  213. package/prisma/schema/attachments.prisma +0 -35
  214. package/prisma/schema/auth.prisma +0 -122
  215. package/prisma/schema/comment.prisma +0 -27
  216. package/prisma/schema/context.prisma +0 -18
  217. package/prisma/schema/control.prisma +0 -21
  218. package/prisma/schema/framework-editor.prisma +0 -96
  219. package/prisma/schema/framework.prisma +0 -14
  220. package/prisma/schema/integration.prisma +0 -32
  221. package/prisma/schema/onboarding.prisma +0 -18
  222. package/prisma/schema/organization.prisma +0 -34
  223. package/prisma/schema/policy.prisma +0 -32
  224. package/prisma/schema/requirement.prisma +0 -15
  225. package/prisma/schema/risk.prisma +0 -57
  226. package/prisma/schema/shared.prisma +0 -104
  227. package/prisma/schema/task.prisma +0 -41
  228. package/prisma/schema/trust.prisma +0 -37
  229. package/prisma/schema/vendor.prisma +0 -56
  230. package/prisma/schema.prisma +0 -12
  231. package/prisma/seed/frameworkEditorSchemas.js +0 -136
  232. package/prisma/seed/frameworkEditorSchemas.ts +0 -178
  233. package/prisma/seed/primitives/FrameworkEditorControlTemplate.json +0 -296
  234. package/prisma/seed/primitives/FrameworkEditorFramework.json +0 -101
  235. package/prisma/seed/primitives/FrameworkEditorPolicyTemplate.json +0 -6057
  236. package/prisma/seed/primitives/FrameworkEditorRequirement.json +0 -7841
  237. package/prisma/seed/primitives/FrameworkEditorTaskTemplate.json +0 -308
  238. package/prisma/seed/primitives/FrameworkEditorVideo.json +0 -47
  239. package/prisma/seed/relations/_FrameworkEditorControlTemplateToFrameworkEditorPolicyTemplate.json +0 -178
  240. package/prisma/seed/relations/_FrameworkEditorControlTemplateToFrameworkEditorRequirement.json +0 -470
  241. package/prisma/seed/relations/_FrameworkEditorControlTemplateToFrameworkEditorTaskTemplate.json +0 -142
  242. package/prisma/seed/seed.js +0 -160
  243. package/prisma/seed/seed.ts +0 -192
  244. package/scripts/setup-consumer.sh +0 -67
@@ -2,6 +2,7 @@ generator client {
2
2
  provider = "prisma-client-js"
3
3
  previewFeatures = ["driverAdapters", "postgresqlExtensions"]
4
4
  binaryTargets = ["native", "darwin-arm64", "debian-openssl-3.0.x", "linux-musl-openssl-3.0.x"]
5
+ output = "../generated/prisma"
5
6
  }
6
7
 
7
8
  datasource db {
@@ -10,3 +11,813 @@ datasource db {
10
11
  directUrl = env("DATABASE_URL")
11
12
  extensions = [pgcrypto]
12
13
  }
14
+
15
+
16
+ // ===== attachments.prisma =====
17
+ model Attachment {
18
+ id String @id @default(dbgenerated("generate_prefixed_cuid('att'::text)"))
19
+ name String
20
+ url String
21
+ type AttachmentType
22
+ entityId String
23
+ entityType AttachmentEntityType
24
+
25
+ // Dates
26
+ createdAt DateTime @default(now())
27
+ updatedAt DateTime @updatedAt
28
+
29
+ // Relationships
30
+ organizationId String
31
+ organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
32
+ comment Comment? @relation(fields: [commentId], references: [id])
33
+ commentId String?
34
+
35
+ @@index([entityId, entityType])
36
+ }
37
+
38
+ enum AttachmentEntityType {
39
+ task
40
+ vendor
41
+ risk
42
+ comment
43
+ }
44
+
45
+ enum AttachmentType {
46
+ image
47
+ video
48
+ audio
49
+ document
50
+ other
51
+ }
52
+
53
+
54
+ // ===== auth.prisma =====
55
+ model User {
56
+ id String @id @default(dbgenerated("generate_prefixed_cuid('usr'::text)"))
57
+ name String
58
+ email String
59
+ emailVerified Boolean
60
+ image String?
61
+ createdAt DateTime @default(now())
62
+ updatedAt DateTime @updatedAt
63
+ lastLogin DateTime?
64
+
65
+ accounts Account[]
66
+ auditLog AuditLog[]
67
+ integrationResults IntegrationResult[]
68
+ invitations Invitation[]
69
+ members Member[]
70
+ sessions Session[]
71
+
72
+ @@unique([email])
73
+ }
74
+
75
+ model EmployeeTrainingVideoCompletion {
76
+ id String @id @default(dbgenerated("generate_prefixed_cuid('evc'::text)"))
77
+ completedAt DateTime?
78
+ videoId String
79
+
80
+ memberId String
81
+ member Member @relation(fields: [memberId], references: [id], onDelete: Cascade)
82
+
83
+ @@unique([memberId, videoId])
84
+ @@index([memberId])
85
+ }
86
+
87
+ model Session {
88
+ id String @id @default(dbgenerated("generate_prefixed_cuid('ses'::text)"))
89
+ expiresAt DateTime
90
+ token String
91
+ createdAt DateTime @default(now())
92
+ updatedAt DateTime @updatedAt
93
+ ipAddress String?
94
+ userAgent String?
95
+ userId String
96
+ activeOrganizationId String?
97
+ user User @relation(fields: [userId], references: [id], onDelete: Cascade)
98
+
99
+ @@unique([token])
100
+ }
101
+
102
+ model Account {
103
+ id String @id @default(dbgenerated("generate_prefixed_cuid('acc'::text)"))
104
+ accountId String
105
+ providerId String
106
+ userId String
107
+ user User @relation(fields: [userId], references: [id], onDelete: Cascade)
108
+ accessToken String?
109
+ refreshToken String?
110
+ idToken String?
111
+ accessTokenExpiresAt DateTime?
112
+ refreshTokenExpiresAt DateTime?
113
+ scope String?
114
+ password String?
115
+ createdAt DateTime
116
+ updatedAt DateTime
117
+ }
118
+
119
+ model Verification {
120
+ id String @id @default(dbgenerated("generate_prefixed_cuid('ver'::text)"))
121
+ identifier String
122
+ value String
123
+ expiresAt DateTime
124
+ createdAt DateTime @default(now())
125
+ updatedAt DateTime @updatedAt
126
+ }
127
+
128
+ model Member {
129
+ id String @id @default(dbgenerated("generate_prefixed_cuid('mem'::text)"))
130
+ organizationId String
131
+ organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
132
+ userId String
133
+ user User @relation(fields: [userId], references: [id], onDelete: Cascade)
134
+ role String // Purposefully a string, since BetterAuth doesn't support enums this way
135
+ createdAt DateTime @default(now())
136
+
137
+ department Departments @default(none)
138
+ isActive Boolean @default(true)
139
+ employeeTrainingVideoCompletion EmployeeTrainingVideoCompletion[]
140
+ fleetDmLabelId Int?
141
+
142
+ assignedPolicies Policy[] @relation("PolicyAssignee") // Policies where this member is an assignee
143
+ approvedPolicies Policy[] @relation("PolicyApprover") // Policies where this member is an approver
144
+ risks Risk[]
145
+ tasks Task[]
146
+ vendors Vendor[]
147
+ comments Comment[]
148
+ auditLogs AuditLog[]
149
+ }
150
+
151
+ model Invitation {
152
+ id String @id @default(dbgenerated("generate_prefixed_cuid('inv'::text)"))
153
+ organizationId String
154
+ organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
155
+ email String
156
+ role String // Purposefully a string, since BetterAuth doesn't support enums this way
157
+ status String
158
+ expiresAt DateTime
159
+ inviterId String
160
+ user User @relation(fields: [inviterId], references: [id], onDelete: Cascade)
161
+ }
162
+
163
+ // This is only for the app to consume, shouldn't be enforced by DB
164
+ // Otherwise it won't work with Better Auth, as per https://www.better-auth.com/docs/plugins/organization#access-control
165
+ enum Role {
166
+ owner
167
+ admin
168
+ auditor
169
+ employee
170
+ }
171
+
172
+ enum PolicyStatus {
173
+ draft
174
+ published
175
+ needs_review
176
+ }
177
+
178
+
179
+ // ===== comment.prisma =====
180
+ model Comment {
181
+ id String @id @default(dbgenerated("generate_prefixed_cuid('cmt'::text)"))
182
+ content String
183
+ entityId String
184
+ entityType CommentEntityType
185
+
186
+ // Dates
187
+ createdAt DateTime @default(now())
188
+
189
+ // Relationships
190
+ authorId String
191
+ author Member @relation(fields: [authorId], references: [id])
192
+ organizationId String
193
+ organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
194
+
195
+ // Relation to Attachments
196
+ attachments Attachment[]
197
+
198
+ @@index([entityId])
199
+ }
200
+
201
+ enum CommentEntityType {
202
+ task
203
+ vendor
204
+ risk
205
+ policy
206
+ }
207
+
208
+
209
+ // ===== context.prisma =====
210
+ model Context {
211
+ id String @id @default(dbgenerated("generate_prefixed_cuid('ctx'::text)"))
212
+ organizationId String
213
+ organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
214
+
215
+ question String
216
+ answer String
217
+
218
+ tags String[]
219
+
220
+ createdAt DateTime @default(now())
221
+ updatedAt DateTime @updatedAt
222
+
223
+ @@index([organizationId])
224
+ @@index([question])
225
+ @@index([answer])
226
+ @@index([tags])
227
+ }
228
+
229
+
230
+ // ===== control.prisma =====
231
+ model Control {
232
+ // Metadata
233
+ id String @id @default(dbgenerated("generate_prefixed_cuid('ctl'::text)"))
234
+ name String
235
+ description String
236
+
237
+ // Review dates
238
+ lastReviewDate DateTime?
239
+ nextReviewDate DateTime?
240
+
241
+ // Relationships
242
+ organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
243
+ organizationId String
244
+ requirementsMapped RequirementMap[]
245
+ tasks Task[]
246
+ policies Policy[]
247
+ controlTemplateId String?
248
+ controlTemplate FrameworkEditorControlTemplate? @relation(fields: [controlTemplateId], references: [id])
249
+
250
+ @@index([organizationId])
251
+ }
252
+
253
+
254
+ // ===== framework-editor.prisma =====
255
+ // --- Data for Framework Editor ---
256
+ model FrameworkEditorVideo {
257
+ id String @id @default(dbgenerated("generate_prefixed_cuid('frk_vi'::text)"))
258
+ title String
259
+ description String
260
+ youtubeId String
261
+ url String
262
+
263
+ // Dates
264
+ createdAt DateTime @default(now())
265
+ updatedAt DateTime @default(now()) @updatedAt
266
+ }
267
+
268
+ model FrameworkEditorFramework {
269
+ id String @id @default(dbgenerated("generate_prefixed_cuid('frk'::text)"))
270
+ name String // e.g., "soc2", "iso27001"
271
+ version String
272
+ description String
273
+ visible Boolean @default(false)
274
+
275
+ requirements FrameworkEditorRequirement[]
276
+ frameworkInstances FrameworkInstance[]
277
+
278
+ // Dates
279
+ createdAt DateTime @default(now())
280
+ updatedAt DateTime @default(now()) @updatedAt
281
+ }
282
+
283
+ model FrameworkEditorRequirement {
284
+ id String @id @default(dbgenerated("generate_prefixed_cuid('frk_rq'::text)"))
285
+ frameworkId String
286
+ framework FrameworkEditorFramework @relation(fields: [frameworkId], references: [id])
287
+
288
+ name String // Original requirement ID within that framework, e.g., "Privacy"
289
+ identifier String @default("") // Unique identifier for the requirement, e.g., "cc1-1"
290
+ description String
291
+
292
+ controlTemplates FrameworkEditorControlTemplate[]
293
+ requirementMaps RequirementMap[]
294
+
295
+ // Dates
296
+ createdAt DateTime @default(now())
297
+ updatedAt DateTime @default(now()) @updatedAt
298
+ }
299
+
300
+ model FrameworkEditorPolicyTemplate {
301
+ id String @id @default(dbgenerated("generate_prefixed_cuid('frk_pt'::text)"))
302
+ name String
303
+ description String
304
+ frequency Frequency // Using the enum from shared.prisma
305
+ department Departments // Using the enum from shared.prisma
306
+ content Json
307
+
308
+ controlTemplates FrameworkEditorControlTemplate[]
309
+
310
+ // Dates
311
+ createdAt DateTime @default(now())
312
+ updatedAt DateTime @default(now()) @updatedAt
313
+
314
+ // Instances
315
+ policies Policy[]
316
+ }
317
+
318
+ model FrameworkEditorTaskTemplate {
319
+ id String @id @default(dbgenerated("generate_prefixed_cuid('frk_tt'::text)"))
320
+ name String
321
+ description String
322
+ frequency Frequency // Using the enum from shared.prisma
323
+ department Departments // Using the enum from shared.prisma
324
+
325
+ controlTemplates FrameworkEditorControlTemplate[]
326
+
327
+ // Dates
328
+ createdAt DateTime @default(now())
329
+ updatedAt DateTime @default(now()) @updatedAt
330
+
331
+ // Instances
332
+ tasks Task[]
333
+ }
334
+
335
+ model FrameworkEditorControlTemplate {
336
+ id String @id @default(dbgenerated("generate_prefixed_cuid('frk_ct'::text)"))
337
+ name String
338
+ description String
339
+
340
+ policyTemplates FrameworkEditorPolicyTemplate[]
341
+ requirements FrameworkEditorRequirement[]
342
+ taskTemplates FrameworkEditorTaskTemplate[]
343
+
344
+ // Dates
345
+ createdAt DateTime @default(now())
346
+ updatedAt DateTime @default(now()) @updatedAt
347
+
348
+ // Instances
349
+ controls Control[]
350
+ }
351
+
352
+
353
+ // ===== framework.prisma =====
354
+ model FrameworkInstance {
355
+ // Metadata
356
+ id String @id @default(dbgenerated("generate_prefixed_cuid('frm'::text)"))
357
+ organizationId String
358
+
359
+ frameworkId String
360
+ framework FrameworkEditorFramework @relation(fields: [frameworkId], references: [id], onDelete: Cascade)
361
+
362
+ // Relationships
363
+ organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
364
+ requirementsMapped RequirementMap[]
365
+
366
+ @@unique([organizationId, frameworkId])
367
+ }
368
+
369
+
370
+ // ===== integration.prisma =====
371
+ model Integration {
372
+ id String @id @default(dbgenerated("generate_prefixed_cuid('int'::text)"))
373
+ name String
374
+ integrationId String
375
+ settings Json
376
+ userSettings Json
377
+ organizationId String
378
+ lastRunAt DateTime?
379
+ organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
380
+ results IntegrationResult[]
381
+
382
+ @@index([organizationId])
383
+ }
384
+
385
+ model IntegrationResult {
386
+ id String @id @default(dbgenerated("generate_prefixed_cuid('itr'::text)"))
387
+ title String?
388
+ description String?
389
+ remediation String?
390
+ status String?
391
+ severity String?
392
+ resultDetails Json?
393
+ completedAt DateTime? @default(now())
394
+ integrationId String
395
+ organizationId String
396
+ assignedUserId String?
397
+
398
+ assignedUser User? @relation(fields: [assignedUserId], references: [id], onDelete: Cascade)
399
+ integration Integration @relation(fields: [integrationId], references: [id], onDelete: Cascade)
400
+
401
+ @@index([integrationId])
402
+ }
403
+
404
+
405
+ // ===== onboarding.prisma =====
406
+ model Onboarding {
407
+ organizationId String @id
408
+ organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
409
+ policies Boolean @default(false)
410
+ employees Boolean @default(false)
411
+ vendors Boolean @default(false)
412
+ integrations Boolean @default(false)
413
+ risk Boolean @default(false)
414
+ team Boolean @default(false)
415
+ tasks Boolean @default(false)
416
+ callBooked Boolean @default(false)
417
+ companyBookingDetails Json?
418
+ companyDetails Json?
419
+ triggerJobId String?
420
+ triggerJobCompleted Boolean @default(false)
421
+
422
+ @@index([organizationId])
423
+ }
424
+
425
+
426
+ // ===== organization.prisma =====
427
+ model Organization {
428
+ id String @id @default(dbgenerated("generate_prefixed_cuid('org'::text)"))
429
+ name String
430
+ slug String @unique @default(dbgenerated("generate_prefixed_cuid('slug'::text)"))
431
+ logo String?
432
+ createdAt DateTime @default(now())
433
+ metadata String?
434
+ onboarding Onboarding?
435
+ website String?
436
+ onboardingCompleted Boolean @default(false)
437
+ hasAccess Boolean @default(false)
438
+
439
+ // FleetDM
440
+ fleetDmLabelId Int?
441
+ isFleetSetupCompleted Boolean @default(false)
442
+
443
+ apiKeys ApiKey[]
444
+ auditLog AuditLog[]
445
+ controls Control[]
446
+ frameworkInstances FrameworkInstance[]
447
+ integrations Integration[]
448
+ invitations Invitation[]
449
+ members Member[]
450
+ policy Policy[]
451
+ risk Risk[]
452
+ vendors Vendor[]
453
+ tasks Task[]
454
+ comments Comment[]
455
+ attachments Attachment[]
456
+ trust Trust[]
457
+ context Context[]
458
+
459
+ @@index([slug])
460
+ }
461
+
462
+
463
+ // ===== policy.prisma =====
464
+ model Policy {
465
+ id String @id @default(dbgenerated("generate_prefixed_cuid('pol'::text)"))
466
+ name String
467
+ description String?
468
+ status PolicyStatus @default(draft)
469
+ content Json[]
470
+ frequency Frequency?
471
+ department Departments?
472
+ isRequiredToSign Boolean @default(false)
473
+ signedBy String[] @default([])
474
+ reviewDate DateTime?
475
+ isArchived Boolean @default(false)
476
+
477
+ // Dates
478
+ createdAt DateTime @default(now())
479
+ updatedAt DateTime @updatedAt
480
+ lastArchivedAt DateTime?
481
+ lastPublishedAt DateTime?
482
+
483
+ // Relationships
484
+ organizationId String
485
+ organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
486
+ assigneeId String?
487
+ assignee Member? @relation("PolicyAssignee", fields: [assigneeId], references: [id], onDelete: SetNull, onUpdate: Cascade)
488
+ approverId String?
489
+ approver Member? @relation("PolicyApprover", fields: [approverId], references: [id], onDelete: SetNull, onUpdate: Cascade)
490
+ policyTemplateId String?
491
+ policyTemplate FrameworkEditorPolicyTemplate? @relation(fields: [policyTemplateId], references: [id])
492
+ controls Control[]
493
+
494
+ @@index([organizationId])
495
+ }
496
+
497
+
498
+ // ===== requirement.prisma =====
499
+ model RequirementMap {
500
+ id String @id @default(dbgenerated("generate_prefixed_cuid('req'::text)"))
501
+
502
+ requirementId String
503
+ requirement FrameworkEditorRequirement @relation(fields: [requirementId], references: [id], onDelete: Cascade)
504
+
505
+ controlId String
506
+ control Control @relation(fields: [controlId], references: [id], onDelete: Cascade)
507
+
508
+ frameworkInstanceId String
509
+ frameworkInstance FrameworkInstance @relation(fields: [frameworkInstanceId], references: [id], onDelete: Cascade)
510
+
511
+ @@unique([controlId, frameworkInstanceId, requirementId])
512
+ @@index([requirementId, frameworkInstanceId])
513
+ }
514
+
515
+
516
+ // ===== risk.prisma =====
517
+ model Risk {
518
+ // Metadata
519
+ id String @id @default(dbgenerated("generate_prefixed_cuid('rsk'::text)"))
520
+ title String
521
+ description String
522
+ category RiskCategory
523
+ department Departments?
524
+ status RiskStatus @default(open)
525
+ likelihood Likelihood @default(very_unlikely)
526
+ impact Impact @default(insignificant)
527
+ residualLikelihood Likelihood @default(very_unlikely)
528
+ residualImpact Impact @default(insignificant)
529
+ treatmentStrategyDescription String?
530
+ treatmentStrategy RiskTreatmentType @default(accept)
531
+
532
+ // Dates
533
+ createdAt DateTime @default(now())
534
+ updatedAt DateTime @updatedAt
535
+
536
+ // Relationships
537
+ organizationId String
538
+ organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
539
+ assigneeId String?
540
+ assignee Member? @relation(fields: [assigneeId], references: [id])
541
+ tasks Task[]
542
+
543
+ @@index([organizationId])
544
+ @@index([category])
545
+ @@index([status])
546
+ }
547
+
548
+ enum RiskTreatmentType {
549
+ accept
550
+ avoid
551
+ mitigate
552
+ transfer
553
+ }
554
+
555
+ enum RiskCategory {
556
+ customer
557
+ governance
558
+ operations
559
+ other
560
+ people
561
+ regulatory
562
+ reporting
563
+ resilience
564
+ technology
565
+ vendor_management
566
+ }
567
+
568
+ enum RiskStatus {
569
+ open
570
+ pending
571
+ closed
572
+ archived
573
+ }
574
+
575
+
576
+ // ===== shared.prisma =====
577
+ model ApiKey {
578
+ id String @id @default(dbgenerated("generate_prefixed_cuid('apk'::text)"))
579
+ name String
580
+ key String @unique
581
+ salt String?
582
+ createdAt DateTime @default(now())
583
+ expiresAt DateTime?
584
+ lastUsedAt DateTime?
585
+ isActive Boolean @default(true)
586
+
587
+ organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
588
+ organizationId String
589
+
590
+ @@index([organizationId])
591
+ @@index([key])
592
+ }
593
+
594
+ model AuditLog {
595
+ id String @id @default(dbgenerated("generate_prefixed_cuid('aud'::text)"))
596
+ timestamp DateTime @default(now())
597
+ organizationId String
598
+ userId String
599
+ memberId String?
600
+ data Json
601
+ description String?
602
+ entityId String?
603
+ entityType AuditLogEntityType?
604
+
605
+ organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
606
+ user User @relation(fields: [userId], references: [id], onDelete: Cascade)
607
+ member Member? @relation(fields: [memberId], references: [id], onDelete: Cascade)
608
+
609
+ @@index([userId])
610
+ @@index([organizationId])
611
+ @@index([memberId])
612
+ @@index([entityType])
613
+ }
614
+
615
+ enum AuditLogEntityType {
616
+ organization
617
+ framework
618
+ requirement
619
+ control
620
+ policy
621
+ task
622
+ people
623
+ risk
624
+ vendor
625
+ tests
626
+ integration
627
+ }
628
+
629
+ model GlobalVendors {
630
+ website String @id @unique
631
+ company_name String?
632
+ legal_name String?
633
+ company_description String?
634
+ company_hq_address String?
635
+ privacy_policy_url String?
636
+ terms_of_service_url String?
637
+ service_level_agreement_url String?
638
+ security_page_url String?
639
+ trust_page_url String?
640
+ security_certifications String[]
641
+ subprocessors String[]
642
+ type_of_company String?
643
+
644
+ approved Boolean @default(false)
645
+ createdAt DateTime @default(now())
646
+
647
+ @@index([website])
648
+ }
649
+
650
+ enum Departments {
651
+ none
652
+ admin
653
+ gov
654
+ hr
655
+ it
656
+ itsm
657
+ qms
658
+ }
659
+
660
+ enum Frequency {
661
+ monthly
662
+ quarterly
663
+ yearly
664
+ }
665
+
666
+ enum Likelihood {
667
+ very_unlikely
668
+ unlikely
669
+ possible
670
+ likely
671
+ very_likely
672
+ }
673
+
674
+ enum Impact {
675
+ insignificant
676
+ minor
677
+ moderate
678
+ major
679
+ severe
680
+ }
681
+
682
+
683
+ // ===== task.prisma =====
684
+ model Task {
685
+ // Metadata
686
+ id String @id @default(dbgenerated("generate_prefixed_cuid('tsk'::text)"))
687
+ title String
688
+ description String
689
+ status TaskStatus @default(todo)
690
+ frequency TaskFrequency?
691
+ department Departments? @default(none)
692
+ order Int @default(0)
693
+
694
+ // Dates
695
+ createdAt DateTime @default(now())
696
+ updatedAt DateTime @updatedAt
697
+ lastCompletedAt DateTime?
698
+
699
+ // Relationships
700
+ controls Control[]
701
+ vendors Vendor[]
702
+ risks Risk[]
703
+ assigneeId String?
704
+ assignee Member? @relation(fields: [assigneeId], references: [id])
705
+ organizationId String
706
+ organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
707
+ taskTemplateId String?
708
+ taskTemplate FrameworkEditorTaskTemplate? @relation(fields: [taskTemplateId], references: [id])
709
+ }
710
+
711
+ enum TaskStatus {
712
+ todo
713
+ in_progress
714
+ done
715
+ not_relevant
716
+ }
717
+
718
+ enum TaskFrequency {
719
+ daily
720
+ weekly
721
+ monthly
722
+ quarterly
723
+ yearly
724
+ }
725
+
726
+
727
+ // ===== trust.prisma =====
728
+ model Trust {
729
+ organizationId String
730
+ organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
731
+ friendlyUrl String? @unique
732
+ domain String?
733
+ domainVerified Boolean @default(false)
734
+ isVercelDomain Boolean @default(false)
735
+ vercelVerification String?
736
+ status TrustStatus @default(draft)
737
+ contactEmail String?
738
+
739
+ email String?
740
+ privacyPolicy String?
741
+ soc2 Boolean @default(false)
742
+ iso27001 Boolean @default(false)
743
+ gdpr Boolean @default(false)
744
+
745
+ soc2_status FrameworkStatus @default(started)
746
+ iso27001_status FrameworkStatus @default(started)
747
+ gdpr_status FrameworkStatus @default(started)
748
+
749
+ @@id([status, organizationId])
750
+ @@unique([organizationId])
751
+ @@index([organizationId])
752
+ @@index([friendlyUrl])
753
+ }
754
+
755
+ enum TrustStatus {
756
+ draft
757
+ published
758
+ }
759
+
760
+ enum FrameworkStatus {
761
+ started
762
+ in_progress
763
+ compliant
764
+ }
765
+
766
+
767
+ // ===== vendor.prisma =====
768
+ model Vendor {
769
+ id String @id @default(dbgenerated("generate_prefixed_cuid('vnd'::text)"))
770
+ name String
771
+ description String
772
+ category VendorCategory @default(other)
773
+ status VendorStatus @default(not_assessed)
774
+ inherentProbability Likelihood @default(very_unlikely)
775
+ inherentImpact Impact @default(insignificant)
776
+ residualProbability Likelihood @default(very_unlikely)
777
+ residualImpact Impact @default(insignificant)
778
+ website String?
779
+
780
+ createdAt DateTime @default(now())
781
+ updatedAt DateTime @updatedAt
782
+
783
+ organizationId String
784
+ organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
785
+ assigneeId String?
786
+ assignee Member? @relation(fields: [assigneeId], references: [id], onDelete: Cascade)
787
+ contacts VendorContact[]
788
+ tasks Task[]
789
+
790
+ @@index([organizationId])
791
+ @@index([assigneeId])
792
+ @@index([category])
793
+ }
794
+
795
+ model VendorContact {
796
+ id String @id @default(dbgenerated("generate_prefixed_cuid('vct'::text)"))
797
+ vendorId String
798
+ name String
799
+ email String
800
+ phone String
801
+ createdAt DateTime @default(now())
802
+ updatedAt DateTime @updatedAt
803
+ Vendor Vendor @relation(fields: [vendorId], references: [id], onDelete: Cascade)
804
+
805
+ @@index([vendorId])
806
+ }
807
+
808
+ enum VendorCategory {
809
+ cloud
810
+ infrastructure
811
+ software_as_a_service
812
+ finance
813
+ marketing
814
+ sales
815
+ hr
816
+ other
817
+ }
818
+
819
+ enum VendorStatus {
820
+ not_assessed
821
+ in_progress
822
+ assessed
823
+ }