payservedb 8.1.4 → 8.1.6

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 (163) hide show
  1. package/.env +2 -2
  2. package/.idea/material_theme_project_new.xml +11 -11
  3. package/.idea/modules.xml +7 -7
  4. package/.idea/psdb.iml +11 -11
  5. package/.idea/vcs.xml +5 -5
  6. package/index.js +292 -291
  7. package/package.json +17 -17
  8. package/src/models/account.js +53 -47
  9. package/src/models/apilog.js +18 -18
  10. package/src/models/approvalsWorkflows.js +49 -49
  11. package/src/models/archivedapilog.js +18 -18
  12. package/src/models/asset.js +92 -92
  13. package/src/models/assetsAssignment.js +64 -64
  14. package/src/models/auditTrail.js +346 -346
  15. package/src/models/bankdetails.js +43 -43
  16. package/src/models/billerAddress.js +124 -124
  17. package/src/models/booking_invoice.js +151 -151
  18. package/src/models/bookinganalytics.js +63 -63
  19. package/src/models/bookingconfig.js +45 -45
  20. package/src/models/bookingproperty.js +122 -122
  21. package/src/models/bookingreservation.js +192 -192
  22. package/src/models/bookingrevenuerecord.js +84 -84
  23. package/src/models/budget.js +95 -95
  24. package/src/models/budgetCategory.js +19 -19
  25. package/src/models/campaigns.js +108 -108
  26. package/src/models/cashpayment.js +264 -264
  27. package/src/models/combinedUnits.js +62 -62
  28. package/src/models/common_area_electricity.js +38 -38
  29. package/src/models/common_area_generator.js +41 -41
  30. package/src/models/common_area_utility_alert.js +37 -37
  31. package/src/models/common_area_water.js +39 -39
  32. package/src/models/communication_status.js +33 -33
  33. package/src/models/communication_user_opt.js +32 -32
  34. package/src/models/company.js +53 -53
  35. package/src/models/coreBaseSettings.js +16 -16
  36. package/src/models/coreInvoiceSettings.js +100 -100
  37. package/src/models/country_tax.js +42 -42
  38. package/src/models/currency_settings.js +39 -39
  39. package/src/models/customer.js +208 -208
  40. package/src/models/dailyChecklist.js +312 -312
  41. package/src/models/default_payment_details.js +17 -17
  42. package/src/models/deliveryTimeMarks.js +18 -18
  43. package/src/models/dutyRosterChecklist.js +250 -250
  44. package/src/models/dutyroster.js +136 -136
  45. package/src/models/email.js +37 -37
  46. package/src/models/email_sms_queue.js +61 -61
  47. package/src/models/entry_exit.js +53 -53
  48. package/src/models/expense.js +99 -99
  49. package/src/models/expense_category.js +45 -45
  50. package/src/models/facility.js +62 -62
  51. package/src/models/facilityBillingPrices.js +29 -29
  52. package/src/models/facilityInvoice.js +223 -223
  53. package/src/models/facilityInvoicePayment.js +47 -47
  54. package/src/models/facilityInvoiceRecipient.js +32 -32
  55. package/src/models/facilityWalletTransactionsMetadata.js +236 -236
  56. package/src/models/facility_departements.js +20 -20
  57. package/src/models/facility_payment_details.js +20 -20
  58. package/src/models/facilityasset.js +25 -25
  59. package/src/models/faq.js +18 -18
  60. package/src/models/gl_account_double_entries.js +25 -25
  61. package/src/models/gl_accounts.js +56 -56
  62. package/src/models/gl_entries.js +49 -49
  63. package/src/models/goodsReceivedNotes.js +115 -115
  64. package/src/models/guard.js +47 -47
  65. package/src/models/handover.js +246 -246
  66. package/src/models/invoice.js +387 -387
  67. package/src/models/invoicing_schedule.js +36 -36
  68. package/src/models/item_inspection.js +96 -96
  69. package/src/models/leaseagreement.js +243 -243
  70. package/src/models/leasetemplate.js +17 -17
  71. package/src/models/levy.js +206 -206
  72. package/src/models/levy_invoice_settings.js +26 -26
  73. package/src/models/levycontract.js +173 -173
  74. package/src/models/levytype.js +23 -23
  75. package/src/models/maintenance_service_vendor.js +38 -38
  76. package/src/models/maintenance_services.js +17 -17
  77. package/src/models/maintenancerequisition.js +31 -31
  78. package/src/models/master_workplan.js +32 -32
  79. package/src/models/master_workplan_child.js +34 -34
  80. package/src/models/message.js +38 -38
  81. package/src/models/module.js +21 -21
  82. package/src/models/notification.js +44 -44
  83. package/src/models/paymentTermsMarks.js +19 -19
  84. package/src/models/penalty.js +76 -76
  85. package/src/models/pendingCredentials.js +32 -32
  86. package/src/models/powerMeterCommunicationProtocol.js +17 -17
  87. package/src/models/powerMeterCustomerAccount.js +78 -78
  88. package/src/models/powerMeterCustomerBand.js +14 -14
  89. package/src/models/powerMeterDailyReading.js +30 -30
  90. package/src/models/powerMeterGateways.js +40 -40
  91. package/src/models/powerMeterMonthlyReading.js +34 -34
  92. package/src/models/powerMeterPowerCharges.js +85 -85
  93. package/src/models/powerMeterSettings.js +159 -159
  94. package/src/models/powerMeterSingleDayReading.js +32 -32
  95. package/src/models/powerMeters.js +116 -116
  96. package/src/models/powerMetersManufacturer.js +14 -14
  97. package/src/models/power_meter_account.js +81 -81
  98. package/src/models/power_meter_command_logs.js +30 -30
  99. package/src/models/power_meter_command_queue.js +33 -33
  100. package/src/models/power_meter_negative_balance.js +44 -44
  101. package/src/models/power_prepaid_credits.js +47 -47
  102. package/src/models/power_prepaid_debits.js +53 -53
  103. package/src/models/power_prepaid_orders.js +78 -78
  104. package/src/models/power_sms_notification.js +26 -26
  105. package/src/models/propertyManagerContract.js +556 -556
  106. package/src/models/propertyManagerRevenue.js +195 -195
  107. package/src/models/purchaseOrderInvoice.js +74 -74
  108. package/src/models/purchase_order.js +213 -213
  109. package/src/models/purchase_request.js +110 -110
  110. package/src/models/refresh_token.js +23 -23
  111. package/src/models/reminder.js +197 -197
  112. package/src/models/report.js +13 -13
  113. package/src/models/resident.js +121 -121
  114. package/src/models/rfq_details.js +131 -131
  115. package/src/models/rfq_response.js +153 -153
  116. package/src/models/service_charge_invoice_upload.js +42 -42
  117. package/src/models/service_charge_payments.js +27 -27
  118. package/src/models/servicerequest.js +55 -55
  119. package/src/models/settings.js +62 -62
  120. package/src/models/short_urls.js +21 -0
  121. package/src/models/smart_meter_daily_consumption.js +44 -44
  122. package/src/models/sms_africastalking.js +20 -20
  123. package/src/models/sms_balance_notification.js +26 -26
  124. package/src/models/sms_meliora.js +20 -20
  125. package/src/models/staff.js +36 -36
  126. package/src/models/stocksandspare.js +161 -161
  127. package/src/models/suppliers.js +74 -74
  128. package/src/models/tickets.js +121 -121
  129. package/src/models/unitManagementTemplate.js +44 -44
  130. package/src/models/unitasset.js +25 -25
  131. package/src/models/units.js +117 -117
  132. package/src/models/user.js +186 -186
  133. package/src/models/valueaddedservices.js +79 -79
  134. package/src/models/vas_invoices_upload.js +50 -50
  135. package/src/models/vas_payments.js +24 -24
  136. package/src/models/vasinvoice.js +192 -192
  137. package/src/models/vasvendor.js +57 -57
  138. package/src/models/visitLog.js +95 -95
  139. package/src/models/visitor.js +67 -67
  140. package/src/models/waitlist.js +45 -45
  141. package/src/models/wallet.js +44 -44
  142. package/src/models/wallet_transactions.js +50 -50
  143. package/src/models/water_invoice.js +351 -351
  144. package/src/models/water_meter_Command_Queue.js +33 -33
  145. package/src/models/water_meter_account.js +82 -82
  146. package/src/models/water_meter_billing.js +58 -58
  147. package/src/models/water_meter_communication.js +17 -17
  148. package/src/models/water_meter_communication_logs.js +39 -39
  149. package/src/models/water_meter_concentrator.js +70 -70
  150. package/src/models/water_meter_daily_history.js +32 -32
  151. package/src/models/water_meter_high_risk.js +36 -36
  152. package/src/models/water_meter_iot_cards.js +34 -34
  153. package/src/models/water_meter_manufacturer.js +35 -35
  154. package/src/models/water_meter_monthly_history.js +36 -36
  155. package/src/models/water_meter_negative_amounts.js +44 -44
  156. package/src/models/water_meter_settings.js +276 -276
  157. package/src/models/water_meter_single_day_history.js +34 -34
  158. package/src/models/water_meter_size.js +15 -15
  159. package/src/models/water_meters.js +133 -133
  160. package/src/models/water_meters_delivery.js +76 -76
  161. package/src/models/water_prepaid_credit.js +47 -47
  162. package/src/models/water_prepaid_debit.js +50 -50
  163. package/src/models/workorder.js +49 -49
