@valentine-efagene/qshelter-common 2.0.75 → 2.0.77

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 (38) hide show
  1. package/dist/generated/client/browser.d.ts +5 -5
  2. package/dist/generated/client/client.d.ts +5 -5
  3. package/dist/generated/client/enums.d.ts +36 -0
  4. package/dist/generated/client/enums.js +33 -0
  5. package/dist/generated/client/internal/class.d.ts +11 -11
  6. package/dist/generated/client/internal/class.js +2 -2
  7. package/dist/generated/client/internal/prismaNamespace.d.ts +95 -95
  8. package/dist/generated/client/internal/prismaNamespace.js +25 -25
  9. package/dist/generated/client/internal/prismaNamespaceBrowser.d.ts +27 -27
  10. package/dist/generated/client/internal/prismaNamespaceBrowser.js +25 -25
  11. package/dist/generated/client/models/Contract.d.ts +155 -155
  12. package/dist/generated/client/models/index.d.ts +3 -0
  13. package/dist/generated/client/models/index.js +3 -0
  14. package/dist/generated/client/models.d.ts +1 -1
  15. package/dist/src/events/bus/event-bus.service.d.ts +84 -0
  16. package/dist/src/events/bus/event-bus.service.js +372 -0
  17. package/dist/src/events/bus/event-bus.types.d.ts +73 -0
  18. package/dist/src/events/bus/event-bus.types.js +22 -0
  19. package/dist/src/events/index.d.ts +5 -6
  20. package/dist/src/events/index.js +7 -8
  21. package/dist/src/events/notifications/event-publisher.d.ts +41 -0
  22. package/dist/src/events/notifications/event-publisher.js +111 -0
  23. package/dist/src/events/notifications/notification-enums.d.ts +46 -0
  24. package/dist/src/events/notifications/notification-enums.js +59 -0
  25. package/dist/src/events/notifications/notification-event.d.ts +76 -0
  26. package/dist/src/events/notifications/notification-event.js +1 -0
  27. package/dist/src/events/unified/unified-event.service.d.ts +157 -0
  28. package/dist/src/events/unified/unified-event.service.js +177 -0
  29. package/dist/src/events/workflow/event-config.service.d.ts +123 -0
  30. package/dist/src/events/workflow/event-config.service.js +416 -0
  31. package/dist/src/events/workflow/event-seeder.d.ts +80 -0
  32. package/dist/src/events/workflow/event-seeder.js +343 -0
  33. package/dist/src/events/workflow/workflow-event.service.d.ts +230 -0
  34. package/dist/src/events/workflow/workflow-event.service.js +682 -0
  35. package/dist/src/events/workflow/workflow-types.d.ts +364 -0
  36. package/dist/src/events/workflow/workflow-types.js +22 -0
  37. package/package.json +4 -1
  38. package/prisma/schema.prisma +123 -79
@@ -204,6 +204,42 @@ enum OfferLetterStatus {
204
204
  CANCELLED
205
205
  }
206
206
 
207
+ enum ContractEventType {
208
+ CONTRACT_CREATED
209
+ CONTRACT_STATE_CHANGED
210
+ PHASE_ACTIVATED
211
+ PHASE_COMPLETED
212
+ STEP_COMPLETED
213
+ STEP_REJECTED
214
+ DOCUMENT_SUBMITTED
215
+ DOCUMENT_APPROVED
216
+ DOCUMENT_REJECTED
217
+ PAYMENT_INITIATED
218
+ PAYMENT_COMPLETED
219
+ PAYMENT_FAILED
220
+ INSTALLMENTS_GENERATED
221
+ CONTRACT_SIGNED
222
+ CONTRACT_TERMINATED
223
+ CONTRACT_TRANSFERRED
224
+ UNDERWRITING_COMPLETED
225
+ OFFER_LETTER_GENERATED
226
+ }
227
+
228
+ enum ContractEventGroup {
229
+ STATE_CHANGE
230
+ PAYMENT
231
+ DOCUMENT
232
+ NOTIFICATION
233
+ WORKFLOW
234
+ }
235
+
236
+ enum EventActorType {
237
+ USER
238
+ SYSTEM
239
+ WEBHOOK
240
+ ADMIN
241
+ }
242
+
207
243
  // =============================================================================
208
244
  // EVENT-DRIVEN WORKFLOW ENUMS
209
245
  // =============================================================================
