payservedb 6.2.9 → 6.3.1

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 (136) hide show
  1. package/.env +2 -2
  2. package/index.js +272 -272
  3. package/package.json +17 -17
  4. package/src/models/account.js +35 -35
  5. package/src/models/apilog.js +18 -18
  6. package/src/models/approvalsWorkflows.js +49 -49
  7. package/src/models/archivedapilog.js +18 -18
  8. package/src/models/archivedauditlog.js +83 -83
  9. package/src/models/asset.js +34 -34
  10. package/src/models/assetsAssignment.js +64 -64
  11. package/src/models/auditlog.js +83 -83
  12. package/src/models/bankdetails.js +40 -40
  13. package/src/models/billerAddress.js +119 -119
  14. package/src/models/booking_invoice.js +151 -151
  15. package/src/models/bookinganalytics.js +63 -63
  16. package/src/models/bookingconfig.js +45 -45
  17. package/src/models/bookingproperty.js +112 -112
  18. package/src/models/bookingreservation.js +192 -192
  19. package/src/models/bookingrevenuerecord.js +84 -84
  20. package/src/models/budget.js +95 -95
  21. package/src/models/budgetCategory.js +19 -19
  22. package/src/models/campaigns.js +72 -72
  23. package/src/models/cashpayment.js +264 -264
  24. package/src/models/combinedUnits.js +62 -62
  25. package/src/models/common_area_electricity.js +38 -38
  26. package/src/models/common_area_generator.js +41 -41
  27. package/src/models/common_area_utility_alert.js +37 -37
  28. package/src/models/common_area_water.js +39 -39
  29. package/src/models/communication_status.js +33 -33
  30. package/src/models/company.js +53 -53
  31. package/src/models/country_tax.js +42 -42
  32. package/src/models/currency_settings.js +39 -39
  33. package/src/models/customer.js +208 -208
  34. package/src/models/default_payment_details.js +17 -17
  35. package/src/models/deliveryTimeMarks.js +18 -18
  36. package/src/models/dutyroster.js +107 -107
  37. package/src/models/email.js +37 -37
  38. package/src/models/email_sms_queue.js +61 -61
  39. package/src/models/entry_exit.js +53 -53
  40. package/src/models/expense.js +99 -99
  41. package/src/models/expense_category.js +45 -45
  42. package/src/models/facility.js +61 -61
  43. package/src/models/facilityWalletTransactionsMetadata.js +239 -239
  44. package/src/models/facility_departements.js +20 -20
  45. package/src/models/facility_payment_details.js +20 -20
  46. package/src/models/facilityasset.js +25 -25
  47. package/src/models/faq.js +18 -18
  48. package/src/models/gl_account_double_entries.js +25 -25
  49. package/src/models/gl_accounts.js +56 -56
  50. package/src/models/gl_entries.js +49 -49
  51. package/src/models/goodsReceivedNotes.js +115 -115
  52. package/src/models/guard.js +47 -47
  53. package/src/models/handover.js +246 -246
  54. package/src/models/invoice.js +336 -336
  55. package/src/models/item_inspection.js +67 -67
  56. package/src/models/leaseagreement.js +221 -221
  57. package/src/models/leasetemplate.js +17 -17
  58. package/src/models/levy.js +206 -206
  59. package/src/models/levy_invoice_settings.js +26 -26
  60. package/src/models/levycontract.js +117 -117
  61. package/src/models/levytype.js +23 -23
  62. package/src/models/maintenance_service_vendor.js +38 -38
  63. package/src/models/maintenance_services.js +17 -17
  64. package/src/models/maintenancerequisition.js +31 -31
  65. package/src/models/message.js +38 -38
  66. package/src/models/module.js +21 -21
  67. package/src/models/notification.js +44 -44
  68. package/src/models/paymentTermsMarks.js +19 -19
  69. package/src/models/penalty.js +76 -76
  70. package/src/models/pendingCredentials.js +32 -32
  71. package/src/models/powerMeterCustomerAccount.js +78 -78
  72. package/src/models/powerMeterCustomerBand.js +14 -14
  73. package/src/models/powerMeterDailyReading.js +30 -30
  74. package/src/models/powerMeterMonthlyReading.js +34 -34
  75. package/src/models/powerMeterPowerCharges.js +53 -53
  76. package/src/models/powerMeterSettings.js +138 -138
  77. package/src/models/powerMeterSingleDayReading.js +32 -32
  78. package/src/models/powerMeters.js +65 -65
  79. package/src/models/powerMetersManufacturer.js +14 -14
  80. package/src/models/propertyManagerContract.js +556 -556
  81. package/src/models/propertyManagerRevenue.js +195 -195
  82. package/src/models/purchaseOrderInvoice.js +74 -74
  83. package/src/models/purchase_order.js +213 -202
  84. package/src/models/purchase_request.js +110 -110
  85. package/src/models/refresh_token.js +23 -23
  86. package/src/models/reminder.js +197 -197
  87. package/src/models/report.js +13 -13
  88. package/src/models/resident.js +121 -121
  89. package/src/models/rfq_details.js +131 -131
  90. package/src/models/rfq_response.js +153 -153
  91. package/src/models/service_charge_invoice_upload.js +42 -42
  92. package/src/models/service_charge_payments.js +27 -27
  93. package/src/models/servicerequest.js +55 -55
  94. package/src/models/settings.js +62 -62
  95. package/src/models/smart_meter_daily_consumption.js +44 -44
  96. package/src/models/sms_africastalking.js +20 -20
  97. package/src/models/sms_balance_notification.js +26 -26
  98. package/src/models/sms_meliora.js +20 -20
  99. package/src/models/staff.js +36 -36
  100. package/src/models/stocksandspare.js +34 -34
  101. package/src/models/suppliers.js +74 -74
  102. package/src/models/tickets.js +121 -121
  103. package/src/models/unitManagementTemplate.js +44 -44
  104. package/src/models/unitasset.js +25 -25
  105. package/src/models/units.js +112 -112
  106. package/src/models/user.js +186 -186
  107. package/src/models/valueaddedservices.js +79 -79
  108. package/src/models/vas_invoices_upload.js +50 -50
  109. package/src/models/vas_payments.js +24 -24
  110. package/src/models/vasinvoice.js +192 -192
  111. package/src/models/vasvendor.js +57 -57
  112. package/src/models/visitLog.js +86 -86
  113. package/src/models/visitor.js +67 -67
  114. package/src/models/waitlist.js +45 -45
  115. package/src/models/wallet.js +44 -44
  116. package/src/models/wallet_transactions.js +50 -50
  117. package/src/models/water_invoice.js +231 -193
  118. package/src/models/water_meter_Command_Queue.js +33 -33
  119. package/src/models/water_meter_account.js +78 -78
  120. package/src/models/water_meter_billing.js +58 -58
  121. package/src/models/water_meter_communication.js +17 -17
  122. package/src/models/water_meter_communication_logs.js +30 -30
  123. package/src/models/water_meter_concentrator.js +66 -66
  124. package/src/models/water_meter_daily_history.js +32 -32
  125. package/src/models/water_meter_iot_cards.js +34 -34
  126. package/src/models/water_meter_manufacturer.js +35 -35
  127. package/src/models/water_meter_monthly_history.js +36 -36
  128. package/src/models/water_meter_negative_amounts.js +38 -38
  129. package/src/models/water_meter_settings.js +150 -114
  130. package/src/models/water_meter_single_day_history.js +34 -34
  131. package/src/models/water_meter_size.js +15 -15
  132. package/src/models/water_meters.js +123 -123
  133. package/src/models/water_meters_delivery.js +76 -76
  134. package/src/models/water_prepaid_credit.js +47 -47
  135. package/src/models/water_prepaid_debit.js +50 -50
  136. package/src/models/workorder.js +49 -49
