payservedb 8.3.9 → 8.4.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 (177) hide show
  1. package/.env +2 -2
  2. package/ZOHO_INTEGRATION_SCHEMA.md +644 -644
  3. package/index.js +309 -307
  4. package/package.json +17 -17
  5. package/src/models/account.js +52 -52
  6. package/src/models/agent_departments.js +59 -59
  7. package/src/models/agent_notifications.js +53 -53
  8. package/src/models/agent_performance.js +127 -127
  9. package/src/models/agent_roles.js +77 -77
  10. package/src/models/agents.js +154 -154
  11. package/src/models/apilog.js +18 -18
  12. package/src/models/approvalsWorkflows.js +49 -49
  13. package/src/models/archivedapilog.js +18 -18
  14. package/src/models/asset.js +92 -92
  15. package/src/models/assetsAssignment.js +64 -64
  16. package/src/models/auditTrail.js +346 -346
  17. package/src/models/bankdetails.js +47 -47
  18. package/src/models/billerAddress.js +124 -124
  19. package/src/models/booking_invoice.js +151 -151
  20. package/src/models/bookinganalytics.js +63 -63
  21. package/src/models/bookingconfig.js +45 -45
  22. package/src/models/bookingproperty.js +122 -122
  23. package/src/models/bookingreservation.js +192 -192
  24. package/src/models/bookingrevenuerecord.js +84 -84
  25. package/src/models/budget.js +95 -95
  26. package/src/models/budgetCategory.js +19 -19
  27. package/src/models/campaigns.js +108 -108
  28. package/src/models/cashpayment.js +264 -264
  29. package/src/models/combinedUnits.js +62 -62
  30. package/src/models/common_area_electricity.js +38 -38
  31. package/src/models/common_area_generator.js +41 -41
  32. package/src/models/common_area_utility_alert.js +37 -37
  33. package/src/models/common_area_water.js +39 -39
  34. package/src/models/communication_status.js +33 -33
  35. package/src/models/communication_user_opt.js +32 -32
  36. package/src/models/company.js +53 -53
  37. package/src/models/coreBaseSettings.js +16 -16
  38. package/src/models/coreInvoiceSettings.js +100 -100
  39. package/src/models/counter_schema.js +21 -21
  40. package/src/models/country_tax.js +42 -42
  41. package/src/models/currency_settings.js +39 -39
  42. package/src/models/customer.js +210 -210
  43. package/src/models/customer_satisfaction_survey.js +278 -278
  44. package/src/models/customer_surveys.js +139 -139
  45. package/src/models/customer_tickets.js +239 -239
  46. package/src/models/dailyChecklist.js +312 -312
  47. package/src/models/default_payment_details.js +17 -17
  48. package/src/models/deliveryTimeMarks.js +18 -18
  49. package/src/models/document_type.js +19 -19
  50. package/src/models/dutyRosterChecklist.js +250 -250
  51. package/src/models/dutyroster.js +136 -136
  52. package/src/models/email.js +37 -37
  53. package/src/models/email_sms_queue.js +61 -61
  54. package/src/models/entry_exit.js +53 -53
  55. package/src/models/expense.js +99 -99
  56. package/src/models/expense_category.js +45 -45
  57. package/src/models/facility.js +62 -62
  58. package/src/models/facilityBillingPrices.js +29 -29
  59. package/src/models/facilityInvoice.js +240 -240
  60. package/src/models/facilityInvoicePayment.js +52 -52
  61. package/src/models/facilityInvoiceRecipient.js +32 -32
  62. package/src/models/facilityWalletTransactionsMetadata.js +236 -236
  63. package/src/models/facility_departements.js +20 -20
  64. package/src/models/facility_payment_details.js +20 -20
  65. package/src/models/facilityasset.js +25 -25
  66. package/src/models/faq.js +14 -14
  67. package/src/models/gl_account_double_entries.js +25 -25
  68. package/src/models/gl_accounts.js +56 -56
  69. package/src/models/gl_entries.js +49 -49
  70. package/src/models/goodsReceivedNotes.js +115 -115
  71. package/src/models/guard.js +47 -47
  72. package/src/models/handover.js +247 -247
  73. package/src/models/inspection_category.js +38 -38
  74. package/src/models/invoice.js +387 -387
  75. package/src/models/invoicing_schedule.js +36 -36
  76. package/src/models/item_inspection.js +96 -96
  77. package/src/models/knowledge_base.js +109 -109
  78. package/src/models/knowledge_base_rating.js +44 -44
  79. package/src/models/leaseagreement.js +236 -236
  80. package/src/models/leasetemplate.js +17 -17
  81. package/src/models/levy.js +223 -223
  82. package/src/models/levy_invoice_settings.js +26 -26
  83. package/src/models/levycontract.js +177 -177
  84. package/src/models/levytype.js +23 -23
  85. package/src/models/maintenance_service_vendor.js +38 -38
  86. package/src/models/maintenance_services.js +17 -17
  87. package/src/models/maintenancerequisition.js +31 -31
  88. package/src/models/master_workplan.js +32 -32
  89. package/src/models/master_workplan_child.js +34 -34
  90. package/src/models/message.js +38 -38
  91. package/src/models/module.js +21 -21
  92. package/src/models/notification.js +44 -44
  93. package/src/models/paymentTermsMarks.js +19 -19
  94. package/src/models/penalty.js +76 -76
  95. package/src/models/pendingCredentials.js +32 -32
  96. package/src/models/powerMeterCommunicationProtocol.js +17 -17
  97. package/src/models/powerMeterCustomerAccount.js +78 -78
  98. package/src/models/powerMeterCustomerBand.js +14 -14
  99. package/src/models/powerMeterDailyReading.js +30 -30
  100. package/src/models/powerMeterGateways.js +40 -40
  101. package/src/models/powerMeterMonthlyReading.js +34 -34
  102. package/src/models/powerMeterPowerCharges.js +85 -85
  103. package/src/models/powerMeterSettings.js +159 -159
  104. package/src/models/powerMeterSingleDayReading.js +32 -32
  105. package/src/models/powerMeters.js +116 -116
  106. package/src/models/powerMetersManufacturer.js +14 -14
  107. package/src/models/power_meter_account.js +81 -81
  108. package/src/models/power_meter_command_logs.js +30 -30
  109. package/src/models/power_meter_command_queue.js +33 -33
  110. package/src/models/power_meter_negative_balance.js +44 -44
  111. package/src/models/power_prepaid_credits.js +47 -47
  112. package/src/models/power_prepaid_debits.js +53 -53
  113. package/src/models/power_prepaid_orders.js +78 -78
  114. package/src/models/power_sms_notification.js +26 -26
  115. package/src/models/privacy_policy.js +20 -0
  116. package/src/models/propertyManagerContract.js +556 -556
  117. package/src/models/propertyManagerRevenue.js +195 -195
  118. package/src/models/purchaseOrderInvoice.js +74 -74
  119. package/src/models/purchase_order.js +213 -213
  120. package/src/models/purchase_request.js +110 -110
  121. package/src/models/refresh_token.js +23 -23
  122. package/src/models/reminder.js +197 -197
  123. package/src/models/report.js +13 -13
  124. package/src/models/resident.js +121 -121
  125. package/src/models/rfq_details.js +131 -131
  126. package/src/models/rfq_response.js +153 -153
  127. package/src/models/service_charge_invoice_upload.js +42 -42
  128. package/src/models/service_charge_payments.js +27 -27
  129. package/src/models/servicerequest.js +55 -55
  130. package/src/models/settings.js +62 -62
  131. package/src/models/short_urls.js +21 -21
  132. package/src/models/smart_meter_daily_consumption.js +44 -44
  133. package/src/models/sms_africastalking.js +20 -20
  134. package/src/models/sms_balance_notification.js +26 -26
  135. package/src/models/sms_meliora.js +20 -20
  136. package/src/models/staff.js +36 -36
  137. package/src/models/stocksandspare.js +161 -161
  138. package/src/models/suppliers.js +74 -74
  139. package/src/models/terms_and_conditions.js +20 -0
  140. package/src/models/tickets.js +186 -173
  141. package/src/models/tickets_category.js +72 -72
  142. package/src/models/unitManagementTemplate.js +44 -44
  143. package/src/models/unitasset.js +25 -25
  144. package/src/models/units.js +118 -118
  145. package/src/models/user.js +186 -186
  146. package/src/models/valueaddedservices.js +79 -79
  147. package/src/models/vas_invoices_upload.js +50 -50
  148. package/src/models/vas_payments.js +24 -24
  149. package/src/models/vasinvoice.js +192 -192
  150. package/src/models/vasvendor.js +57 -57
  151. package/src/models/visitLog.js +95 -95
  152. package/src/models/visitor.js +67 -67
  153. package/src/models/waitlist.js +45 -45
  154. package/src/models/wallet.js +44 -44
  155. package/src/models/wallet_transactions.js +50 -50
  156. package/src/models/water_invoice.js +351 -351
  157. package/src/models/water_meter_Command_Queue.js +33 -33
  158. package/src/models/water_meter_account.js +88 -82
  159. package/src/models/water_meter_billing.js +58 -58
  160. package/src/models/water_meter_communication.js +17 -17
  161. package/src/models/water_meter_communication_logs.js +39 -39
  162. package/src/models/water_meter_concentrator.js +70 -70
  163. package/src/models/water_meter_daily_history.js +32 -32
  164. package/src/models/water_meter_high_risk.js +36 -36
  165. package/src/models/water_meter_iot_cards.js +34 -34
  166. package/src/models/water_meter_manufacturer.js +35 -35
  167. package/src/models/water_meter_monthly_history.js +36 -36
  168. package/src/models/water_meter_negative_amounts.js +44 -44
  169. package/src/models/water_meter_settings.js +287 -283
  170. package/src/models/water_meter_single_day_history.js +34 -34
  171. package/src/models/water_meter_size.js +15 -15
  172. package/src/models/water_meters.js +133 -133
  173. package/src/models/water_meters_delivery.js +76 -76
  174. package/src/models/water_prepaid_credit.js +47 -47
  175. package/src/models/water_prepaid_debit.js +50 -50
  176. package/src/models/workorder.js +49 -49
  177. package/src/models/zohoIntegration.js +262 -262
