@valentine-efagene/qshelter-common 2.0.156 → 2.0.158

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 (74) hide show
  1. package/dist/generated/client/browser.d.ts +1 -1
  2. package/dist/generated/client/client.d.ts +1 -1
  3. package/dist/generated/client/internal/class.js +2 -2
  4. package/dist/generated/client/internal/prismaNamespace.d.ts +2 -4
  5. package/dist/generated/client/internal/prismaNamespace.js +2 -4
  6. package/dist/generated/client/internal/prismaNamespaceBrowser.d.ts +2 -4
  7. package/dist/generated/client/internal/prismaNamespaceBrowser.js +2 -4
  8. package/dist/generated/client/models/BankDocumentRequirement.d.ts +90 -154
  9. package/dist/generated/client/models/PropertyPaymentMethod.d.ts +3 -192
  10. package/dist/generated/client/models/PropertyPaymentMethodPhase.d.ts +227 -4
  11. package/package.json +1 -1
  12. package/prisma/migrations/0_init/migration.sql +2327 -0
  13. package/prisma/schema.prisma +17 -18
  14. package/prisma/migrations/20251228081517_create_initial_tables/migration.sql +0 -707
  15. package/prisma/migrations/20251228083337_refresh_token_hash/migration.sql +0 -16
  16. package/prisma/migrations/20251228084551/migration.sql +0 -16
  17. package/prisma/migrations/20251230104059_add_property_variants/migration.sql +0 -622
  18. package/prisma/migrations/20251230113413_add_multitenancy/migration.sql +0 -54
  19. package/prisma/migrations/20251230231217_add_prequalification_and_payment_method_change/migration.sql +0 -137
  20. package/prisma/migrations/20260101081428_normalize_schema/migration.sql +0 -119
  21. package/prisma/migrations/20260101102022_add_contract_termination/migration.sql +0 -69
  22. package/prisma/migrations/20260101110958_add_collect_funds/migration.sql +0 -8
  23. package/prisma/migrations/20260104084843_add_document_templates_and_offer_letters/migration.sql +0 -77
  24. package/prisma/migrations/20260104095131_add_underwriting_decision/migration.sql +0 -31
  25. package/prisma/migrations/20260104170149_add_generate_document_step_type/migration.sql +0 -5
  26. package/prisma/migrations/20260104172349_add_metadata_to_contract_phase_step/migration.sql +0 -2
  27. package/prisma/migrations/20260104174626_make_offer_letter_template_optional/migration.sql +0 -11
  28. package/prisma/migrations/20260105004059_add_superseded_phase_status/migration.sql +0 -2
  29. package/prisma/migrations/20260105074701_add_underwriting_step_types/migration.sql +0 -17
  30. package/prisma/migrations/20260105080236_remove_prequalification_model/migration.sql +0 -37
  31. package/prisma/migrations/20260105081842_unify_contract_events/migration.sql +0 -37
  32. package/prisma/migrations/20260105085337_simplify_los_remove_prequalification/migration.sql +0 -1
  33. package/prisma/migrations/20260105094604_workflow_tracking_current_step/migration.sql +0 -14
  34. package/prisma/migrations/20260105130633_add_api_keys/migration.sql +0 -26
  35. package/prisma/migrations/20260105151535_add_event_workflow_system/migration.sql +0 -132
  36. package/prisma/migrations/20260105160757_add_sns_handler_type/migration.sql +0 -2
  37. package/prisma/migrations/20260106003757_business_friendly_handler_types/migration.sql +0 -28
  38. package/prisma/migrations/20260106062140_add_step_event_attachments/migration.sql +0 -22
  39. package/prisma/migrations/20260107121844_add_property_transfer_requests/migration.sql +0 -64
  40. package/prisma/migrations/20260107172301_add_approval_request_model/migration.sql +0 -46
  41. package/prisma/migrations/20260107214834_add_contract_refund_model/migration.sql +0 -64
  42. package/prisma/migrations/20260108051928_add_approval_request_type_status_index/migration.sql +0 -2
  43. package/prisma/migrations/20260109132751_update_transfer_flow/migration.sql +0 -343
  44. package/prisma/migrations/20260111091027_rbac_redesign_federated_users/migration.sql +0 -79
  45. package/prisma/migrations/20260112000006_add_phase_event_attachments/migration.sql +0 -22
  46. package/prisma/migrations/20260112041159_add_flexible_term_configuration/migration.sql +0 -11
  47. package/prisma/migrations/20260112080730_rename_contract_to_application/migration.sql +0 -293
  48. package/prisma/migrations/20260112081422_cleanup_rename_contract_to_application/migration.sql +0 -14
  49. package/prisma/migrations/20260113000000_remove_workflow_analytics_summary/migration.sql +0 -5
  50. package/prisma/migrations/20260113110450_add_tenant_id_to_child_models/migration.sql +0 -334
  51. package/prisma/migrations/20260113122855_add_tenant_to_remaining_models/migration.sql +0 -64
  52. package/prisma/migrations/20260114034523_add_documentation_plan/migration.sql +0 -52
  53. package/prisma/migrations/20260114053042_add_questionnaire_plan/migration.sql +0 -73
  54. package/prisma/migrations/20260114164044_add_condition_to_documentation_plan_step/migration.sql +0 -10
  55. package/prisma/migrations/20260115055636_add_unit_locking/migration.sql +0 -16
  56. package/prisma/migrations/20260115060132_add_phase_template_reference/migration.sql +0 -8
  57. package/prisma/migrations/20260115084033_add_gate_step_type/migration.sql +0 -29
  58. package/prisma/migrations/20260115123703_add_organizations/migration.sql +0 -69
  59. package/prisma/migrations/20260115125519_add_requires_manual_review_to_step/migration.sql +0 -2
  60. package/prisma/migrations/20260115134106_add_conditional_step_support/migration.sql +0 -11
  61. package/prisma/migrations/20260116090633_add_question_category_enum/migration.sql +0 -8
  62. package/prisma/migrations/20260116152051_add_multi_party_document_review/migration.sql +0 -59
  63. package/prisma/migrations/20260116153745_add_platform_organization_type/migration.sql +0 -3
  64. package/prisma/migrations/20260119180401_add_document_name_remove_required_doc_types/migration.sql +0 -14
  65. package/prisma/migrations/20260119190336_add_document_approval_workflow/migration.sql +0 -134
  66. package/prisma/migrations/20260120024650_add_questionnaire_phase_review/migration.sql +0 -102
  67. package/prisma/migrations/20260121155057_add_event_execution_and_bank_docs/migration.sql +0 -198
  68. package/prisma/migrations/20260121161937_add_phase_step_order_unique_constraints/migration.sql +0 -12
  69. package/prisma/migrations/20260121163910_add_optimistic_locking/migration.sql +0 -14
  70. package/prisma/migrations/20260125090213_remove_is_published_use_status_enum/migration.sql +0 -10
  71. package/prisma/migrations/20260125102448_org_types_many_to_many/migration.sql +0 -153
  72. package/prisma/migrations/20260125103700_20260125102448_org_types_many_to_many_fix/migration.sql +0 -5
  73. package/prisma/migrations/20260126031132_add_organization_id_to_property/migration.sql +0 -8
  74. package/prisma/migrations/migration_lock.toml +0 -3
