payservedb 6.9.2 → 6.9.4

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 (156) hide show
  1. package/.env +2 -2
  2. package/.idea/material_theme_project_new.xml +10 -0
  3. package/.idea/modules.xml +8 -0
  4. package/.idea/psdb.iml +12 -0
  5. package/.idea/vcs.xml +6 -0
  6. package/index.js +284 -287
  7. package/package.json +17 -17
  8. package/src/models/account.js +35 -35
  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 +40 -40
  16. package/src/models/billerAddress.js +119 -119
  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 +94 -94
  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/company.js +53 -53
  34. package/src/models/coreBaseSettings.js +16 -16
  35. package/src/models/coreInvoiceSettings.js +100 -100
  36. package/src/models/country_tax.js +42 -42
  37. package/src/models/currency_settings.js +39 -39
  38. package/src/models/customer.js +208 -208
  39. package/src/models/dailyChecklist.js +312 -312
  40. package/src/models/default_payment_details.js +17 -17
  41. package/src/models/deliveryTimeMarks.js +18 -18
  42. package/src/models/dutyRosterChecklist.js +250 -250
  43. package/src/models/dutyroster.js +136 -136
  44. package/src/models/email.js +37 -37
  45. package/src/models/email_sms_queue.js +61 -61
  46. package/src/models/entry_exit.js +53 -53
  47. package/src/models/expense.js +99 -99
  48. package/src/models/expense_category.js +45 -45
  49. package/src/models/facility.js +62 -62
  50. package/src/models/facilityInvoice.js +222 -222
  51. package/src/models/facilityWalletTransactionsMetadata.js +236 -236
  52. package/src/models/facility_departements.js +20 -20
  53. package/src/models/facility_payment_details.js +20 -20
  54. package/src/models/facilityasset.js +25 -25
  55. package/src/models/faq.js +18 -18
  56. package/src/models/gl_account_double_entries.js +25 -25
  57. package/src/models/gl_accounts.js +56 -56
  58. package/src/models/gl_entries.js +49 -49
  59. package/src/models/goodsReceivedNotes.js +115 -115
  60. package/src/models/guard.js +47 -47
  61. package/src/models/handover.js +246 -246
  62. package/src/models/invoice.js +336 -336
  63. package/src/models/item_inspection.js +67 -67
  64. package/src/models/leaseagreement.js +226 -226
  65. package/src/models/leasetemplate.js +17 -17
  66. package/src/models/levy.js +206 -206
  67. package/src/models/levy_invoice_settings.js +26 -26
  68. package/src/models/levycontract.js +168 -168
  69. package/src/models/levytype.js +23 -23
  70. package/src/models/maintenance_service_vendor.js +38 -38
  71. package/src/models/maintenance_services.js +17 -17
  72. package/src/models/maintenancerequisition.js +31 -31
  73. package/src/models/master_workplan.js +32 -32
  74. package/src/models/master_workplan_child.js +34 -34
  75. package/src/models/message.js +38 -38
  76. package/src/models/module.js +21 -21
  77. package/src/models/notification.js +44 -44
  78. package/src/models/paymentTermsMarks.js +19 -19
  79. package/src/models/penalty.js +76 -76
  80. package/src/models/pendingCredentials.js +32 -32
  81. package/src/models/powerMeterCommunicationProtocol.js +17 -17
  82. package/src/models/powerMeterCustomerAccount.js +78 -78
  83. package/src/models/powerMeterCustomerBand.js +14 -14
  84. package/src/models/powerMeterDailyReading.js +30 -30
  85. package/src/models/powerMeterGateways.js +37 -37
  86. package/src/models/powerMeterMonthlyReading.js +34 -34
  87. package/src/models/powerMeterPowerCharges.js +53 -53
  88. package/src/models/powerMeterSettings.js +138 -138
  89. package/src/models/powerMeterSingleDayReading.js +32 -32
  90. package/src/models/powerMeters.js +104 -104
  91. package/src/models/powerMetersManufacturer.js +14 -14
  92. package/src/models/power_meter_account.js +81 -81
  93. package/src/models/power_meter_command_logs.js +30 -30
  94. package/src/models/power_prepaid_credts.js +0 -0
  95. package/src/models/power_prepaid_debits.js +0 -50
  96. package/src/models/propertyManagerContract.js +556 -556
  97. package/src/models/propertyManagerRevenue.js +195 -195
  98. package/src/models/purchaseOrderInvoice.js +74 -74
  99. package/src/models/purchase_order.js +213 -213
  100. package/src/models/purchase_request.js +110 -110
  101. package/src/models/refresh_token.js +23 -23
  102. package/src/models/reminder.js +197 -197
  103. package/src/models/report.js +13 -13
  104. package/src/models/resident.js +121 -121
  105. package/src/models/rfq_details.js +131 -131
  106. package/src/models/rfq_response.js +153 -153
  107. package/src/models/service_charge_invoice_upload.js +42 -42
  108. package/src/models/service_charge_payments.js +27 -27
  109. package/src/models/servicerequest.js +55 -55
  110. package/src/models/settings.js +62 -62
  111. package/src/models/smart_meter_daily_consumption.js +44 -44
  112. package/src/models/sms_africastalking.js +20 -20
  113. package/src/models/sms_balance_notification.js +26 -26
  114. package/src/models/sms_meliora.js +20 -20
  115. package/src/models/staff.js +36 -36
  116. package/src/models/stocksandspare.js +161 -161
  117. package/src/models/suppliers.js +74 -74
  118. package/src/models/tickets.js +121 -121
  119. package/src/models/unitManagementTemplate.js +44 -44
  120. package/src/models/unitasset.js +25 -25
  121. package/src/models/units.js +117 -117
  122. package/src/models/user.js +186 -186
  123. package/src/models/valueaddedservices.js +79 -79
  124. package/src/models/vas_invoices_upload.js +50 -50
  125. package/src/models/vas_payments.js +24 -24
  126. package/src/models/vasinvoice.js +192 -192
  127. package/src/models/vasvendor.js +57 -57
  128. package/src/models/visitLog.js +95 -95
  129. package/src/models/visitor.js +67 -67
  130. package/src/models/waitlist.js +45 -45
  131. package/src/models/wallet.js +44 -44
  132. package/src/models/wallet_transactions.js +50 -50
  133. package/src/models/water_invoice.js +305 -305
  134. package/src/models/water_meter_Command_Queue.js +33 -33
  135. package/src/models/water_meter_account.js +82 -82
  136. package/src/models/water_meter_billing.js +58 -58
  137. package/src/models/water_meter_communication.js +17 -17
  138. package/src/models/water_meter_communication_logs.js +30 -30
  139. package/src/models/water_meter_concentrator.js +66 -66
  140. package/src/models/water_meter_daily_history.js +32 -32
  141. package/src/models/water_meter_iot_cards.js +34 -34
  142. package/src/models/water_meter_manufacturer.js +35 -35
  143. package/src/models/water_meter_monthly_history.js +36 -36
  144. package/src/models/water_meter_negative_amounts.js +39 -44
  145. package/src/models/water_meter_settings.js +227 -227
  146. package/src/models/water_meter_single_day_history.js +34 -34
  147. package/src/models/water_meter_size.js +15 -15
  148. package/src/models/water_meters.js +134 -134
  149. package/src/models/water_meters_delivery.js +76 -76
  150. package/src/models/water_prepaid_credit.js +47 -47
  151. package/src/models/water_prepaid_debit.js +50 -50
  152. package/src/models/workorder.js +49 -49
  153. package/src/models/facilityContractPricing.js +0 -51
  154. package/src/models/facilityInvoiceContract.js +0 -268
  155. package/src/models/power_meter_negative_balance.js +0 -44
  156. package/src/models/power_prepaid_credits.js +0 -47
