payservedb 7.0.6 → 7.0.8

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 +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 +283 -513
  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 +44 -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 +223 -223
  51. package/src/models/facilityInvoiceRecipient.js +32 -32
  52. package/src/models/facilityWalletTransactionsMetadata.js +236 -236
  53. package/src/models/facility_departements.js +20 -20
  54. package/src/models/facility_payment_details.js +20 -20
  55. package/src/models/facilityasset.js +25 -25
  56. package/src/models/faq.js +18 -18
  57. package/src/models/gl_account_double_entries.js +25 -25
  58. package/src/models/gl_accounts.js +56 -56
  59. package/src/models/gl_entries.js +49 -49
  60. package/src/models/goodsReceivedNotes.js +115 -115
  61. package/src/models/guard.js +47 -47
  62. package/src/models/handover.js +246 -246
  63. package/src/models/invoice.js +336 -336
  64. package/src/models/item_inspection.js +67 -67
  65. package/src/models/leaseagreement.js +226 -226
  66. package/src/models/leasetemplate.js +17 -17
  67. package/src/models/levy.js +206 -206
  68. package/src/models/levy_invoice_settings.js +26 -26
  69. package/src/models/levycontract.js +168 -168
  70. package/src/models/levytype.js +23 -23
  71. package/src/models/maintenance_service_vendor.js +38 -38
  72. package/src/models/maintenance_services.js +17 -17
  73. package/src/models/maintenancerequisition.js +31 -31
  74. package/src/models/master_workplan.js +32 -32
  75. package/src/models/master_workplan_child.js +34 -34
  76. package/src/models/message.js +38 -38
  77. package/src/models/module.js +21 -21
  78. package/src/models/notification.js +44 -44
  79. package/src/models/paymentTermsMarks.js +19 -19
  80. package/src/models/penalty.js +76 -76
  81. package/src/models/pendingCredentials.js +32 -32
  82. package/src/models/powerMeterCommunicationProtocol.js +17 -17
  83. package/src/models/powerMeterCustomerAccount.js +78 -78
  84. package/src/models/powerMeterCustomerBand.js +14 -14
  85. package/src/models/powerMeterDailyReading.js +30 -30
  86. package/src/models/powerMeterGateways.js +37 -37
  87. package/src/models/powerMeterMonthlyReading.js +34 -34
  88. package/src/models/powerMeterPowerCharges.js +53 -53
  89. package/src/models/powerMeterSettings.js +138 -138
  90. package/src/models/powerMeterSingleDayReading.js +32 -32
  91. package/src/models/powerMeters.js +104 -104
  92. package/src/models/powerMetersManufacturer.js +14 -14
  93. package/src/models/power_meter_account.js +81 -81
  94. package/src/models/power_meter_command_logs.js +30 -30
  95. package/src/models/power_meter_command_queue.js +33 -33
  96. package/src/models/power_meter_negative_balance.js +44 -44
  97. package/src/models/power_prepaid_credits.js +47 -47
  98. package/src/models/power_prepaid_debits.js +50 -50
  99. package/src/models/propertyManagerContract.js +556 -556
  100. package/src/models/propertyManagerRevenue.js +195 -195
  101. package/src/models/purchaseOrderInvoice.js +74 -74
  102. package/src/models/purchase_order.js +213 -213
  103. package/src/models/purchase_request.js +110 -110
  104. package/src/models/refresh_token.js +23 -23
  105. package/src/models/reminder.js +197 -197
  106. package/src/models/report.js +13 -13
  107. package/src/models/resident.js +121 -121
  108. package/src/models/rfq_details.js +131 -131
  109. package/src/models/rfq_response.js +153 -153
  110. package/src/models/service_charge_invoice_upload.js +42 -42
  111. package/src/models/service_charge_payments.js +27 -27
  112. package/src/models/servicerequest.js +55 -55
  113. package/src/models/settings.js +62 -62
  114. package/src/models/smart_meter_daily_consumption.js +44 -44
  115. package/src/models/sms_africastalking.js +20 -20
  116. package/src/models/sms_balance_notification.js +26 -26
  117. package/src/models/sms_meliora.js +20 -20
  118. package/src/models/staff.js +36 -36
  119. package/src/models/stocksandspare.js +161 -161
  120. package/src/models/suppliers.js +74 -74
  121. package/src/models/tickets.js +121 -121
  122. package/src/models/unitManagementTemplate.js +44 -44
  123. package/src/models/unitasset.js +25 -25
  124. package/src/models/units.js +117 -117
  125. package/src/models/user.js +186 -186
  126. package/src/models/valueaddedservices.js +79 -79
  127. package/src/models/vas_invoices_upload.js +50 -50
  128. package/src/models/vas_payments.js +24 -24
  129. package/src/models/vasinvoice.js +192 -192
  130. package/src/models/vasvendor.js +57 -57
  131. package/src/models/visitLog.js +95 -95
  132. package/src/models/visitor.js +67 -67
  133. package/src/models/waitlist.js +45 -45
  134. package/src/models/wallet.js +44 -44
  135. package/src/models/wallet_transactions.js +50 -50
  136. package/src/models/water_invoice.js +305 -305
  137. package/src/models/water_meter_Command_Queue.js +33 -33
  138. package/src/models/water_meter_account.js +82 -82
  139. package/src/models/water_meter_billing.js +58 -58
  140. package/src/models/water_meter_communication.js +17 -17
  141. package/src/models/water_meter_communication_logs.js +39 -39
  142. package/src/models/water_meter_concentrator.js +66 -66
  143. package/src/models/water_meter_daily_history.js +32 -32
  144. package/src/models/water_meter_high_risk.js +36 -36
  145. package/src/models/water_meter_iot_cards.js +34 -34
  146. package/src/models/water_meter_manufacturer.js +35 -35
  147. package/src/models/water_meter_monthly_history.js +36 -36
  148. package/src/models/water_meter_negative_amounts.js +44 -44
  149. package/src/models/water_meter_settings.js +227 -227
  150. package/src/models/water_meter_single_day_history.js +34 -34
  151. package/src/models/water_meter_size.js +15 -15
  152. package/src/models/water_meters.js +134 -134
  153. package/src/models/water_meters_delivery.js +76 -76
  154. package/src/models/water_prepaid_credit.js +47 -47
  155. package/src/models/water_prepaid_debit.js +50 -50
  156. package/src/models/workorder.js +49 -49
@@ -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;