@@ -0,0 +1,2327 @@
1
+ -- CreateTable
2
+ CREATE TABLE `organization_types` (
3
+ `id` VARCHAR(191) NOT NULL,
4
+ `tenantId` VARCHAR(191) NOT NULL,
5
+ `code` VARCHAR(191) NOT NULL,
6
+ `name` VARCHAR(191) NOT NULL,
7
+ `description` TEXT NULL,
8
+ `isSystemType` BOOLEAN NOT NULL DEFAULT false,
9
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
10
+ `updatedAt` DATETIME(3) NOT NULL,
11
+
12
+ INDEX `organization_types_tenantId_idx`(`tenantId`),
13
+ INDEX `organization_types_code_idx`(`code`),
14
+ UNIQUE INDEX `organization_types_tenantId_code_key`(`tenantId`, `code`),
15
+ PRIMARY KEY (`id`)
16
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
17
+
18
+ -- CreateTable
19
+ CREATE TABLE `organization_type_assignments` (
20
+ `id` VARCHAR(191) NOT NULL,
21
+ `organizationId` VARCHAR(191) NOT NULL,
22
+ `typeId` VARCHAR(191) NOT NULL,
23
+ `isPrimary` BOOLEAN NOT NULL DEFAULT false,
24
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
25
+
26
+ INDEX `organization_type_assignments_organizationId_idx`(`organizationId`),
27
+ INDEX `organization_type_assignments_typeId_idx`(`typeId`),
28
+ UNIQUE INDEX `organization_type_assignments_organizationId_typeId_key`(`organizationId`, `typeId`),
29
+ PRIMARY KEY (`id`)
30
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
31
+
32
+ -- CreateTable
33
+ CREATE TABLE `users` (
34
+ `id` VARCHAR(191) NOT NULL,
35
+ `email` VARCHAR(191) NOT NULL,
36
+ `password` VARCHAR(191) NULL,
37
+ `phone` VARCHAR(191) NULL,
38
+ `firstName` VARCHAR(191) NULL,
39
+ `lastName` VARCHAR(191) NULL,
40
+ `isActive` BOOLEAN NOT NULL DEFAULT true,
41
+ `isEmailVerified` BOOLEAN NOT NULL DEFAULT false,
42
+ `googleId` VARCHAR(191) NULL,
43
+ `avatar` VARCHAR(191) NULL,
44
+ `tenantId` VARCHAR(191) NULL,
45
+ `walletId` VARCHAR(191) NULL,
46
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
47
+ `updatedAt` DATETIME(3) NOT NULL,
48
+ `emailVerifiedAt` DATETIME(3) NULL,
49
+ `emailVerificationToken` VARCHAR(191) NULL,
50
+ `lastLoginAt` DATETIME(3) NULL,
51
+
52
+ UNIQUE INDEX `users_email_key`(`email`),
53
+ UNIQUE INDEX `users_phone_key`(`phone`),
54
+ UNIQUE INDEX `users_walletId_key`(`walletId`),
55
+ INDEX `users_email_idx`(`email`),
56
+ INDEX `users_tenantId_idx`(`tenantId`),
57
+ PRIMARY KEY (`id`)
58
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
59
+
60
+ -- CreateTable
61
+ CREATE TABLE `roles` (
62
+ `id` VARCHAR(191) NOT NULL,
63
+ `name` VARCHAR(191) NOT NULL,
64
+ `description` VARCHAR(191) NULL,
65
+ `tenantId` VARCHAR(191) NULL,
66
+ `isSystem` BOOLEAN NOT NULL DEFAULT false,
67
+ `isActive` BOOLEAN NOT NULL DEFAULT true,
68
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
69
+ `updatedAt` DATETIME(3) NOT NULL,
70
+
71
+ INDEX `roles_tenantId_idx`(`tenantId`),
72
+ UNIQUE INDEX `roles_name_tenantId_key`(`name`, `tenantId`),
73
+ PRIMARY KEY (`id`)
74
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
75
+
76
+ -- CreateTable
77
+ CREATE TABLE `permissions` (
78
+ `id` VARCHAR(191) NOT NULL,
79
+ `name` VARCHAR(191) NOT NULL,
80
+ `description` VARCHAR(191) NULL,
81
+ `path` VARCHAR(191) NOT NULL,
82
+ `methods` JSON NOT NULL,
83
+ `effect` ENUM('ALLOW', 'DENY') NOT NULL DEFAULT 'ALLOW',
84
+ `tenantId` VARCHAR(191) NULL,
85
+ `isSystem` BOOLEAN NOT NULL DEFAULT false,
86
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
87
+ `updatedAt` DATETIME(3) NOT NULL,
88
+
89
+ INDEX `permissions_tenantId_idx`(`tenantId`),
90
+ UNIQUE INDEX `permissions_path_tenantId_key`(`path`, `tenantId`),
91
+ PRIMARY KEY (`id`)
92
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
93
+
94
+ -- CreateTable
95
+ CREATE TABLE `role_permissions` (
96
+ `roleId` VARCHAR(191) NOT NULL,
97
+ `permissionId` VARCHAR(191) NOT NULL,
98
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
99
+
100
+ PRIMARY KEY (`roleId`, `permissionId`)
101
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
102
+
103
+ -- CreateTable
104
+ CREATE TABLE `user_roles` (
105
+ `userId` VARCHAR(191) NOT NULL,
106
+ `roleId` VARCHAR(191) NOT NULL,
107
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
108
+
109
+ PRIMARY KEY (`userId`, `roleId`)
110
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
111
+
112
+ -- CreateTable
113
+ CREATE TABLE `tenant_memberships` (
114
+ `id` VARCHAR(191) NOT NULL,
115
+ `userId` VARCHAR(191) NOT NULL,
116
+ `tenantId` VARCHAR(191) NOT NULL,
117
+ `roleId` VARCHAR(191) NOT NULL,
118
+ `isActive` BOOLEAN NOT NULL DEFAULT true,
119
+ `isDefault` BOOLEAN NOT NULL DEFAULT false,
120
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
121
+ `updatedAt` DATETIME(3) NOT NULL,
122
+
123
+ INDEX `tenant_memberships_tenantId_idx`(`tenantId`),
124
+ INDEX `tenant_memberships_userId_idx`(`userId`),
125
+ UNIQUE INDEX `tenant_memberships_userId_tenantId_key`(`userId`, `tenantId`),
126
+ PRIMARY KEY (`id`)
127
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
128
+
129
+ -- CreateTable
130
+ CREATE TABLE `organizations` (
131
+ `id` VARCHAR(191) NOT NULL,
132
+ `tenantId` VARCHAR(191) NOT NULL,
133
+ `name` VARCHAR(191) NOT NULL,
134
+ `status` ENUM('PENDING', 'ACTIVE', 'SUSPENDED', 'INACTIVE') NOT NULL DEFAULT 'PENDING',
135
+ `isPlatformOrg` BOOLEAN NOT NULL DEFAULT false,
136
+ `email` VARCHAR(191) NULL,
137
+ `phone` VARCHAR(191) NULL,
138
+ `address` VARCHAR(191) NULL,
139
+ `city` VARCHAR(191) NULL,
140
+ `state` VARCHAR(191) NULL,
141
+ `country` VARCHAR(191) NULL DEFAULT 'Nigeria',
142
+ `website` VARCHAR(191) NULL,
143
+ `logoUrl` VARCHAR(191) NULL,
144
+ `description` TEXT NULL,
145
+ `bankCode` VARCHAR(191) NULL,
146
+ `bankLicenseNo` VARCHAR(191) NULL,
147
+ `swiftCode` VARCHAR(191) NULL,
148
+ `sortCode` VARCHAR(191) NULL,
149
+ `cacNumber` VARCHAR(191) NULL,
150
+ `cacCertificateUrl` VARCHAR(191) NULL,
151
+ `taxId` VARCHAR(191) NULL,
152
+ `approvedAt` DATETIME(3) NULL,
153
+ `approvedById` VARCHAR(191) NULL,
154
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
155
+ `updatedAt` DATETIME(3) NOT NULL,
156
+
157
+ INDEX `organizations_tenantId_idx`(`tenantId`),
158
+ INDEX `organizations_status_idx`(`status`),
159
+ UNIQUE INDEX `organizations_tenantId_bankCode_key`(`tenantId`, `bankCode`),
160
+ UNIQUE INDEX `organizations_tenantId_cacNumber_key`(`tenantId`, `cacNumber`),
161
+ PRIMARY KEY (`id`)
162
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
163
+
164
+ -- CreateTable
165
+ CREATE TABLE `organization_members` (
166
+ `id` VARCHAR(191) NOT NULL,
167
+ `organizationId` VARCHAR(191) NOT NULL,
168
+ `userId` VARCHAR(191) NOT NULL,
169
+ `title` VARCHAR(191) NULL,
170
+ `department` VARCHAR(191) NULL,
171
+ `employeeId` VARCHAR(191) NULL,
172
+ `isActive` BOOLEAN NOT NULL DEFAULT true,
173
+ `invitedAt` DATETIME(3) NULL,
174
+ `acceptedAt` DATETIME(3) NULL,
175
+ `invitedBy` VARCHAR(191) NULL,
176
+ `joinedAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
177
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
178
+ `updatedAt` DATETIME(3) NOT NULL,
179
+
180
+ INDEX `organization_members_userId_idx`(`userId`),
181
+ INDEX `organization_members_organizationId_idx`(`organizationId`),
182
+ UNIQUE INDEX `organization_members_organizationId_userId_key`(`organizationId`, `userId`),
183
+ PRIMARY KEY (`id`)
184
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
185
+
186
+ -- CreateTable
187
+ CREATE TABLE `bank_document_requirements` (
188
+ `id` VARCHAR(191) NOT NULL,
189
+ `tenantId` VARCHAR(191) NOT NULL,
190
+ `organizationId` VARCHAR(191) NOT NULL,
191
+ `phaseId` VARCHAR(191) NOT NULL,
192
+ `documentType` VARCHAR(191) NOT NULL,
193
+ `documentName` VARCHAR(191) NOT NULL,
194
+ `modifier` ENUM('REQUIRED', 'OPTIONAL', 'NOT_REQUIRED', 'STRICTER') NOT NULL DEFAULT 'REQUIRED',
195
+ `description` TEXT NULL,
196
+ `expiryDays` INTEGER NULL,
197
+ `minFiles` INTEGER NULL,
198
+ `maxFiles` INTEGER NULL,
199
+ `allowedMimeTypes` VARCHAR(191) NULL,
200
+ `validationRules` JSON NULL,
201
+ `priority` INTEGER NOT NULL DEFAULT 100,
202
+ `isActive` BOOLEAN NOT NULL DEFAULT true,
203
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
204
+ `updatedAt` DATETIME(3) NOT NULL,
205
+
206
+ INDEX `bank_document_requirements_tenantId_idx`(`tenantId`),
207
+ INDEX `bank_document_requirements_organizationId_idx`(`organizationId`),
208
+ INDEX `bank_document_requirements_phaseId_idx`(`phaseId`),
209
+ INDEX `bank_document_requirements_documentType_idx`(`documentType`),
210
+ UNIQUE INDEX `bank_document_requirements_organizationId_phaseId_documentTy_key`(`organizationId`, `phaseId`, `documentType`),
211
+ PRIMARY KEY (`id`)
212
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
213
+
214
+ -- CreateTable
215
+ CREATE TABLE `tenants` (
216
+ `id` VARCHAR(191) NOT NULL,
217
+ `name` VARCHAR(191) NOT NULL,
218
+ `subdomain` VARCHAR(191) NOT NULL,
219
+ `isActive` BOOLEAN NOT NULL DEFAULT true,
220
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
221
+ `updatedAt` DATETIME(3) NOT NULL,
222
+
223
+ UNIQUE INDEX `tenants_subdomain_key`(`subdomain`),
224
+ INDEX `tenants_subdomain_idx`(`subdomain`),
225
+ PRIMARY KEY (`id`)
226
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
227
+
228
+ -- CreateTable
229
+ CREATE TABLE `api_keys` (
230
+ `id` VARCHAR(191) NOT NULL,
231
+ `tenantId` VARCHAR(191) NOT NULL,
232
+ `name` VARCHAR(191) NOT NULL,
233
+ `description` TEXT NULL,
234
+ `provider` VARCHAR(191) NOT NULL,
235
+ `secretRef` VARCHAR(191) NOT NULL,
236
+ `scopes` JSON NOT NULL,
237
+ `enabled` BOOLEAN NOT NULL DEFAULT true,
238
+ `expiresAt` DATETIME(3) NULL,
239
+ `lastUsedAt` DATETIME(3) NULL,
240
+ `revokedAt` DATETIME(3) NULL,
241
+ `revokedBy` VARCHAR(191) NULL,
242
+ `createdBy` VARCHAR(191) NULL,
243
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
244
+ `updatedAt` DATETIME(3) NOT NULL,
245
+
246
+ INDEX `api_keys_tenantId_idx`(`tenantId`),
247
+ INDEX `api_keys_provider_idx`(`provider`),
248
+ INDEX `api_keys_enabled_idx`(`enabled`),
249
+ PRIMARY KEY (`id`)
250
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
251
+
252
+ -- CreateTable
253
+ CREATE TABLE `refresh_tokens` (
254
+ `id` VARCHAR(191) NOT NULL,
255
+ `jti` VARCHAR(255) NULL,
256
+ `token` LONGTEXT NULL,
257
+ `userId` VARCHAR(191) NOT NULL,
258
+ `expiresAt` DATETIME(3) NOT NULL,
259
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
260
+
261
+ UNIQUE INDEX `refresh_tokens_jti_key`(`jti`),
262
+ INDEX `refresh_tokens_userId_idx`(`userId`),
263
+ INDEX `refresh_tokens_expiresAt_idx`(`expiresAt`),
264
+ PRIMARY KEY (`id`)
265
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
266
+
267
+ -- CreateTable
268
+ CREATE TABLE `password_resets` (
269
+ `id` VARCHAR(191) NOT NULL,
270
+ `token` VARCHAR(191) NOT NULL,
271
+ `userId` VARCHAR(191) NOT NULL,
272
+ `expiresAt` DATETIME(3) NOT NULL,
273
+ `usedAt` DATETIME(3) NULL,
274
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
275
+
276
+ UNIQUE INDEX `password_resets_token_key`(`token`),
277
+ INDEX `password_resets_userId_idx`(`userId`),
278
+ INDEX `password_resets_expiresAt_idx`(`expiresAt`),
279
+ PRIMARY KEY (`id`)
280
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
281
+
282
+ -- CreateTable
283
+ CREATE TABLE `user_suspensions` (
284
+ `id` VARCHAR(191) NOT NULL,
285
+ `userId` VARCHAR(191) NOT NULL,
286
+ `reason` VARCHAR(191) NOT NULL,
287
+ `suspendedAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
288
+ `expiresAt` DATETIME(3) NULL,
289
+ `liftedAt` DATETIME(3) NULL,
290
+
291
+ INDEX `user_suspensions_userId_idx`(`userId`),
292
+ PRIMARY KEY (`id`)
293
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
294
+
295
+ -- CreateTable
296
+ CREATE TABLE `email_preferences` (
297
+ `id` VARCHAR(191) NOT NULL,
298
+ `userId` VARCHAR(191) NOT NULL,
299
+ `marketingEmails` BOOLEAN NOT NULL DEFAULT true,
300
+ `transactionalEmails` BOOLEAN NOT NULL DEFAULT true,
301
+ `propertyAlerts` BOOLEAN NOT NULL DEFAULT true,
302
+ `paymentReminders` BOOLEAN NOT NULL DEFAULT true,
303
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
304
+ `updatedAt` DATETIME(3) NOT NULL,
305
+
306
+ INDEX `email_preferences_userId_idx`(`userId`),
307
+ PRIMARY KEY (`id`)
308
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
309
+
310
+ -- CreateTable
311
+ CREATE TABLE `device_endpoints` (
312
+ `id` VARCHAR(191) NOT NULL,
313
+ `userId` VARCHAR(191) NOT NULL,
314
+ `endpoint` VARCHAR(191) NOT NULL,
315
+ `platform` VARCHAR(191) NOT NULL,
316
+ `isActive` BOOLEAN NOT NULL DEFAULT true,
317
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
318
+ `updatedAt` DATETIME(3) NOT NULL,
319
+
320
+ INDEX `device_endpoints_userId_idx`(`userId`),
321
+ PRIMARY KEY (`id`)
322
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
323
+
324
+ -- CreateTable
325
+ CREATE TABLE `socials` (
326
+ `id` VARCHAR(191) NOT NULL,
327
+ `tenantId` VARCHAR(191) NOT NULL,
328
+ `userId` VARCHAR(191) NOT NULL,
329
+ `provider` VARCHAR(191) NOT NULL,
330
+ `socialId` VARCHAR(191) NOT NULL,
331
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
332
+ `updatedAt` DATETIME(3) NOT NULL,
333
+
334
+ INDEX `socials_userId_idx`(`userId`),
335
+ INDEX `socials_tenantId_idx`(`tenantId`),
336
+ UNIQUE INDEX `socials_provider_socialId_key`(`provider`, `socialId`),
337
+ PRIMARY KEY (`id`)
338
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
339
+
340
+ -- CreateTable
341
+ CREATE TABLE `oauth_states` (
342
+ `id` VARCHAR(191) NOT NULL,
343
+ `state` VARCHAR(191) NOT NULL,
344
+ `expiresAt` DATETIME(3) NOT NULL,
345
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
346
+
347
+ UNIQUE INDEX `oauth_states_state_key`(`state`),
348
+ INDEX `oauth_states_state_idx`(`state`),
349
+ INDEX `oauth_states_expiresAt_idx`(`expiresAt`),
350
+ PRIMARY KEY (`id`)
351
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
352
+
353
+ -- CreateTable
354
+ CREATE TABLE `wallets` (
355
+ `id` VARCHAR(191) NOT NULL,
356
+ `tenantId` VARCHAR(191) NOT NULL,
357
+ `balance` DOUBLE NOT NULL DEFAULT 0,
358
+ `currency` VARCHAR(191) NOT NULL DEFAULT 'USD',
359
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
360
+ `updatedAt` DATETIME(3) NOT NULL,
361
+
362
+ INDEX `wallets_tenantId_idx`(`tenantId`),
363
+ PRIMARY KEY (`id`)
364
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
365
+
366
+ -- CreateTable
367
+ CREATE TABLE `transactions` (
368
+ `id` VARCHAR(191) NOT NULL,
369
+ `tenantId` VARCHAR(191) NOT NULL,
370
+ `walletId` VARCHAR(191) NOT NULL,
371
+ `amount` DOUBLE NOT NULL,
372
+ `type` VARCHAR(191) NOT NULL,
373
+ `status` VARCHAR(191) NOT NULL,
374
+ `reference` VARCHAR(191) NULL,
375
+ `description` VARCHAR(191) NULL,
376
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
377
+ `updatedAt` DATETIME(3) NOT NULL,
378
+
379
+ INDEX `transactions_walletId_idx`(`walletId`),
380
+ INDEX `transactions_tenantId_idx`(`tenantId`),
381
+ PRIMARY KEY (`id`)
382
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
383
+
384
+ -- CreateTable
385
+ CREATE TABLE `settings` (
386
+ `id` VARCHAR(191) NOT NULL,
387
+ `tenantId` VARCHAR(191) NOT NULL,
388
+ `key` VARCHAR(191) NOT NULL,
389
+ `value` TEXT NOT NULL,
390
+ `category` VARCHAR(191) NULL,
391
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
392
+ `updatedAt` DATETIME(3) NOT NULL,
393
+
394
+ INDEX `settings_category_idx`(`category`),
395
+ INDEX `settings_tenantId_idx`(`tenantId`),
396
+ UNIQUE INDEX `settings_tenantId_key_key`(`tenantId`, `key`),
397
+ PRIMARY KEY (`id`)
398
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
399
+
400
+ -- CreateTable
401
+ CREATE TABLE `properties` (
402
+ `id` VARCHAR(191) NOT NULL,
403
+ `tenantId` VARCHAR(191) NOT NULL,
404
+ `userId` VARCHAR(191) NOT NULL,
405
+ `organizationId` VARCHAR(191) NULL,
406
+ `title` VARCHAR(191) NOT NULL,
407
+ `category` VARCHAR(191) NOT NULL,
408
+ `propertyType` VARCHAR(191) NOT NULL,
409
+ `country` VARCHAR(191) NOT NULL,
410
+ `currency` VARCHAR(191) NOT NULL,
411
+ `city` VARCHAR(191) NOT NULL,
412
+ `district` VARCHAR(191) NULL,
413
+ `zipCode` VARCHAR(191) NULL,
414
+ `streetAddress` VARCHAR(191) NULL,
415
+ `longitude` DOUBLE NULL,
416
+ `latitude` DOUBLE NULL,
417
+ `status` ENUM('DRAFT', 'PUBLISHED', 'SOLD_OUT', 'ARCHIVED') NOT NULL DEFAULT 'DRAFT',
418
+ `description` TEXT NULL,
419
+ `displayImageId` VARCHAR(191) NULL,
420
+ `publishedAt` DATETIME(3) NULL,
421
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
422
+ `updatedAt` DATETIME(3) NOT NULL,
423
+
424
+ INDEX `properties_tenantId_idx`(`tenantId`),
425
+ INDEX `properties_userId_idx`(`userId`),
426
+ INDEX `properties_organizationId_idx`(`organizationId`),
427
+ INDEX `properties_category_idx`(`category`),
428
+ INDEX `properties_propertyType_idx`(`propertyType`),
429
+ INDEX `properties_city_idx`(`city`),
430
+ INDEX `properties_status_idx`(`status`),
431
+ PRIMARY KEY (`id`)
432
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
433
+
434
+ -- CreateTable
435
+ CREATE TABLE `property_media` (
436
+ `id` VARCHAR(191) NOT NULL,
437
+ `tenantId` VARCHAR(191) NOT NULL,
438
+ `propertyId` VARCHAR(191) NOT NULL,
439
+ `url` VARCHAR(191) NOT NULL,
440
+ `type` VARCHAR(191) NOT NULL,
441
+ `caption` VARCHAR(191) NULL,
442
+ `order` INTEGER NOT NULL DEFAULT 0,
443
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
444
+ `updatedAt` DATETIME(3) NOT NULL,
445
+
446
+ INDEX `property_media_tenantId_idx`(`tenantId`),
447
+ INDEX `property_media_propertyId_idx`(`propertyId`),
448
+ PRIMARY KEY (`id`)
449
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
450
+
451
+ -- CreateTable
452
+ CREATE TABLE `property_documents` (
453
+ `id` VARCHAR(191) NOT NULL,
454
+ `tenantId` VARCHAR(191) NOT NULL,
455
+ `propertyId` VARCHAR(191) NOT NULL,
456
+ `name` VARCHAR(191) NOT NULL,
457
+ `url` VARCHAR(191) NOT NULL,
458
+ `type` VARCHAR(191) NOT NULL,
459
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
460
+ `updatedAt` DATETIME(3) NOT NULL,
461
+
462
+ INDEX `property_documents_tenantId_idx`(`tenantId`),
463
+ INDEX `property_documents_propertyId_idx`(`propertyId`),
464
+ PRIMARY KEY (`id`)
465
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
466
+
467
+ -- CreateTable
468
+ CREATE TABLE `amenities` (
469
+ `id` VARCHAR(191) NOT NULL,
470
+ `tenantId` VARCHAR(191) NOT NULL,
471
+ `name` VARCHAR(191) NOT NULL,
472
+ `category` VARCHAR(191) NULL,
473
+ `icon` VARCHAR(191) NULL,
474
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
475
+ `updatedAt` DATETIME(3) NOT NULL,
476
+
477
+ INDEX `amenities_tenantId_idx`(`tenantId`),
478
+ INDEX `amenities_category_idx`(`category`),
479
+ UNIQUE INDEX `amenities_tenantId_name_key`(`tenantId`, `name`),
480
+ PRIMARY KEY (`id`)
481
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
482
+
483
+ -- CreateTable
484
+ CREATE TABLE `property_variants` (
485
+ `id` VARCHAR(191) NOT NULL,
486
+ `tenantId` VARCHAR(191) NOT NULL,
487
+ `propertyId` VARCHAR(191) NOT NULL,
488
+ `name` VARCHAR(191) NOT NULL,
489
+ `description` TEXT NULL,
490
+ `nBedrooms` INTEGER NULL,
491
+ `nBathrooms` INTEGER NULL,
492
+ `nParkingSpots` INTEGER NULL,
493
+ `area` DOUBLE NULL,
494
+ `price` DOUBLE NOT NULL,
495
+ `pricePerSqm` DOUBLE NULL,
496
+ `totalUnits` INTEGER NOT NULL DEFAULT 1,
497
+ `availableUnits` INTEGER NOT NULL DEFAULT 1,
498
+ `reservedUnits` INTEGER NOT NULL DEFAULT 0,
499
+ `soldUnits` INTEGER NOT NULL DEFAULT 0,
500
+ `status` VARCHAR(191) NOT NULL DEFAULT 'AVAILABLE',
501
+ `isActive` BOOLEAN NOT NULL DEFAULT true,
502
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
503
+ `updatedAt` DATETIME(3) NOT NULL,
504
+
505
+ INDEX `property_variants_tenantId_idx`(`tenantId`),
506
+ INDEX `property_variants_propertyId_idx`(`propertyId`),
507
+ INDEX `property_variants_status_idx`(`status`),
508
+ INDEX `property_variants_price_idx`(`price`),
509
+ PRIMARY KEY (`id`)
510
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
511
+
512
+ -- CreateTable
513
+ CREATE TABLE `property_variant_amenities` (
514
+ `tenantId` VARCHAR(191) NOT NULL,
515
+ `variantId` VARCHAR(191) NOT NULL,
516
+ `amenityId` VARCHAR(191) NOT NULL,
517
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
518
+
519
+ INDEX `property_variant_amenities_tenantId_idx`(`tenantId`),
520
+ PRIMARY KEY (`variantId`, `amenityId`)
521
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
522
+
523
+ -- CreateTable
524
+ CREATE TABLE `property_variant_media` (
525
+ `id` VARCHAR(191) NOT NULL,
526
+ `tenantId` VARCHAR(191) NOT NULL,
527
+ `variantId` VARCHAR(191) NOT NULL,
528
+ `url` VARCHAR(191) NOT NULL,
529
+ `type` VARCHAR(191) NOT NULL,
530
+ `caption` VARCHAR(191) NULL,
531
+ `order` INTEGER NOT NULL DEFAULT 0,
532
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
533
+ `updatedAt` DATETIME(3) NOT NULL,
534
+
535
+ INDEX `property_variant_media_tenantId_idx`(`tenantId`),
536
+ INDEX `property_variant_media_variantId_idx`(`variantId`),
537
+ PRIMARY KEY (`id`)
538
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
539
+
540
+ -- CreateTable
541
+ CREATE TABLE `property_units` (
542
+ `id` VARCHAR(191) NOT NULL,
543
+ `tenantId` VARCHAR(191) NOT NULL,
544
+ `variantId` VARCHAR(191) NOT NULL,
545
+ `unitNumber` VARCHAR(191) NOT NULL,
546
+ `floorNumber` INTEGER NULL,
547
+ `blockName` VARCHAR(191) NULL,
548
+ `priceOverride` DOUBLE NULL,
549
+ `areaOverride` DOUBLE NULL,
550
+ `notes` TEXT NULL,
551
+ `status` VARCHAR(191) NOT NULL DEFAULT 'AVAILABLE',
552
+ `reservedAt` DATETIME(3) NULL,
553
+ `reservedUntil` DATETIME(3) NULL,
554
+ `reservedById` VARCHAR(191) NULL,
555
+ `ownerId` VARCHAR(191) NULL,
556
+ `version` INTEGER NOT NULL DEFAULT 0,
557
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
558
+ `updatedAt` DATETIME(3) NOT NULL,
559
+
560
+ INDEX `property_units_tenantId_idx`(`tenantId`),
561
+ INDEX `property_units_variantId_idx`(`variantId`),
562
+ INDEX `property_units_status_idx`(`status`),
563
+ UNIQUE INDEX `property_units_variantId_unitNumber_key`(`variantId`, `unitNumber`),
564
+ PRIMARY KEY (`id`)
565
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
566
+
567
+ -- CreateTable
568
+ CREATE TABLE `property_amenities` (
569
+ `tenantId` VARCHAR(191) NOT NULL,
570
+ `propertyId` VARCHAR(191) NOT NULL,
571
+ `amenityId` VARCHAR(191) NOT NULL,
572
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
573
+
574
+ INDEX `property_amenities_tenantId_idx`(`tenantId`),
575
+ PRIMARY KEY (`propertyId`, `amenityId`)
576
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
577
+
578
+ -- CreateTable
579
+ CREATE TABLE `documentation_plans` (
580
+ `id` VARCHAR(191) NOT NULL,
581
+ `tenantId` VARCHAR(191) NULL,
582
+ `name` VARCHAR(191) NOT NULL,
583
+ `description` TEXT NULL,
584
+ `isActive` BOOLEAN NOT NULL DEFAULT true,
585
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
586
+ `updatedAt` DATETIME(3) NOT NULL,
587
+
588
+ INDEX `documentation_plans_tenantId_idx`(`tenantId`),
589
+ UNIQUE INDEX `documentation_plans_tenantId_name_key`(`tenantId`, `name`),
590
+ PRIMARY KEY (`id`)
591
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
592
+
593
+ -- CreateTable
594
+ CREATE TABLE `document_definitions` (
595
+ `id` VARCHAR(191) NOT NULL,
596
+ `planId` VARCHAR(191) NOT NULL,
597
+ `documentType` VARCHAR(191) NOT NULL,
598
+ `documentName` VARCHAR(191) NOT NULL,
599
+ `uploadedBy` ENUM('CUSTOMER', 'LENDER', 'DEVELOPER', 'LEGAL', 'INSURER', 'PLATFORM') NOT NULL DEFAULT 'CUSTOMER',
600
+ `order` INTEGER NOT NULL,
601
+ `isRequired` BOOLEAN NOT NULL DEFAULT true,
602
+ `description` TEXT NULL,
603
+ `maxSizeBytes` INTEGER NULL,
604
+ `allowedMimeTypes` VARCHAR(191) NULL,
605
+ `expiryDays` INTEGER NULL,
606
+ `minFiles` INTEGER NOT NULL DEFAULT 1,
607
+ `maxFiles` INTEGER NOT NULL DEFAULT 1,
608
+ `condition` JSON NULL,
609
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
610
+ `updatedAt` DATETIME(3) NOT NULL,
611
+
612
+ INDEX `document_definitions_planId_idx`(`planId`),
613
+ PRIMARY KEY (`id`)
614
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
615
+
616
+ -- CreateTable
617
+ CREATE TABLE `approval_stages` (
618
+ `id` VARCHAR(191) NOT NULL,
619
+ `planId` VARCHAR(191) NOT NULL,
620
+ `name` VARCHAR(191) NOT NULL,
621
+ `order` INTEGER NOT NULL,
622
+ `organizationTypeId` VARCHAR(191) NOT NULL,
623
+ `autoTransition` BOOLEAN NOT NULL DEFAULT false,
624
+ `waitForAllDocuments` BOOLEAN NOT NULL DEFAULT true,
625
+ `allowEarlyVisibility` BOOLEAN NOT NULL DEFAULT false,
626
+ `onRejection` ENUM('CASCADE_BACK', 'RESTART_CURRENT', 'RESTART_FROM_STAGE') NOT NULL DEFAULT 'CASCADE_BACK',
627
+ `restartFromStageOrder` INTEGER NULL,
628
+ `slaHours` INTEGER NULL,
629
+ `description` TEXT NULL,
630
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
631
+ `updatedAt` DATETIME(3) NOT NULL,
632
+
633
+ INDEX `approval_stages_planId_idx`(`planId`),
634
+ INDEX `approval_stages_organizationTypeId_idx`(`organizationTypeId`),
635
+ UNIQUE INDEX `approval_stages_planId_order_key`(`planId`, `order`),
636
+ PRIMARY KEY (`id`)
637
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
638
+
639
+ -- CreateTable
640
+ CREATE TABLE `questionnaire_plans` (
641
+ `id` VARCHAR(191) NOT NULL,
642
+ `tenantId` VARCHAR(191) NULL,
643
+ `name` VARCHAR(191) NOT NULL,
644
+ `description` TEXT NULL,
645
+ `version` INTEGER NOT NULL DEFAULT 1,
646
+ `isActive` BOOLEAN NOT NULL DEFAULT true,
647
+ `passingScore` INTEGER NULL,
648
+ `scoringStrategy` ENUM('SUM', 'AVERAGE', 'WEIGHTED_SUM', 'MIN_ALL', 'CUSTOM') NOT NULL DEFAULT 'SUM',
649
+ `autoDecisionEnabled` BOOLEAN NOT NULL DEFAULT false,
650
+ `estimatedMinutes` INTEGER NULL,
651
+ `category` ENUM('PREQUALIFICATION', 'AFFORDABILITY', 'PROPERTY_INTENT', 'RISK_ASSESSMENT', 'COMPLIANCE', 'CUSTOM') NOT NULL DEFAULT 'PREQUALIFICATION',
652
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
653
+ `updatedAt` DATETIME(3) NOT NULL,
654
+
655
+ INDEX `questionnaire_plans_tenantId_idx`(`tenantId`),
656
+ INDEX `questionnaire_plans_category_idx`(`category`),
657
+ UNIQUE INDEX `questionnaire_plans_tenantId_name_version_key`(`tenantId`, `name`, `version`),
658
+ PRIMARY KEY (`id`)
659
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
660
+
661
+ -- CreateTable
662
+ CREATE TABLE `questionnaire_plan_questions` (
663
+ `id` VARCHAR(191) NOT NULL,
664
+ `questionnairePlanId` VARCHAR(191) NOT NULL,
665
+ `questionKey` VARCHAR(191) NOT NULL,
666
+ `questionText` TEXT NOT NULL,
667
+ `helpText` TEXT NULL,
668
+ `questionType` ENUM('TEXT', 'NUMBER', 'CURRENCY', 'DATE', 'SELECT', 'MULTI_SELECT', 'RADIO', 'CHECKBOX', 'FILE_UPLOAD', 'PHONE', 'EMAIL', 'ADDRESS', 'PERCENTAGE', 'YEARS_MONTHS') NOT NULL,
669
+ `order` INTEGER NOT NULL,
670
+ `isRequired` BOOLEAN NOT NULL DEFAULT true,
671
+ `validationRules` JSON NULL,
672
+ `options` JSON NULL,
673
+ `scoreWeight` INTEGER NOT NULL DEFAULT 1,
674
+ `scoringRules` JSON NULL,
675
+ `showIf` JSON NULL,
676
+ `category` ENUM('ELIGIBILITY', 'EMPLOYMENT', 'INCOME', 'AFFORDABILITY', 'EXPENSES', 'APPLICATION_TYPE', 'PERSONAL', 'PREFERENCES', 'PROPERTY', 'CREDIT', 'ASSETS', 'CUSTOM') NULL,
677
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
678
+ `updatedAt` DATETIME(3) NOT NULL,
679
+
680
+ INDEX `questionnaire_plan_questions_questionnairePlanId_idx`(`questionnairePlanId`),
681
+ UNIQUE INDEX `questionnaire_plan_questions_questionnairePlanId_questionKey_key`(`questionnairePlanId`, `questionKey`),
682
+ PRIMARY KEY (`id`)
683
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
684
+
685
+ -- CreateTable
686
+ CREATE TABLE `payment_plans` (
687
+ `id` VARCHAR(191) NOT NULL,
688
+ `tenantId` VARCHAR(191) NULL,
689
+ `name` VARCHAR(191) NOT NULL,
690
+ `description` TEXT NULL,
691
+ `isActive` BOOLEAN NOT NULL DEFAULT true,
692
+ `paymentFrequency` ENUM('MONTHLY', 'BIWEEKLY', 'WEEKLY', 'ONE_TIME', 'CUSTOM') NOT NULL,
693
+ `customFrequencyDays` INTEGER NULL,
694
+ `numberOfInstallments` INTEGER NULL,
695
+ `calculateInterestDaily` BOOLEAN NOT NULL DEFAULT false,
696
+ `gracePeriodDays` INTEGER NOT NULL DEFAULT 0,
697
+ `allowFlexibleTerm` BOOLEAN NOT NULL DEFAULT false,
698
+ `minTermMonths` INTEGER NULL,
699
+ `maxTermMonths` INTEGER NULL,
700
+ `termStepMonths` INTEGER NULL,
701
+ `maxAgeAtMaturity` INTEGER NULL,
702
+ `collectFunds` BOOLEAN NOT NULL DEFAULT true,
703
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
704
+ `updatedAt` DATETIME(3) NOT NULL,
705
+
706
+ INDEX `payment_plans_tenantId_idx`(`tenantId`),
707
+ UNIQUE INDEX `payment_plans_tenantId_name_key`(`tenantId`, `name`),
708
+ PRIMARY KEY (`id`)
709
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
710
+
711
+ -- CreateTable
712
+ CREATE TABLE `property_payment_methods` (
713
+ `id` VARCHAR(191) NOT NULL,
714
+ `tenantId` VARCHAR(191) NOT NULL,
715
+ `name` VARCHAR(191) NOT NULL,
716
+ `description` TEXT NULL,
717
+ `isActive` BOOLEAN NOT NULL DEFAULT true,
718
+ `allowEarlyPayoff` BOOLEAN NOT NULL DEFAULT true,
719
+ `earlyPayoffPenaltyRate` DOUBLE NULL,
720
+ `autoActivatePhases` BOOLEAN NOT NULL DEFAULT true,
721
+ `requiresManualApproval` BOOLEAN NOT NULL DEFAULT false,
722
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
723
+ `updatedAt` DATETIME(3) NOT NULL,
724
+
725
+ INDEX `property_payment_methods_tenantId_idx`(`tenantId`),
726
+ UNIQUE INDEX `property_payment_methods_tenantId_name_key`(`tenantId`, `name`),
727
+ PRIMARY KEY (`id`)
728
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
729
+
730
+ -- CreateTable
731
+ CREATE TABLE `property_payment_method_links` (
732
+ `tenantId` VARCHAR(191) NOT NULL,
733
+ `propertyId` VARCHAR(191) NOT NULL,
734
+ `paymentMethodId` VARCHAR(191) NOT NULL,
735
+ `isDefault` BOOLEAN NOT NULL DEFAULT false,
736
+ `isActive` BOOLEAN NOT NULL DEFAULT true,
737
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
738
+
739
+ INDEX `property_payment_method_links_tenantId_idx`(`tenantId`),
740
+ PRIMARY KEY (`propertyId`, `paymentMethodId`)
741
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
742
+
743
+ -- CreateTable
744
+ CREATE TABLE `property_payment_method_phases` (
745
+ `id` VARCHAR(191) NOT NULL,
746
+ `tenantId` VARCHAR(191) NOT NULL,
747
+ `paymentMethodId` VARCHAR(191) NOT NULL,
748
+ `paymentPlanId` VARCHAR(191) NULL,
749
+ `documentationPlanId` VARCHAR(191) NULL,
750
+ `questionnairePlanId` VARCHAR(191) NULL,
751
+ `name` VARCHAR(191) NOT NULL,
752
+ `description` TEXT NULL,
753
+ `phaseCategory` ENUM('QUESTIONNAIRE', 'DOCUMENTATION', 'PAYMENT') NOT NULL,
754
+ `phaseType` ENUM('PRE_APPROVAL', 'UNDERWRITING', 'KYC', 'VERIFICATION', 'DOWNPAYMENT', 'MORTGAGE', 'BALLOON', 'CUSTOM') NOT NULL,
755
+ `order` INTEGER NOT NULL,
756
+ `interestRate` DOUBLE NULL,
757
+ `percentOfPrice` DOUBLE NULL,
758
+ `collectFunds` BOOLEAN NULL,
759
+ `requiresPreviousPhaseCompletion` BOOLEAN NOT NULL DEFAULT true,
760
+ `minimumCompletionPercentage` DOUBLE NULL,
761
+ `completionCriterion` ENUM('DOCUMENT_APPROVALS', 'PAYMENT_AMOUNT', 'STEPS_COMPLETED') NULL,
762
+ `lockUnitOnComplete` BOOLEAN NOT NULL DEFAULT false,
763
+ `stepDefinitionsSnapshot` JSON NULL,
764
+ `requiredDocumentSnapshot` JSON NULL,
765
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
766
+ `updatedAt` DATETIME(3) NOT NULL,
767
+
768
+ INDEX `property_payment_method_phases_tenantId_idx`(`tenantId`),
769
+ INDEX `property_payment_method_phases_paymentMethodId_idx`(`paymentMethodId`),
770
+ INDEX `property_payment_method_phases_paymentPlanId_idx`(`paymentPlanId`),
771
+ INDEX `property_payment_method_phases_documentationPlanId_idx`(`documentationPlanId`),
772
+ INDEX `property_payment_method_phases_questionnairePlanId_idx`(`questionnairePlanId`),
773
+ INDEX `property_payment_method_phases_phaseCategory_idx`(`phaseCategory`),
774
+ UNIQUE INDEX `property_payment_method_phases_paymentMethodId_order_key`(`paymentMethodId`, `order`),
775
+ PRIMARY KEY (`id`)
776
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
777
+
778
+ -- CreateTable
779
+ CREATE TABLE `phase_event_attachments` (
780
+ `id` VARCHAR(191) NOT NULL,
781
+ `tenantId` VARCHAR(191) NOT NULL,
782
+ `phaseId` VARCHAR(191) NOT NULL,
783
+ `trigger` ENUM('ON_ACTIVATE', 'ON_COMPLETE', 'ON_CANCEL', 'ON_PAYMENT_RECEIVED', 'ON_ALL_PAYMENTS_RECEIVED') NOT NULL,
784
+ `handlerId` VARCHAR(191) NOT NULL,
785
+ `priority` INTEGER NOT NULL DEFAULT 100,
786
+ `enabled` BOOLEAN NOT NULL DEFAULT true,
787
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
788
+ `updatedAt` DATETIME(3) NOT NULL,
789
+
790
+ INDEX `phase_event_attachments_tenantId_idx`(`tenantId`),
791
+ INDEX `phase_event_attachments_phaseId_idx`(`phaseId`),
792
+ INDEX `phase_event_attachments_handlerId_idx`(`handlerId`),
793
+ UNIQUE INDEX `phase_event_attachments_phaseId_handlerId_trigger_key`(`phaseId`, `handlerId`, `trigger`),
794
+ PRIMARY KEY (`id`)
795
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
796
+
797
+ -- CreateTable
798
+ CREATE TABLE `payment_method_phase_steps` (
799
+ `id` VARCHAR(191) NOT NULL,
800
+ `tenantId` VARCHAR(191) NOT NULL,
801
+ `phaseId` VARCHAR(191) NOT NULL,
802
+ `name` VARCHAR(191) NOT NULL,
803
+ `stepType` ENUM('UPLOAD', 'REVIEW', 'SIGNATURE', 'APPROVAL', 'EXTERNAL_CHECK', 'WAIT', 'GENERATE_DOCUMENT', 'PRE_APPROVAL', 'UNDERWRITING', 'GATE') NOT NULL,
804
+ `order` INTEGER NOT NULL,
805
+ `metadata` JSON NULL,
806
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
807
+ `updatedAt` DATETIME(3) NOT NULL,
808
+
809
+ INDEX `payment_method_phase_steps_tenantId_idx`(`tenantId`),
810
+ INDEX `payment_method_phase_steps_phaseId_idx`(`phaseId`),
811
+ UNIQUE INDEX `payment_method_phase_steps_phaseId_order_key`(`phaseId`, `order`),
812
+ PRIMARY KEY (`id`)
813
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
814
+
815
+ -- CreateTable
816
+ CREATE TABLE `step_event_attachments` (
817
+ `id` VARCHAR(191) NOT NULL,
818
+ `tenantId` VARCHAR(191) NOT NULL,
819
+ `stepId` VARCHAR(191) NOT NULL,
820
+ `trigger` ENUM('ON_COMPLETE', 'ON_REJECT', 'ON_SUBMIT', 'ON_RESUBMIT', 'ON_START') NOT NULL,
821
+ `handlerId` VARCHAR(191) NOT NULL,
822
+ `priority` INTEGER NOT NULL DEFAULT 100,
823
+ `enabled` BOOLEAN NOT NULL DEFAULT true,
824
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
825
+ `updatedAt` DATETIME(3) NOT NULL,
826
+
827
+ INDEX `step_event_attachments_tenantId_idx`(`tenantId`),
828
+ INDEX `step_event_attachments_stepId_idx`(`stepId`),
829
+ INDEX `step_event_attachments_handlerId_idx`(`handlerId`),
830
+ UNIQUE INDEX `step_event_attachments_stepId_handlerId_trigger_key`(`stepId`, `handlerId`, `trigger`),
831
+ PRIMARY KEY (`id`)
832
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
833
+
834
+ -- CreateTable
835
+ CREATE TABLE `payment_method_phase_documents` (
836
+ `id` VARCHAR(191) NOT NULL,
837
+ `tenantId` VARCHAR(191) NOT NULL,
838
+ `phaseId` VARCHAR(191) NOT NULL,
839
+ `documentType` VARCHAR(191) NOT NULL,
840
+ `isRequired` BOOLEAN NOT NULL DEFAULT true,
841
+ `description` TEXT NULL,
842
+ `allowedMimeTypes` VARCHAR(191) NULL,
843
+ `maxSizeBytes` INTEGER NULL,
844
+ `metadata` JSON NULL,
845
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
846
+
847
+ INDEX `payment_method_phase_documents_tenantId_idx`(`tenantId`),
848
+ INDEX `payment_method_phase_documents_phaseId_documentType_idx`(`phaseId`, `documentType`),
849
+ PRIMARY KEY (`id`)
850
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
851
+
852
+ -- CreateTable
853
+ CREATE TABLE `payment_method_phase_fields` (
854
+ `id` VARCHAR(191) NOT NULL,
855
+ `tenantId` VARCHAR(191) NOT NULL,
856
+ `phaseId` VARCHAR(191) NOT NULL,
857
+ `name` VARCHAR(191) NOT NULL,
858
+ `label` VARCHAR(191) NOT NULL,
859
+ `description` TEXT NULL,
860
+ `placeholder` VARCHAR(191) NULL,
861
+ `fieldType` ENUM('TEXT', 'TEXTAREA', 'NUMBER', 'CURRENCY', 'EMAIL', 'PHONE', 'DATE', 'SELECT', 'MULTI_SELECT', 'CHECKBOX', 'RADIO', 'FILE') NOT NULL,
862
+ `isRequired` BOOLEAN NOT NULL DEFAULT true,
863
+ `order` INTEGER NOT NULL,
864
+ `validation` JSON NULL,
865
+ `displayCondition` JSON NULL,
866
+ `defaultValue` JSON NULL,
867
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
868
+ `updatedAt` DATETIME(3) NOT NULL,
869
+
870
+ INDEX `payment_method_phase_fields_tenantId_idx`(`tenantId`),
871
+ INDEX `payment_method_phase_fields_phaseId_idx`(`phaseId`),
872
+ UNIQUE INDEX `payment_method_phase_fields_phaseId_name_key`(`phaseId`, `name`),
873
+ PRIMARY KEY (`id`)
874
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
875
+
876
+ -- CreateTable
877
+ CREATE TABLE `applications` (
878
+ `id` VARCHAR(191) NOT NULL,
879
+ `tenantId` VARCHAR(191) NOT NULL,
880
+ `propertyUnitId` VARCHAR(191) NOT NULL,
881
+ `buyerId` VARCHAR(191) NOT NULL,
882
+ `sellerId` VARCHAR(191) NULL,
883
+ `paymentMethodId` VARCHAR(191) NULL,
884
+ `paymentMethodSnapshot` JSON NULL,
885
+ `paymentMethodSnapshotAt` DATETIME(3) NULL,
886
+ `paymentMethodSnapshotHash` VARCHAR(191) NULL,
887
+ `applicationNumber` VARCHAR(191) NOT NULL,
888
+ `title` VARCHAR(191) NOT NULL,
889
+ `description` TEXT NULL,
890
+ `applicationType` VARCHAR(191) NOT NULL,
891
+ `totalAmount` DOUBLE NOT NULL,
892
+ `status` ENUM('DRAFT', 'PENDING', 'ACTIVE', 'COMPLETED', 'CANCELLED', 'TERMINATED', 'TRANSFERRED', 'SUPERSEDED') NOT NULL DEFAULT 'DRAFT',
893
+ `currentPhaseId` VARCHAR(191) NULL,
894
+ `nextPaymentDueDate` DATETIME(3) NULL,
895
+ `lastReminderSentAt` DATETIME(3) NULL,
896
+ `startDate` DATETIME(3) NULL,
897
+ `endDate` DATETIME(3) NULL,
898
+ `signedAt` DATETIME(3) NULL,
899
+ `terminatedAt` DATETIME(3) NULL,
900
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
901
+ `updatedAt` DATETIME(3) NOT NULL,
902
+ `transferredFromId` VARCHAR(191) NULL,
903
+ `supersededById` VARCHAR(191) NULL,
904
+ `supersededAt` DATETIME(3) NULL,
905
+
906
+ UNIQUE INDEX `applications_applicationNumber_key`(`applicationNumber`),
907
+ UNIQUE INDEX `applications_transferredFromId_key`(`transferredFromId`),
908
+ INDEX `applications_tenantId_idx`(`tenantId`),
909
+ INDEX `applications_propertyUnitId_idx`(`propertyUnitId`),
910
+ INDEX `applications_buyerId_idx`(`buyerId`),
911
+ INDEX `applications_sellerId_idx`(`sellerId`),
912
+ INDEX `applications_paymentMethodId_idx`(`paymentMethodId`),
913
+ INDEX `applications_status_idx`(`status`),
914
+ INDEX `applications_currentPhaseId_idx`(`currentPhaseId`),
915
+ INDEX `applications_supersededById_idx`(`supersededById`),
916
+ PRIMARY KEY (`id`)
917
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
918
+
919
+ -- CreateTable
920
+ CREATE TABLE `application_organizations` (
921
+ `id` VARCHAR(191) NOT NULL,
922
+ `tenantId` VARCHAR(191) NOT NULL,
923
+ `applicationId` VARCHAR(191) NOT NULL,
924
+ `organizationId` VARCHAR(191) NOT NULL,
925
+ `assignedAsTypeId` VARCHAR(191) NOT NULL,
926
+ `status` ENUM('PENDING', 'ACTIVE', 'COMPLETED', 'DECLINED', 'WITHDRAWN') NOT NULL DEFAULT 'PENDING',
927
+ `assignedById` VARCHAR(191) NULL,
928
+ `assignedAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
929
+ `isPrimary` BOOLEAN NOT NULL DEFAULT false,
930
+ `offeredTerms` JSON NULL,
931
+ `termsOfferedAt` DATETIME(3) NULL,
932
+ `termsAcceptedAt` DATETIME(3) NULL,
933
+ `termsDeclinedAt` DATETIME(3) NULL,
934
+ `declineReason` TEXT NULL,
935
+ `activatedAt` DATETIME(3) NULL,
936
+ `completedAt` DATETIME(3) NULL,
937
+ `withdrawnAt` DATETIME(3) NULL,
938
+ `slaHours` INTEGER NULL,
939
+ `slaStartedAt` DATETIME(3) NULL,
940
+ `slaBreachedAt` DATETIME(3) NULL,
941
+ `slaBreachNotified` BOOLEAN NOT NULL DEFAULT false,
942
+ `reminderCount` INTEGER NOT NULL DEFAULT 0,
943
+ `lastReminderSentAt` DATETIME(3) NULL,
944
+ `nextReminderAt` DATETIME(3) NULL,
945
+ `escalatedAt` DATETIME(3) NULL,
946
+ `escalatedToUserId` VARCHAR(191) NULL,
947
+ `escalationNotes` TEXT NULL,
948
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
949
+ `updatedAt` DATETIME(3) NOT NULL,
950
+
951
+ INDEX `application_organizations_tenantId_idx`(`tenantId`),
952
+ INDEX `application_organizations_applicationId_idx`(`applicationId`),
953
+ INDEX `application_organizations_organizationId_idx`(`organizationId`),
954
+ INDEX `application_organizations_assignedAsTypeId_idx`(`assignedAsTypeId`),
955
+ INDEX `application_organizations_status_idx`(`status`),
956
+ INDEX `application_organizations_isPrimary_idx`(`isPrimary`),
957
+ INDEX `application_organizations_slaBreachedAt_idx`(`slaBreachedAt`),
958
+ UNIQUE INDEX `application_organizations_applicationId_assignedAsTypeId_key`(`applicationId`, `assignedAsTypeId`),
959
+ PRIMARY KEY (`id`)
960
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
961
+
962
+ -- CreateTable
963
+ CREATE TABLE `application_refunds` (
964
+ `id` VARCHAR(191) NOT NULL,
965
+ `tenantId` VARCHAR(191) NOT NULL,
966
+ `applicationId` VARCHAR(191) NOT NULL,
967
+ `amount` DOUBLE NOT NULL,
968
+ `reason` TEXT NOT NULL,
969
+ `status` ENUM('PENDING', 'APPROVED', 'REJECTED', 'PROCESSING', 'COMPLETED', 'FAILED', 'CANCELLED') NOT NULL DEFAULT 'PENDING',
970
+ `requestedById` VARCHAR(191) NOT NULL,
971
+ `approvedById` VARCHAR(191) NULL,
972
+ `processedById` VARCHAR(191) NULL,
973
+ `paymentMethod` VARCHAR(191) NULL,
974
+ `referenceNumber` VARCHAR(191) NULL,
975
+ `recipientName` VARCHAR(191) NULL,
976
+ `recipientAccount` VARCHAR(191) NULL,
977
+ `recipientBank` VARCHAR(191) NULL,
978
+ `requestedAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
979
+ `approvedAt` DATETIME(3) NULL,
980
+ `rejectedAt` DATETIME(3) NULL,
981
+ `processedAt` DATETIME(3) NULL,
982
+ `approvalNotes` TEXT NULL,
983
+ `rejectionNotes` TEXT NULL,
984
+ `processingNotes` TEXT NULL,
985
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
986
+ `updatedAt` DATETIME(3) NOT NULL,
987
+
988
+ INDEX `application_refunds_applicationId_idx`(`applicationId`),
989
+ INDEX `application_refunds_status_idx`(`status`),
990
+ INDEX `application_refunds_tenantId_idx`(`tenantId`),
991
+ INDEX `application_refunds_requestedById_idx`(`requestedById`),
992
+ PRIMARY KEY (`id`)
993
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
994
+
995
+ -- CreateTable
996
+ CREATE TABLE `application_phases` (
997
+ `id` VARCHAR(191) NOT NULL,
998
+ `tenantId` VARCHAR(191) NOT NULL,
999
+ `applicationId` VARCHAR(191) NOT NULL,
1000
+ `phaseTemplateId` VARCHAR(191) NULL,
1001
+ `name` VARCHAR(191) NOT NULL,
1002
+ `description` TEXT NULL,
1003
+ `phaseCategory` ENUM('QUESTIONNAIRE', 'DOCUMENTATION', 'PAYMENT') NOT NULL,
1004
+ `phaseType` ENUM('PRE_APPROVAL', 'UNDERWRITING', 'KYC', 'VERIFICATION', 'DOWNPAYMENT', 'MORTGAGE', 'BALLOON', 'CUSTOM') NOT NULL,
1005
+ `order` INTEGER NOT NULL,
1006
+ `status` ENUM('PENDING', 'IN_PROGRESS', 'AWAITING_APPROVAL', 'ACTIVE', 'COMPLETED', 'SKIPPED', 'FAILED', 'SUPERSEDED') NOT NULL DEFAULT 'PENDING',
1007
+ `dueDate` DATETIME(3) NULL,
1008
+ `startDate` DATETIME(3) NULL,
1009
+ `endDate` DATETIME(3) NULL,
1010
+ `activatedAt` DATETIME(3) NULL,
1011
+ `completedAt` DATETIME(3) NULL,
1012
+ `requiresPreviousPhaseCompletion` BOOLEAN NOT NULL DEFAULT true,
1013
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
1014
+ `updatedAt` DATETIME(3) NOT NULL,
1015
+
1016
+ INDEX `application_phases_tenantId_idx`(`tenantId`),
1017
+ INDEX `application_phases_applicationId_idx`(`applicationId`),
1018
+ INDEX `application_phases_phaseTemplateId_idx`(`phaseTemplateId`),
1019
+ INDEX `application_phases_phaseCategory_idx`(`phaseCategory`),
1020
+ INDEX `application_phases_status_idx`(`status`),
1021
+ INDEX `application_phases_order_idx`(`order`),
1022
+ PRIMARY KEY (`id`)
1023
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
1024
+
1025
+ -- CreateTable
1026
+ CREATE TABLE `questionnaire_phases` (
1027
+ `id` VARCHAR(191) NOT NULL,
1028
+ `tenantId` VARCHAR(191) NOT NULL,
1029
+ `phaseId` VARCHAR(191) NOT NULL,
1030
+ `questionnairePlanId` VARCHAR(191) NULL,
1031
+ `completedFieldsCount` INTEGER NOT NULL DEFAULT 0,
1032
+ `totalFieldsCount` INTEGER NOT NULL DEFAULT 0,
1033
+ `totalScore` INTEGER NULL,
1034
+ `passingScore` INTEGER NULL,
1035
+ `passed` BOOLEAN NULL,
1036
+ `scoredAt` DATETIME(3) NULL,
1037
+ `underwritingScore` DOUBLE NULL,
1038
+ `debtToIncomeRatio` DOUBLE NULL,
1039
+ `underwritingDecision` VARCHAR(191) NULL,
1040
+ `underwritingNotes` TEXT NULL,
1041
+ `fieldsSnapshot` JSON NULL,
1042
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
1043
+ `updatedAt` DATETIME(3) NOT NULL,
1044
+
1045
+ UNIQUE INDEX `questionnaire_phases_phaseId_key`(`phaseId`),
1046
+ INDEX `questionnaire_phases_tenantId_idx`(`tenantId`),
1047
+ INDEX `questionnaire_phases_phaseId_idx`(`phaseId`),
1048
+ INDEX `questionnaire_phases_questionnairePlanId_idx`(`questionnairePlanId`),
1049
+ PRIMARY KEY (`id`)
1050
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
1051
+
1052
+ -- CreateTable
1053
+ CREATE TABLE `questionnaire_phase_reviews` (
1054
+ `id` VARCHAR(191) NOT NULL,
1055
+ `tenantId` VARCHAR(191) NOT NULL,
1056
+ `questionnairePhaseId` VARCHAR(191) NOT NULL,
1057
+ `reviewerId` VARCHAR(191) NOT NULL,
1058
+ `decision` ENUM('PENDING', 'APPROVED', 'REJECTED', 'CHANGES_REQUESTED', 'WAIVED') NOT NULL,
1059
+ `notes` TEXT NULL,
1060
+ `scoreAtReview` INTEGER NULL,
1061
+ `passedAtReview` BOOLEAN NULL,
1062
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
1063
+
1064
+ INDEX `questionnaire_phase_reviews_tenantId_idx`(`tenantId`),
1065
+ INDEX `questionnaire_phase_reviews_questionnairePhaseId_idx`(`questionnairePhaseId`),
1066
+ INDEX `questionnaire_phase_reviews_reviewerId_idx`(`reviewerId`),
1067
+ PRIMARY KEY (`id`)
1068
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
1069
+
1070
+ -- CreateTable
1071
+ CREATE TABLE `documentation_phases` (
1072
+ `id` VARCHAR(191) NOT NULL,
1073
+ `tenantId` VARCHAR(191) NOT NULL,
1074
+ `phaseId` VARCHAR(191) NOT NULL,
1075
+ `documentationPlanId` VARCHAR(191) NULL,
1076
+ `sourceQuestionnairePhaseId` VARCHAR(191) NULL,
1077
+ `currentStageOrder` INTEGER NOT NULL DEFAULT 1,
1078
+ `approvedDocumentsCount` INTEGER NOT NULL DEFAULT 0,
1079
+ `requiredDocumentsCount` INTEGER NOT NULL DEFAULT 0,
1080
+ `documentDefinitionsSnapshot` JSON NULL,
1081
+ `approvalStagesSnapshot` JSON NULL,
1082
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
1083
+ `updatedAt` DATETIME(3) NOT NULL,
1084
+
1085
+ UNIQUE INDEX `documentation_phases_phaseId_key`(`phaseId`),
1086
+ INDEX `documentation_phases_tenantId_idx`(`tenantId`),
1087
+ INDEX `documentation_phases_phaseId_idx`(`phaseId`),
1088
+ INDEX `documentation_phases_sourceQuestionnairePhaseId_idx`(`sourceQuestionnairePhaseId`),
1089
+ PRIMARY KEY (`id`)
1090
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
1091
+
1092
+ -- CreateTable
1093
+ CREATE TABLE `payment_phases` (
1094
+ `id` VARCHAR(191) NOT NULL,
1095
+ `tenantId` VARCHAR(191) NOT NULL,
1096
+ `phaseId` VARCHAR(191) NOT NULL,
1097
+ `paymentPlanId` VARCHAR(191) NULL,
1098
+ `totalAmount` DOUBLE NOT NULL,
1099
+ `paidAmount` DOUBLE NOT NULL DEFAULT 0,
1100
+ `interestRate` DOUBLE NOT NULL DEFAULT 0,
1101
+ `selectedTermMonths` INTEGER NULL,
1102
+ `numberOfInstallments` INTEGER NULL,
1103
+ `collectFunds` BOOLEAN NOT NULL DEFAULT true,
1104
+ `minimumCompletionPercentage` DOUBLE NULL,
1105
+ `paymentPlanSnapshot` JSON NULL,
1106
+ `version` INTEGER NOT NULL DEFAULT 0,
1107
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
1108
+ `updatedAt` DATETIME(3) NOT NULL,
1109
+
1110
+ UNIQUE INDEX `payment_phases_phaseId_key`(`phaseId`),
1111
+ INDEX `payment_phases_tenantId_idx`(`tenantId`),
1112
+ INDEX `payment_phases_phaseId_idx`(`phaseId`),
1113
+ INDEX `payment_phases_paymentPlanId_idx`(`paymentPlanId`),
1114
+ PRIMARY KEY (`id`)
1115
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
1116
+
1117
+ -- CreateTable
1118
+ CREATE TABLE `questionnaire_fields` (
1119
+ `id` VARCHAR(191) NOT NULL,
1120
+ `tenantId` VARCHAR(191) NOT NULL,
1121
+ `questionnairePhaseId` VARCHAR(191) NOT NULL,
1122
+ `name` VARCHAR(191) NOT NULL,
1123
+ `label` VARCHAR(191) NOT NULL,
1124
+ `description` TEXT NULL,
1125
+ `placeholder` VARCHAR(191) NULL,
1126
+ `fieldType` ENUM('TEXT', 'TEXTAREA', 'NUMBER', 'CURRENCY', 'EMAIL', 'PHONE', 'DATE', 'SELECT', 'MULTI_SELECT', 'CHECKBOX', 'RADIO', 'FILE') NOT NULL,
1127
+ `isRequired` BOOLEAN NOT NULL DEFAULT true,
1128
+ `order` INTEGER NOT NULL,
1129
+ `validation` JSON NULL,
1130
+ `displayCondition` JSON NULL,
1131
+ `defaultValue` JSON NULL,
1132
+ `answer` JSON NULL,
1133
+ `isValid` BOOLEAN NOT NULL DEFAULT false,
1134
+ `validationErrors` JSON NULL,
1135
+ `submittedAt` DATETIME(3) NULL,
1136
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
1137
+ `updatedAt` DATETIME(3) NOT NULL,
1138
+
1139
+ INDEX `questionnaire_fields_tenantId_idx`(`tenantId`),
1140
+ INDEX `questionnaire_fields_questionnairePhaseId_idx`(`questionnairePhaseId`),
1141
+ UNIQUE INDEX `questionnaire_fields_questionnairePhaseId_name_key`(`questionnairePhaseId`, `name`),
1142
+ PRIMARY KEY (`id`)
1143
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
1144
+
1145
+ -- CreateTable
1146
+ CREATE TABLE `application_events` (
1147
+ `id` VARCHAR(191) NOT NULL,
1148
+ `tenantId` VARCHAR(191) NOT NULL,
1149
+ `applicationId` VARCHAR(191) NOT NULL,
1150
+ `eventType` ENUM('APPLICATION_CREATED', 'APPLICATION_STATE_CHANGED', 'PHASE_ACTIVATED', 'PHASE_COMPLETED', 'STEP_COMPLETED', 'STEP_REJECTED', 'DOCUMENT_SUBMITTED', 'DOCUMENT_APPROVED', 'DOCUMENT_REJECTED', 'PAYMENT_INITIATED', 'PAYMENT_COMPLETED', 'PAYMENT_FAILED', 'INSTALLMENTS_GENERATED', 'APPLICATION_SIGNED', 'APPLICATION_TERMINATED', 'APPLICATION_TRANSFERRED', 'UNDERWRITING_COMPLETED', 'OFFER_LETTER_GENERATED', 'HANDLER_EXECUTED') NOT NULL,
1151
+ `eventGroup` ENUM('STATE_CHANGE', 'PAYMENT', 'DOCUMENT', 'NOTIFICATION', 'WORKFLOW', 'AUTOMATION') NULL,
1152
+ `fromState` VARCHAR(191) NULL,
1153
+ `toState` VARCHAR(191) NULL,
1154
+ `trigger` VARCHAR(191) NULL,
1155
+ `data` JSON NULL,
1156
+ `actorId` VARCHAR(191) NULL,
1157
+ `actorType` ENUM('USER', 'SYSTEM', 'WEBHOOK', 'ADMIN') NULL,
1158
+ `occurredAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
1159
+
1160
+ INDEX `application_events_tenantId_idx`(`tenantId`),
1161
+ INDEX `application_events_applicationId_idx`(`applicationId`),
1162
+ INDEX `application_events_eventType_idx`(`eventType`),
1163
+ INDEX `application_events_eventGroup_idx`(`eventGroup`),
1164
+ INDEX `application_events_occurredAt_idx`(`occurredAt`),
1165
+ PRIMARY KEY (`id`)
1166
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
1167
+
1168
+ -- CreateTable
1169
+ CREATE TABLE `payment_installments` (
1170
+ `id` VARCHAR(191) NOT NULL,
1171
+ `tenantId` VARCHAR(191) NOT NULL,
1172
+ `paymentPhaseId` VARCHAR(191) NOT NULL,
1173
+ `installmentNumber` INTEGER NOT NULL,
1174
+ `amount` DOUBLE NOT NULL,
1175
+ `principalAmount` DOUBLE NOT NULL DEFAULT 0,
1176
+ `interestAmount` DOUBLE NOT NULL DEFAULT 0,
1177
+ `dueDate` DATETIME(3) NOT NULL,
1178
+ `status` ENUM('PENDING', 'PAID', 'OVERDUE', 'PARTIALLY_PAID', 'WAIVED') NOT NULL DEFAULT 'PENDING',
1179
+ `paidAmount` DOUBLE NOT NULL DEFAULT 0,
1180
+ `paidDate` DATETIME(3) NULL,
1181
+ `lateFee` DOUBLE NOT NULL DEFAULT 0,
1182
+ `lateFeeWaived` BOOLEAN NOT NULL DEFAULT false,
1183
+ `gracePeriodDays` INTEGER NOT NULL DEFAULT 0,
1184
+ `gracePeriodEndDate` DATETIME(3) NULL,
1185
+ `version` INTEGER NOT NULL DEFAULT 0,
1186
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
1187
+ `updatedAt` DATETIME(3) NOT NULL,
1188
+
1189
+ INDEX `payment_installments_tenantId_idx`(`tenantId`),
1190
+ INDEX `payment_installments_paymentPhaseId_idx`(`paymentPhaseId`),
1191
+ INDEX `payment_installments_dueDate_idx`(`dueDate`),
1192
+ INDEX `payment_installments_status_idx`(`status`),
1193
+ PRIMARY KEY (`id`)
1194
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
1195
+
1196
+ -- CreateTable
1197
+ CREATE TABLE `application_payments` (
1198
+ `id` VARCHAR(191) NOT NULL,
1199
+ `tenantId` VARCHAR(191) NOT NULL,
1200
+ `applicationId` VARCHAR(191) NOT NULL,
1201
+ `phaseId` VARCHAR(191) NULL,
1202
+ `installmentId` VARCHAR(191) NULL,
1203
+ `payerId` VARCHAR(191) NULL,
1204
+ `amount` DOUBLE NOT NULL,
1205
+ `principalAmount` DOUBLE NOT NULL DEFAULT 0,
1206
+ `interestAmount` DOUBLE NOT NULL DEFAULT 0,
1207
+ `lateFeeAmount` DOUBLE NOT NULL DEFAULT 0,
1208
+ `paymentMethod` VARCHAR(191) NOT NULL,
1209
+ `status` ENUM('INITIATED', 'PENDING', 'COMPLETED', 'FAILED', 'REFUNDED') NOT NULL DEFAULT 'INITIATED',
1210
+ `reference` VARCHAR(191) NULL,
1211
+ `gatewayResponse` TEXT NULL,
1212
+ `processedAt` DATETIME(3) NULL,
1213
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
1214
+ `updatedAt` DATETIME(3) NOT NULL,
1215
+
1216
+ UNIQUE INDEX `application_payments_reference_key`(`reference`),
1217
+ INDEX `application_payments_tenantId_idx`(`tenantId`),
1218
+ INDEX `application_payments_applicationId_idx`(`applicationId`),
1219
+ INDEX `application_payments_phaseId_idx`(`phaseId`),
1220
+ INDEX `application_payments_installmentId_idx`(`installmentId`),
1221
+ INDEX `application_payments_payerId_idx`(`payerId`),
1222
+ INDEX `application_payments_status_idx`(`status`),
1223
+ INDEX `application_payments_reference_idx`(`reference`),
1224
+ PRIMARY KEY (`id`)
1225
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
1226
+
1227
+ -- CreateTable
1228
+ CREATE TABLE `application_documents` (
1229
+ `id` VARCHAR(191) NOT NULL,
1230
+ `tenantId` VARCHAR(191) NOT NULL,
1231
+ `applicationId` VARCHAR(191) NOT NULL,
1232
+ `phaseId` VARCHAR(191) NULL,
1233
+ `stepId` VARCHAR(191) NULL,
1234
+ `documentType` VARCHAR(191) NULL,
1235
+ `documentName` VARCHAR(191) NULL,
1236
+ `name` VARCHAR(191) NOT NULL,
1237
+ `url` VARCHAR(191) NOT NULL,
1238
+ `type` VARCHAR(191) NOT NULL,
1239
+ `uploadedById` VARCHAR(191) NULL,
1240
+ `expectedUploader` ENUM('CUSTOMER', 'LENDER', 'DEVELOPER', 'LEGAL', 'INSURER', 'PLATFORM') NULL,
1241
+ `expectedOrganizationId` VARCHAR(191) NULL,
1242
+ `documentDate` DATETIME(3) NULL,
1243
+ `expiresAt` DATETIME(3) NULL,
1244
+ `expiryDays` INTEGER NULL,
1245
+ `isExpired` BOOLEAN NOT NULL DEFAULT false,
1246
+ `expiredAt` DATETIME(3) NULL,
1247
+ `expiryWarningAt` DATETIME(3) NULL,
1248
+ `revalidatedAt` DATETIME(3) NULL,
1249
+ `status` ENUM('DRAFT', 'PENDING', 'PENDING_SIGNATURE', 'SENT', 'VIEWED', 'SIGNED', 'APPROVED', 'REJECTED', 'EXPIRED', 'CANCELLED', 'NEEDS_REUPLOAD') NOT NULL DEFAULT 'PENDING',
1250
+ `version` INTEGER NOT NULL DEFAULT 1,
1251
+ `replacesDocumentId` VARCHAR(191) NULL,
1252
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
1253
+ `updatedAt` DATETIME(3) NOT NULL,
1254
+
1255
+ INDEX `application_documents_tenantId_idx`(`tenantId`),
1256
+ INDEX `application_documents_applicationId_idx`(`applicationId`),
1257
+ INDEX `application_documents_phaseId_idx`(`phaseId`),
1258
+ INDEX `application_documents_stepId_idx`(`stepId`),
1259
+ INDEX `application_documents_type_idx`(`type`),
1260
+ INDEX `application_documents_documentType_idx`(`documentType`),
1261
+ INDEX `application_documents_status_idx`(`status`),
1262
+ INDEX `application_documents_replacesDocumentId_idx`(`replacesDocumentId`),
1263
+ INDEX `application_documents_isExpired_idx`(`isExpired`),
1264
+ INDEX `application_documents_expiresAt_idx`(`expiresAt`),
1265
+ PRIMARY KEY (`id`)
1266
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
1267
+
1268
+ -- CreateTable
1269
+ CREATE TABLE `document_reviews` (
1270
+ `id` VARCHAR(191) NOT NULL,
1271
+ `tenantId` VARCHAR(191) NOT NULL,
1272
+ `documentId` VARCHAR(191) NOT NULL,
1273
+ `organizationId` VARCHAR(191) NULL,
1274
+ `organizationTypeId` VARCHAR(191) NULL,
1275
+ `reviewerId` VARCHAR(191) NULL,
1276
+ `reviewerName` VARCHAR(191) NULL,
1277
+ `decision` ENUM('PENDING', 'APPROVED', 'REJECTED', 'CHANGES_REQUESTED', 'WAIVED') NOT NULL DEFAULT 'PENDING',
1278
+ `comments` TEXT NULL,
1279
+ `concerns` JSON NULL,
1280
+ `requestedAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
1281
+ `dueAt` DATETIME(3) NULL,
1282
+ `reviewedAt` DATETIME(3) NULL,
1283
+ `reviewOrder` INTEGER NOT NULL DEFAULT 0,
1284
+ `parentReviewId` VARCHAR(191) NULL,
1285
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
1286
+ `updatedAt` DATETIME(3) NOT NULL,
1287
+
1288
+ INDEX `document_reviews_tenantId_idx`(`tenantId`),
1289
+ INDEX `document_reviews_documentId_idx`(`documentId`),
1290
+ INDEX `document_reviews_organizationId_idx`(`organizationId`),
1291
+ INDEX `document_reviews_organizationTypeId_idx`(`organizationTypeId`),
1292
+ INDEX `document_reviews_decision_idx`(`decision`),
1293
+ INDEX `document_reviews_reviewerId_idx`(`reviewerId`),
1294
+ INDEX `document_reviews_parentReviewId_idx`(`parentReviewId`),
1295
+ UNIQUE INDEX `document_reviews_documentId_organizationId_key`(`documentId`, `organizationId`),
1296
+ PRIMARY KEY (`id`)
1297
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
1298
+
1299
+ -- CreateTable
1300
+ CREATE TABLE `approval_stage_progress` (
1301
+ `id` VARCHAR(191) NOT NULL,
1302
+ `tenantId` VARCHAR(191) NOT NULL,
1303
+ `documentationPhaseId` VARCHAR(191) NOT NULL,
1304
+ `approvalStageId` VARCHAR(191) NOT NULL,
1305
+ `name` VARCHAR(191) NOT NULL,
1306
+ `order` INTEGER NOT NULL,
1307
+ `organizationTypeId` VARCHAR(191) NOT NULL,
1308
+ `autoTransition` BOOLEAN NOT NULL DEFAULT false,
1309
+ `waitForAllDocuments` BOOLEAN NOT NULL DEFAULT true,
1310
+ `allowEarlyVisibility` BOOLEAN NOT NULL DEFAULT false,
1311
+ `onRejection` ENUM('CASCADE_BACK', 'RESTART_CURRENT', 'RESTART_FROM_STAGE') NOT NULL DEFAULT 'CASCADE_BACK',
1312
+ `restartFromStageOrder` INTEGER NULL,
1313
+ `status` ENUM('PENDING', 'IN_PROGRESS', 'AWAITING_TRANSITION', 'COMPLETED') NOT NULL DEFAULT 'PENDING',
1314
+ `activatedAt` DATETIME(3) NULL,
1315
+ `completedAt` DATETIME(3) NULL,
1316
+ `completedById` VARCHAR(191) NULL,
1317
+ `transitionComment` TEXT NULL,
1318
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
1319
+ `updatedAt` DATETIME(3) NOT NULL,
1320
+
1321
+ INDEX `approval_stage_progress_tenantId_idx`(`tenantId`),
1322
+ INDEX `approval_stage_progress_documentationPhaseId_idx`(`documentationPhaseId`),
1323
+ INDEX `approval_stage_progress_approvalStageId_idx`(`approvalStageId`),
1324
+ INDEX `approval_stage_progress_status_idx`(`status`),
1325
+ UNIQUE INDEX `approval_stage_progress_documentationPhaseId_order_key`(`documentationPhaseId`, `order`),
1326
+ PRIMARY KEY (`id`)
1327
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
1328
+
1329
+ -- CreateTable
1330
+ CREATE TABLE `document_approvals` (
1331
+ `id` VARCHAR(191) NOT NULL,
1332
+ `tenantId` VARCHAR(191) NOT NULL,
1333
+ `documentId` VARCHAR(191) NOT NULL,
1334
+ `stageProgressId` VARCHAR(191) NOT NULL,
1335
+ `reviewerId` VARCHAR(191) NOT NULL,
1336
+ `organizationTypeId` VARCHAR(191) NOT NULL,
1337
+ `decision` ENUM('PENDING', 'APPROVED', 'REJECTED', 'CHANGES_REQUESTED', 'WAIVED') NOT NULL,
1338
+ `comment` TEXT NULL,
1339
+ `reviewedAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
1340
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
1341
+
1342
+ INDEX `document_approvals_tenantId_idx`(`tenantId`),
1343
+ INDEX `document_approvals_documentId_idx`(`documentId`),
1344
+ INDEX `document_approvals_stageProgressId_idx`(`stageProgressId`),
1345
+ INDEX `document_approvals_reviewerId_idx`(`reviewerId`),
1346
+ INDEX `document_approvals_organizationTypeId_idx`(`organizationTypeId`),
1347
+ INDEX `document_approvals_decision_idx`(`decision`),
1348
+ PRIMARY KEY (`id`)
1349
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
1350
+
1351
+ -- CreateTable
1352
+ CREATE TABLE `document_templates` (
1353
+ `id` VARCHAR(191) NOT NULL,
1354
+ `tenantId` VARCHAR(191) NOT NULL,
1355
+ `name` VARCHAR(191) NOT NULL,
1356
+ `code` VARCHAR(191) NOT NULL,
1357
+ `description` VARCHAR(191) NULL,
1358
+ `version` INTEGER NOT NULL DEFAULT 1,
1359
+ `htmlTemplate` TEXT NOT NULL,
1360
+ `cssStyles` TEXT NULL,
1361
+ `mergeFields` JSON NULL,
1362
+ `isActive` BOOLEAN NOT NULL DEFAULT true,
1363
+ `isDefault` BOOLEAN NOT NULL DEFAULT false,
1364
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
1365
+ `updatedAt` DATETIME(3) NOT NULL,
1366
+
1367
+ INDEX `document_templates_tenantId_idx`(`tenantId`),
1368
+ INDEX `document_templates_code_idx`(`code`),
1369
+ UNIQUE INDEX `document_templates_tenantId_code_version_key`(`tenantId`, `code`, `version`),
1370
+ PRIMARY KEY (`id`)
1371
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
1372
+
1373
+ -- CreateTable
1374
+ CREATE TABLE `offer_letters` (
1375
+ `id` VARCHAR(191) NOT NULL,
1376
+ `tenantId` VARCHAR(191) NOT NULL,
1377
+ `applicationId` VARCHAR(191) NOT NULL,
1378
+ `templateId` VARCHAR(191) NULL,
1379
+ `letterNumber` VARCHAR(191) NOT NULL,
1380
+ `type` ENUM('PROVISIONAL', 'FINAL') NOT NULL,
1381
+ `status` ENUM('DRAFT', 'GENERATED', 'SENT', 'VIEWED', 'SIGNED', 'EXPIRED', 'CANCELLED') NOT NULL DEFAULT 'DRAFT',
1382
+ `htmlContent` TEXT NULL,
1383
+ `pdfUrl` VARCHAR(191) NULL,
1384
+ `pdfKey` VARCHAR(191) NULL,
1385
+ `mergeData` JSON NULL,
1386
+ `sentAt` DATETIME(3) NULL,
1387
+ `viewedAt` DATETIME(3) NULL,
1388
+ `signedAt` DATETIME(3) NULL,
1389
+ `signatureIp` VARCHAR(191) NULL,
1390
+ `signatureData` JSON NULL,
1391
+ `expiresAt` DATETIME(3) NULL,
1392
+ `expiredAt` DATETIME(3) NULL,
1393
+ `cancelledAt` DATETIME(3) NULL,
1394
+ `cancelReason` VARCHAR(191) NULL,
1395
+ `generatedById` VARCHAR(191) NULL,
1396
+ `sentById` VARCHAR(191) NULL,
1397
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
1398
+ `updatedAt` DATETIME(3) NOT NULL,
1399
+
1400
+ UNIQUE INDEX `offer_letters_letterNumber_key`(`letterNumber`),
1401
+ INDEX `offer_letters_tenantId_idx`(`tenantId`),
1402
+ INDEX `offer_letters_applicationId_idx`(`applicationId`),
1403
+ INDEX `offer_letters_type_idx`(`type`),
1404
+ INDEX `offer_letters_status_idx`(`status`),
1405
+ PRIMARY KEY (`id`)
1406
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
1407
+
1408
+ -- CreateTable
1409
+ CREATE TABLE `application_terminations` (
1410
+ `id` VARCHAR(191) NOT NULL,
1411
+ `applicationId` VARCHAR(191) NOT NULL,
1412
+ `tenantId` VARCHAR(191) NOT NULL,
1413
+ `requestNumber` VARCHAR(191) NOT NULL,
1414
+ `initiatedBy` ENUM('BUYER', 'SELLER', 'ADMIN', 'SYSTEM') NOT NULL,
1415
+ `initiatorId` VARCHAR(191) NULL,
1416
+ `type` ENUM('BUYER_WITHDRAWAL', 'SELLER_WITHDRAWAL', 'MUTUAL_AGREEMENT', 'PAYMENT_DEFAULT', 'DOCUMENT_FAILURE', 'FRAUD', 'FORCE_MAJEURE', 'PROPERTY_UNAVAILABLE', 'REGULATORY', 'OTHER') NOT NULL,
1417
+ `reason` TEXT NULL,
1418
+ `supportingDocs` JSON NULL,
1419
+ `status` ENUM('REQUESTED', 'PENDING_REVIEW', 'PENDING_REFUND', 'REFUND_IN_PROGRESS', 'REFUND_COMPLETED', 'COMPLETED', 'REJECTED', 'CANCELLED') NOT NULL DEFAULT 'REQUESTED',
1420
+ `requiresApproval` BOOLEAN NOT NULL DEFAULT true,
1421
+ `autoApproveEligible` BOOLEAN NOT NULL DEFAULT false,
1422
+ `reviewedBy` VARCHAR(191) NULL,
1423
+ `reviewedAt` DATETIME(3) NULL,
1424
+ `reviewNotes` TEXT NULL,
1425
+ `rejectionReason` TEXT NULL,
1426
+ `applicationSnapshot` JSON NOT NULL,
1427
+ `totalApplicationAmount` DOUBLE NOT NULL,
1428
+ `totalPaidToDate` DOUBLE NOT NULL,
1429
+ `outstandingBalance` DOUBLE NOT NULL,
1430
+ `refundableAmount` DOUBLE NOT NULL DEFAULT 0,
1431
+ `penaltyAmount` DOUBLE NOT NULL DEFAULT 0,
1432
+ `forfeitedAmount` DOUBLE NOT NULL DEFAULT 0,
1433
+ `adminFeeAmount` DOUBLE NOT NULL DEFAULT 0,
1434
+ `netRefundAmount` DOUBLE NOT NULL DEFAULT 0,
1435
+ `settlementNotes` TEXT NULL,
1436
+ `refundStatus` ENUM('PENDING', 'APPROVED', 'REJECTED', 'PROCESSING', 'COMPLETED', 'FAILED', 'CANCELLED') NOT NULL DEFAULT 'PENDING',
1437
+ `refundReference` VARCHAR(191) NULL,
1438
+ `refundMethod` VARCHAR(191) NULL,
1439
+ `refundAccountDetails` JSON NULL,
1440
+ `refundInitiatedAt` DATETIME(3) NULL,
1441
+ `refundCompletedAt` DATETIME(3) NULL,
1442
+ `refundFailureReason` TEXT NULL,
1443
+ `unitReleasedAt` DATETIME(3) NULL,
1444
+ `unitReservedForId` VARCHAR(191) NULL,
1445
+ `requestedAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
1446
+ `approvedAt` DATETIME(3) NULL,
1447
+ `executedAt` DATETIME(3) NULL,
1448
+ `completedAt` DATETIME(3) NULL,
1449
+ `cancelledAt` DATETIME(3) NULL,
1450
+ `idempotencyKey` VARCHAR(191) NULL,
1451
+ `metadata` JSON NULL,
1452
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
1453
+ `updatedAt` DATETIME(3) NOT NULL,
1454
+
1455
+ UNIQUE INDEX `application_terminations_requestNumber_key`(`requestNumber`),
1456
+ UNIQUE INDEX `application_terminations_idempotencyKey_key`(`idempotencyKey`),
1457
+ INDEX `application_terminations_applicationId_idx`(`applicationId`),
1458
+ INDEX `application_terminations_tenantId_idx`(`tenantId`),
1459
+ INDEX `application_terminations_status_idx`(`status`),
1460
+ INDEX `application_terminations_type_idx`(`type`),
1461
+ INDEX `application_terminations_initiatorId_idx`(`initiatorId`),
1462
+ INDEX `application_terminations_requestedAt_idx`(`requestedAt`),
1463
+ PRIMARY KEY (`id`)
1464
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
1465
+
1466
+ -- CreateTable
1467
+ CREATE TABLE `payment_method_change_requests` (
1468
+ `id` VARCHAR(191) NOT NULL,
1469
+ `tenantId` VARCHAR(191) NOT NULL,
1470
+ `applicationId` VARCHAR(191) NOT NULL,
1471
+ `fromPaymentMethodId` VARCHAR(191) NOT NULL,
1472
+ `toPaymentMethodId` VARCHAR(191) NOT NULL,
1473
+ `requestorId` VARCHAR(191) NOT NULL,
1474
+ `reason` TEXT NULL,
1475
+ `requiredDocumentTypes` VARCHAR(191) NULL,
1476
+ `submittedDocuments` JSON NULL,
1477
+ `currentOutstanding` DOUBLE NULL,
1478
+ `newTermMonths` INTEGER NULL,
1479
+ `newInterestRate` DOUBLE NULL,
1480
+ `newMonthlyPayment` DOUBLE NULL,
1481
+ `penaltyAmount` DOUBLE NULL,
1482
+ `financialImpactNotes` TEXT NULL,
1483
+ `status` ENUM('PENDING_DOCUMENTS', 'DOCUMENTS_SUBMITTED', 'UNDER_REVIEW', 'APPROVED', 'REJECTED', 'EXECUTED', 'CANCELLED') NOT NULL DEFAULT 'PENDING_DOCUMENTS',
1484
+ `reviewerId` VARCHAR(191) NULL,
1485
+ `reviewNotes` TEXT NULL,
1486
+ `reviewedAt` DATETIME(3) NULL,
1487
+ `executedAt` DATETIME(3) NULL,
1488
+ `previousPhaseData` JSON NULL,
1489
+ `newPhaseData` JSON NULL,
1490
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
1491
+ `updatedAt` DATETIME(3) NOT NULL,
1492
+
1493
+ INDEX `payment_method_change_requests_tenantId_idx`(`tenantId`),
1494
+ INDEX `payment_method_change_requests_applicationId_idx`(`applicationId`),
1495
+ INDEX `payment_method_change_requests_status_idx`(`status`),
1496
+ INDEX `payment_method_change_requests_requestorId_idx`(`requestorId`),
1497
+ PRIMARY KEY (`id`)
1498
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
1499
+
1500
+ -- CreateTable
1501
+ CREATE TABLE `document_requirement_rules` (
1502
+ `id` VARCHAR(191) NOT NULL,
1503
+ `tenantId` VARCHAR(191) NOT NULL,
1504
+ `context` ENUM('APPLICATION_PHASE', 'PAYMENT_METHOD_CHANGE') NOT NULL,
1505
+ `paymentMethodId` VARCHAR(191) NULL,
1506
+ `phaseType` VARCHAR(191) NULL,
1507
+ `fromPaymentMethodId` VARCHAR(191) NULL,
1508
+ `toPaymentMethodId` VARCHAR(191) NULL,
1509
+ `documentType` VARCHAR(191) NOT NULL,
1510
+ `isRequired` BOOLEAN NOT NULL DEFAULT true,
1511
+ `description` VARCHAR(191) NULL,
1512
+ `maxSizeBytes` INTEGER NULL,
1513
+ `allowedMimeTypes` VARCHAR(191) NULL,
1514
+ `expiryDays` INTEGER NULL,
1515
+ `requiresManualReview` BOOLEAN NOT NULL DEFAULT false,
1516
+ `isActive` BOOLEAN NOT NULL DEFAULT true,
1517
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
1518
+ `updatedAt` DATETIME(3) NOT NULL,
1519
+
1520
+ INDEX `document_requirement_rules_tenantId_idx`(`tenantId`),
1521
+ INDEX `document_requirement_rules_context_idx`(`context`),
1522
+ INDEX `document_requirement_rules_paymentMethodId_idx`(`paymentMethodId`),
1523
+ INDEX `document_requirement_rules_phaseType_idx`(`phaseType`),
1524
+ INDEX `document_requirement_rules_fromPaymentMethodId_toPaymentMeth_idx`(`fromPaymentMethodId`, `toPaymentMethodId`),
1525
+ PRIMARY KEY (`id`)
1526
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
1527
+
1528
+ -- CreateTable
1529
+ CREATE TABLE `event_channels` (
1530
+ `id` VARCHAR(191) NOT NULL,
1531
+ `tenantId` VARCHAR(191) NOT NULL,
1532
+ `code` VARCHAR(191) NOT NULL,
1533
+ `name` VARCHAR(191) NOT NULL,
1534
+ `description` TEXT NULL,
1535
+ `enabled` BOOLEAN NOT NULL DEFAULT true,
1536
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
1537
+ `updatedAt` DATETIME(3) NOT NULL,
1538
+
1539
+ INDEX `event_channels_tenantId_idx`(`tenantId`),
1540
+ UNIQUE INDEX `event_channels_tenantId_code_key`(`tenantId`, `code`),
1541
+ PRIMARY KEY (`id`)
1542
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
1543
+
1544
+ -- CreateTable
1545
+ CREATE TABLE `event_types` (
1546
+ `id` VARCHAR(191) NOT NULL,
1547
+ `tenantId` VARCHAR(191) NOT NULL,
1548
+ `channelId` VARCHAR(191) NOT NULL,
1549
+ `code` VARCHAR(191) NOT NULL,
1550
+ `name` VARCHAR(191) NOT NULL,
1551
+ `description` TEXT NULL,
1552
+ `payloadSchema` JSON NULL,
1553
+ `enabled` BOOLEAN NOT NULL DEFAULT true,
1554
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
1555
+ `updatedAt` DATETIME(3) NOT NULL,
1556
+
1557
+ INDEX `event_types_tenantId_idx`(`tenantId`),
1558
+ INDEX `event_types_channelId_idx`(`channelId`),
1559
+ UNIQUE INDEX `event_types_tenantId_code_key`(`tenantId`, `code`),
1560
+ UNIQUE INDEX `event_types_channelId_code_key`(`channelId`, `code`),
1561
+ PRIMARY KEY (`id`)
1562
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
1563
+
1564
+ -- CreateTable
1565
+ CREATE TABLE `event_handlers` (
1566
+ `id` VARCHAR(191) NOT NULL,
1567
+ `tenantId` VARCHAR(191) NOT NULL,
1568
+ `eventTypeId` VARCHAR(191) NOT NULL,
1569
+ `name` VARCHAR(191) NOT NULL,
1570
+ `description` TEXT NULL,
1571
+ `handlerType` ENUM('SEND_EMAIL', 'SEND_SMS', 'SEND_PUSH', 'CALL_WEBHOOK', 'ADVANCE_WORKFLOW', 'RUN_AUTOMATION', 'LOCK_UNIT') NOT NULL,
1572
+ `config` JSON NOT NULL,
1573
+ `priority` INTEGER NOT NULL DEFAULT 100,
1574
+ `enabled` BOOLEAN NOT NULL DEFAULT true,
1575
+ `maxRetries` INTEGER NOT NULL DEFAULT 3,
1576
+ `retryDelayMs` INTEGER NOT NULL DEFAULT 1000,
1577
+ `filterCondition` TEXT NULL,
1578
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
1579
+ `updatedAt` DATETIME(3) NOT NULL,
1580
+
1581
+ INDEX `event_handlers_tenantId_idx`(`tenantId`),
1582
+ INDEX `event_handlers_eventTypeId_idx`(`eventTypeId`),
1583
+ INDEX `event_handlers_handlerType_idx`(`handlerType`),
1584
+ PRIMARY KEY (`id`)
1585
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
1586
+
1587
+ -- CreateTable
1588
+ CREATE TABLE `domain_events` (
1589
+ `id` VARCHAR(191) NOT NULL,
1590
+ `tenantId` VARCHAR(191) NOT NULL,
1591
+ `eventType` VARCHAR(191) NOT NULL,
1592
+ `aggregateType` VARCHAR(191) NOT NULL,
1593
+ `aggregateId` VARCHAR(191) NOT NULL,
1594
+ `queueName` VARCHAR(191) NOT NULL,
1595
+ `payload` TEXT NOT NULL,
1596
+ `occurredAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
1597
+ `actorId` VARCHAR(191) NULL,
1598
+ `actorRole` VARCHAR(191) NULL,
1599
+ `status` VARCHAR(191) NOT NULL DEFAULT 'PENDING',
1600
+ `processedAt` DATETIME(3) NULL,
1601
+ `sentAt` DATETIME(3) NULL,
1602
+ `failureCount` INTEGER NOT NULL DEFAULT 0,
1603
+ `lastError` TEXT NULL,
1604
+ `nextRetryAt` DATETIME(3) NULL,
1605
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
1606
+ `updatedAt` DATETIME(3) NOT NULL,
1607
+
1608
+ INDEX `domain_events_tenantId_idx`(`tenantId`),
1609
+ INDEX `domain_events_status_nextRetryAt_idx`(`status`, `nextRetryAt`),
1610
+ INDEX `domain_events_eventType_idx`(`eventType`),
1611
+ INDEX `domain_events_aggregateType_aggregateId_idx`(`aggregateType`, `aggregateId`),
1612
+ INDEX `domain_events_queueName_idx`(`queueName`),
1613
+ INDEX `domain_events_occurredAt_idx`(`occurredAt`),
1614
+ PRIMARY KEY (`id`)
1615
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
1616
+
1617
+ -- CreateTable
1618
+ CREATE TABLE `property_transfer_requests` (
1619
+ `id` VARCHAR(191) NOT NULL,
1620
+ `tenantId` VARCHAR(191) NOT NULL,
1621
+ `sourceApplicationId` VARCHAR(191) NOT NULL,
1622
+ `targetPropertyUnitId` VARCHAR(191) NOT NULL,
1623
+ `requestedById` VARCHAR(191) NOT NULL,
1624
+ `reviewedById` VARCHAR(191) NULL,
1625
+ `status` ENUM('PENDING', 'APPROVED', 'REJECTED', 'IN_PROGRESS', 'COMPLETED', 'FAILED') NOT NULL DEFAULT 'PENDING',
1626
+ `reason` TEXT NULL,
1627
+ `reviewNotes` TEXT NULL,
1628
+ `priceAdjustmentHandling` VARCHAR(191) NULL,
1629
+ `sourceTotalAmount` DOUBLE NULL,
1630
+ `targetTotalAmount` DOUBLE NULL,
1631
+ `priceAdjustment` DOUBLE NULL,
1632
+ `refundedAmount` DOUBLE NULL,
1633
+ `refundTransactionId` VARCHAR(191) NULL,
1634
+ `refundedAt` DATETIME(3) NULL,
1635
+ `targetApplicationId` VARCHAR(191) NULL,
1636
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
1637
+ `reviewedAt` DATETIME(3) NULL,
1638
+ `completedAt` DATETIME(3) NULL,
1639
+ `updatedAt` DATETIME(3) NOT NULL,
1640
+
1641
+ INDEX `property_transfer_requests_tenantId_idx`(`tenantId`),
1642
+ INDEX `property_transfer_requests_sourceApplicationId_idx`(`sourceApplicationId`),
1643
+ INDEX `property_transfer_requests_targetPropertyUnitId_idx`(`targetPropertyUnitId`),
1644
+ INDEX `property_transfer_requests_requestedById_idx`(`requestedById`),
1645
+ INDEX `property_transfer_requests_status_idx`(`status`),
1646
+ PRIMARY KEY (`id`)
1647
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
1648
+
1649
+ -- CreateTable
1650
+ CREATE TABLE `approval_requests` (
1651
+ `id` VARCHAR(191) NOT NULL,
1652
+ `tenantId` VARCHAR(191) NOT NULL,
1653
+ `type` ENUM('PROPERTY_TRANSFER', 'PROPERTY_UPDATE', 'USER_WORKFLOW', 'CREDIT_CHECK', 'APPLICATION_TERMINATION', 'REFUND_APPROVAL') NOT NULL,
1654
+ `status` ENUM('PENDING', 'IN_REVIEW', 'APPROVED', 'REJECTED', 'CANCELLED', 'EXPIRED') NOT NULL DEFAULT 'PENDING',
1655
+ `priority` ENUM('LOW', 'NORMAL', 'HIGH', 'URGENT') NOT NULL DEFAULT 'NORMAL',
1656
+ `entityType` VARCHAR(191) NOT NULL,
1657
+ `entityId` VARCHAR(191) NOT NULL,
1658
+ `title` VARCHAR(255) NOT NULL,
1659
+ `description` TEXT NULL,
1660
+ `payload` JSON NULL,
1661
+ `requestedById` VARCHAR(191) NOT NULL,
1662
+ `assigneeId` VARCHAR(191) NULL,
1663
+ `reviewedById` VARCHAR(191) NULL,
1664
+ `reviewNotes` TEXT NULL,
1665
+ `decision` ENUM('APPROVED', 'REJECTED', 'REQUEST_CHANGES') NULL,
1666
+ `expiresAt` DATETIME(3) NULL,
1667
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
1668
+ `assignedAt` DATETIME(3) NULL,
1669
+ `reviewedAt` DATETIME(3) NULL,
1670
+ `completedAt` DATETIME(3) NULL,
1671
+ `updatedAt` DATETIME(3) NOT NULL,
1672
+
1673
+ INDEX `approval_requests_tenantId_idx`(`tenantId`),
1674
+ INDEX `approval_requests_type_idx`(`type`),
1675
+ INDEX `approval_requests_status_idx`(`status`),
1676
+ INDEX `approval_requests_priority_idx`(`priority`),
1677
+ INDEX `approval_requests_entityType_entityId_idx`(`entityType`, `entityId`),
1678
+ INDEX `approval_requests_requestedById_idx`(`requestedById`),
1679
+ INDEX `approval_requests_assigneeId_idx`(`assigneeId`),
1680
+ INDEX `approval_requests_createdAt_idx`(`createdAt`),
1681
+ INDEX `approval_requests_type_status_idx`(`type`, `status`),
1682
+ PRIMARY KEY (`id`)
1683
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
1684
+
1685
+ -- CreateTable
1686
+ CREATE TABLE `workflow_blockers` (
1687
+ `id` VARCHAR(191) NOT NULL,
1688
+ `tenantId` VARCHAR(191) NOT NULL,
1689
+ `applicationId` VARCHAR(191) NOT NULL,
1690
+ `phaseId` VARCHAR(191) NULL,
1691
+ `stepId` VARCHAR(191) NULL,
1692
+ `blockerActor` ENUM('CUSTOMER', 'ADMIN', 'SYSTEM', 'EXTERNAL') NOT NULL,
1693
+ `blockerCategory` ENUM('UPLOAD', 'RESUBMISSION', 'SIGNATURE', 'REVIEW', 'APPROVAL', 'PAYMENT', 'PROCESSING', 'EXTERNAL_CHECK', 'QUESTIONNAIRE') NOT NULL,
1694
+ `urgency` ENUM('LOW', 'NORMAL', 'HIGH', 'CRITICAL') NOT NULL DEFAULT 'NORMAL',
1695
+ `actionRequired` VARCHAR(500) NOT NULL,
1696
+ `context` TEXT NULL,
1697
+ `expectedByDate` DATETIME(3) NULL,
1698
+ `isOverdue` BOOLEAN NOT NULL DEFAULT false,
1699
+ `overdueAt` DATETIME(3) NULL,
1700
+ `startedAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
1701
+ `resolvedAt` DATETIME(3) NULL,
1702
+ `durationMs` INTEGER NULL,
1703
+ `resolvedByActor` VARCHAR(191) NULL,
1704
+ `resolutionTrigger` VARCHAR(191) NULL,
1705
+ `reminderCount` INTEGER NOT NULL DEFAULT 0,
1706
+ `lastReminderAt` DATETIME(3) NULL,
1707
+ `nextReminderAt` DATETIME(3) NULL,
1708
+ `metadata` JSON NULL,
1709
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
1710
+ `updatedAt` DATETIME(3) NOT NULL,
1711
+
1712
+ INDEX `workflow_blockers_tenantId_idx`(`tenantId`),
1713
+ INDEX `workflow_blockers_applicationId_idx`(`applicationId`),
1714
+ INDEX `workflow_blockers_phaseId_idx`(`phaseId`),
1715
+ INDEX `workflow_blockers_stepId_idx`(`stepId`),
1716
+ INDEX `workflow_blockers_blockerActor_idx`(`blockerActor`),
1717
+ INDEX `workflow_blockers_blockerCategory_idx`(`blockerCategory`),
1718
+ INDEX `workflow_blockers_urgency_idx`(`urgency`),
1719
+ INDEX `workflow_blockers_isOverdue_idx`(`isOverdue`),
1720
+ INDEX `workflow_blockers_startedAt_idx`(`startedAt`),
1721
+ INDEX `workflow_blockers_resolvedAt_idx`(`resolvedAt`),
1722
+ INDEX `workflow_blockers_tenantId_blockerActor_resolvedAt_idx`(`tenantId`, `blockerActor`, `resolvedAt`),
1723
+ INDEX `workflow_blockers_tenantId_blockerCategory_resolvedAt_idx`(`tenantId`, `blockerCategory`, `resolvedAt`),
1724
+ INDEX `workflow_blockers_tenantId_isOverdue_blockerActor_idx`(`tenantId`, `isOverdue`, `blockerActor`),
1725
+ PRIMARY KEY (`id`)
1726
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
1727
+
1728
+ -- CreateTable
1729
+ CREATE TABLE `scheduled_jobs` (
1730
+ `id` VARCHAR(191) NOT NULL,
1731
+ `tenantId` VARCHAR(191) NULL,
1732
+ `jobType` ENUM('DOCUMENT_EXPIRY_CHECK', 'SLA_BREACH_CHECK', 'PAYMENT_REMINDER', 'DOCUMENT_EXPIRY_WARNING') NOT NULL,
1733
+ `status` ENUM('PENDING', 'RUNNING', 'COMPLETED', 'FAILED', 'CANCELLED') NOT NULL DEFAULT 'PENDING',
1734
+ `scheduledAt` DATETIME(3) NOT NULL,
1735
+ `startedAt` DATETIME(3) NULL,
1736
+ `completedAt` DATETIME(3) NULL,
1737
+ `durationMs` INTEGER NULL,
1738
+ `parameters` JSON NULL,
1739
+ `itemsProcessed` INTEGER NOT NULL DEFAULT 0,
1740
+ `itemsAffected` INTEGER NOT NULL DEFAULT 0,
1741
+ `errorCount` INTEGER NOT NULL DEFAULT 0,
1742
+ `errors` JSON NULL,
1743
+ `summary` TEXT NULL,
1744
+ `attemptNumber` INTEGER NOT NULL DEFAULT 1,
1745
+ `maxAttempts` INTEGER NOT NULL DEFAULT 3,
1746
+ `nextRetryAt` DATETIME(3) NULL,
1747
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
1748
+ `updatedAt` DATETIME(3) NOT NULL,
1749
+
1750
+ INDEX `scheduled_jobs_tenantId_idx`(`tenantId`),
1751
+ INDEX `scheduled_jobs_jobType_idx`(`jobType`),
1752
+ INDEX `scheduled_jobs_status_idx`(`status`),
1753
+ INDEX `scheduled_jobs_scheduledAt_idx`(`scheduledAt`),
1754
+ INDEX `scheduled_jobs_jobType_status_scheduledAt_idx`(`jobType`, `status`, `scheduledAt`),
1755
+ PRIMARY KEY (`id`)
1756
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
1757
+
1758
+ -- CreateTable
1759
+ CREATE TABLE `document_expiry_warnings` (
1760
+ `id` VARCHAR(191) NOT NULL,
1761
+ `tenantId` VARCHAR(191) NOT NULL,
1762
+ `documentId` VARCHAR(191) NOT NULL,
1763
+ `expiresAt` DATETIME(3) NOT NULL,
1764
+ `daysUntil` INTEGER NOT NULL,
1765
+ `warningSent` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
1766
+ `notificationSent` BOOLEAN NOT NULL DEFAULT false,
1767
+ `notificationId` VARCHAR(191) NULL,
1768
+ `resolved` BOOLEAN NOT NULL DEFAULT false,
1769
+ `resolvedAt` DATETIME(3) NULL,
1770
+ `resolvedBy` VARCHAR(191) NULL,
1771
+ `newDocumentId` VARCHAR(191) NULL,
1772
+ `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
1773
+
1774
+ INDEX `document_expiry_warnings_tenantId_idx`(`tenantId`),
1775
+ INDEX `document_expiry_warnings_documentId_idx`(`documentId`),
1776
+ INDEX `document_expiry_warnings_expiresAt_idx`(`expiresAt`),
1777
+ INDEX `document_expiry_warnings_resolved_idx`(`resolved`),
1778
+ UNIQUE INDEX `document_expiry_warnings_documentId_daysUntil_key`(`documentId`, `daysUntil`),
1779
+ PRIMARY KEY (`id`)
1780
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
1781
+
1782
+ -- AddForeignKey
1783
+ ALTER TABLE `organization_types` ADD CONSTRAINT `organization_types_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `tenants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
1784
+
1785
+ -- AddForeignKey
1786
+ ALTER TABLE `organization_type_assignments` ADD CONSTRAINT `organization_type_assignments_organizationId_fkey` FOREIGN KEY (`organizationId`) REFERENCES `organizations`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
1787
+
1788
+ -- AddForeignKey
1789
+ ALTER TABLE `organization_type_assignments` ADD CONSTRAINT `organization_type_assignments_typeId_fkey` FOREIGN KEY (`typeId`) REFERENCES `organization_types`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
1790
+
1791
+ -- AddForeignKey
1792
+ ALTER TABLE `users` ADD CONSTRAINT `users_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `tenants`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
1793
+
1794
+ -- AddForeignKey
1795
+ ALTER TABLE `users` ADD CONSTRAINT `users_walletId_fkey` FOREIGN KEY (`walletId`) REFERENCES `wallets`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
1796
+
1797
+ -- AddForeignKey
1798
+ ALTER TABLE `roles` ADD CONSTRAINT `roles_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `tenants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
1799
+
1800
+ -- AddForeignKey
1801
+ ALTER TABLE `permissions` ADD CONSTRAINT `permissions_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `tenants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
1802
+
1803
+ -- AddForeignKey
1804
+ ALTER TABLE `role_permissions` ADD CONSTRAINT `role_permissions_roleId_fkey` FOREIGN KEY (`roleId`) REFERENCES `roles`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
1805
+
1806
+ -- AddForeignKey
1807
+ ALTER TABLE `role_permissions` ADD CONSTRAINT `role_permissions_permissionId_fkey` FOREIGN KEY (`permissionId`) REFERENCES `permissions`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
1808
+
1809
+ -- AddForeignKey
1810
+ ALTER TABLE `user_roles` ADD CONSTRAINT `user_roles_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `users`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
1811
+
1812
+ -- AddForeignKey
1813
+ ALTER TABLE `user_roles` ADD CONSTRAINT `user_roles_roleId_fkey` FOREIGN KEY (`roleId`) REFERENCES `roles`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
1814
+
1815
+ -- AddForeignKey
1816
+ ALTER TABLE `tenant_memberships` ADD CONSTRAINT `tenant_memberships_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `users`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
1817
+
1818
+ -- AddForeignKey
1819
+ ALTER TABLE `tenant_memberships` ADD CONSTRAINT `tenant_memberships_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `tenants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
1820
+
1821
+ -- AddForeignKey
1822
+ ALTER TABLE `tenant_memberships` ADD CONSTRAINT `tenant_memberships_roleId_fkey` FOREIGN KEY (`roleId`) REFERENCES `roles`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
1823
+
1824
+ -- AddForeignKey
1825
+ ALTER TABLE `organizations` ADD CONSTRAINT `organizations_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `tenants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
1826
+
1827
+ -- AddForeignKey
1828
+ ALTER TABLE `organization_members` ADD CONSTRAINT `organization_members_organizationId_fkey` FOREIGN KEY (`organizationId`) REFERENCES `organizations`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
1829
+
1830
+ -- AddForeignKey
1831
+ ALTER TABLE `organization_members` ADD CONSTRAINT `organization_members_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `users`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
1832
+
1833
+ -- AddForeignKey
1834
+ ALTER TABLE `bank_document_requirements` ADD CONSTRAINT `bank_document_requirements_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `tenants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
1835
+
1836
+ -- AddForeignKey
1837
+ ALTER TABLE `bank_document_requirements` ADD CONSTRAINT `bank_document_requirements_organizationId_fkey` FOREIGN KEY (`organizationId`) REFERENCES `organizations`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
1838
+
1839
+ -- AddForeignKey
1840
+ ALTER TABLE `bank_document_requirements` ADD CONSTRAINT `bank_document_requirements_phaseId_fkey` FOREIGN KEY (`phaseId`) REFERENCES `property_payment_method_phases`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
1841
+
1842
+ -- AddForeignKey
1843
+ ALTER TABLE `api_keys` ADD CONSTRAINT `api_keys_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `tenants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
1844
+
1845
+ -- AddForeignKey
1846
+ ALTER TABLE `refresh_tokens` ADD CONSTRAINT `refresh_tokens_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `users`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
1847
+
1848
+ -- AddForeignKey
1849
+ ALTER TABLE `password_resets` ADD CONSTRAINT `password_resets_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `users`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
1850
+
1851
+ -- AddForeignKey
1852
+ ALTER TABLE `user_suspensions` ADD CONSTRAINT `user_suspensions_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `users`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
1853
+
1854
+ -- AddForeignKey
1855
+ ALTER TABLE `email_preferences` ADD CONSTRAINT `email_preferences_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `users`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
1856
+
1857
+ -- AddForeignKey
1858
+ ALTER TABLE `device_endpoints` ADD CONSTRAINT `device_endpoints_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `users`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
1859
+
1860
+ -- AddForeignKey
1861
+ ALTER TABLE `socials` ADD CONSTRAINT `socials_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `tenants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
1862
+
1863
+ -- AddForeignKey
1864
+ ALTER TABLE `socials` ADD CONSTRAINT `socials_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `users`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
1865
+
1866
+ -- AddForeignKey
1867
+ ALTER TABLE `wallets` ADD CONSTRAINT `wallets_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `tenants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
1868
+
1869
+ -- AddForeignKey
1870
+ ALTER TABLE `transactions` ADD CONSTRAINT `transactions_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `tenants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
1871
+
1872
+ -- AddForeignKey
1873
+ ALTER TABLE `transactions` ADD CONSTRAINT `transactions_walletId_fkey` FOREIGN KEY (`walletId`) REFERENCES `wallets`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
1874
+
1875
+ -- AddForeignKey
1876
+ ALTER TABLE `settings` ADD CONSTRAINT `settings_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `tenants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
1877
+
1878
+ -- AddForeignKey
1879
+ ALTER TABLE `properties` ADD CONSTRAINT `properties_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `tenants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
1880
+
1881
+ -- AddForeignKey
1882
+ ALTER TABLE `properties` ADD CONSTRAINT `properties_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `users`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
1883
+
1884
+ -- AddForeignKey
1885
+ ALTER TABLE `properties` ADD CONSTRAINT `properties_organizationId_fkey` FOREIGN KEY (`organizationId`) REFERENCES `organizations`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
1886
+
1887
+ -- AddForeignKey
1888
+ ALTER TABLE `properties` ADD CONSTRAINT `properties_displayImageId_fkey` FOREIGN KEY (`displayImageId`) REFERENCES `property_media`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
1889
+
1890
+ -- AddForeignKey
1891
+ ALTER TABLE `property_media` ADD CONSTRAINT `property_media_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `tenants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
1892
+
1893
+ -- AddForeignKey
1894
+ ALTER TABLE `property_media` ADD CONSTRAINT `property_media_propertyId_fkey` FOREIGN KEY (`propertyId`) REFERENCES `properties`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
1895
+
1896
+ -- AddForeignKey
1897
+ ALTER TABLE `property_documents` ADD CONSTRAINT `property_documents_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `tenants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
1898
+
1899
+ -- AddForeignKey
1900
+ ALTER TABLE `property_documents` ADD CONSTRAINT `property_documents_propertyId_fkey` FOREIGN KEY (`propertyId`) REFERENCES `properties`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
1901
+
1902
+ -- AddForeignKey
1903
+ ALTER TABLE `amenities` ADD CONSTRAINT `amenities_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `tenants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
1904
+
1905
+ -- AddForeignKey
1906
+ ALTER TABLE `property_variants` ADD CONSTRAINT `property_variants_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `tenants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
1907
+
1908
+ -- AddForeignKey
1909
+ ALTER TABLE `property_variants` ADD CONSTRAINT `property_variants_propertyId_fkey` FOREIGN KEY (`propertyId`) REFERENCES `properties`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
1910
+
1911
+ -- AddForeignKey
1912
+ ALTER TABLE `property_variant_amenities` ADD CONSTRAINT `property_variant_amenities_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `tenants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
1913
+
1914
+ -- AddForeignKey
1915
+ ALTER TABLE `property_variant_amenities` ADD CONSTRAINT `property_variant_amenities_variantId_fkey` FOREIGN KEY (`variantId`) REFERENCES `property_variants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
1916
+
1917
+ -- AddForeignKey
1918
+ ALTER TABLE `property_variant_amenities` ADD CONSTRAINT `property_variant_amenities_amenityId_fkey` FOREIGN KEY (`amenityId`) REFERENCES `amenities`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
1919
+
1920
+ -- AddForeignKey
1921
+ ALTER TABLE `property_variant_media` ADD CONSTRAINT `property_variant_media_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `tenants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
1922
+
1923
+ -- AddForeignKey
1924
+ ALTER TABLE `property_variant_media` ADD CONSTRAINT `property_variant_media_variantId_fkey` FOREIGN KEY (`variantId`) REFERENCES `property_variants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
1925
+
1926
+ -- AddForeignKey
1927
+ ALTER TABLE `property_units` ADD CONSTRAINT `property_units_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `tenants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
1928
+
1929
+ -- AddForeignKey
1930
+ ALTER TABLE `property_units` ADD CONSTRAINT `property_units_variantId_fkey` FOREIGN KEY (`variantId`) REFERENCES `property_variants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
1931
+
1932
+ -- AddForeignKey
1933
+ ALTER TABLE `property_amenities` ADD CONSTRAINT `property_amenities_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `tenants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
1934
+
1935
+ -- AddForeignKey
1936
+ ALTER TABLE `property_amenities` ADD CONSTRAINT `property_amenities_propertyId_fkey` FOREIGN KEY (`propertyId`) REFERENCES `properties`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
1937
+
1938
+ -- AddForeignKey
1939
+ ALTER TABLE `property_amenities` ADD CONSTRAINT `property_amenities_amenityId_fkey` FOREIGN KEY (`amenityId`) REFERENCES `amenities`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
1940
+
1941
+ -- AddForeignKey
1942
+ ALTER TABLE `documentation_plans` ADD CONSTRAINT `documentation_plans_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `tenants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
1943
+
1944
+ -- AddForeignKey
1945
+ ALTER TABLE `document_definitions` ADD CONSTRAINT `document_definitions_planId_fkey` FOREIGN KEY (`planId`) REFERENCES `documentation_plans`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
1946
+
1947
+ -- AddForeignKey
1948
+ ALTER TABLE `approval_stages` ADD CONSTRAINT `approval_stages_planId_fkey` FOREIGN KEY (`planId`) REFERENCES `documentation_plans`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
1949
+
1950
+ -- AddForeignKey
1951
+ ALTER TABLE `approval_stages` ADD CONSTRAINT `approval_stages_organizationTypeId_fkey` FOREIGN KEY (`organizationTypeId`) REFERENCES `organization_types`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
1952
+
1953
+ -- AddForeignKey
1954
+ ALTER TABLE `questionnaire_plans` ADD CONSTRAINT `questionnaire_plans_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `tenants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
1955
+
1956
+ -- AddForeignKey
1957
+ ALTER TABLE `questionnaire_plan_questions` ADD CONSTRAINT `questionnaire_plan_questions_questionnairePlanId_fkey` FOREIGN KEY (`questionnairePlanId`) REFERENCES `questionnaire_plans`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
1958
+
1959
+ -- AddForeignKey
1960
+ ALTER TABLE `payment_plans` ADD CONSTRAINT `payment_plans_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `tenants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
1961
+
1962
+ -- AddForeignKey
1963
+ ALTER TABLE `property_payment_methods` ADD CONSTRAINT `property_payment_methods_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `tenants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
1964
+
1965
+ -- AddForeignKey
1966
+ ALTER TABLE `property_payment_method_links` ADD CONSTRAINT `property_payment_method_links_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `tenants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
1967
+
1968
+ -- AddForeignKey
1969
+ ALTER TABLE `property_payment_method_links` ADD CONSTRAINT `property_payment_method_links_propertyId_fkey` FOREIGN KEY (`propertyId`) REFERENCES `properties`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
1970
+
1971
+ -- AddForeignKey
1972
+ ALTER TABLE `property_payment_method_links` ADD CONSTRAINT `property_payment_method_links_paymentMethodId_fkey` FOREIGN KEY (`paymentMethodId`) REFERENCES `property_payment_methods`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
1973
+
1974
+ -- AddForeignKey
1975
+ ALTER TABLE `property_payment_method_phases` ADD CONSTRAINT `property_payment_method_phases_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `tenants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
1976
+
1977
+ -- AddForeignKey
1978
+ ALTER TABLE `property_payment_method_phases` ADD CONSTRAINT `property_payment_method_phases_paymentMethodId_fkey` FOREIGN KEY (`paymentMethodId`) REFERENCES `property_payment_methods`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
1979
+
1980
+ -- AddForeignKey
1981
+ ALTER TABLE `property_payment_method_phases` ADD CONSTRAINT `property_payment_method_phases_paymentPlanId_fkey` FOREIGN KEY (`paymentPlanId`) REFERENCES `payment_plans`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
1982
+
1983
+ -- AddForeignKey
1984
+ ALTER TABLE `property_payment_method_phases` ADD CONSTRAINT `property_payment_method_phases_documentationPlanId_fkey` FOREIGN KEY (`documentationPlanId`) REFERENCES `documentation_plans`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
1985
+
1986
+ -- AddForeignKey
1987
+ ALTER TABLE `property_payment_method_phases` ADD CONSTRAINT `property_payment_method_phases_questionnairePlanId_fkey` FOREIGN KEY (`questionnairePlanId`) REFERENCES `questionnaire_plans`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
1988
+
1989
+ -- AddForeignKey
1990
+ ALTER TABLE `phase_event_attachments` ADD CONSTRAINT `phase_event_attachments_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `tenants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
1991
+
1992
+ -- AddForeignKey
1993
+ ALTER TABLE `phase_event_attachments` ADD CONSTRAINT `phase_event_attachments_phaseId_fkey` FOREIGN KEY (`phaseId`) REFERENCES `property_payment_method_phases`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
1994
+
1995
+ -- AddForeignKey
1996
+ ALTER TABLE `phase_event_attachments` ADD CONSTRAINT `phase_event_attachments_handlerId_fkey` FOREIGN KEY (`handlerId`) REFERENCES `event_handlers`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
1997
+
1998
+ -- AddForeignKey
1999
+ ALTER TABLE `payment_method_phase_steps` ADD CONSTRAINT `payment_method_phase_steps_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `tenants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
2000
+
2001
+ -- AddForeignKey
2002
+ ALTER TABLE `payment_method_phase_steps` ADD CONSTRAINT `payment_method_phase_steps_phaseId_fkey` FOREIGN KEY (`phaseId`) REFERENCES `property_payment_method_phases`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
2003
+
2004
+ -- AddForeignKey
2005
+ ALTER TABLE `step_event_attachments` ADD CONSTRAINT `step_event_attachments_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `tenants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
2006
+
2007
+ -- AddForeignKey
2008
+ ALTER TABLE `step_event_attachments` ADD CONSTRAINT `step_event_attachments_stepId_fkey` FOREIGN KEY (`stepId`) REFERENCES `payment_method_phase_steps`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
2009
+
2010
+ -- AddForeignKey
2011
+ ALTER TABLE `step_event_attachments` ADD CONSTRAINT `step_event_attachments_handlerId_fkey` FOREIGN KEY (`handlerId`) REFERENCES `event_handlers`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
2012
+
2013
+ -- AddForeignKey
2014
+ ALTER TABLE `payment_method_phase_documents` ADD CONSTRAINT `payment_method_phase_documents_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `tenants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
2015
+
2016
+ -- AddForeignKey
2017
+ ALTER TABLE `payment_method_phase_documents` ADD CONSTRAINT `payment_method_phase_documents_phaseId_fkey` FOREIGN KEY (`phaseId`) REFERENCES `property_payment_method_phases`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
2018
+
2019
+ -- AddForeignKey
2020
+ ALTER TABLE `payment_method_phase_fields` ADD CONSTRAINT `payment_method_phase_fields_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `tenants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
2021
+
2022
+ -- AddForeignKey
2023
+ ALTER TABLE `payment_method_phase_fields` ADD CONSTRAINT `payment_method_phase_fields_phaseId_fkey` FOREIGN KEY (`phaseId`) REFERENCES `property_payment_method_phases`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
2024
+
2025
+ -- AddForeignKey
2026
+ ALTER TABLE `applications` ADD CONSTRAINT `applications_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `tenants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
2027
+
2028
+ -- AddForeignKey
2029
+ ALTER TABLE `applications` ADD CONSTRAINT `applications_propertyUnitId_fkey` FOREIGN KEY (`propertyUnitId`) REFERENCES `property_units`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
2030
+
2031
+ -- AddForeignKey
2032
+ ALTER TABLE `applications` ADD CONSTRAINT `applications_buyerId_fkey` FOREIGN KEY (`buyerId`) REFERENCES `users`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
2033
+
2034
+ -- AddForeignKey
2035
+ ALTER TABLE `applications` ADD CONSTRAINT `applications_sellerId_fkey` FOREIGN KEY (`sellerId`) REFERENCES `users`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
2036
+
2037
+ -- AddForeignKey
2038
+ ALTER TABLE `applications` ADD CONSTRAINT `applications_paymentMethodId_fkey` FOREIGN KEY (`paymentMethodId`) REFERENCES `property_payment_methods`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
2039
+
2040
+ -- AddForeignKey
2041
+ ALTER TABLE `applications` ADD CONSTRAINT `applications_currentPhaseId_fkey` FOREIGN KEY (`currentPhaseId`) REFERENCES `application_phases`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
2042
+
2043
+ -- AddForeignKey
2044
+ ALTER TABLE `applications` ADD CONSTRAINT `applications_transferredFromId_fkey` FOREIGN KEY (`transferredFromId`) REFERENCES `applications`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
2045
+
2046
+ -- AddForeignKey
2047
+ ALTER TABLE `applications` ADD CONSTRAINT `applications_supersededById_fkey` FOREIGN KEY (`supersededById`) REFERENCES `applications`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
2048
+
2049
+ -- AddForeignKey
2050
+ ALTER TABLE `application_organizations` ADD CONSTRAINT `application_organizations_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `tenants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
2051
+
2052
+ -- AddForeignKey
2053
+ ALTER TABLE `application_organizations` ADD CONSTRAINT `application_organizations_applicationId_fkey` FOREIGN KEY (`applicationId`) REFERENCES `applications`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
2054
+
2055
+ -- AddForeignKey
2056
+ ALTER TABLE `application_organizations` ADD CONSTRAINT `application_organizations_organizationId_fkey` FOREIGN KEY (`organizationId`) REFERENCES `organizations`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
2057
+
2058
+ -- AddForeignKey
2059
+ ALTER TABLE `application_organizations` ADD CONSTRAINT `application_organizations_assignedAsTypeId_fkey` FOREIGN KEY (`assignedAsTypeId`) REFERENCES `organization_types`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
2060
+
2061
+ -- AddForeignKey
2062
+ ALTER TABLE `application_refunds` ADD CONSTRAINT `application_refunds_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `tenants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
2063
+
2064
+ -- AddForeignKey
2065
+ ALTER TABLE `application_refunds` ADD CONSTRAINT `application_refunds_applicationId_fkey` FOREIGN KEY (`applicationId`) REFERENCES `applications`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
2066
+
2067
+ -- AddForeignKey
2068
+ ALTER TABLE `application_refunds` ADD CONSTRAINT `application_refunds_requestedById_fkey` FOREIGN KEY (`requestedById`) REFERENCES `users`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
2069
+
2070
+ -- AddForeignKey
2071
+ ALTER TABLE `application_refunds` ADD CONSTRAINT `application_refunds_approvedById_fkey` FOREIGN KEY (`approvedById`) REFERENCES `users`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
2072
+
2073
+ -- AddForeignKey
2074
+ ALTER TABLE `application_refunds` ADD CONSTRAINT `application_refunds_processedById_fkey` FOREIGN KEY (`processedById`) REFERENCES `users`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
2075
+
2076
+ -- AddForeignKey
2077
+ ALTER TABLE `application_phases` ADD CONSTRAINT `application_phases_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `tenants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
2078
+
2079
+ -- AddForeignKey
2080
+ ALTER TABLE `application_phases` ADD CONSTRAINT `application_phases_applicationId_fkey` FOREIGN KEY (`applicationId`) REFERENCES `applications`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
2081
+
2082
+ -- AddForeignKey
2083
+ ALTER TABLE `application_phases` ADD CONSTRAINT `application_phases_phaseTemplateId_fkey` FOREIGN KEY (`phaseTemplateId`) REFERENCES `property_payment_method_phases`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
2084
+
2085
+ -- AddForeignKey
2086
+ ALTER TABLE `questionnaire_phases` ADD CONSTRAINT `questionnaire_phases_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `tenants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
2087
+
2088
+ -- AddForeignKey
2089
+ ALTER TABLE `questionnaire_phases` ADD CONSTRAINT `questionnaire_phases_phaseId_fkey` FOREIGN KEY (`phaseId`) REFERENCES `application_phases`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
2090
+
2091
+ -- AddForeignKey
2092
+ ALTER TABLE `questionnaire_phases` ADD CONSTRAINT `questionnaire_phases_questionnairePlanId_fkey` FOREIGN KEY (`questionnairePlanId`) REFERENCES `questionnaire_plans`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
2093
+
2094
+ -- AddForeignKey
2095
+ ALTER TABLE `questionnaire_phase_reviews` ADD CONSTRAINT `questionnaire_phase_reviews_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `tenants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
2096
+
2097
+ -- AddForeignKey
2098
+ ALTER TABLE `questionnaire_phase_reviews` ADD CONSTRAINT `questionnaire_phase_reviews_questionnairePhaseId_fkey` FOREIGN KEY (`questionnairePhaseId`) REFERENCES `questionnaire_phases`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
2099
+
2100
+ -- AddForeignKey
2101
+ ALTER TABLE `questionnaire_phase_reviews` ADD CONSTRAINT `questionnaire_phase_reviews_reviewerId_fkey` FOREIGN KEY (`reviewerId`) REFERENCES `users`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
2102
+
2103
+ -- AddForeignKey
2104
+ ALTER TABLE `documentation_phases` ADD CONSTRAINT `documentation_phases_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `tenants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
2105
+
2106
+ -- AddForeignKey
2107
+ ALTER TABLE `documentation_phases` ADD CONSTRAINT `documentation_phases_phaseId_fkey` FOREIGN KEY (`phaseId`) REFERENCES `application_phases`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
2108
+
2109
+ -- AddForeignKey
2110
+ ALTER TABLE `documentation_phases` ADD CONSTRAINT `documentation_phases_documentationPlanId_fkey` FOREIGN KEY (`documentationPlanId`) REFERENCES `documentation_plans`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
2111
+
2112
+ -- AddForeignKey
2113
+ ALTER TABLE `documentation_phases` ADD CONSTRAINT `documentation_phases_sourceQuestionnairePhaseId_fkey` FOREIGN KEY (`sourceQuestionnairePhaseId`) REFERENCES `questionnaire_phases`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
2114
+
2115
+ -- AddForeignKey
2116
+ ALTER TABLE `payment_phases` ADD CONSTRAINT `payment_phases_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `tenants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
2117
+
2118
+ -- AddForeignKey
2119
+ ALTER TABLE `payment_phases` ADD CONSTRAINT `payment_phases_phaseId_fkey` FOREIGN KEY (`phaseId`) REFERENCES `application_phases`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
2120
+
2121
+ -- AddForeignKey
2122
+ ALTER TABLE `payment_phases` ADD CONSTRAINT `payment_phases_paymentPlanId_fkey` FOREIGN KEY (`paymentPlanId`) REFERENCES `payment_plans`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
2123
+
2124
+ -- AddForeignKey
2125
+ ALTER TABLE `questionnaire_fields` ADD CONSTRAINT `questionnaire_fields_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `tenants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
2126
+
2127
+ -- AddForeignKey
2128
+ ALTER TABLE `questionnaire_fields` ADD CONSTRAINT `questionnaire_fields_questionnairePhaseId_fkey` FOREIGN KEY (`questionnairePhaseId`) REFERENCES `questionnaire_phases`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
2129
+
2130
+ -- AddForeignKey
2131
+ ALTER TABLE `application_events` ADD CONSTRAINT `application_events_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `tenants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
2132
+
2133
+ -- AddForeignKey
2134
+ ALTER TABLE `application_events` ADD CONSTRAINT `application_events_applicationId_fkey` FOREIGN KEY (`applicationId`) REFERENCES `applications`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
2135
+
2136
+ -- AddForeignKey
2137
+ ALTER TABLE `payment_installments` ADD CONSTRAINT `payment_installments_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `tenants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
2138
+
2139
+ -- AddForeignKey
2140
+ ALTER TABLE `payment_installments` ADD CONSTRAINT `payment_installments_paymentPhaseId_fkey` FOREIGN KEY (`paymentPhaseId`) REFERENCES `payment_phases`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
2141
+
2142
+ -- AddForeignKey
2143
+ ALTER TABLE `application_payments` ADD CONSTRAINT `application_payments_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `tenants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
2144
+
2145
+ -- AddForeignKey
2146
+ ALTER TABLE `application_payments` ADD CONSTRAINT `application_payments_applicationId_fkey` FOREIGN KEY (`applicationId`) REFERENCES `applications`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
2147
+
2148
+ -- AddForeignKey
2149
+ ALTER TABLE `application_payments` ADD CONSTRAINT `application_payments_phaseId_fkey` FOREIGN KEY (`phaseId`) REFERENCES `application_phases`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
2150
+
2151
+ -- AddForeignKey
2152
+ ALTER TABLE `application_payments` ADD CONSTRAINT `application_payments_installmentId_fkey` FOREIGN KEY (`installmentId`) REFERENCES `payment_installments`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
2153
+
2154
+ -- AddForeignKey
2155
+ ALTER TABLE `application_payments` ADD CONSTRAINT `application_payments_payerId_fkey` FOREIGN KEY (`payerId`) REFERENCES `users`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
2156
+
2157
+ -- AddForeignKey
2158
+ ALTER TABLE `application_documents` ADD CONSTRAINT `application_documents_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `tenants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
2159
+
2160
+ -- AddForeignKey
2161
+ ALTER TABLE `application_documents` ADD CONSTRAINT `application_documents_applicationId_fkey` FOREIGN KEY (`applicationId`) REFERENCES `applications`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
2162
+
2163
+ -- AddForeignKey
2164
+ ALTER TABLE `application_documents` ADD CONSTRAINT `application_documents_uploadedById_fkey` FOREIGN KEY (`uploadedById`) REFERENCES `users`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
2165
+
2166
+ -- AddForeignKey
2167
+ ALTER TABLE `application_documents` ADD CONSTRAINT `application_documents_replacesDocumentId_fkey` FOREIGN KEY (`replacesDocumentId`) REFERENCES `application_documents`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
2168
+
2169
+ -- AddForeignKey
2170
+ ALTER TABLE `document_reviews` ADD CONSTRAINT `document_reviews_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `tenants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
2171
+
2172
+ -- AddForeignKey
2173
+ ALTER TABLE `document_reviews` ADD CONSTRAINT `document_reviews_documentId_fkey` FOREIGN KEY (`documentId`) REFERENCES `application_documents`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
2174
+
2175
+ -- AddForeignKey
2176
+ ALTER TABLE `document_reviews` ADD CONSTRAINT `document_reviews_organizationId_fkey` FOREIGN KEY (`organizationId`) REFERENCES `organizations`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
2177
+
2178
+ -- AddForeignKey
2179
+ ALTER TABLE `document_reviews` ADD CONSTRAINT `document_reviews_organizationTypeId_fkey` FOREIGN KEY (`organizationTypeId`) REFERENCES `organization_types`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
2180
+
2181
+ -- AddForeignKey
2182
+ ALTER TABLE `document_reviews` ADD CONSTRAINT `document_reviews_reviewerId_fkey` FOREIGN KEY (`reviewerId`) REFERENCES `users`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
2183
+
2184
+ -- AddForeignKey
2185
+ ALTER TABLE `document_reviews` ADD CONSTRAINT `document_reviews_parentReviewId_fkey` FOREIGN KEY (`parentReviewId`) REFERENCES `document_reviews`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
2186
+
2187
+ -- AddForeignKey
2188
+ ALTER TABLE `approval_stage_progress` ADD CONSTRAINT `approval_stage_progress_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `tenants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
2189
+
2190
+ -- AddForeignKey
2191
+ ALTER TABLE `approval_stage_progress` ADD CONSTRAINT `approval_stage_progress_documentationPhaseId_fkey` FOREIGN KEY (`documentationPhaseId`) REFERENCES `documentation_phases`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
2192
+
2193
+ -- AddForeignKey
2194
+ ALTER TABLE `approval_stage_progress` ADD CONSTRAINT `approval_stage_progress_approvalStageId_fkey` FOREIGN KEY (`approvalStageId`) REFERENCES `approval_stages`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
2195
+
2196
+ -- AddForeignKey
2197
+ ALTER TABLE `approval_stage_progress` ADD CONSTRAINT `approval_stage_progress_organizationTypeId_fkey` FOREIGN KEY (`organizationTypeId`) REFERENCES `organization_types`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
2198
+
2199
+ -- AddForeignKey
2200
+ ALTER TABLE `approval_stage_progress` ADD CONSTRAINT `approval_stage_progress_completedById_fkey` FOREIGN KEY (`completedById`) REFERENCES `users`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
2201
+
2202
+ -- AddForeignKey
2203
+ ALTER TABLE `document_approvals` ADD CONSTRAINT `document_approvals_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `tenants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
2204
+
2205
+ -- AddForeignKey
2206
+ ALTER TABLE `document_approvals` ADD CONSTRAINT `document_approvals_documentId_fkey` FOREIGN KEY (`documentId`) REFERENCES `application_documents`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
2207
+
2208
+ -- AddForeignKey
2209
+ ALTER TABLE `document_approvals` ADD CONSTRAINT `document_approvals_stageProgressId_fkey` FOREIGN KEY (`stageProgressId`) REFERENCES `approval_stage_progress`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
2210
+
2211
+ -- AddForeignKey
2212
+ ALTER TABLE `document_approvals` ADD CONSTRAINT `document_approvals_reviewerId_fkey` FOREIGN KEY (`reviewerId`) REFERENCES `users`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
2213
+
2214
+ -- AddForeignKey
2215
+ ALTER TABLE `document_approvals` ADD CONSTRAINT `document_approvals_organizationTypeId_fkey` FOREIGN KEY (`organizationTypeId`) REFERENCES `organization_types`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
2216
+
2217
+ -- AddForeignKey
2218
+ ALTER TABLE `document_templates` ADD CONSTRAINT `document_templates_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `tenants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
2219
+
2220
+ -- AddForeignKey
2221
+ ALTER TABLE `offer_letters` ADD CONSTRAINT `offer_letters_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `tenants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
2222
+
2223
+ -- AddForeignKey
2224
+ ALTER TABLE `offer_letters` ADD CONSTRAINT `offer_letters_applicationId_fkey` FOREIGN KEY (`applicationId`) REFERENCES `applications`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
2225
+
2226
+ -- AddForeignKey
2227
+ ALTER TABLE `offer_letters` ADD CONSTRAINT `offer_letters_templateId_fkey` FOREIGN KEY (`templateId`) REFERENCES `document_templates`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
2228
+
2229
+ -- AddForeignKey
2230
+ ALTER TABLE `offer_letters` ADD CONSTRAINT `offer_letters_generatedById_fkey` FOREIGN KEY (`generatedById`) REFERENCES `users`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
2231
+
2232
+ -- AddForeignKey
2233
+ ALTER TABLE `offer_letters` ADD CONSTRAINT `offer_letters_sentById_fkey` FOREIGN KEY (`sentById`) REFERENCES `users`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
2234
+
2235
+ -- AddForeignKey
2236
+ ALTER TABLE `application_terminations` ADD CONSTRAINT `application_terminations_applicationId_fkey` FOREIGN KEY (`applicationId`) REFERENCES `applications`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
2237
+
2238
+ -- AddForeignKey
2239
+ ALTER TABLE `application_terminations` ADD CONSTRAINT `application_terminations_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `tenants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
2240
+
2241
+ -- AddForeignKey
2242
+ ALTER TABLE `application_terminations` ADD CONSTRAINT `application_terminations_initiatorId_fkey` FOREIGN KEY (`initiatorId`) REFERENCES `users`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
2243
+
2244
+ -- AddForeignKey
2245
+ ALTER TABLE `application_terminations` ADD CONSTRAINT `application_terminations_reviewedBy_fkey` FOREIGN KEY (`reviewedBy`) REFERENCES `users`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
2246
+
2247
+ -- AddForeignKey
2248
+ ALTER TABLE `payment_method_change_requests` ADD CONSTRAINT `payment_method_change_requests_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `tenants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
2249
+
2250
+ -- AddForeignKey
2251
+ ALTER TABLE `payment_method_change_requests` ADD CONSTRAINT `payment_method_change_requests_applicationId_fkey` FOREIGN KEY (`applicationId`) REFERENCES `applications`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
2252
+
2253
+ -- AddForeignKey
2254
+ ALTER TABLE `payment_method_change_requests` ADD CONSTRAINT `payment_method_change_requests_fromPaymentMethodId_fkey` FOREIGN KEY (`fromPaymentMethodId`) REFERENCES `property_payment_methods`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
2255
+
2256
+ -- AddForeignKey
2257
+ ALTER TABLE `payment_method_change_requests` ADD CONSTRAINT `payment_method_change_requests_toPaymentMethodId_fkey` FOREIGN KEY (`toPaymentMethodId`) REFERENCES `property_payment_methods`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
2258
+
2259
+ -- AddForeignKey
2260
+ ALTER TABLE `payment_method_change_requests` ADD CONSTRAINT `payment_method_change_requests_requestorId_fkey` FOREIGN KEY (`requestorId`) REFERENCES `users`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
2261
+
2262
+ -- AddForeignKey
2263
+ ALTER TABLE `payment_method_change_requests` ADD CONSTRAINT `payment_method_change_requests_reviewerId_fkey` FOREIGN KEY (`reviewerId`) REFERENCES `users`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
2264
+
2265
+ -- AddForeignKey
2266
+ ALTER TABLE `document_requirement_rules` ADD CONSTRAINT `document_requirement_rules_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `tenants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
2267
+
2268
+ -- AddForeignKey
2269
+ ALTER TABLE `document_requirement_rules` ADD CONSTRAINT `document_requirement_rules_paymentMethodId_fkey` FOREIGN KEY (`paymentMethodId`) REFERENCES `property_payment_methods`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
2270
+
2271
+ -- AddForeignKey
2272
+ ALTER TABLE `document_requirement_rules` ADD CONSTRAINT `document_requirement_rules_fromPaymentMethodId_fkey` FOREIGN KEY (`fromPaymentMethodId`) REFERENCES `property_payment_methods`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
2273
+
2274
+ -- AddForeignKey
2275
+ ALTER TABLE `document_requirement_rules` ADD CONSTRAINT `document_requirement_rules_toPaymentMethodId_fkey` FOREIGN KEY (`toPaymentMethodId`) REFERENCES `property_payment_methods`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
2276
+
2277
+ -- AddForeignKey
2278
+ ALTER TABLE `event_channels` ADD CONSTRAINT `event_channels_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `tenants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
2279
+
2280
+ -- AddForeignKey
2281
+ ALTER TABLE `event_types` ADD CONSTRAINT `event_types_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `tenants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
2282
+
2283
+ -- AddForeignKey
2284
+ ALTER TABLE `event_types` ADD CONSTRAINT `event_types_channelId_fkey` FOREIGN KEY (`channelId`) REFERENCES `event_channels`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
2285
+
2286
+ -- AddForeignKey
2287
+ ALTER TABLE `event_handlers` ADD CONSTRAINT `event_handlers_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `tenants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
2288
+
2289
+ -- AddForeignKey
2290
+ ALTER TABLE `event_handlers` ADD CONSTRAINT `event_handlers_eventTypeId_fkey` FOREIGN KEY (`eventTypeId`) REFERENCES `event_types`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
2291
+
2292
+ -- AddForeignKey
2293
+ ALTER TABLE `domain_events` ADD CONSTRAINT `domain_events_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `tenants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
2294
+
2295
+ -- AddForeignKey
2296
+ ALTER TABLE `property_transfer_requests` ADD CONSTRAINT `property_transfer_requests_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `tenants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
2297
+
2298
+ -- AddForeignKey
2299
+ ALTER TABLE `property_transfer_requests` ADD CONSTRAINT `property_transfer_requests_sourceApplicationId_fkey` FOREIGN KEY (`sourceApplicationId`) REFERENCES `applications`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
2300
+
2301
+ -- AddForeignKey
2302
+ ALTER TABLE `property_transfer_requests` ADD CONSTRAINT `property_transfer_requests_targetPropertyUnitId_fkey` FOREIGN KEY (`targetPropertyUnitId`) REFERENCES `property_units`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
2303
+
2304
+ -- AddForeignKey
2305
+ ALTER TABLE `property_transfer_requests` ADD CONSTRAINT `property_transfer_requests_requestedById_fkey` FOREIGN KEY (`requestedById`) REFERENCES `users`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
2306
+
2307
+ -- AddForeignKey
2308
+ ALTER TABLE `property_transfer_requests` ADD CONSTRAINT `property_transfer_requests_reviewedById_fkey` FOREIGN KEY (`reviewedById`) REFERENCES `users`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
2309
+
2310
+ -- AddForeignKey
2311
+ ALTER TABLE `property_transfer_requests` ADD CONSTRAINT `property_transfer_requests_targetApplicationId_fkey` FOREIGN KEY (`targetApplicationId`) REFERENCES `applications`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
2312
+
2313
+ -- AddForeignKey
2314
+ ALTER TABLE `approval_requests` ADD CONSTRAINT `approval_requests_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `tenants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
2315
+
2316
+ -- AddForeignKey
2317
+ ALTER TABLE `approval_requests` ADD CONSTRAINT `approval_requests_requestedById_fkey` FOREIGN KEY (`requestedById`) REFERENCES `users`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
2318
+
2319
+ -- AddForeignKey
2320
+ ALTER TABLE `approval_requests` ADD CONSTRAINT `approval_requests_assigneeId_fkey` FOREIGN KEY (`assigneeId`) REFERENCES `users`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
2321
+
2322
+ -- AddForeignKey
2323
+ ALTER TABLE `approval_requests` ADD CONSTRAINT `approval_requests_reviewedById_fkey` FOREIGN KEY (`reviewedById`) REFERENCES `users`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
2324
+
2325
+ -- AddForeignKey
2326
+ ALTER TABLE `workflow_blockers` ADD CONSTRAINT `workflow_blockers_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `tenants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
2327
+