@@ -1,306 +1,306 @@
1
- const mongoose = require('mongoose');
2
-
3
- const waterInvoiceSchema = new mongoose.Schema(
4
- {
5
- // Basic identifiers
6
- invoiceNumber: {
7
- type: String,
8
- required: true,
9
- unique: true
10
- },
11
- accountNumber: {
12
- type: String,
13
- required: true
14
- },
15
- unitName: {
16
- type: String,
17
- required: true,
18
- },
19
- yearMonth: {
20
- type: String,
21
- required: true,
22
- },
23
- facilityId: {
24
- type: mongoose.Schema.Types.ObjectId,
25
- required: true
26
- },
27
- customerId: {
28
- type: mongoose.Schema.Types.ObjectId,
29
- required: true
30
- },
31
- billingType: {
32
- type: String,
33
- enum: ['postpaid'],
34
- },
35
- balanceBroughtForward: {
36
- type: Number,
37
- default: 0
38
- },
39
-
40
- // PAYMENTS
41
- paymentMethods: {
42
- mobilePayment: {
43
- status: {
44
- type: Boolean,
45
- default: false
46
- },
47
- paymentId: {
48
- type: mongoose.Schema.Types.ObjectId,
49
- ref: 'FacilityPaymentDetails'
50
- }
51
- },
52
- bankPayment: {
53
- status: {
54
- type: Boolean,
55
- default: false
56
- },
57
- paymentId: {
58
- type: mongoose.Schema.Types.ObjectId,
59
- ref: 'BankDetails'
60
- }
61
- }
62
- },
63
-
64
- // Biller Address Information (added from WaterMeterSettings)
65
- billerAddress: {
66
- name: {
67
- type: String,
68
- required: [true, "Biller name is required"],
69
- trim: true,
70
- minlength: [1, "Biller name must be at least 1 character long"],
71
- },
72
- email: {
73
- type: String,
74
- required: [true, "Biller email is required"],
75
- trim: true,
76
- lowercase: true,
77
- validate: {
78
- validator: function (v) {
79
- return /^\w+([\.-]?\w+)@\w+([\.-]?\w+)(\.\w{2,3})+$/.test(v);
80
- },
81
- message: "Please enter a valid email address"
82
- }
83
- },
84
- phone: {
85
- type: String,
86
- required: [true, "Biller phone is required"],
87
- trim: true,
88
- },
89
- address: {
90
- type: String,
91
- required: [true, "Biller address is required"],
92
- trim: true,
93
- },
94
- city: {
95
- type: String,
96
- required: [true, "Biller city is required"],
97
- trim: true,
98
- }
99
- },
100
-
101
- // Dates
102
- dateIssued: {
103
- type: Date,
104
- default: Date.now
105
- },
106
- dueDate: {
107
- type: Date,
108
- required: true
109
- },
110
-
111
- // Meter & Consumption Details
112
- meterNumber: {
113
- type: String,
114
- required: true
115
- },
116
- meterReadings: {
117
- previousReading: {
118
- type: Number,
119
- required: true
120
- },
121
- currentReading: {
122
- type: Number,
123
- required: true
124
- },
125
- usage: {
126
- type: Number,
127
- required: true,
128
- }
129
- },
130
- consumptionPeriod: {
131
- startDate: {
132
- type: Date,
133
- required: true
134
- },
135
- endDate: {
136
- type: Date,
137
- required: true
138
- }
139
- },
140
-
141
- // Charges
142
- charges: {
143
- waterCharge: {
144
- type: Number,
145
- required: true
146
- },
147
- sewerCharge: {
148
- type: Number,
149
- default: 0
150
- },
151
- tax: {
152
- type: Number,
153
- default: 0
154
- },
155
- fixedCharge: {
156
- type: Number,
157
- default: 0
158
- },
159
- totalMonthlyBill: {
160
- type: Number,
161
- required: true
162
- }
163
- },
164
- amountPaid: {
165
- type: Number,
166
- default: 0
167
- },
168
- imageUrl: { type: String, trim: true },
169
-
170
- // Invoice Note & Status
171
- invoiceNote: {
172
- type: String,
173
- default: 'Payment is due within 10 days'
174
- },
175
- status: {
176
- type: String,
177
- required: true,
178
- enum: ['Pending', 'Paid', 'Partially Paid', 'Cancelled', 'Overdue', 'Unpaid'],
179
- default: 'Pending'
180
- },
181
-
182
- // Currency Info
183
- currency: {
184
- id: {
185
- type: mongoose.Schema.Types.ObjectId
186
- },
187
- name: {
188
- type: String,
189
- default: 'Kenyan Shilling'
190
- },
191
- code: {
192
- type: String,
193
- default: 'KES'
194
- },
195
- symbol: {
196
- type: String,
197
- default: 'KSh'
198
- }
199
- },
200
- notificationsSent: {
201
- type: {
202
- sms: {
203
- type: Boolean,
204
- default: false
205
- },
206
- email: {
207
- type: Boolean,
208
- default: false
209
- },
210
- sentAt: {
211
- type: Date,
212
- default: null
213
- },
214
- lastAttempt: {
215
- type: Date,
216
- default: null
217
- },
218
- attempts: {
219
- type: Number,
220
- default: 0
221
- },
222
- smsDetails: {
223
- type: {
224
- success: Boolean,
225
- error: String,
226
- sentAt: Date,
227
- phoneNumber: String
228
- },
229
- default: null
230
- },
231
- emailDetails: {
232
- type: {
233
- success: Boolean,
234
- error: String,
235
- sentAt: Date,
236
- emailAddress: String
237
- },
238
- default: null
239
- }
240
- },
241
- default: {
242
- sms: false,
243
- email: false,
244
- sentAt: null,
245
- lastAttempt: null,
246
- attempts: 0,
247
- smsDetails: null,
248
- emailDetails: null
249
- }
250
- },
251
-
252
- // Payment & Reconciliation
253
- reconciliationHistory: [
254
- {
255
- date: {
256
- type: Date,
257
- default: Date.now
258
- },
259
- amount: {
260
- type: Number,
261
- required: true
262
- },
263
- type: {
264
- type: String,
265
- default: 'Manual'
266
- },
267
- paymentReference: {
268
- type: String
269
- },
270
- paymentCompletion: {
271
- type: String,
272
- default: 'Completed'
273
- },
274
- sourceInvoice: {
275
- type: String
276
- },
277
- destinationInvoice: {
278
- type: String
279
- },
280
- notes: {
281
- type: String
282
- },
283
- remainingBalance: {
284
- type: Number
285
- }
286
- }
287
- ],
288
- },
289
- {
290
- timestamps: true
291
- }
292
- );
293
-
294
- waterInvoiceSchema.pre('save', function (next) {
295
- if (this.isModified('dueDate') || this.isNew) {
296
- const today = new Date();
297
- if (this.dueDate < today && this.status === 'Pending') {
298
- this.status = 'Overdue';
299
- }
300
- }
301
- next();
302
- });
303
-
304
- const WaterInvoice = mongoose.model('WaterInvoice', waterInvoiceSchema);
305
-
1
+ const mongoose = require('mongoose');
2
+
3
+ const waterInvoiceSchema = new mongoose.Schema(
4
+ {
5
+ // Basic identifiers
6
+ invoiceNumber: {
7
+ type: String,
8
+ required: true,
9
+ unique: true
10
+ },
11
+ accountNumber: {
12
+ type: String,
13
+ required: true
14
+ },
15
+ unitName: {
16
+ type: String,
17
+ required: true,
18
+ },
19
+ yearMonth: {
20
+ type: String,
21
+ required: true,
22
+ },
23
+ facilityId: {
24
+ type: mongoose.Schema.Types.ObjectId,
25
+ required: true
26
+ },
27
+ customerId: {
28
+ type: mongoose.Schema.Types.ObjectId,
29
+ required: true
30
+ },
31
+ billingType: {
32
+ type: String,
33
+ enum: ['postpaid'],
34
+ },
35
+ balanceBroughtForward: {
36
+ type: Number,
37
+ default: 0
38
+ },
39
+
40
+ // PAYMENTS
41
+ paymentMethods: {
42
+ mobilePayment: {
43
+ status: {
44
+ type: Boolean,
45
+ default: false
46
+ },
47
+ paymentId: {
48
+ type: mongoose.Schema.Types.ObjectId,
49
+ ref: 'FacilityPaymentDetails'
50
+ }
51
+ },
52
+ bankPayment: {
53
+ status: {
54
+ type: Boolean,
55
+ default: false
56
+ },
57
+ paymentId: {
58
+ type: mongoose.Schema.Types.ObjectId,
59
+ ref: 'BankDetails'
60
+ }
61
+ }
62
+ },
63
+
64
+ // Biller Address Information (added from WaterMeterSettings)
65
+ billerAddress: {
66
+ name: {
67
+ type: String,
68
+ required: [true, "Biller name is required"],
69
+ trim: true,
70
+ minlength: [1, "Biller name must be at least 1 character long"],
71
+ },
72
+ email: {
73
+ type: String,
74
+ required: [true, "Biller email is required"],
75
+ trim: true,
76
+ lowercase: true,
77
+ validate: {
78
+ validator: function (v) {
79
+ return /^\w+([\.-]?\w+)@\w+([\.-]?\w+)(\.\w{2,3})+$/.test(v);
80
+ },
81
+ message: "Please enter a valid email address"
82
+ }
83
+ },
84
+ phone: {
85
+ type: String,
86
+ required: [true, "Biller phone is required"],
87
+ trim: true,
88
+ },
89
+ address: {
90
+ type: String,
91
+ required: [true, "Biller address is required"],
92
+ trim: true,
93
+ },
94
+ city: {
95
+ type: String,
96
+ required: [true, "Biller city is required"],
97
+ trim: true,
98
+ }
99
+ },
100
+
101
+ // Dates
102
+ dateIssued: {
103
+ type: Date,
104
+ default: Date.now
105
+ },
106
+ dueDate: {
107
+ type: Date,
108
+ required: true
109
+ },
110
+
111
+ // Meter & Consumption Details
112
+ meterNumber: {
113
+ type: String,
114
+ required: true
115
+ },
116
+ meterReadings: {
117
+ previousReading: {
118
+ type: Number,
119
+ required: true
120
+ },
121
+ currentReading: {
122
+ type: Number,
123
+ required: true
124
+ },
125
+ usage: {
126
+ type: Number,
127
+ required: true,
128
+ }
129
+ },
130
+ consumptionPeriod: {
131
+ startDate: {
132
+ type: Date,
133
+ required: true
134
+ },
135
+ endDate: {
136
+ type: Date,
137
+ required: true
138
+ }
139
+ },
140
+
141
+ // Charges
142
+ charges: {
143
+ waterCharge: {
144
+ type: Number,
145
+ required: true
146
+ },
147
+ sewerCharge: {
148
+ type: Number,
149
+ default: 0
150
+ },
151
+ tax: {
152
+ type: Number,
153
+ default: 0
154
+ },
155
+ fixedCharge: {
156
+ type: Number,
157
+ default: 0
158
+ },
159
+ totalMonthlyBill: {
160
+ type: Number,
161
+ required: true
162
+ }
163
+ },
164
+ amountPaid: {
165
+ type: Number,
166
+ default: 0
167
+ },
168
+ imageUrl: { type: String, trim: true },
169
+
170
+ // Invoice Note & Status
171
+ invoiceNote: {
172
+ type: String,
173
+ default: 'Payment is due within 10 days'
174
+ },
175
+ status: {
176
+ type: String,
177
+ required: true,
178
+ enum: ['Pending', 'Paid', 'Partially Paid', 'Cancelled', 'Overdue', 'Unpaid'],
179
+ default: 'Pending'
180
+ },
181
+
182
+ // Currency Info
183
+ currency: {
184
+ id: {
185
+ type: mongoose.Schema.Types.ObjectId
186
+ },
187
+ name: {
188
+ type: String,
189
+ default: 'Kenyan Shilling'
190
+ },
191
+ code: {
192
+ type: String,
193
+ default: 'KES'
194
+ },
195
+ symbol: {
196
+ type: String,
197
+ default: 'KSh'
198
+ }
199
+ },
200
+ notificationsSent: {
201
+ type: {
202
+ sms: {
203
+ type: Boolean,
204
+ default: false
205
+ },
206
+ email: {
207
+ type: Boolean,
208
+ default: false
209
+ },
210
+ sentAt: {
211
+ type: Date,
212
+ default: null
213
+ },
214
+ lastAttempt: {
215
+ type: Date,
216
+ default: null
217
+ },
218
+ attempts: {
219
+ type: Number,
220
+ default: 0
221
+ },
222
+ smsDetails: {
223
+ type: {
224
+ success: Boolean,
225
+ error: String,
226
+ sentAt: Date,
227
+ phoneNumber: String
228
+ },
229
+ default: null
230
+ },
231
+ emailDetails: {
232
+ type: {
233
+ success: Boolean,
234
+ error: String,
235
+ sentAt: Date,
236
+ emailAddress: String
237
+ },
238
+ default: null
239
+ }
240
+ },
241
+ default: {
242
+ sms: false,
243
+ email: false,
244
+ sentAt: null,
245
+ lastAttempt: null,
246
+ attempts: 0,
247
+ smsDetails: null,
248
+ emailDetails: null
249
+ }
250
+ },
251
+
252
+ // Payment & Reconciliation
253
+ reconciliationHistory: [
254
+ {
255
+ date: {
256
+ type: Date,
257
+ default: Date.now
258
+ },
259
+ amount: {
260
+ type: Number,
261
+ required: true
262
+ },
263
+ type: {
264
+ type: String,
265
+ default: 'Manual'
266
+ },
267
+ paymentReference: {
268
+ type: String
269
+ },
270
+ paymentCompletion: {
271
+ type: String,
272
+ default: 'Completed'
273
+ },
274
+ sourceInvoice: {
275
+ type: String
276
+ },
277
+ destinationInvoice: {
278
+ type: String
279
+ },
280
+ notes: {
281
+ type: String
282
+ },
283
+ remainingBalance: {
284
+ type: Number
285
+ }
286
+ }
287
+ ],
288
+ },
289
+ {
290
+ timestamps: true
291
+ }
292
+ );
293
+
294
+ waterInvoiceSchema.pre('save', function (next) {
295
+ if (this.isModified('dueDate') || this.isNew) {
296
+ const today = new Date();
297
+ if (this.dueDate < today && this.status === 'Pending') {
298
+ this.status = 'Overdue';
299
+ }
300
+ }
301
+ next();
302
+ });
303
+
304
+ const WaterInvoice = mongoose.model('WaterInvoice', waterInvoiceSchema);
305
+
306
306
  module.exports = WaterInvoice;