@@ -1,39 +1,39 @@
1
- const mongoose = require('mongoose');
2
-
3
- const negativeBalanceSchema = new mongoose.Schema({
4
- customerId: {
5
- type: mongoose.Schema.Types.ObjectId,
6
- ref: 'Customer',
7
- required: true
8
- },
9
- accountId: {
10
- type: mongoose.Schema.Types.ObjectId,
11
- ref: 'WaterMeterAccount',
12
- required: true
13
- },
14
- customerName: {
15
- type: String,
16
- required: true,
17
- trim: true
18
- },
19
- meterNumber: {
20
- type: String,
21
- required: true,
22
- trim: true
23
- },
24
- amount: {
25
- type: Number,
26
- required: true
27
- },
28
- dateRecorded: {
29
- type: Date,
30
- required: true,
31
- default: Date.now
32
- }
33
- }, {
34
- timestamps: true
35
- });
36
-
37
- const NegativeBalance = mongoose.model('NegativeBalance', negativeBalanceSchema);
38
-
1
+ const mongoose = require('mongoose');
2
+
3
+ const negativeBalanceSchema = new mongoose.Schema({
4
+ customerId: {
5
+ type: mongoose.Schema.Types.ObjectId,
6
+ ref: 'Customer',
7
+ required: true
8
+ },
9
+ accountId: {
10
+ type: mongoose.Schema.Types.ObjectId,
11
+ ref: 'WaterMeterAccount',
12
+ required: true
13
+ },
14
+ customerName: {
15
+ type: String,
16
+ required: true,
17
+ trim: true
18
+ },
19
+ meterNumber: {
20
+ type: String,
21
+ required: true,
22
+ trim: true
23
+ },
24
+ amount: {
25
+ type: Number,
26
+ required: true
27
+ },
28
+ dateRecorded: {
29
+ type: Date,
30
+ required: true,
31
+ default: Date.now
32
+ }
33
+ }, {
34
+ timestamps: true
35
+ });
36
+
37
+ const NegativeBalance = mongoose.model('NegativeBalance', negativeBalanceSchema);
38
+
39
39
  module.exports = NegativeBalance;
