payservedb 7.0.0 → 7.0.2

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