@@ -1,33 +1,33 @@
1
- const mongoose = require('mongoose');
2
-
3
- const meterCommandQueueSchema = new mongoose.Schema({
4
- meterNumber: {
5
- type: String,
6
- required: true
7
- },
8
- concentratorSerialNumber: {
9
- type: String,
10
- required: true
11
- },
12
- commandType: {
13
- type: String,
14
- enum: ['open', 'close', 'read'],
15
- required: true
16
- },
17
- status: {
18
- type: String,
19
- enum: ['pending', 'sent', 'acknowledged', 'failed'],
20
- default: 'pending'
21
- },
22
- retryCount: {
23
- type: Number,
24
- default: 0
25
- },
26
- sentAt: {
27
- type: Date
28
- }
29
- }, { timestamps: true });
30
-
31
- const MeterCommandQueue = mongoose.model('MeterCommandQueue', meterCommandQueueSchema);
32
-
33
- module.exports = MeterCommandQueue;
1
+ const mongoose = require('mongoose');
2
+
3
+ const meterCommandQueueSchema = new mongoose.Schema({
4
+ meterNumber: {
5
+ type: String,
6
+ required: true
7
+ },
8
+ concentratorSerialNumber: {
9
+ type: String,
10
+ required: true
11
+ },
12
+ commandType: {
13
+ type: String,
14
+ enum: ['open', 'close', 'read'],
15
+ required: true
16
+ },
17
+ status: {
18
+ type: String,
19
+ enum: ['pending', 'sent', 'acknowledged', 'failed'],
20
+ default: 'pending'
21
+ },
22
+ retryCount: {
23
+ type: Number,
24
+ default: 0
25
+ },
26
+ sentAt: {
27
+ type: Date
28
+ }
29
+ }, { timestamps: true });
30
+
31
+ const MeterCommandQueue = mongoose.model('MeterCommandQueue', meterCommandQueueSchema);
32
+
33
+ module.exports = MeterCommandQueue;