@@ -1,115 +1,151 @@
1
- const mongoose = require('mongoose');
2
-
3
- const waterMeterSettingsSchema = new mongoose.Schema({
4
- facilityId: {
5
- type: mongoose.Schema.Types.ObjectId,
6
- ref: 'Facility',
7
- required: true
8
- },
9
- minAmount: {
10
- type: Number,
11
- required: true,
12
- default: 1
13
- },
14
- maxAmount: {
15
- type: Number,
16
- required: true,
17
- default: 10000
18
- },
19
- gracePeriod: {
20
- type: Number,
21
- required: true,
22
- default: 10
23
- },
24
- invoiceDay: {
25
- type: Number,
26
- required: true,
27
- min: 0,
28
- max: 30,
29
- default: 3
30
- },
31
- enforcePayment: {
32
- type: String,
33
- enum: ['yes', 'no'],
34
- required: true,
35
- default: 'no'
36
- },
37
- minimumPaymentAmount: {
38
- type: Number,
39
- required: true,
40
- default: 0
41
- },
42
- tariff: {
43
- type: String,
44
- enum: ['yes', 'no'],
45
- required: true,
46
- default: 'no'
47
- },
48
- tariffAmount: {
49
- type: Number,
50
- required: true,
51
- default: 0
52
- },
53
- tariffAmountSmart: {
54
- type: Number,
55
- default: 0
56
- },
57
- fixedTariffAmount: {
58
- type: Number,
59
- required: true,
60
- default: 0
61
- },
62
- meterLoan: {
63
- type: Number,
64
- required: true,
65
- default: 0
66
- },
67
- notifications: {
68
- type: Boolean,
69
- default: false
70
- },
71
- dailyNotifications: {
72
- type: Boolean,
73
- default: false
74
- },
75
- weeklyNotifications: {
76
- type: Boolean,
77
- default: false
78
- },
79
- allNotifications: {
80
- type: Boolean,
81
- default: false
82
- },
83
- glAccounts: {
84
- invoice: {
85
- debit: {
86
- type: mongoose.Schema.Types.ObjectId,
87
- ref: "GLAccount",
88
- required: false,
89
- },
90
- credit: {
91
- type: mongoose.Schema.Types.ObjectId,
92
- ref: "GLAccount",
93
- required: false,
94
- }
95
- },
96
- payment: {
97
- debit: {
98
- type: mongoose.Schema.Types.ObjectId,
99
- ref: "GLAccount",
100
- required: false,
101
- },
102
- credit: {
103
- type: mongoose.Schema.Types.ObjectId,
104
- ref: "GLAccount",
105
- required: false,
106
- }
107
- }
108
- },
109
- }, {
110
- timestamps: true
111
- });
112
-
113
- const WaterMeterSettings = mongoose.model('WaterMeterSettings', waterMeterSettingsSchema);
114
-
1
+ const mongoose = require('mongoose');
2
+
3
+ const waterMeterSettingsSchema = new mongoose.Schema({
4
+ facilityId: {
5
+ type: mongoose.Schema.Types.ObjectId,
6
+ ref: 'Facility',
7
+ required: true
8
+ },
9
+ minAmount: {
10
+ type: Number,
11
+ required: true,
12
+ default: 1
13
+ },
14
+ maxAmount: {
15
+ type: Number,
16
+ required: true,
17
+ default: 10000
18
+ },
19
+ gracePeriod: {
20
+ type: Number,
21
+ required: true,
22
+ default: 10
23
+ },
24
+ invoiceDay: {
25
+ type: Number,
26
+ required: true,
27
+ min: 0,
28
+ max: 30,
29
+ default: 3
30
+ },
31
+ enforcePayment: {
32
+ type: String,
33
+ enum: ['yes', 'no'],
34
+ required: true,
35
+ default: 'no'
36
+ },
37
+ minimumPaymentAmount: {
38
+ type: Number,
39
+ required: true,
40
+ default: 0
41
+ },
42
+ tariff: {
43
+ type: String,
44
+ enum: ['yes', 'no'],
45
+ required: true,
46
+ default: 'no'
47
+ },
48
+ tariffAmount: {
49
+ type: Number,
50
+ required: true,
51
+ default: 0
52
+ },
53
+ tariffAmountSmart: {
54
+ type: Number,
55
+ default: 0
56
+ },
57
+ fixedTariffAmount: {
58
+ type: Number,
59
+ required: true,
60
+ default: 0
61
+ },
62
+ meterLoan: {
63
+ type: Number,
64
+ required: true,
65
+ default: 0
66
+ },
67
+ notifications: {
68
+ type: Boolean,
69
+ default: false
70
+ },
71
+ dailyNotifications: {
72
+ type: Boolean,
73
+ default: false
74
+ },
75
+ weeklyNotifications: {
76
+ type: Boolean,
77
+ default: false
78
+ },
79
+ allNotifications: {
80
+ type: Boolean,
81
+ default: false
82
+ },
83
+ // Biller Address Information for Invoice Generation
84
+ billerAddress: {
85
+ name: {
86
+ type: String,
87
+ required: [true, "Biller name is required"],
88
+ trim: true,
89
+ minlength: [1, "Biller name must be at least 1 character long"],
90
+ },
91
+ email: {
92
+ type: String,
93
+ required: [true, "Biller email is required"],
94
+ trim: true,
95
+ lowercase: true,
96
+ validate: {
97
+ validator: function (v) {
98
+ return /^\w+([\.-]?\w+)@\w+([\.-]?\w+)(\.\w{2,3})+$/.test(v);
99
+ },
100
+ message: "Please enter a valid email address"
101
+ }
102
+ },
103
+ phone: {
104
+ type: String,
105
+ required: [true, "Biller phone is required"],
106
+ trim: true,
107
+ },
108
+ address: {
109
+ type: String,
110
+ required: [true, "Biller address is required"],
111
+ trim: true,
112
+ },
113
+ city: {
114
+ type: String,
115
+ required: [true, "Biller city is required"],
116
+ trim: true,
117
+ }
118
+ },
119
+ glAccounts: {
120
+ invoice: {
121
+ debit: {
122
+ type: mongoose.Schema.Types.ObjectId,
123
+ ref: "GLAccount",
124
+ required: false,
125
+ },
126
+ credit: {
127
+ type: mongoose.Schema.Types.ObjectId,
128
+ ref: "GLAccount",
129
+ required: false,
130
+ }
131
+ },
132
+ payment: {
133
+ debit: {
134
+ type: mongoose.Schema.Types.ObjectId,
135
+ ref: "GLAccount",
136
+ required: false,
137
+ },
138
+ credit: {
139
+ type: mongoose.Schema.Types.ObjectId,
140
+ ref: "GLAccount",
141
+ required: false,
142
+ }
143
+ }
144
+ },
145
+ }, {
146
+ timestamps: true
147
+ });
148
+
149
+ const WaterMeterSettings = mongoose.model('WaterMeterSettings', waterMeterSettingsSchema);
150
+
115
151
  module.exports = WaterMeterSettings;
