@dynamatix/gb-schemas 2.3.350 → 2.3.352

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 (28) hide show
  1. package/README.md +308 -308
  2. package/dist/applicants/applicant-welcome-call.model.d.ts +6 -0
  3. package/dist/applicants/applicant-welcome-call.model.d.ts.map +1 -1
  4. package/dist/applicants/applicant-welcome-call.model.js +14 -9
  5. package/dist/shared/audit-log.model.d.ts +180 -0
  6. package/dist/shared/audit-log.model.d.ts.map +1 -0
  7. package/dist/shared/audit-log.model.js +43 -0
  8. package/dist/shared/document.model.d.ts +180 -0
  9. package/dist/shared/document.model.d.ts.map +1 -0
  10. package/dist/shared/document.model.js +40 -0
  11. package/dist/shared/queue.model.d.ts +180 -0
  12. package/dist/shared/queue.model.d.ts.map +1 -0
  13. package/dist/shared/queue.model.js +42 -0
  14. package/package.json +87 -87
  15. package/dist/applicants/applicant-income-source.model.d.ts +0 -26
  16. package/dist/applicants/applicant-income-source.model.d.ts.map +0 -1
  17. package/dist/applicants/applicant-income.model.d.ts +0 -160
  18. package/dist/applicants/applicant-income.model.d.ts.map +0 -1
  19. package/dist/applicants/applicant-other-income.model.d.ts +0 -85
  20. package/dist/applicants/applicant-other-income.model.d.ts.map +0 -1
  21. package/dist/applications/application-document.model.d.ts +0 -158
  22. package/dist/applications/application-document.model.d.ts.map +0 -1
  23. package/dist/applications/document.model.d.ts +0 -158
  24. package/dist/applications/document.model.d.ts.map +0 -1
  25. package/dist/applications/productfeatures.model.d.ts +0 -368
  26. package/dist/applications/productfeatures.model.d.ts.map +0 -1
  27. package/dist/shared/document-type-model.d.ts +0 -48
  28. package/dist/shared/document-type-model.d.ts.map +0 -1