@@ -1,284 +1,288 @@
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
- unique: true
9
- },
10
- minAmount: {
11
- type: Number,
12
- required: true,
13
- default: 1
14
- },
15
- maxAmount: {
16
- type: Number,
17
- required: true,
18
- default: 10000
19
- },
20
- lowThreshold: {
21
- type: Number,
22
- default: 0
23
- },
24
- highThreshold: {
25
- type: Number,
26
- default: 0
27
- },
28
- gracePeriod: {
29
- type: Number,
30
- required: true,
31
- default: 10
32
- },
33
- invoiceDay: {
34
- type: Number,
35
- required: true,
36
- min: 0,
37
- max: 30,
38
- default: 3
39
- },
40
- enforcePayment: {
41
- type: String,
42
- enum: ['yes', 'no'],
43
- required: true,
44
- default: 'no'
45
- },
46
- minimumPaymentAmount: {
47
- type: Number,
48
- required: true,
49
- default: 0
50
- },
51
- tariff: {
52
- type: String,
53
- enum: ['yes', 'no'],
54
- required: true,
55
- default: 'no'
56
- },
57
- tariffAmount: {
58
- type: Number,
59
- required: true,
60
- default: 0
61
- },
62
- tariffAmountSmart: {
63
- type: Number,
64
- default: 0
65
- },
66
- fixedTariffAmount: {
67
- type: Number,
68
- required: true,
69
- default: 0
70
- },
71
- meterLoan: {
72
- type: Number,
73
- required: true,
74
- default: 0
75
- },
76
-
77
- // Updated notification structure - separated concerns
78
- notifications: {
79
- // Usage and billing notifications
80
- usageAlerts: {
81
- enabled: {
82
- type: Boolean,
83
- default: false
84
- },
85
- daily: {
86
- type: Boolean,
87
- default: false
88
- },
89
- weekly: {
90
- type: Boolean,
91
- default: false
92
- },
93
- monthly: {
94
- type: Boolean,
95
- default: false
96
- }
97
- },
98
- statements: {
99
- enabled: {
100
- type: Boolean,
101
- default: false
102
- }
103
- },
104
- // Payment reminder notifications
105
- paymentReminders: {
106
- enabled: {
107
- type: Boolean,
108
- default: false
109
- },
110
- daysBeforeDue: {
111
- type: Number,
112
- default: 3,
113
- min: 1,
114
- max: 30
115
- },
116
- frequency: {
117
- type: String,
118
- enum: ['daily', 'weekly', 'once'],
119
- default: 'once'
120
- }
121
- }
122
- },
123
-
124
- // Other charges section
125
- otherCharges: {
126
- type: String,
127
- enum: ['yes', 'no'],
128
- default: 'no'
129
- },
130
- sewerageCharge: {
131
- type: Number,
132
- default: 0
133
- },
134
- fixedCharge: {
135
- type: Number,
136
- default: 0
137
- },
138
- vatPercentage: {
139
- type: Number,
140
- min: 0,
141
- max: 100,
142
- default: 0
143
- },
144
-
145
- // Payment methods
146
- paymentMethods: {
147
- mobilePayment: {
148
- status: {
149
- type: Boolean,
150
- default: false
151
- },
152
- paymentId: {
153
- type: mongoose.Schema.Types.ObjectId,
154
- ref: 'FacilityPaymentDetails'
155
- }
156
- },
157
- bankPayment: {
158
- status: {
159
- type: Boolean,
160
- default: false
161
- },
162
- paymentId: {
163
- type: mongoose.Schema.Types.ObjectId,
164
- ref: 'BankDetails'
165
- }
166
- }
167
- },
168
-
169
- // Discounts
170
- discounts: [{
171
- name: {
172
- type: String,
173
- required: true,
174
- trim: true
175
- },
176
- type: {
177
- type: String,
178
- enum: ['percentage', 'fixed_amount'],
179
- required: true
180
- },
181
- value: {
182
- type: Number,
183
- required: true,
184
- min: 0
185
- },
186
- yearMonth: {
187
- type: String,
188
- required: true
189
- }
190
- }],
191
-
192
- // Biller address for invoices
193
- billerAddress: {
194
- name: {
195
- type: String,
196
- trim: true,
197
- },
198
- email: {
199
- type: String,
200
- trim: true,
201
- lowercase: true,
202
- validate: {
203
- validator: function (v) {
204
- if (!v) return true; // allow empty
205
- return /^\w+([\.-]?\w+)@\w+([\.-]?\w+)(\.\w{2,3})+$/.test(v);
206
- },
207
- message: "Please enter a valid email address"
208
- }
209
- },
210
- phone: {
211
- type: String,
212
- trim: true,
213
- },
214
- address: {
215
- type: String,
216
- trim: true,
217
- },
218
- city: {
219
- type: String,
220
- trim: true,
221
- },
222
- country: {
223
- type: String,
224
- trim: true,
225
- default: "Kenya"
226
- },
227
- logo: {
228
- type: String,
229
- required: false,
230
- },
231
- digitalSignature: {
232
- type: String,
233
- required: false,
234
- }
235
- },
236
- // GL accounts for accounting entries
237
- glAccounts: {
238
- invoice: {
239
- debit: {
240
- type: mongoose.Schema.Types.ObjectId,
241
- ref: "GLAccount",
242
- required: false,
243
- },
244
- credit: {
245
- type: mongoose.Schema.Types.ObjectId,
246
- ref: "GLAccount",
247
- required: false,
248
- }
249
- },
250
- payment: {
251
- debit: {
252
- type: mongoose.Schema.Types.ObjectId,
253
- ref: "GLAccount",
254
- required: false,
255
- },
256
- credit: {
257
- type: mongoose.Schema.Types.ObjectId,
258
- ref: "GLAccount",
259
- required: false,
260
- }
261
- }
262
- },
263
-
264
- //GL ACCOUNT DOUBLE ENTRIES
265
-
266
- invocieCreationDe: {
267
- type: mongoose.Schema.Types.ObjectId,
268
- ref: 'GLAccountDoubleEntries',
269
- unique: true
270
- },
271
-
272
- invoicePaymentDe: {
273
- type: mongoose.Schema.Types.ObjectId,
274
- ref: 'GLAccountDoubleEntries',
275
- unique: true
276
- },
277
-
278
- }, {
279
- timestamps: true
280
- });
281
-
282
- const WaterMeterSettings = mongoose.model('WaterMeterSettings', waterMeterSettingsSchema);
283
-
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
+ unique: true
9
+ },
10
+ minAmount: {
11
+ type: Number,
12
+ required: true,
13
+ default: 1
14
+ },
15
+ maxAmount: {
16
+ type: Number,
17
+ required: true,
18
+ default: 10000
19
+ },
20
+ lowThreshold: {
21
+ type: Number,
22
+ default: 0
23
+ },
24
+ highThreshold: {
25
+ type: Number,
26
+ default: 0
27
+ },
28
+ freeWaterAllowance: {
29
+ type: Number,
30
+ required: true,
31
+ default: 0,
32
+ min: 0,
33
+ description: "Free water allowance in cubic meters (m³) - users won't be billed for consumption up to this amount"
34
+ },
35
+ gracePeriod: {
36
+ type: Number,
37
+ required: true,
38
+ default: 10
39
+ },
40
+ invoiceDay: {
41
+ type: Number,
42
+ required: true,
43
+ min: 0,
44
+ max: 30,
45
+ default: 3
46
+ },
47
+ enforcePayment: {
48
+ type: String,
49
+ enum: ['yes', 'no'],
50
+ required: true,
51
+ default: 'no'
52
+ },
53
+ minimumPaymentAmount: {
54
+ type: Number,
55
+ required: true,
56
+ default: 0
57
+ },
58
+ tariff: {
59
+ type: String,
60
+ enum: ['yes', 'no'],
61
+ required: true,
62
+ default: 'no'
63
+ },
64
+ tariffAmount: {
65
+ type: Number,
66
+ required: true,
67
+ default: 0
68
+ },
69
+ tariffAmountSmart: {
70
+ type: Number,
71
+ default: 0
72
+ },
73
+ fixedTariffAmount: {
74
+ type: Number,
75
+ required: true,
76
+ default: 0
77
+ },
78
+ meterLoan: {
79
+ type: Number,
80
+ required: true,
81
+ default: 0
82
+ },
83
+
84
+ // Updated notification structure - separated concerns
85
+ notifications: {
86
+ // Usage and billing notifications
87
+ usageAlerts: {
88
+ enabled: {
89
+ type: Boolean,
90
+ default: false
91
+ },
92
+ daily: {
93
+ type: Boolean,
94
+ default: false
95
+ },
96
+ weekly: {
97
+ type: Boolean,
98
+ default: false
99
+ },
100
+ monthly: {
101
+ type: Boolean,
102
+ default: false
103
+ }
104
+ },
105
+ statements: {
106
+ enabled: {
107
+ type: Boolean,
108
+ default: false
109
+ }
110
+ },
111
+ // Payment reminder notifications
112
+ paymentReminders: {
113
+ enabled: {
114
+ type: Boolean,
115
+ default: false
116
+ },
117
+ daysBeforeDue: {
118
+ type: Number,
119
+ default: 3,
120
+ min: 1,
121
+ max: 30
122
+ },
123
+ frequency: {
124
+ type: String,
125
+ enum: ['daily', 'weekly', 'once'],
126
+ default: 'once'
127
+ }
128
+ }
129
+ },
130
+
131
+ // Other charges section
132
+ otherCharges: {
133
+ type: String,
134
+ enum: ['yes', 'no'],
135
+ default: 'no'
136
+ },
137
+ sewerageCharge: {
138
+ type: Number,
139
+ default: 0
140
+ },
141
+ fixedCharge: {
142
+ type: Number,
143
+ default: 0
144
+ },
145
+ vatPercentage: {
146
+ type: Number,
147
+ min: 0,
148
+ max: 100,
149
+ default: 0
150
+ },
151
+
152
+ // Payment methods
153
+ paymentMethods: {
154
+ mobilePayment: {
155
+ status: {
156
+ type: Boolean,
157
+ default: false
158
+ },
159
+ paymentId: {
160
+ type: mongoose.Schema.Types.ObjectId,
161
+ ref: 'FacilityPaymentDetails'
162
+ }
163
+ },
164
+ bankPayment: {
165
+ status: {
166
+ type: Boolean,
167
+ default: false
168
+ },
169
+ paymentId: {
170
+ type: mongoose.Schema.Types.ObjectId,
171
+ ref: 'BankDetails'
172
+ }
173
+ }
174
+ },
175
+
176
+ // Discounts
177
+ discounts: [{
178
+ name: {
179
+ type: String,
180
+ required: true,
181
+ trim: true
182
+ },
183
+ type: {
184
+ type: String,
185
+ enum: ['percentage', 'fixed_amount'],
186
+ required: true
187
+ },
188
+ value: {
189
+ type: Number,
190
+ required: true,
191
+ min: 0
192
+ },
193
+ yearMonth: {
194
+ type: String,
195
+ required: true
196
+ }
197
+ }],
198
+
199
+ // Biller address for invoices
200
+ billerAddress: {
201
+ name: {
202
+ type: String,
203
+ trim: true,
204
+ },
205
+ email: {
206
+ type: String,
207
+ trim: true,
208
+ lowercase: true,
209
+ validate: {
210
+ validator: function (v) {
211
+ if (!v) return true; // allow empty
212
+ return /^\w+([\.-]?\w+)@\w+([\.-]?\w+)(\.\w{2,3})+$/.test(v);
213
+ },
214
+ message: "Please enter a valid email address"
215
+ }
216
+ },
217
+ phone: {
218
+ type: String,
219
+ trim: true,
220
+ },
221
+ address: {
222
+ type: String,
223
+ trim: true,
224
+ },
225
+ city: {
226
+ type: String,
227
+ trim: true,
228
+ },
229
+ country: {
230
+ type: String,
231
+ trim: true,
232
+ default: "Kenya"
233
+ },
234
+ logo: {
235
+ type: String,
236
+ required: false,
237
+ },
238
+ digitalSignature: {
239
+ type: String,
240
+ required: false,
241
+ }
242
+ },
243
+ // GL accounts for accounting entries
244
+ glAccounts: {
245
+ invoice: {
246
+ debit: {
247
+ type: mongoose.Schema.Types.ObjectId,
248
+ ref: "GLAccount",
249
+ required: false,
250
+ },
251
+ credit: {
252
+ type: mongoose.Schema.Types.ObjectId,
253
+ ref: "GLAccount",
254
+ required: false,
255
+ }
256
+ },
257
+ payment: {
258
+ debit: {
259
+ type: mongoose.Schema.Types.ObjectId,
260
+ ref: "GLAccount",
261
+ required: false,
262
+ },
263
+ credit: {
264
+ type: mongoose.Schema.Types.ObjectId,
265
+ ref: "GLAccount",
266
+ required: false,
267
+ }
268
+ }
269
+ },
270
+
271
+ //GL ACCOUNT DOUBLE ENTRIES
272
+ invocieCreationDe: {
273
+ type: mongoose.Schema.Types.ObjectId,
274
+ ref: 'GLAccountDoubleEntries',
275
+ unique: true
276
+ },
277
+ invoicePaymentDe: {
278
+ type: mongoose.Schema.Types.ObjectId,
279
+ ref: 'GLAccountDoubleEntries',
280
+ unique: true
281
+ },
282
+ }, {
283
+ timestamps: true
284
+ });
285
+
286
+ const WaterMeterSettings = mongoose.model('WaterMeterSettings', waterMeterSettingsSchema);
287
+
284
288
  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;