@@ -1,35 +1,35 @@
1
- const mongoose = require('mongoose');
2
-
3
- const singleDayWaterMeterHistorySchema = new mongoose.Schema({
4
- meterId: {
5
- type: mongoose.Schema.Types.ObjectId,
6
- ref: 'WaterMeter',
7
- required: true,
8
- index: true
9
- },
10
- date: {
11
- type: String,
12
- required: true
13
- },
14
- reading: {
15
- type: Number,
16
- required: true,
17
- min: 0
18
- },
19
- status: {
20
- type: String,
21
- enum: ['opened', 'closed', 'maintenance', 'faulty'],
22
- default: 'opened',
23
- },
24
- time: {
25
- type: String,
26
- required: true
27
- }
28
- }, {
29
- timestamps: true
30
- });
31
-
32
- singleDayWaterMeterHistorySchema.index({ meterId: 1, date: 1 });
33
- const SingleDayWaterMeterHistory = mongoose.model('SingleDayWaterMeterHistory', singleDayWaterMeterHistorySchema);
34
-
1
+ const mongoose = require('mongoose');
2
+
3
+ const singleDayWaterMeterHistorySchema = new mongoose.Schema({
4
+ meterId: {
5
+ type: mongoose.Schema.Types.ObjectId,
6
+ ref: 'WaterMeter',
7
+ required: true,
8
+ index: true
9
+ },
10
+ date: {
11
+ type: String,
12
+ required: true
13
+ },
14
+ reading: {
15
+ type: Number,
16
+ required: true,
17
+ min: 0
18
+ },
19
+ status: {
20
+ type: String,
21
+ enum: ['opened', 'closed', 'maintenance', 'faulty'],
22
+ default: 'opened',
23
+ },
24
+ time: {
25
+ type: String,
26
+ required: true
27
+ }
28
+ }, {
29
+ timestamps: true
30
+ });
31
+
32
+ singleDayWaterMeterHistorySchema.index({ meterId: 1, date: 1 });
33
+ const SingleDayWaterMeterHistory = mongoose.model('SingleDayWaterMeterHistory', singleDayWaterMeterHistorySchema);
34
+
35
35
  module.exports = SingleDayWaterMeterHistory;