@@ -206,6 +206,11 @@ const welcomeCallSchema = new mongoose.Schema({
206
206
  description: "Failed Call Date",
207
207
  default: null
208
208
  },
209
+ isAlgbraAccountRequested: {
210
+ type: Boolean,
211
+ default: false,
212
+ description: "if Algbra bank account has been requested"
213
+ },
209
214
  isActive: {
210
215
  type: Boolean,
211
216
  default: true,
@@ -393,10 +398,10 @@ welcomeCallSchema.virtual('otherApplicantsNameAndDOB').get(function () {
393
398
  const isLast = index === otherApplicants.length - 1;
394
399
  const comma = isLast ? '' : ',';
395
400
  // Format as an HTML line (with bold labels and inline values)
396
- return `
397
- <div class="applicant-line">
398
- <span class="readonly-data">${fullFirstName}, ${lastName}, ${formattedDOB}${comma}</span>
399
- </div>
401
+ return `
402
+ <div class="applicant-line">
403
+ <span class="readonly-data">${fullFirstName}, ${lastName}, ${formattedDOB}${comma}</span>
404
+ </div>
400
405
  `;
401
406
  }).filter((line) => line && line.trim() !== '');
402
407
  // Join all applicants as HTML (no \n needed)
@@ -676,14 +681,14 @@ welcomeCallSchema.virtual('financeSummaryHtml').get(async function () {
676
681
  application.lendingTypeLid.name === 'BTL';
677
682
  const monthlyRepaymentClass = isBTL ? 'mb-2' : '';
678
683
  // Create HTML content
679
- let summaryContent = `
680
- <div class="flex align-items-center mb-2"><p class="text-bold m-0 readonly-data">Product:</p> <span class="readonly-data ml-2">${product}</span></div>
681
- <div class="flex align-items-center mb-2"><p class="text-bold m-0 readonly-data">Finance Term:</p> <span class="readonly-data ml-2">${financeTerm}</span></div>
684
+ let summaryContent = `
685
+ <div class="flex align-items-center mb-2"><p class="text-bold m-0 readonly-data">Product:</p> <span class="readonly-data ml-2">${product}</span></div>
686
+ <div class="flex align-items-center mb-2"><p class="text-bold m-0 readonly-data">Finance Term:</p> <span class="readonly-data ml-2">${financeTerm}</span></div>
682
687
  <div class="flex align-items-center ${monthlyRepaymentClass}"><p class="text-bold m-0 readonly-data">Monthly Repayment:</p> <span class="readonly-data ml-2">${monthlyRepayment}</span></div>`;
683
688
  // Only show rental income and occupancy for BTL applications
684
689
  if (isBTL) {
685
- summaryContent += `
686
- <div class="flex align-items-center mb-2"><p class="text-bold m-0 readonly-data">Rental Income:</p> <span class="readonly-data ml-2">${rentalIncome}</span></div>
690
+ summaryContent += `
691
+ <div class="flex align-items-center mb-2"><p class="text-bold m-0 readonly-data">Rental Income:</p> <span class="readonly-data ml-2">${rentalIncome}</span></div>
687
692
  <div class="flex align-items-center"><p class="text-bold m-0 readonly-data">Occupancy:</p> <span class="readonly-data ml-2">${occupancy}</span></div>`;
688
693
  }
689
694
  return summaryContent;
@@ -0,0 +1,180 @@
1
+ /// <reference path="../value-objects/pound.d.ts" />
2
+ /// <reference path="../value-objects/account-number.d.ts" />
3
+ /// <reference path="../value-objects/sort-code.d.ts" />
4
+ /// <reference types="mongoose/types/aggregate" />
5
+ /// <reference types="mongoose/types/callback" />
6
+ /// <reference types="mongoose/types/collection" />
7
+ /// <reference types="mongoose/types/connection" />
8
+ /// <reference types="mongoose/types/cursor" />
9
+ /// <reference types="mongoose/types/document" />
10
+ /// <reference types="mongoose/types/error" />
11
+ /// <reference types="mongoose/types/expressions" />
12
+ /// <reference types="mongoose/types/helpers" />
13
+ /// <reference types="mongoose/types/middlewares" />
14
+ /// <reference types="mongoose/types/indexes" />
15
+ /// <reference types="mongoose/types/models" />
16
+ /// <reference types="mongoose/types/mongooseoptions" />
17
+ /// <reference types="mongoose/types/pipelinestage" />
18
+ /// <reference types="mongoose/types/populate" />
19
+ /// <reference types="mongoose/types/query" />
20
+ /// <reference types="mongoose/types/schemaoptions" />
21
+ /// <reference types="mongoose/types/session" />
22
+ /// <reference types="mongoose/types/types" />
23
+ /// <reference types="mongoose/types/utility" />
24
+ /// <reference types="mongoose/types/validation" />
25
+ /// <reference types="mongoose/types/virtuals" />
26
+ /// <reference types="mongoose/types/schematypes" />
27
+ /// <reference types="mongoose/types/inferschematype" />
28
+ /// <reference types="mongoose/types/inferrawdoctype" />
29
+ import mongoose from "mongoose";
30
+ declare const AuditLogModel: mongoose.Model<{
31
+ name: string;
32
+ action: "read" | "create" | "update" | "delete";
33
+ timestamp: NativeDate;
34
+ recordId: mongoose.Types.ObjectId;
35
+ isSystemGenerated: boolean;
36
+ metadata?: any;
37
+ source?: string | null | undefined;
38
+ oldValue?: any;
39
+ newValue?: any;
40
+ fieldName?: string | null | undefined;
41
+ userId?: mongoose.Types.ObjectId | null | undefined;
42
+ ipAddress?: string | null | undefined;
43
+ userAgent?: string | null | undefined;
44
+ sessionId?: string | null | undefined;
45
+ externalData?: {
46
+ apprivoAuditId?: string | null | undefined;
47
+ syncStatus?: "pending" | "synced" | "failed" | null | undefined;
48
+ syncedAt?: NativeDate | null | undefined;
49
+ externalSystemId?: string | null | undefined;
50
+ } | null | undefined;
51
+ severity?: "low" | "medium" | "high" | "critical" | null | undefined;
52
+ }, {}, {}, {}, mongoose.Document<unknown, {}, {
53
+ name: string;
54
+ action: "read" | "create" | "update" | "delete";
55
+ timestamp: NativeDate;
56
+ recordId: mongoose.Types.ObjectId;
57
+ isSystemGenerated: boolean;
58
+ metadata?: any;
59
+ source?: string | null | undefined;
60
+ oldValue?: any;
61
+ newValue?: any;
62
+ fieldName?: string | null | undefined;
63
+ userId?: mongoose.Types.ObjectId | null | undefined;
64
+ ipAddress?: string | null | undefined;
65
+ userAgent?: string | null | undefined;
66
+ sessionId?: string | null | undefined;
67
+ externalData?: {
68
+ apprivoAuditId?: string | null | undefined;
69
+ syncStatus?: "pending" | "synced" | "failed" | null | undefined;
70
+ syncedAt?: NativeDate | null | undefined;
71
+ externalSystemId?: string | null | undefined;
72
+ } | null | undefined;
73
+ severity?: "low" | "medium" | "high" | "critical" | null | undefined;
74
+ }, {}> & {
75
+ name: string;
76
+ action: "read" | "create" | "update" | "delete";
77
+ timestamp: NativeDate;
78
+ recordId: mongoose.Types.ObjectId;
79
+ isSystemGenerated: boolean;
80
+ metadata?: any;
81
+ source?: string | null | undefined;
82
+ oldValue?: any;
83
+ newValue?: any;
84
+ fieldName?: string | null | undefined;
85
+ userId?: mongoose.Types.ObjectId | null | undefined;
86
+ ipAddress?: string | null | undefined;
87
+ userAgent?: string | null | undefined;
88
+ sessionId?: string | null | undefined;
89
+ externalData?: {
90
+ apprivoAuditId?: string | null | undefined;
91
+ syncStatus?: "pending" | "synced" | "failed" | null | undefined;
92
+ syncedAt?: NativeDate | null | undefined;
93
+ externalSystemId?: string | null | undefined;
94
+ } | null | undefined;
95
+ severity?: "low" | "medium" | "high" | "critical" | null | undefined;
96
+ } & {
97
+ _id: mongoose.Types.ObjectId;
98
+ } & {
99
+ __v: number;
100
+ }, mongoose.Schema<any, mongoose.Model<any, any, any, any, any, any>, {}, {}, {}, {}, {
101
+ timestamps: false;
102
+ toJSON: {
103
+ virtuals: true;
104
+ };
105
+ toObject: {
106
+ virtuals: true;
107
+ };
108
+ }, {
109
+ name: string;
110
+ action: "read" | "create" | "update" | "delete";
111
+ timestamp: NativeDate;
112
+ recordId: mongoose.Types.ObjectId;
113
+ isSystemGenerated: boolean;
114
+ metadata?: any;
115
+ source?: string | null | undefined;
116
+ oldValue?: any;
117
+ newValue?: any;
118
+ fieldName?: string | null | undefined;
119
+ userId?: mongoose.Types.ObjectId | null | undefined;
120
+ ipAddress?: string | null | undefined;
121
+ userAgent?: string | null | undefined;
122
+ sessionId?: string | null | undefined;
123
+ externalData?: {
124
+ apprivoAuditId?: string | null | undefined;
125
+ syncStatus?: "pending" | "synced" | "failed" | null | undefined;
126
+ syncedAt?: NativeDate | null | undefined;
127
+ externalSystemId?: string | null | undefined;
128
+ } | null | undefined;
129
+ severity?: "low" | "medium" | "high" | "critical" | null | undefined;
130
+ }, mongoose.Document<unknown, {}, mongoose.FlatRecord<{
131
+ name: string;
132
+ action: "read" | "create" | "update" | "delete";
133
+ timestamp: NativeDate;
134
+ recordId: mongoose.Types.ObjectId;
135
+ isSystemGenerated: boolean;
136
+ metadata?: any;
137
+ source?: string | null | undefined;
138
+ oldValue?: any;
139
+ newValue?: any;
140
+ fieldName?: string | null | undefined;
141
+ userId?: mongoose.Types.ObjectId | null | undefined;
142
+ ipAddress?: string | null | undefined;
143
+ userAgent?: string | null | undefined;
144
+ sessionId?: string | null | undefined;
145
+ externalData?: {
146
+ apprivoAuditId?: string | null | undefined;
147
+ syncStatus?: "pending" | "synced" | "failed" | null | undefined;
148
+ syncedAt?: NativeDate | null | undefined;
149
+ externalSystemId?: string | null | undefined;
150
+ } | null | undefined;
151
+ severity?: "low" | "medium" | "high" | "critical" | null | undefined;
152
+ }>, {}> & mongoose.FlatRecord<{
153
+ name: string;
154
+ action: "read" | "create" | "update" | "delete";
155
+ timestamp: NativeDate;
156
+ recordId: mongoose.Types.ObjectId;
157
+ isSystemGenerated: boolean;
158
+ metadata?: any;
159
+ source?: string | null | undefined;
160
+ oldValue?: any;
161
+ newValue?: any;
162
+ fieldName?: string | null | undefined;
163
+ userId?: mongoose.Types.ObjectId | null | undefined;
164
+ ipAddress?: string | null | undefined;
165
+ userAgent?: string | null | undefined;
166
+ sessionId?: string | null | undefined;
167
+ externalData?: {
168
+ apprivoAuditId?: string | null | undefined;
169
+ syncStatus?: "pending" | "synced" | "failed" | null | undefined;
170
+ syncedAt?: NativeDate | null | undefined;
171
+ externalSystemId?: string | null | undefined;
172
+ } | null | undefined;
173
+ severity?: "low" | "medium" | "high" | "critical" | null | undefined;
174
+ }> & {
175
+ _id: mongoose.Types.ObjectId;
176
+ } & {
177
+ __v: number;
178
+ }>>;
179
+ export default AuditLogModel;
180
+ //# sourceMappingURL=audit-log.model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-log.model.d.ts","sourceRoot":"","sources":["../../shared/audit-log.model.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AA6ChC,QAAA,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAA6C,CAAC;AACjE,eAAe,aAAa,CAAC"}
@@ -0,0 +1,43 @@
1
+ import mongoose from "mongoose";
2
+ const auditLogSchema = new mongoose.Schema({
3
+ name: { type: String, required: true }, // Collection/model name
4
+ recordId: { type: mongoose.Schema.Types.ObjectId, required: true }, // ID of the record being audited
5
+ action: { type: String, required: true, enum: ['create', 'update', 'delete', 'read'] },
6
+ userId: { type: mongoose.Schema.Types.ObjectId, ref: "User", required: false }, // User who performed the action
7
+ timestamp: { type: Date, default: Date.now, required: true },
8
+ oldValue: { type: mongoose.Schema.Types.Mixed, required: false }, // Previous value
9
+ newValue: { type: mongoose.Schema.Types.Mixed, required: false }, // New value
10
+ fieldName: { type: String, required: false }, // Specific field that changed
11
+ ipAddress: { type: String, required: false },
12
+ userAgent: { type: String, required: false },
13
+ sessionId: { type: String, required: false },
14
+ source: { type: String, required: false, default: 'application' }, // Source of the change
15
+ metadata: { type: mongoose.Schema.Types.Mixed, required: false },
16
+ externalData: {
17
+ apprivoAuditId: { type: String, required: false }, // External system audit ID
18
+ syncStatus: { type: String, required: false, enum: ['pending', 'synced', 'failed'] },
19
+ syncedAt: { type: Date, required: false },
20
+ externalSystemId: { type: String, required: false }
21
+ },
22
+ isSystemGenerated: { type: Boolean, default: false },
23
+ severity: { type: String, required: false, enum: ['low', 'medium', 'high', 'critical'], default: 'low' }
24
+ }, {
25
+ timestamps: false, // We use our own timestamp field
26
+ toJSON: { virtuals: true },
27
+ toObject: { virtuals: true }
28
+ });
29
+ // Virtual for formatted timestamp
30
+ auditLogSchema.virtual('formattedTimestamp').get(function () {
31
+ return this.timestamp ? this.timestamp.toISOString() : null;
32
+ });
33
+ // Add indexes to match database
34
+ auditLogSchema.index({ 'externalData.apprivoAuditId': 1 }); // External audit ID lookup
35
+ auditLogSchema.index({ name: 1, newValue: 1, recordId: 1, timestamp: -1 }); // Complex compound index
36
+ auditLogSchema.index({ name: 1, recordId: 1 }); // Filter by collection and record
37
+ auditLogSchema.index({ recordId: 1, timestamp: -1, _id: -1 }); // Record history with fallback sort
38
+ auditLogSchema.index({ timestamp: -1 }); // Sort by recent changes
39
+ auditLogSchema.index({ userId: 1, timestamp: -1 }); // User activity history
40
+ auditLogSchema.index({ action: 1, timestamp: -1 }); // Filter by action type
41
+ auditLogSchema.index({ name: 1, action: 1, timestamp: -1 }); // Collection-specific action history
42
+ const AuditLogModel = mongoose.model("AuditLog", auditLogSchema);
43
+ export default AuditLogModel;
@@ -0,0 +1,180 @@
1
+ /// <reference path="../value-objects/pound.d.ts" />
2
+ /// <reference path="../value-objects/account-number.d.ts" />
3
+ /// <reference path="../value-objects/sort-code.d.ts" />
4
+ /// <reference types="mongoose/types/aggregate" />
5
+ /// <reference types="mongoose/types/callback" />
6
+ /// <reference types="mongoose/types/collection" />
7
+ /// <reference types="mongoose/types/connection" />
8
+ /// <reference types="mongoose/types/cursor" />
9
+ /// <reference types="mongoose/types/document" />
10
+ /// <reference types="mongoose/types/error" />
11
+ /// <reference types="mongoose/types/expressions" />
12
+ /// <reference types="mongoose/types/helpers" />
13
+ /// <reference types="mongoose/types/middlewares" />
14
+ /// <reference types="mongoose/types/indexes" />
15
+ /// <reference types="mongoose/types/models" />
16
+ /// <reference types="mongoose/types/mongooseoptions" />
17
+ /// <reference types="mongoose/types/pipelinestage" />
18
+ /// <reference types="mongoose/types/populate" />
19
+ /// <reference types="mongoose/types/query" />
20
+ /// <reference types="mongoose/types/schemaoptions" />
21
+ /// <reference types="mongoose/types/session" />
22
+ /// <reference types="mongoose/types/types" />
23
+ /// <reference types="mongoose/types/utility" />
24
+ /// <reference types="mongoose/types/validation" />
25
+ /// <reference types="mongoose/types/virtuals" />
26
+ /// <reference types="mongoose/types/schematypes" />
27
+ /// <reference types="mongoose/types/inferschematype" />
28
+ /// <reference types="mongoose/types/inferrawdoctype" />
29
+ import mongoose from "mongoose";
30
+ declare const DocumentModel: mongoose.Model<{
31
+ createdAt: NativeDate;
32
+ updatedAt: NativeDate;
33
+ } & {
34
+ isActive: boolean;
35
+ applicationId: mongoose.Types.ObjectId;
36
+ status: "pending" | "uploaded" | "verified" | "rejected" | "archived";
37
+ category: string;
38
+ fileName: string;
39
+ originalName: string;
40
+ mimeType: string;
41
+ fileSize: number;
42
+ filePath: string;
43
+ uploadedBy: mongoose.Types.ObjectId;
44
+ tags: string[];
45
+ metadata?: any;
46
+ contextId?: mongoose.Types.ObjectId | null | undefined;
47
+ rejectionReason?: string | null | undefined;
48
+ subCategory?: string | null | undefined;
49
+ verifiedBy?: mongoose.Types.ObjectId | null | undefined;
50
+ verifiedAt?: NativeDate | null | undefined;
51
+ expiresAt?: NativeDate | null | undefined;
52
+ }, {}, {}, {}, mongoose.Document<unknown, {}, {
53
+ createdAt: NativeDate;
54
+ updatedAt: NativeDate;
55
+ } & {
56
+ isActive: boolean;
57
+ applicationId: mongoose.Types.ObjectId;
58
+ status: "pending" | "uploaded" | "verified" | "rejected" | "archived";
59
+ category: string;
60
+ fileName: string;
61
+ originalName: string;
62
+ mimeType: string;
63
+ fileSize: number;
64
+ filePath: string;
65
+ uploadedBy: mongoose.Types.ObjectId;
66
+ tags: string[];
67
+ metadata?: any;
68
+ contextId?: mongoose.Types.ObjectId | null | undefined;
69
+ rejectionReason?: string | null | undefined;
70
+ subCategory?: string | null | undefined;
71
+ verifiedBy?: mongoose.Types.ObjectId | null | undefined;
72
+ verifiedAt?: NativeDate | null | undefined;
73
+ expiresAt?: NativeDate | null | undefined;
74
+ }, {}> & {
75
+ createdAt: NativeDate;
76
+ updatedAt: NativeDate;
77
+ } & {
78
+ isActive: boolean;
79
+ applicationId: mongoose.Types.ObjectId;
80
+ status: "pending" | "uploaded" | "verified" | "rejected" | "archived";
81
+ category: string;
82
+ fileName: string;
83
+ originalName: string;
84
+ mimeType: string;
85
+ fileSize: number;
86
+ filePath: string;
87
+ uploadedBy: mongoose.Types.ObjectId;
88
+ tags: string[];
89
+ metadata?: any;
90
+ contextId?: mongoose.Types.ObjectId | null | undefined;
91
+ rejectionReason?: string | null | undefined;
92
+ subCategory?: string | null | undefined;
93
+ verifiedBy?: mongoose.Types.ObjectId | null | undefined;
94
+ verifiedAt?: NativeDate | null | undefined;
95
+ expiresAt?: NativeDate | null | undefined;
96
+ } & {
97
+ _id: mongoose.Types.ObjectId;
98
+ } & {
99
+ __v: number;
100
+ }, mongoose.Schema<any, mongoose.Model<any, any, any, any, any, any>, {}, {}, {}, {}, {
101
+ timestamps: true;
102
+ toJSON: {
103
+ virtuals: true;
104
+ };
105
+ toObject: {
106
+ virtuals: true;
107
+ };
108
+ }, {
109
+ createdAt: NativeDate;
110
+ updatedAt: NativeDate;
111
+ } & {
112
+ isActive: boolean;
113
+ applicationId: mongoose.Types.ObjectId;
114
+ status: "pending" | "uploaded" | "verified" | "rejected" | "archived";
115
+ category: string;
116
+ fileName: string;
117
+ originalName: string;
118
+ mimeType: string;
119
+ fileSize: number;
120
+ filePath: string;
121
+ uploadedBy: mongoose.Types.ObjectId;
122
+ tags: string[];
123
+ metadata?: any;
124
+ contextId?: mongoose.Types.ObjectId | null | undefined;
125
+ rejectionReason?: string | null | undefined;
126
+ subCategory?: string | null | undefined;
127
+ verifiedBy?: mongoose.Types.ObjectId | null | undefined;
128
+ verifiedAt?: NativeDate | null | undefined;
129
+ expiresAt?: NativeDate | null | undefined;
130
+ }, mongoose.Document<unknown, {}, mongoose.FlatRecord<{
131
+ createdAt: NativeDate;
132
+ updatedAt: NativeDate;
133
+ } & {
134
+ isActive: boolean;
135
+ applicationId: mongoose.Types.ObjectId;
136
+ status: "pending" | "uploaded" | "verified" | "rejected" | "archived";
137
+ category: string;
138
+ fileName: string;
139
+ originalName: string;
140
+ mimeType: string;
141
+ fileSize: number;
142
+ filePath: string;
143
+ uploadedBy: mongoose.Types.ObjectId;
144
+ tags: string[];
145
+ metadata?: any;
146
+ contextId?: mongoose.Types.ObjectId | null | undefined;
147
+ rejectionReason?: string | null | undefined;
148
+ subCategory?: string | null | undefined;
149
+ verifiedBy?: mongoose.Types.ObjectId | null | undefined;
150
+ verifiedAt?: NativeDate | null | undefined;
151
+ expiresAt?: NativeDate | null | undefined;
152
+ }>, {}> & mongoose.FlatRecord<{
153
+ createdAt: NativeDate;
154
+ updatedAt: NativeDate;
155
+ } & {
156
+ isActive: boolean;
157
+ applicationId: mongoose.Types.ObjectId;
158
+ status: "pending" | "uploaded" | "verified" | "rejected" | "archived";
159
+ category: string;
160
+ fileName: string;
161
+ originalName: string;
162
+ mimeType: string;
163
+ fileSize: number;
164
+ filePath: string;
165
+ uploadedBy: mongoose.Types.ObjectId;
166
+ tags: string[];
167
+ metadata?: any;
168
+ contextId?: mongoose.Types.ObjectId | null | undefined;
169
+ rejectionReason?: string | null | undefined;
170
+ subCategory?: string | null | undefined;
171
+ verifiedBy?: mongoose.Types.ObjectId | null | undefined;
172
+ verifiedAt?: NativeDate | null | undefined;
173
+ expiresAt?: NativeDate | null | undefined;
174
+ }> & {
175
+ _id: mongoose.Types.ObjectId;
176
+ } & {
177
+ __v: number;
178
+ }>>;
179
+ export default DocumentModel;
180
+ //# sourceMappingURL=document.model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document.model.d.ts","sourceRoot":"","sources":["../../shared/document.model.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AA0ChC,QAAA,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAA6C,CAAC;AACjE,eAAe,aAAa,CAAC"}
@@ -0,0 +1,40 @@
1
+ import mongoose from "mongoose";
2
+ import { applyAuditMiddleware } from "@dynamatix/cat-shared/middlewares";
3
+ import { applyWorkflowPlugin } from "./workflow.plugin";
4
+ const documentSchema = new mongoose.Schema({
5
+ applicationId: { type: mongoose.Schema.Types.ObjectId, ref: "Application", required: true },
6
+ contextId: { type: mongoose.Schema.Types.ObjectId, required: false },
7
+ status: { type: String, required: true, enum: ['pending', 'uploaded', 'verified', 'rejected', 'archived'] },
8
+ category: { type: String, required: true },
9
+ subCategory: { type: String, required: false },
10
+ fileName: { type: String, required: true },
11
+ originalName: { type: String, required: true },
12
+ mimeType: { type: String, required: true },
13
+ fileSize: { type: Number, required: true },
14
+ filePath: { type: String, required: true },
15
+ uploadedBy: { type: mongoose.Schema.Types.ObjectId, ref: "User", required: true },
16
+ verifiedBy: { type: mongoose.Schema.Types.ObjectId, ref: "User", required: false },
17
+ verifiedAt: { type: Date, required: false },
18
+ rejectionReason: { type: String, required: false },
19
+ metadata: { type: mongoose.Schema.Types.Mixed, required: false },
20
+ tags: [{ type: String }],
21
+ isActive: { type: Boolean, default: true },
22
+ expiresAt: { type: Date, required: false }
23
+ }, {
24
+ timestamps: true,
25
+ toJSON: { virtuals: true },
26
+ toObject: { virtuals: true }
27
+ });
28
+ applyAuditMiddleware(documentSchema, "Document");
29
+ applyWorkflowPlugin(documentSchema, 'document');
30
+ // Add indexes to match database
31
+ documentSchema.index({ applicationId: 1 }); // Filter by application
32
+ documentSchema.index({ contextId: 1 }); // Filter by context
33
+ documentSchema.index({ status: 1 }); // Filter by status
34
+ documentSchema.index({ category: 1 }); // Filter by category
35
+ documentSchema.index({ subCategory: 1 }); // Filter by subcategory
36
+ documentSchema.index({ applicationId: 1, status: 1 }); // Compound: application + status
37
+ documentSchema.index({ contextId: 1, status: 1 }); // Compound: context + status
38
+ documentSchema.index({ category: 1, status: 1 }); // Compound: category + status
39
+ const DocumentModel = mongoose.model("Document", documentSchema);
40
+ export default DocumentModel;