@@ -1,136 +1,136 @@
1
- const mongoose = require("mongoose");
2
-
3
- // Time slot schema for reuse
4
- const timeSlotSchema = new mongoose.Schema(
5
- {
6
- startTime: String,
7
- endTime: String,
8
- status: {
9
- type: String,
10
- enum: ["ON", "OFF", "AL", "CL", "ML/PL", "PH", "UI"],
11
- default: "ON",
12
- },
13
- },
14
- { _id: false },
15
- );
16
-
17
- const dutyRosterSchema = new mongoose.Schema(
18
- {
19
- facilityId: {
20
- type: mongoose.Schema.Types.ObjectId,
21
- ref: "Facility",
22
- required: true,
23
- },
24
- staffId: {
25
- type: mongoose.Schema.Types.ObjectId,
26
- ref: "User",
27
- required: true,
28
- },
29
- staffPosition: {
30
- type: String,
31
- enum: ["Head", "Deputy", "Assistant", "Normal"],
32
- default: "Normal",
33
- },
34
- masterWorkplanId: {
35
- type: mongoose.Schema.Types.ObjectId,
36
- ref: "MasterWorkplanAssignment",
37
- required: true,
38
- },
39
- startDate: {
40
- type: Date,
41
- required: true,
42
- },
43
- endDate: {
44
- type: Date,
45
- required: true,
46
- },
47
- weeklySchedule: {
48
- monday: [timeSlotSchema],
49
- tuesday: [timeSlotSchema],
50
- wednesday: [timeSlotSchema],
51
- thursday: [timeSlotSchema],
52
- friday: [timeSlotSchema],
53
- saturday: [timeSlotSchema],
54
- sunday: [timeSlotSchema],
55
- },
56
- // For exceptions to the regular schedule
57
- exceptions: [
58
- {
59
- date: {
60
- type: Date,
61
- required: true,
62
- },
63
- startTime: String,
64
- endTime: String,
65
- status: {
66
- type: String,
67
- enum: ["ON", "OFF", "AL", "CL", "ML/PL", "PH", "UI"],
68
- required: true,
69
- },
70
- reason: String,
71
- },
72
- ],
73
- // Metadata
74
- metadata: {
75
- period: {
76
- startDate: Date,
77
- endDate: Date,
78
- },
79
- },
80
- },
81
- {
82
- timestamps: true,
83
- },
84
- );
85
-
86
- // Add validation to ensure endDate is after startDate
87
- dutyRosterSchema.pre("save", function (next) {
88
- // Validate date range
89
- if (this.startDate && this.endDate && this.startDate >= this.endDate) {
90
- return next(new Error("End date must be after start date"));
91
- }
92
-
93
- const schedule = this.weeklySchedule;
94
- // Convert any day that's not an array to an array with a single element
95
- for (const day of [
96
- "monday",
97
- "tuesday",
98
- "wednesday",
99
- "thursday",
100
- "friday",
101
- "saturday",
102
- "sunday",
103
- ]) {
104
- if (schedule[day] && !Array.isArray(schedule[day])) {
105
- schedule[day] = [schedule[day]];
106
- }
107
- // Ensure each day has at least one time slot
108
- if (!schedule[day] || schedule[day].length === 0) {
109
- schedule[day] = [
110
- {
111
- startTime: "",
112
- endTime: "",
113
- status: "ON",
114
- },
115
- ];
116
- }
117
- }
118
- next();
119
- });
120
-
121
- // Status code definitions
122
- dutyRosterSchema.statics.STATUS_CODES = {
123
- ON: "On Duty",
124
- OFF: "Off Duty",
125
- AL: "Annual Leave",
126
- CL: "Casual Leave",
127
- "ML/PL": "Medical/Paternity Leave",
128
- PH: "Public Holiday",
129
- UI: "Unplanned Issues",
130
- };
131
-
132
- // Add index for efficient date range queries
133
- dutyRosterSchema.index({ startDate: 1, endDate: 1 });
134
- dutyRosterSchema.index({ facilityId: 1, startDate: 1, endDate: 1 });
135
-
136
- module.exports = mongoose.model("DutyRoster", dutyRosterSchema);
1
+ const mongoose = require("mongoose");
2
+
3
+ // Time slot schema for reuse
4
+ const timeSlotSchema = new mongoose.Schema(
5
+ {
6
+ startTime: String,
7
+ endTime: String,
8
+ status: {
9
+ type: String,
10
+ enum: ["ON", "OFF", "AL", "CL", "ML/PL", "PH", "UI"],
11
+ default: "ON",
12
+ },
13
+ },
14
+ { _id: false },
15
+ );
16
+
17
+ const dutyRosterSchema = new mongoose.Schema(
18
+ {
19
+ facilityId: {
20
+ type: mongoose.Schema.Types.ObjectId,
21
+ ref: "Facility",
22
+ required: true,
23
+ },
24
+ staffId: {
25
+ type: mongoose.Schema.Types.ObjectId,
26
+ ref: "User",
27
+ required: true,
28
+ },
29
+ staffPosition: {
30
+ type: String,
31
+ enum: ["Head", "Deputy", "Assistant", "Normal"],
32
+ default: "Normal",
33
+ },
34
+ masterWorkplanId: {
35
+ type: mongoose.Schema.Types.ObjectId,
36
+ ref: "MasterWorkplanAssignment",
37
+ required: true,
38
+ },
39
+ startDate: {
40
+ type: Date,
41
+ required: true,
42
+ },
43
+ endDate: {
44
+ type: Date,
45
+ required: true,
46
+ },
47
+ weeklySchedule: {
48
+ monday: [timeSlotSchema],
49
+ tuesday: [timeSlotSchema],
50
+ wednesday: [timeSlotSchema],
51
+ thursday: [timeSlotSchema],
52
+ friday: [timeSlotSchema],
53
+ saturday: [timeSlotSchema],
54
+ sunday: [timeSlotSchema],
55
+ },
56
+ // For exceptions to the regular schedule
57
+ exceptions: [
58
+ {
59
+ date: {
60
+ type: Date,
61
+ required: true,
62
+ },
63
+ startTime: String,
64
+ endTime: String,
65
+ status: {
66
+ type: String,
67
+ enum: ["ON", "OFF", "AL", "CL", "ML/PL", "PH", "UI"],
68
+ required: true,
69
+ },
70
+ reason: String,
71
+ },
72
+ ],
73
+ // Metadata
74
+ metadata: {
75
+ period: {
76
+ startDate: Date,
77
+ endDate: Date,
78
+ },
79
+ },
80
+ },
81
+ {
82
+ timestamps: true,
83
+ },
84
+ );
85
+
86
+ // Add validation to ensure endDate is after startDate
87
+ dutyRosterSchema.pre("save", function (next) {
88
+ // Validate date range
89
+ if (this.startDate && this.endDate && this.startDate >= this.endDate) {
90
+ return next(new Error("End date must be after start date"));
91
+ }
92
+
93
+ const schedule = this.weeklySchedule;
94
+ // Convert any day that's not an array to an array with a single element
95
+ for (const day of [
96
+ "monday",
97
+ "tuesday",
98
+ "wednesday",
99
+ "thursday",
100
+ "friday",
101
+ "saturday",
102
+ "sunday",
103
+ ]) {
104
+ if (schedule[day] && !Array.isArray(schedule[day])) {
105
+ schedule[day] = [schedule[day]];
106
+ }
107
+ // Ensure each day has at least one time slot
108
+ if (!schedule[day] || schedule[day].length === 0) {
109
+ schedule[day] = [
110
+ {
111
+ startTime: "",
112
+ endTime: "",
113
+ status: "ON",
114
+ },
115
+ ];
116
+ }
117
+ }
118
+ next();
119
+ });
120
+
121
+ // Status code definitions
122
+ dutyRosterSchema.statics.STATUS_CODES = {
123
+ ON: "On Duty",
124
+ OFF: "Off Duty",
125
+ AL: "Annual Leave",
126
+ CL: "Casual Leave",
127
+ "ML/PL": "Medical/Paternity Leave",
128
+ PH: "Public Holiday",
129
+ UI: "Unplanned Issues",
130
+ };
131
+
132
+ // Add index for efficient date range queries
133
+ dutyRosterSchema.index({ startDate: 1, endDate: 1 });
134
+ dutyRosterSchema.index({ facilityId: 1, startDate: 1, endDate: 1 });
135
+
136
+ module.exports = mongoose.model("DutyRoster", dutyRosterSchema);
@@ -1,38 +1,38 @@
1
- const mongoose = require('mongoose');
2
- const FacilityEmailDetailsSchema = mongoose.Schema({
3
- host: {
4
- type: String,
5
- required: true
6
- },
7
- port: {
8
- type: Number,
9
- required: true
10
- },
11
- secure: {
12
- type: Boolean,
13
- default: false
14
- },
15
- sender: {
16
- type: String,
17
- required: true
18
- },
19
- user: {
20
- type: String,
21
- required: true
22
- },
23
- pass: {
24
- type: String,
25
- required: true
26
- },
27
- rejectUnauthorized: {
28
- type: Boolean,
29
- default: false
30
- },
31
- facilityId: {
32
- type: mongoose.Schema.Types.ObjectId,
33
- ref: 'Facility',
34
- required: true
35
- }
36
- })
37
- const FacilityEmailDetails = mongoose.model('FacilityEmailDetails', FacilityEmailDetailsSchema);
1
+ const mongoose = require('mongoose');
2
+ const FacilityEmailDetailsSchema = mongoose.Schema({
3
+ host: {
4
+ type: String,
5
+ required: true
6
+ },
7
+ port: {
8
+ type: Number,
9
+ required: true
10
+ },
11
+ secure: {
12
+ type: Boolean,
13
+ default: false
14
+ },
15
+ sender: {
16
+ type: String,
17
+ required: true
18
+ },
19
+ user: {
20
+ type: String,
21
+ required: true
22
+ },
23
+ pass: {
24
+ type: String,
25
+ required: true
26
+ },
27
+ rejectUnauthorized: {
28
+ type: Boolean,
29
+ default: false
30
+ },
31
+ facilityId: {
32
+ type: mongoose.Schema.Types.ObjectId,
33
+ ref: 'Facility',
34
+ required: true
35
+ }
36
+ })
37
+ const FacilityEmailDetails = mongoose.model('FacilityEmailDetails', FacilityEmailDetailsSchema);
38
38
  module.exports = FacilityEmailDetails