@@ -1,16 +1,16 @@
1
- const mongoose = require('mongoose');
2
-
3
- const meterSizeSchema = new mongoose.Schema({
4
- code: {
5
- type: String,
6
- required: true,
7
- unique: true,
8
- trim: true, // Example: DN-15, DN-20, etc.
9
- }
10
- }, {
11
- timestamps: true
12
- });
13
-
14
- const MeterSize = mongoose.model('MeterSize', meterSizeSchema);
15
-
1
+ const mongoose = require('mongoose');
2
+
3
+ const meterSizeSchema = new mongoose.Schema({
4
+ code: {
5
+ type: String,
6
+ required: true,
7
+ unique: true,
8
+ trim: true, // Example: DN-15, DN-20, etc.
9
+ }
10
+ }, {
11
+ timestamps: true
12
+ });
13
+
14
+ const MeterSize = mongoose.model('MeterSize', meterSizeSchema);
15
+
16
16
  module.exports = MeterSize;
@@ -1,124 +1,124 @@
1
- const mongoose = require('mongoose');
2
-
3
- const waterMeterSchema = new mongoose.Schema({
4
- meterType: {
5
- type: String,
6
- required: true,
7
- enum: ['analog', 'smart']
8
- },
9
- meterNumber: {
10
- type: String,
11
- required: true,
12
- unique: true,
13
- trim: true,
14
- index: true
15
- },
16
- serialNumber: {
17
- type: String,
18
- required: true,
19
- unique: true,
20
- trim: true,
21
- index: true
22
- },
23
- accountNumber: {
24
- type: String,
25
- required: true,
26
- unique: true,
27
- trim: true
28
- },
29
- facilityId: {
30
- type: mongoose.Schema.Types.ObjectId,
31
- ref: 'Facility',
32
- },
33
- unitId: {
34
- type: mongoose.Schema.Types.ObjectId,
35
- ref: 'Unit',
36
- },
37
- customerId: {
38
- type: mongoose.Schema.Types.ObjectId,
39
- ref: 'Customer',
40
- },
41
- manufacturer: {
42
- type: String,
43
- required: true,
44
- },
45
- protocol: {
46
- type: String,
47
- required: true,
48
- },
49
- size: {
50
- type: String,
51
- required: true,
52
- },
53
- initialReading: {
54
- type: Number,
55
- required: true,
56
- min: 0,
57
- default: 0
58
- },
59
- previousReading: {
60
- type: Number,
61
- min: 0,
62
- },
63
- currentReading: {
64
- type: Number,
65
- min: 0,
66
- default: 0
67
- },
68
- lastReadingDate: {
69
- type: Date,
70
- default: Date.now
71
- },
72
- status: {
73
- type: String,
74
- required: true,
75
- enum: ['opened', 'closed', 'maintenance', 'faulty'],
76
- default: 'opened',
77
- },
78
- installationStatus: {
79
- type: String,
80
- required: true,
81
- enum: ['installed', 'not installed'],
82
- default: 'installed',
83
- },
84
- customerType: {
85
- type: String,
86
- enum: ['postpaid', 'prepaid'],
87
- },
88
- isInstalled: {
89
- type: Boolean,
90
- default: false
91
- },
92
- enforcement: {
93
- type: Boolean,
94
- default: false
95
- },
96
- concentratorSerialNumber: {
97
- type: String
98
- },
99
- imageUrl: {
100
- type: String,
101
- trim: true
102
- },
103
- valveType: { // Specific to smart meters
104
- type: String,
105
- enum: ['automatic', 'manual'],
106
- default: 'automatic'
107
- },
108
- accountBalance: { // Specific to smart meters
109
- type: Number,
110
- default: 0
111
- },
112
- negativeBalance: { // Specific to smart meters
113
- type: Number,
114
- default: 0
115
- },
116
- }, {
117
- timestamps: true
118
- });
119
-
120
- waterMeterSchema.index({ meterNumber: 1, status: 1 });
121
-
122
- const WaterMeter = mongoose.model('WaterMeter', waterMeterSchema);
123
-
1
+ const mongoose = require('mongoose');
2
+
3
+ const waterMeterSchema = new mongoose.Schema({
4
+ meterType: {
5
+ type: String,
6
+ required: true,
7
+ enum: ['analog', 'smart']
8
+ },
9
+ meterNumber: {
10
+ type: String,
11
+ required: true,
12
+ unique: true,
13
+ trim: true,
14
+ index: true
15
+ },
16
+ serialNumber: {
17
+ type: String,
18
+ required: true,
19
+ unique: true,
20
+ trim: true,
21
+ index: true
22
+ },
23
+ accountNumber: {
24
+ type: String,
25
+ required: true,
26
+ unique: true,
27
+ trim: true
28
+ },
29
+ facilityId: {
30
+ type: mongoose.Schema.Types.ObjectId,
31
+ ref: 'Facility',
32
+ },
33
+ unitId: {
34
+ type: mongoose.Schema.Types.ObjectId,
35
+ ref: 'Unit',
36
+ },
37
+ customerId: {
38
+ type: mongoose.Schema.Types.ObjectId,
39
+ ref: 'Customer',
40
+ },
41
+ manufacturer: {
42
+ type: String,
43
+ required: true,
44
+ },
45
+ protocol: {
46
+ type: String,
47
+ required: true,
48
+ },
49
+ size: {
50
+ type: String,
51
+ required: true,
52
+ },
53
+ initialReading: {
54
+ type: Number,
55
+ required: true,
56
+ min: 0,
57
+ default: 0
58
+ },
59
+ previousReading: {
60
+ type: Number,
61
+ min: 0,
62
+ },
63
+ currentReading: {
64
+ type: Number,
65
+ min: 0,
66
+ default: 0
67
+ },
68
+ lastReadingDate: {
69
+ type: Date,
70
+ default: Date.now
71
+ },
72
+ status: {
73
+ type: String,
74
+ required: true,
75
+ enum: ['opened', 'closed', 'maintenance', 'faulty'],
76
+ default: 'opened',
77
+ },
78
+ installationStatus: {
79
+ type: String,
80
+ required: true,
81
+ enum: ['installed', 'not installed'],
82
+ default: 'installed',
83
+ },
84
+ customerType: {
85
+ type: String,
86
+ enum: ['postpaid', 'prepaid'],
87
+ },
88
+ isInstalled: {
89
+ type: Boolean,
90
+ default: false
91
+ },
92
+ enforcement: {
93
+ type: Boolean,
94
+ default: false
95
+ },
96
+ concentratorSerialNumber: {
97
+ type: String
98
+ },
99
+ imageUrl: {
100
+ type: String,
101
+ trim: true
102
+ },
103
+ valveType: { // Specific to smart meters
104
+ type: String,
105
+ enum: ['automatic', 'manual'],
106
+ default: 'automatic'
107
+ },
108
+ accountBalance: { // Specific to smart meters
109
+ type: Number,
110
+ default: 0
111
+ },
112
+ negativeBalance: { // Specific to smart meters
113
+ type: Number,
114
+ default: 0
115
+ },
116
+ }, {
117
+ timestamps: true
118
+ });
119
+
120
+ waterMeterSchema.index({ meterNumber: 1, status: 1 });
121
+
122
+ const WaterMeter = mongoose.model('WaterMeter', waterMeterSchema);
123
+
124
124
  module.exports = WaterMeter;