@@ -211,12 +247,12 @@ enum OfferLetterStatus {
211
247
  /// Handler Type - What kind of action the handler performs
212
248
  /// These are business-friendly names that admins can understand
213
249
  enum EventHandlerType {
214
- SEND_EMAIL // Send an email notification to recipient(s)
215
- SEND_SMS // Send an SMS text message
216
- SEND_PUSH // Send a push notification
217
- CALL_WEBHOOK // Call an external API/webhook
250
+ SEND_EMAIL // Send an email notification to recipient(s)
251
+ SEND_SMS // Send an SMS text message
252
+ SEND_PUSH // Send a push notification
253
+ CALL_WEBHOOK // Call an external API/webhook
218
254
  ADVANCE_WORKFLOW // Advance or complete a workflow step
219
- RUN_AUTOMATION // Execute internal business logic
255
+ RUN_AUTOMATION // Execute internal business logic
220
256
  }
221
257
 
222
258
  /// Actor Type - Who triggered an event
@@ -430,33 +466,33 @@ model Tenant {
430
466
  // =============================================================================
431
467
 
432
468
  model ApiKey {
433
- id String @id @default(cuid())
434
- tenantId String
435
- tenant Tenant @relation(fields: [tenantId], references: [id], onDelete: Cascade)
469
+ id String @id @default(cuid())
470
+ tenantId String
471
+ tenant Tenant @relation(fields: [tenantId], references: [id], onDelete: Cascade)
436
472
 
437
473
  // Identification
438
- name String // Human-readable name (e.g., "Paystack Integration")
439
- description String? @db.Text // Optional description
440
- provider String // Partner/vendor name (e.g., "paystack", "flutterwave")
474
+ name String // Human-readable name (e.g., "Paystack Integration")
475
+ description String? @db.Text // Optional description
476
+ provider String // Partner/vendor name (e.g., "paystack", "flutterwave")
441
477
 
442
478
  // Secret management (NEVER store raw secret in DB)
443
- secretRef String // AWS Secrets Manager ARN or name
479
+ secretRef String // AWS Secrets Manager ARN or name
444
480
 
445
481
  // Permissions - scopes this API key is allowed to request
446
482
  // Examples: ["contract:read", "payment:*", "property:read"]
447
- scopes Json // JSON array of scope strings
483
+ scopes Json // JSON array of scope strings
448
484
 
449
485
  // Lifecycle
450
- enabled Boolean @default(true)
451
- expiresAt DateTime? // Optional expiration date
452
- lastUsedAt DateTime? // Updated on each token exchange
453
- revokedAt DateTime? // Set when key is revoked
454
- revokedBy String? // User ID who revoked
486
+ enabled Boolean @default(true)
487
+ expiresAt DateTime? // Optional expiration date
488
+ lastUsedAt DateTime? // Updated on each token exchange
489
+ revokedAt DateTime? // Set when key is revoked
490
+ revokedBy String? // User ID who revoked
455
491
 
456
492
  // Audit
457
- createdBy String? // User ID who created
458
- createdAt DateTime @default(now())
459
- updatedAt DateTime @updatedAt
493
+ createdBy String? // User ID who created
494
+ createdAt DateTime @default(now())
495
+ updatedAt DateTime @updatedAt
460
496
 
461
497
  @@index([tenantId])
462
498
  @@index([provider])
@@ -994,7 +1030,7 @@ model PaymentMethodPhaseStep {
994
1030
  /// Step Event Attachment - Links event handlers to step template triggers
995
1031
  /// When a step transitions (complete, reject, etc.), attached handlers fire
996
1032
  model StepEventAttachment {
997
- id String @id @default(cuid())
1033
+ id String @id @default(cuid())
998
1034
  stepId String
999
1035
  step PaymentMethodPhaseStep @relation(fields: [stepId], references: [id], onDelete: Cascade)
1000
1036
 
@@ -1104,7 +1140,6 @@ model Contract {
1104
1140
  phases ContractPhase[]
1105
1141
  documents ContractDocument[]
1106
1142
  payments ContractPayment[]
1107
- events ContractEvent[]
1108
1143
  terminations ContractTermination[]
1109
1144
  offerLetters OfferLetter[]
1110
1145
 
@@ -1121,6 +1156,9 @@ model Contract {
1121
1156
  // Transfer requests where this contract is the target (created after approval)
1122
1157
  incomingTransferRequests PropertyTransferRequest[] @relation("TargetContract")
1123
1158
 
1159
+ // Audit trail
1160
+ events ContractEvent[]
1161
+
1124
1162
  @@index([tenantId])
1125
1163
  @@index([propertyUnitId])
1126
1164
  @@index([buyerId])
@@ -1212,6 +1250,44 @@ model ContractPhase {
1212
1250
  @@map("contract_phases")
1213
1251
  }
1214
1252
 
1253
+ // =============================================================================
1254
+ // CONTRACT EVENTS - Audit trail for contract lifecycle
1255
+ // =============================================================================
1256
+ // Tracks all significant events in a contract's lifecycle for audit, compliance,
1257
+ // and debugging. Unlike DomainEvent (which is for inter-service communication),
1258
+ // ContractEvent is purely for historical tracking and state machine transitions.
1259
+ // =============================================================================
1260
+ model ContractEvent {
1261
+ id String @id @default(cuid())
1262
+ contractId String
1263
+ contract Contract @relation(fields: [contractId], references: [id], onDelete: Cascade)
1264
+
1265
+ // Event classification
1266
+ eventType ContractEventType
1267
+ eventGroup ContractEventGroup?
1268
+
1269
+ // For state transitions (optional - only populated for CONTRACT_STATE_CHANGED events)
1270
+ fromState String?
1271
+ toState String?
1272
+ trigger String?
1273
+
1274
+ // Event payload (all event-specific data)
1275
+ data Json?
1276
+
1277
+ // Actor tracking
1278
+ actorId String?
1279
+ actorType EventActorType?
1280
+
1281
+ // Timing
1282
+ occurredAt DateTime @default(now())
1283
+
1284
+ @@index([contractId])
1285
+ @@index([eventType])
1286
+ @@index([eventGroup])
1287
+ @@index([occurredAt])
1288
+ @@map("contract_events")
1289
+ }
1290
+
1215
1291
  // Steps within a DOCUMENTATION phase (FSM for document collection/approval)
1216
1292
  model DocumentationStep {
1217
1293
  id String @id @default(cuid())
@@ -1403,38 +1479,6 @@ model ContractDocument {
1403
1479
  @@map("contract_documents")
1404
1480
  }
1405
1481
 
1406
- // Contract domain events (FSM transitions, payments, documents, etc.)
1407
- model ContractEvent {
1408
- id String @id @default(cuid())
1409
- contractId String
1410
- contract Contract @relation(fields: [contractId], references: [id], onDelete: Cascade)
1411
-
1412
- // Event classification
1413
- eventType String // STATE.TRANSITION, PHASE.ACTIVATED, PAYMENT.COMPLETED, etc.
1414
- eventGroup String? // STATE_CHANGE, PAYMENT, DOCUMENT, NOTIFICATION (for filtering)
1415
-
1416
- // For state transitions (optional - only populated for STATE.TRANSITION events)
1417
- fromState String?
1418
- toState String?
1419
- trigger String?
1420
-
1421
- // Event payload (all event-specific data)
1422
- data Json?
1423
-
1424
- // Actor tracking
1425
- actorId String?
1426
- actorType String? // USER, SYSTEM, WEBHOOK
1427
-
1428
- // Timing
1429
- occurredAt DateTime @default(now())
1430
-
1431
- @@index([contractId])
1432
- @@index([eventType])
1433
- @@index([eventGroup])
1434
- @@index([occurredAt])
1435
- @@map("contract_events")
1436
- }
1437
-
1438
1482
  // =============================================================================
1439
1483
  // OFFER LETTERS - Provisional and Final offer documents
1440
1484
  // =============================================================================
@@ -1760,9 +1804,9 @@ model DocumentRequirementRule {
1760
1804
  /// Event Channel - A logical grouping of events
1761
1805
  /// Channels help organize events and route them to appropriate handlers
1762
1806
  model EventChannel {
1763
- id String @id @default(cuid())
1764
- tenantId String
1765
- tenant Tenant @relation(fields: [tenantId], references: [id], onDelete: Cascade)
1807
+ id String @id @default(cuid())
1808
+ tenantId String
1809
+ tenant Tenant @relation(fields: [tenantId], references: [id], onDelete: Cascade)
1766
1810
 
1767
1811
  /// Unique code for the channel (e.g., "CONTRACTS", "PAYMENTS")
1768
1812
  code String
@@ -1772,7 +1816,7 @@ model EventChannel {
1772
1816
  description String? @db.Text
1773
1817
 
1774
1818
  /// Whether this channel is active
1775
- enabled Boolean @default(true)
1819
+ enabled Boolean @default(true)
1776
1820
 
1777
1821
  /// Event types that belong to this channel
1778
1822
  eventTypes EventType[]
@@ -1788,9 +1832,9 @@ model EventChannel {
1788
1832
  /// Event Type - Defines a type of event that can occur
1789
1833
  /// Each event type belongs to a channel and can have multiple handlers
1790
1834
  model EventType {
1791
- id String @id @default(cuid())
1792
- tenantId String
1793
- tenant Tenant @relation(fields: [tenantId], references: [id], onDelete: Cascade)
1835
+ id String @id @default(cuid())
1836
+ tenantId String
1837
+ tenant Tenant @relation(fields: [tenantId], references: [id], onDelete: Cascade)
1794
1838
 
1795
1839
  /// The channel this event type belongs to
1796
1840
  channelId String
@@ -1828,9 +1872,9 @@ model EventType {
1828
1872
  /// Event Handler - Defines what should happen when an event fires
1829
1873
  /// Handlers can be internal (call a service), external (webhook), or workflow triggers
1830
1874
  model EventHandler {
1831
- id String @id @default(cuid())
1832
- tenantId String
1833
- tenant Tenant @relation(fields: [tenantId], references: [id], onDelete: Cascade)
1875
+ id String @id @default(cuid())
1876
+ tenantId String
1877
+ tenant Tenant @relation(fields: [tenantId], references: [id], onDelete: Cascade)
1834
1878
 
1835
1879
  /// The event type this handler responds to
1836
1880
  eventTypeId String
@@ -2053,7 +2097,7 @@ model PropertyTransferRequest {
2053
2097
  sourceTotalAmount Float? // Original contract total
2054
2098
  targetTotalAmount Float? // New contract total (based on target property)
2055
2099
  priceAdjustment Float? // Difference (positive = buyer owes more)
2056
- paymentsMigrated Int? // Number of payments migrated
2100
+ paymentsMigrated Int? // Number of payments migrated
2057
2101
 
2058
2102
  // Result - new contract created after approval
2059
2103
  targetContractId String?
@@ -2078,21 +2122,21 @@ model PropertyTransferRequest {
2078
2122
  // =============================================================================
2079
2123
 
2080
2124
  enum ApprovalRequestType {
2081
- PROPERTY_TRANSFER // Property unit transfer between contracts
2082
- PROPERTY_UPDATE // Property/unit listing update requiring approval
2083
- USER_WORKFLOW // User workflow step approval
2084
- CREDIT_CHECK // Credit check result review
2125
+ PROPERTY_TRANSFER // Property unit transfer between contracts
2126
+ PROPERTY_UPDATE // Property/unit listing update requiring approval
2127
+ USER_WORKFLOW // User workflow step approval
2128
+ CREDIT_CHECK // Credit check result review
2085
2129
  CONTRACT_TERMINATION // Contract termination approval
2086
- REFUND_APPROVAL // Refund request approval
2130
+ REFUND_APPROVAL // Refund request approval
2087
2131
  }
2088
2132
 
2089
2133
  enum ApprovalRequestStatus {
2090
- PENDING // Awaiting review
2091
- IN_REVIEW // Assigned to reviewer
2092
- APPROVED // Approved by reviewer
2093
- REJECTED // Rejected by reviewer
2094
- CANCELLED // Cancelled by requestor
2095
- EXPIRED // Auto-expired (if TTL configured)
2134
+ PENDING // Awaiting review
2135
+ IN_REVIEW // Assigned to reviewer
2136
+ APPROVED // Approved by reviewer
2137
+ REJECTED // Rejected by reviewer
2138
+ CANCELLED // Cancelled by requestor
2139
+ EXPIRED // Auto-expired (if TTL configured)
2096
2140
  }
2097
2141
 
2098
2142
  enum ApprovalRequestPriority {
@@ -2119,7 +2163,7 @@ model ApprovalRequest {
2119
2163
 
2120
2164
  // Request metadata
2121
2165
  title String @db.VarChar(255) // Human-readable title for the request
2122
- description String? @db.Text // Detailed description
2166
+ description String? @db.Text // Detailed description
2123
2167
 
2124
2168
  // Payload for any additional context (JSON)
2125
2169
  payload Json? // Flexible data storage for type-specific details
@@ -2137,7 +2181,7 @@ model ApprovalRequest {
2137
2181
  reviewedBy User? @relation("ApprovalReviewer", fields: [reviewedById], references: [id])
2138
2182
 
2139
2183
  // Review details
2140
- reviewNotes String? @db.Text // Reviewer's notes/comments
2184
+ reviewNotes String? @db.Text // Reviewer's notes/comments
2141
2185
  decision ApprovalDecision? // APPROVED, REJECTED, REQUEST_CHANGES
2142
2186
 
2143
2187
  // Expiration