@@ -1,61 +1,61 @@
1
- const mongoose = require("mongoose");
2
-
3
- const EmailSmsQueueSchema = new mongoose.Schema(
4
- {
5
- email: {
6
- to: {
7
- type: String,
8
- required: function () {
9
- return this.type === "email";
10
- },
11
- },
12
- subject: {
13
- type: String,
14
- required: function () {
15
- return this.type === "email";
16
- },
17
- },
18
- text: {
19
- type: String,
20
- required: function () {
21
- return this.type === "email";
22
- },
23
- },
24
- },
25
- sms: {
26
- to: {
27
- type: String,
28
- required: function () {
29
- return this.type === "sms";
30
- },
31
- },
32
- message: {
33
- type: String,
34
- required: function () {
35
- return this.type === "sms";
36
- },
37
- },
38
- },
39
- type: {
40
- type: String,
41
- required: true,
42
- enum: ["email", "sms"],
43
- },
44
- status: {
45
- type: String,
46
- required: true,
47
- enum: ["pending", "sent", "failed"],
48
- },
49
- facilityId: {
50
- type: mongoose.Schema.Types.ObjectId,
51
- ref: "Facility",
52
- required: true,
53
- },
54
- },
55
- {
56
- timestamps: true,
57
- },
58
- );
59
-
60
- const EmailSmsQueue = mongoose.model("EmailSmsQueue", EmailSmsQueueSchema);
61
- module.exports = EmailSmsQueue;
1
+ const mongoose = require("mongoose");
2
+
3
+ const EmailSmsQueueSchema = new mongoose.Schema(
4
+ {
5
+ email: {
6
+ to: {
7
+ type: String,
8
+ required: function () {
9
+ return this.type === "email";
10
+ },
11
+ },
12
+ subject: {
13
+ type: String,
14
+ required: function () {
15
+ return this.type === "email";
16
+ },
17
+ },
18
+ text: {
19
+ type: String,
20
+ required: function () {
21
+ return this.type === "email";
22
+ },
23
+ },
24
+ },
25
+ sms: {
26
+ to: {
27
+ type: String,
28
+ required: function () {
29
+ return this.type === "sms";
30
+ },
31
+ },
32
+ message: {
33
+ type: String,
34
+ required: function () {
35
+ return this.type === "sms";
36
+ },
37
+ },
38
+ },
39
+ type: {
40
+ type: String,
41
+ required: true,
42
+ enum: ["email", "sms"],
43
+ },
44
+ status: {
45
+ type: String,
46
+ required: true,
47
+ enum: ["pending", "sent", "failed"],
48
+ },
49
+ facilityId: {
50
+ type: mongoose.Schema.Types.ObjectId,
51
+ ref: "Facility",
52
+ required: true,
53
+ },
54
+ },
55
+ {
56
+ timestamps: true,
57
+ },
58
+ );
59
+
60
+ const EmailSmsQueue = mongoose.model("EmailSmsQueue", EmailSmsQueueSchema);
61
+ module.exports = EmailSmsQueue;
@@ -1,53 +1,53 @@
1
- const mongoose = require('mongoose');
2
-
3
- const EntryExitSchema = mongoose.Schema({
4
- name: {
5
- type: String,
6
- required: true
7
- },
8
- location: {
9
- type: String,
10
- required: true,
11
- },
12
- gps: {
13
- type: {
14
- type: String,
15
- enum: ['Point'],
16
- required: true
17
- },
18
- coordinates: {
19
- type: [Number], // [longitude, latitude] format
20
- required: true,
21
- validate: {
22
- validator: function (value) {
23
- return value.length === 2;
24
- },
25
- message: 'Coordinates must have longitude and latitude'
26
- }
27
- }
28
- },
29
- range: {
30
- type: Number,
31
- required: true
32
- },
33
- disabled: {
34
- type: Boolean,
35
- required: true
36
- },
37
- purpose: {
38
- type: String,
39
- required: true,
40
- enum: ['entry/exit', 'entry', 'exit', 'emergency exit']
41
- },
42
- facilityId: {
43
- type: mongoose.Schema.Types.ObjectId,
44
- ref: 'Facility',
45
- }
46
- });
47
-
48
- // Create a 2dsphere index on the gps field to support geospatial queries
49
- EntryExitSchema.index({ gps: '2dsphere' });
50
-
51
- const EntryExit = mongoose.model('EntryExit', EntryExitSchema);
52
-
53
- module.exports = EntryExit;
1
+ const mongoose = require('mongoose');
2
+
3
+ const EntryExitSchema = mongoose.Schema({
4
+ name: {
5
+ type: String,
6
+ required: true
7
+ },
8
+ location: {
9
+ type: String,
10
+ required: true,
11
+ },
12
+ gps: {
13
+ type: {
14
+ type: String,
15
+ enum: ['Point'],
16
+ required: true
17
+ },
18
+ coordinates: {
19
+ type: [Number], // [longitude, latitude] format
20
+ required: true,
21
+ validate: {
22
+ validator: function (value) {
23
+ return value.length === 2;
24
+ },
25
+ message: 'Coordinates must have longitude and latitude'
26
+ }
27
+ }
28
+ },
29
+ range: {
30
+ type: Number,
31
+ required: true
32
+ },
33
+ disabled: {
34
+ type: Boolean,
35
+ required: true
36
+ },
37
+ purpose: {
38
+ type: String,
39
+ required: true,
40
+ enum: ['entry/exit', 'entry', 'exit', 'emergency exit']
41
+ },
42
+ facilityId: {
43
+ type: mongoose.Schema.Types.ObjectId,
44
+ ref: 'Facility',
45
+ }
46
+ });
47
+
48
+ // Create a 2dsphere index on the gps field to support geospatial queries
49
+ EntryExitSchema.index({ gps: '2dsphere' });
50
+
51
+ const EntryExit = mongoose.model('EntryExit', EntryExitSchema);
52
+
53
+ module.exports = EntryExit;