payservedb 8.3.5 → 8.3.6

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/.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 +306 -306
  7. package/package.json +17 -17
  8. package/src/models/account.js +52 -52
  9. package/src/models/agent_departments.js +59 -59
  10. package/src/models/agent_notifications.js +53 -53
  11. package/src/models/agent_performance.js +127 -127
  12. package/src/models/agent_roles.js +77 -77
  13. package/src/models/agents.js +154 -154
  14. package/src/models/apilog.js +18 -18
  15. package/src/models/approvalsWorkflows.js +49 -49
  16. package/src/models/archivedapilog.js +18 -18
  17. package/src/models/asset.js +92 -92
  18. package/src/models/assetsAssignment.js +64 -64
  19. package/src/models/auditTrail.js +346 -346
  20. package/src/models/bankdetails.js +47 -43
  21. package/src/models/billerAddress.js +124 -124
  22. package/src/models/booking_invoice.js +151 -151
  23. package/src/models/bookinganalytics.js +63 -63
  24. package/src/models/bookingconfig.js +45 -45
  25. package/src/models/bookingproperty.js +122 -122
  26. package/src/models/bookingreservation.js +192 -192
  27. package/src/models/bookingrevenuerecord.js +84 -84
  28. package/src/models/budget.js +95 -95
  29. package/src/models/budgetCategory.js +19 -19
  30. package/src/models/campaigns.js +108 -108
  31. package/src/models/cashpayment.js +264 -264
  32. package/src/models/combinedUnits.js +62 -62
  33. package/src/models/common_area_electricity.js +38 -38
  34. package/src/models/common_area_generator.js +41 -41
  35. package/src/models/common_area_utility_alert.js +37 -37
  36. package/src/models/common_area_water.js +39 -39
  37. package/src/models/communication_status.js +33 -33
  38. package/src/models/communication_user_opt.js +32 -32
  39. package/src/models/company.js +53 -53
  40. package/src/models/coreBaseSettings.js +16 -16
  41. package/src/models/coreInvoiceSettings.js +100 -100
  42. package/src/models/counter_schema.js +21 -21
  43. package/src/models/country_tax.js +42 -42
  44. package/src/models/currency_settings.js +39 -39
  45. package/src/models/customer.js +210 -210
  46. package/src/models/customer_satisfaction_survey.js +278 -278
  47. package/src/models/customer_surveys.js +139 -139
  48. package/src/models/customer_tickets.js +239 -239
  49. package/src/models/dailyChecklist.js +312 -312
  50. package/src/models/default_payment_details.js +17 -17
  51. package/src/models/deliveryTimeMarks.js +18 -18
  52. package/src/models/document_type.js +19 -19
  53. package/src/models/dutyRosterChecklist.js +250 -250
  54. package/src/models/dutyroster.js +136 -136
  55. package/src/models/email.js +37 -37
  56. package/src/models/email_sms_queue.js +61 -61
  57. package/src/models/entry_exit.js +53 -53
  58. package/src/models/expense.js +99 -99
  59. package/src/models/expense_category.js +45 -45
  60. package/src/models/facility.js +62 -62
  61. package/src/models/facilityBillingPrices.js +29 -29
  62. package/src/models/facilityInvoice.js +223 -240
  63. package/src/models/facilityInvoicePayment.js +47 -52
  64. package/src/models/facilityInvoiceRecipient.js +32 -32
  65. package/src/models/facilityWalletTransactionsMetadata.js +236 -236
  66. package/src/models/facility_departements.js +20 -20
  67. package/src/models/facility_payment_details.js +20 -20
  68. package/src/models/facilityasset.js +25 -25
  69. package/src/models/faq.js +18 -18
  70. package/src/models/gl_account_double_entries.js +25 -25
  71. package/src/models/gl_accounts.js +56 -56
  72. package/src/models/gl_entries.js +49 -49
  73. package/src/models/goodsReceivedNotes.js +115 -115
  74. package/src/models/guard.js +47 -47
  75. package/src/models/handover.js +247 -247
  76. package/src/models/inspection_category.js +38 -38
  77. package/src/models/invoice.js +387 -387
  78. package/src/models/invoicing_schedule.js +36 -36
  79. package/src/models/item_inspection.js +96 -96
  80. package/src/models/knowledge_base.js +109 -109
  81. package/src/models/knowledge_base_rating.js +44 -44
  82. package/src/models/leaseagreement.js +236 -243
  83. package/src/models/leasetemplate.js +17 -17
  84. package/src/models/levy.js +223 -223
  85. package/src/models/levy_invoice_settings.js +26 -26
  86. package/src/models/levycontract.js +177 -173
  87. package/src/models/levytype.js +23 -23
  88. package/src/models/maintenance_service_vendor.js +38 -38
  89. package/src/models/maintenance_services.js +17 -17
  90. package/src/models/maintenancerequisition.js +31 -31
  91. package/src/models/master_workplan.js +32 -32
  92. package/src/models/master_workplan_child.js +34 -34
  93. package/src/models/message.js +38 -38
  94. package/src/models/module.js +21 -21
  95. package/src/models/notification.js +44 -44
  96. package/src/models/paymentTermsMarks.js +19 -19
  97. package/src/models/penalty.js +76 -76
  98. package/src/models/pendingCredentials.js +32 -32
  99. package/src/models/powerMeterCommunicationProtocol.js +17 -17
  100. package/src/models/powerMeterCustomerAccount.js +78 -78
  101. package/src/models/powerMeterCustomerBand.js +14 -14
  102. package/src/models/powerMeterDailyReading.js +30 -30
  103. package/src/models/powerMeterGateways.js +40 -40
  104. package/src/models/powerMeterMonthlyReading.js +34 -34
  105. package/src/models/powerMeterPowerCharges.js +85 -85
  106. package/src/models/powerMeterSettings.js +159 -159
  107. package/src/models/powerMeterSingleDayReading.js +32 -32
  108. package/src/models/powerMeters.js +116 -116
  109. package/src/models/powerMetersManufacturer.js +14 -14
  110. package/src/models/power_meter_account.js +81 -81
  111. package/src/models/power_meter_command_logs.js +30 -30
  112. package/src/models/power_meter_command_queue.js +33 -33
  113. package/src/models/power_meter_negative_balance.js +44 -44
  114. package/src/models/power_prepaid_credits.js +47 -47
  115. package/src/models/power_prepaid_debits.js +53 -53
  116. package/src/models/power_prepaid_orders.js +78 -78
  117. package/src/models/power_sms_notification.js +26 -26
  118. package/src/models/propertyManagerContract.js +556 -556
  119. package/src/models/propertyManagerRevenue.js +195 -195
  120. package/src/models/purchaseOrderInvoice.js +74 -74
  121. package/src/models/purchase_order.js +213 -213
  122. package/src/models/purchase_request.js +110 -110
  123. package/src/models/refresh_token.js +23 -23
  124. package/src/models/reminder.js +197 -197
  125. package/src/models/report.js +13 -13
  126. package/src/models/resident.js +121 -121
  127. package/src/models/rfq_details.js +131 -131
  128. package/src/models/rfq_response.js +153 -153
  129. package/src/models/service_charge_invoice_upload.js +42 -42
  130. package/src/models/service_charge_payments.js +27 -27
  131. package/src/models/servicerequest.js +55 -55
  132. package/src/models/settings.js +62 -62
  133. package/src/models/short_urls.js +21 -21
  134. package/src/models/smart_meter_daily_consumption.js +44 -44
  135. package/src/models/sms_africastalking.js +20 -20
  136. package/src/models/sms_balance_notification.js +26 -26
  137. package/src/models/sms_meliora.js +20 -20
  138. package/src/models/staff.js +36 -36
  139. package/src/models/stocksandspare.js +161 -161
  140. package/src/models/suppliers.js +74 -74
  141. package/src/models/tickets.js +173 -173
  142. package/src/models/tickets_category.js +72 -72
  143. package/src/models/unitManagementTemplate.js +44 -44
  144. package/src/models/unitasset.js +25 -25
  145. package/src/models/units.js +118 -118
  146. package/src/models/user.js +186 -186
  147. package/src/models/valueaddedservices.js +79 -79
  148. package/src/models/vas_invoices_upload.js +50 -50
  149. package/src/models/vas_payments.js +24 -24
  150. package/src/models/vasinvoice.js +192 -192
  151. package/src/models/vasvendor.js +57 -57
  152. package/src/models/visitLog.js +95 -95
  153. package/src/models/visitor.js +67 -67
  154. package/src/models/waitlist.js +45 -45
  155. package/src/models/wallet.js +44 -44
  156. package/src/models/wallet_transactions.js +50 -50
  157. package/src/models/water_invoice.js +351 -351
  158. package/src/models/water_meter_Command_Queue.js +33 -33
  159. package/src/models/water_meter_account.js +82 -82
  160. package/src/models/water_meter_billing.js +58 -58
  161. package/src/models/water_meter_communication.js +17 -17
  162. package/src/models/water_meter_communication_logs.js +39 -39
  163. package/src/models/water_meter_concentrator.js +70 -70
  164. package/src/models/water_meter_daily_history.js +32 -32
  165. package/src/models/water_meter_high_risk.js +36 -36
  166. package/src/models/water_meter_iot_cards.js +34 -34
  167. package/src/models/water_meter_manufacturer.js +35 -35
  168. package/src/models/water_meter_monthly_history.js +36 -36
  169. package/src/models/water_meter_negative_amounts.js +44 -44
  170. package/src/models/water_meter_settings.js +283 -276
  171. package/src/models/water_meter_single_day_history.js +34 -34
  172. package/src/models/water_meter_size.js +15 -15
  173. package/src/models/water_meters.js +133 -133
  174. package/src/models/water_meters_delivery.js +76 -76
  175. package/src/models/water_prepaid_credit.js +47 -47
  176. package/src/models/water_prepaid_debit.js +50 -50
  177. package/src/models/workorder.js +49 -49
@@ -1,240 +1,223 @@
1
- const mongoose = require("mongoose");
2
- const { RecipientSchema } = require("./facilityInvoiceRecipient");
3
-
4
- const FacilityInvoiceSchema = new mongoose.Schema(
5
- {
6
- facilityId: {
7
- type: mongoose.Schema.Types.ObjectId,
8
- ref: "Facility",
9
- required: true,
10
- },
11
- facilityInvoiceContract: {
12
- type: mongoose.Schema.Types.ObjectId,
13
- ref: "FacilityInvoiceContract",
14
- required: true,
15
- },
16
- recipient: {
17
- type: RecipientSchema,
18
- required: true,
19
- },
20
- invoiceNumber: {
21
- type: String,
22
- required: true,
23
- trim: true,
24
- },
25
- invoiceDate: {
26
- type: Date,
27
- required: true,
28
- },
29
- dueDate: {
30
- type: Date,
31
- required: true,
32
- },
33
- status: {
34
- type: String,
35
- enum: ["pending", "paid", "partially_paid", "overdue"],
36
- default: "pending",
37
- },
38
- invoiceType: {
39
- type: String,
40
- required: true,
41
- enum: ["unit", "license", "meters"],
42
- trim: true,
43
- },
44
- items: [
45
- {
46
- itemType: {
47
- type: String,
48
- required: true,
49
- enum: [
50
- "unit",
51
- "license",
52
- "powerMeters",
53
- "hotWaterMeters",
54
- "coldWaterMeters",
55
- "sms",
56
- ],
57
- trim: true,
58
- },
59
- name: {
60
- type: String,
61
- required: true,
62
- trim: true,
63
- },
64
- description: {
65
- type: String,
66
- required: true,
67
- trim: true,
68
- },
69
- detail: {
70
- type: String,
71
- trim: true,
72
- default: null,
73
- },
74
- quantity: {
75
- type: Number,
76
- required: true,
77
- min: [1, "Quantity must be at least 1"],
78
- default: 1,
79
- },
80
- unitPrice: {
81
- type: Number,
82
- required: true,
83
- min: [0, "Unit price cannot be negative"],
84
- },
85
- amount: {
86
- type: Number,
87
- required: true,
88
- min: [0, "Amount cannot be negative"],
89
- },
90
- },
91
- ],
92
- // Subtotal of all invoice items before tax and balance
93
- subtotal: {
94
- type: Number,
95
- required: true,
96
- min: [0, "Subtotal cannot be negative"],
97
- default: 0,
98
- },
99
- balanceBroughtForward: {
100
- type: Number,
101
- default: 0,
102
- },
103
- // Tax amount calculated on subtotal
104
- taxAmount: {
105
- type: Number,
106
- default: 0,
107
- min: [0, "Tax amount cannot be negative"],
108
- },
109
- amount: {
110
- type: Number,
111
- required: true,
112
- },
113
- taxRate: {
114
- type: Number,
115
- min: [0, "Tax rate cannot be negative"],
116
- default: 0,
117
- },
118
- reminders: [
119
- {
120
- frequency: {
121
- type: String,
122
- required: true,
123
- enum: ["daily", "custom"],
124
- default: "daily",
125
- },
126
- customDays: {
127
- type: Number,
128
- required: function () {
129
- return this.frequency === "custom";
130
- },
131
- min: [1, "Custom days must be at least 1"],
132
- default: null,
133
- },
134
- startDate: {
135
- type: Date,
136
- required: true,
137
- },
138
- status: {
139
- type: String,
140
- enum: ["sent", "pending"],
141
- default: "pending",
142
- },
143
- },
144
- ],
145
- header: {
146
- companyName: {
147
- type: String,
148
- required: true,
149
- trim: true,
150
- },
151
- companyAddress: {
152
- type: String,
153
- required: true,
154
- trim: true,
155
- },
156
- companyPhone: {
157
- type: String,
158
- trim: true,
159
- },
160
- companyEmail: {
161
- type: String,
162
- trim: true,
163
- lowercase: true,
164
- match: [/^\S+@\S+\.\S+$/, "Please enter a valid email address"],
165
- },
166
- companyWebsite: {
167
- type: String,
168
- trim: true,
169
- match: [/^https?:\/\/[^\s$.?#].[^\s]*$/, "Please enter a valid URL"],
170
- },
171
- taxNumber: {
172
- type: String,
173
- trim: true,
174
- },
175
- logo: {
176
- type: String,
177
- default: null,
178
- },
179
- },
180
- footer: {
181
- bankName: {
182
- type: String,
183
- trim: true,
184
- },
185
- accountName: {
186
- type: String,
187
- trim: true,
188
- },
189
- accountNumber: {
190
- type: String,
191
- trim: true,
192
- },
193
- swiftCode: {
194
- type: String,
195
- trim: true,
196
- },
197
- paymentTerms: {
198
- type: String,
199
- trim: true,
200
- default: "Net 30 days",
201
- },
202
- latePaymentFee: {
203
- type: String,
204
- trim: true,
205
- },
206
- taxRate: {
207
- type: String,
208
- trim: true,
209
- },
210
- additionalNotes: {
211
- type: String,
212
- trim: true,
213
- },
214
- supportEmail: {
215
- type: String,
216
- trim: true,
217
- lowercase: true,
218
- match: [/^\S+@\S+\.\S+$/, "Please enter a valid email address"],
219
- },
220
- supportPhone: {
221
- type: String,
222
- trim: true,
223
- },
224
- termsAndConditions: {
225
- type: String,
226
- trim: true,
227
- },
228
- },
229
- },
230
- {
231
- timestamps: true,
232
- },
233
- );
234
-
235
- const FacilityInvoice = mongoose.model(
236
- "FacilityInvoice",
237
- FacilityInvoiceSchema,
238
- );
239
-
240
- module.exports = FacilityInvoice;
1
+ const mongoose = require("mongoose");
2
+ const {RecipientSchema} = require("./facilityInvoiceRecipient")
3
+
4
+ const FacilityInvoiceSchema = new mongoose.Schema(
5
+ {
6
+ facilityId: {
7
+ type: mongoose.Schema.Types.ObjectId,
8
+ ref: "Facility",
9
+ required: true,
10
+ },
11
+ facilityInvoiceContract: {
12
+ type: mongoose.Schema.Types.ObjectId,
13
+ ref: "FacilityInvoiceContract",
14
+ required: true,
15
+ },
16
+ recipient: {
17
+ type: RecipientSchema,
18
+ required: true,
19
+ },
20
+ invoiceNumber: {
21
+ type: String,
22
+ required: true,
23
+ trim: true,
24
+ },
25
+ invoiceDate: {
26
+ type: Date,
27
+ required: true,
28
+ },
29
+ dueDate: {
30
+ type: Date,
31
+ required: true,
32
+ },
33
+ status: {
34
+ type: String,
35
+ enum: ["pending", "paid", "overdue"],
36
+ default: "pending",
37
+ },
38
+ invoiceType: {
39
+ type: String,
40
+ required: true,
41
+ enum: ["unit", "license", "meters"],
42
+ trim: true,
43
+ },
44
+ items: [
45
+ {
46
+ itemType: {
47
+ type: String,
48
+ required: true,
49
+ enum: [
50
+ "unit",
51
+ "license",
52
+ "powerMeters",
53
+ "hotWaterMeters",
54
+ "coldWaterMeters",
55
+ ],
56
+ trim: true,
57
+ },
58
+ name: {
59
+ type: String,
60
+ required: true,
61
+ trim: true,
62
+ },
63
+ description: {
64
+ type: String,
65
+ required: true,
66
+ trim: true,
67
+ },
68
+ detail: {
69
+ type: String,
70
+ trim: true,
71
+ default: null,
72
+ },
73
+ quantity: {
74
+ type: Number,
75
+ required: true,
76
+ min: [1, "Quantity must be at least 1"],
77
+ default: 1,
78
+ },
79
+ unitPrice: {
80
+ type: Number,
81
+ required: true,
82
+ min: [0, "Unit price cannot be negative"],
83
+ },
84
+ amount: {
85
+ type: Number,
86
+ required: true,
87
+ min: [0, "Amount cannot be negative"],
88
+ },
89
+ },
90
+ ],
91
+ amount: {
92
+ type: Number,
93
+ required: true,
94
+ min: [0, "Total amount cannot be negative"],
95
+ },
96
+ taxRate: {
97
+ type: Number,
98
+ min: [0, "Tax rate cannot be negative"],
99
+ default: 0,
100
+ },
101
+ reminders: [
102
+ {
103
+ frequency: {
104
+ type: String,
105
+ required: true,
106
+ enum: ["daily", "custom"],
107
+ default: "daily",
108
+ },
109
+ customDays: {
110
+ type: Number,
111
+ required: function () {
112
+ return this.frequency === "custom";
113
+ },
114
+ min: [1, "Custom days must be at least 1"],
115
+ default: null,
116
+ },
117
+ startDate: {
118
+ type: Date,
119
+ required: true,
120
+ },
121
+ status: {
122
+ type: String,
123
+ enum: ["sent", "pending"],
124
+ default: "pending",
125
+ },
126
+ },
127
+ ],
128
+ header: {
129
+ companyName: {
130
+ type: String,
131
+ required: true,
132
+ trim: true,
133
+ },
134
+ companyAddress: {
135
+ type: String,
136
+ required: true,
137
+ trim: true,
138
+ },
139
+ companyPhone: {
140
+ type: String,
141
+ trim: true,
142
+ },
143
+ companyEmail: {
144
+ type: String,
145
+ trim: true,
146
+ lowercase: true,
147
+ match: [/^\S+@\S+\.\S+$/, "Please enter a valid email address"],
148
+ },
149
+ companyWebsite: {
150
+ type: String,
151
+ trim: true,
152
+ match: [/^https?:\/\/[^\s$.?#].[^\s]*$/, "Please enter a valid URL"],
153
+ },
154
+ taxNumber: {
155
+ type: String,
156
+ trim: true,
157
+ },
158
+ logo: {
159
+ type: String,
160
+ default: null,
161
+ },
162
+ },
163
+ footer: {
164
+ bankName: {
165
+ type: String,
166
+ trim: true,
167
+ },
168
+ accountName: {
169
+ type: String,
170
+ trim: true,
171
+ },
172
+ accountNumber: {
173
+ type: String,
174
+ trim: true,
175
+ },
176
+ swiftCode: {
177
+ type: String,
178
+ trim: true,
179
+ },
180
+ paymentTerms: {
181
+ type: String,
182
+ trim: true,
183
+ default: "Net 30 days",
184
+ },
185
+ latePaymentFee: {
186
+ type: String,
187
+ trim: true,
188
+ },
189
+ taxRate: {
190
+ type: String,
191
+ trim: true,
192
+ },
193
+ additionalNotes: {
194
+ type: String,
195
+ trim: true,
196
+ },
197
+ supportEmail: {
198
+ type: String,
199
+ trim: true,
200
+ lowercase: true,
201
+ match: [/^\S+@\S+\.\S+$/, "Please enter a valid email address"],
202
+ },
203
+ supportPhone: {
204
+ type: String,
205
+ trim: true,
206
+ },
207
+ termsAndConditions: {
208
+ type: String,
209
+ trim: true,
210
+ },
211
+ },
212
+ },
213
+ {
214
+ timestamps: true,
215
+ },
216
+ );
217
+
218
+ const FacilityInvoice = mongoose.model(
219
+ "FacilityInvoice",
220
+ FacilityInvoiceSchema,
221
+ );
222
+
223
+ module.exports = FacilityInvoice;
@@ -1,52 +1,47 @@
1
- const mongoose = require("mongoose");
2
-
3
- const FacilityInvoicePaymentSchema = new mongoose.Schema({
4
- facilityId: {
5
- type: mongoose.Schema.Types.ObjectId,
6
- ref: "Facility",
7
- required: true,
8
- },
9
- invoiceId: {
10
- type: mongoose.Schema.Types.ObjectId,
11
- ref: "FacilityInvoice",
12
- required: true,
13
- },
14
- paymentDate: {
15
- type: Date,
16
- required: true,
17
- },
18
- amountPaid: {
19
- type: Number,
20
- required: true,
21
- },
22
- comments: {
23
- type: String,
24
- required: false,
25
- },
26
- proofOfPaymentUrl: {
27
- type: String,
28
- required: false,
29
- trim: true,
30
- },
31
- status: {
32
- type: String,
33
- enum: ["pending", "paid", "overpaid", "rejected"],
34
- default: "pending",
35
- },
36
- paymentMethod: {
37
- type: String,
38
- enum: ["cash", "credit", "debit"],
39
- default: "cash",
40
- },
41
- rejectedReason: {
42
- type: String,
43
- required: false,
44
- },
45
- });
46
-
47
- const FacilityInvoicePayment = mongoose.model(
48
- "FacilityInvoicePayment",
49
- FacilityInvoicePaymentSchema,
50
- );
51
-
52
- module.exports = FacilityInvoicePayment;
1
+ const mongoose = require("mongoose");
2
+
3
+ const FacilityInvoicePaymentSchema = new mongoose.Schema({
4
+ facilityId: {
5
+ type: mongoose.Schema.Types.ObjectId,
6
+ ref: "Facility",
7
+ required: true,
8
+ },
9
+ invoiceId: {
10
+ type: mongoose.Schema.Types.ObjectId,
11
+ ref: "FacilityInvoice",
12
+ required: true,
13
+ },
14
+ paymentDate: {
15
+ type: Date,
16
+ required: true,
17
+ },
18
+ amountPaid: {
19
+ type: Number,
20
+ required: true,
21
+ },
22
+ comments: {
23
+ type: String,
24
+ required: false,
25
+ },
26
+ status: {
27
+ type: String,
28
+ enum: ["pending", "paid", "overpaid", "rejected"],
29
+ default: "pending",
30
+ },
31
+ paymentMethod: {
32
+ type: String,
33
+ enum: ["cash", "credit", "debit"],
34
+ default: "cash",
35
+ },
36
+ rejectedReason: {
37
+ type: String,
38
+ required: false,
39
+ },
40
+ });
41
+
42
+ const FacilityInvoicePayment = mongoose.model(
43
+ "FacilityInvoicePayment",
44
+ FacilityInvoicePaymentSchema,
45
+ );
46
+
47
+ module.exports = FacilityInvoicePayment;
@@ -1,33 +1,33 @@
1
- const mongoose = require("mongoose");
2
-
3
- const RecipientSchema = new mongoose.Schema(
4
- {
5
- facilityId: {
6
- type: mongoose.Schema.Types.ObjectId,
7
- ref: "Facility",
8
- required: true,
9
- },
10
- phoneNumber: {
11
- type: String,
12
- required: true
13
- },
14
- email: {
15
- type: String,
16
- required: true,
17
- lowercase: true,
18
- trim: true,
19
- match: [/^\S+@\S+\.\S+$/, "Please enter a valid email address"]
20
- }
21
- },
22
- {
23
- timestamps: true,
24
- }
25
- );
26
-
27
- // Create the model
28
- const Recipient = mongoose.model("Recipient", RecipientSchema);
29
-
30
- // Export the model as default and the schema as a named export
31
- module.exports = Recipient;
32
- module.exports.RecipientSchema = RecipientSchema;
1
+ const mongoose = require("mongoose");
2
+
3
+ const RecipientSchema = new mongoose.Schema(
4
+ {
5
+ facilityId: {
6
+ type: mongoose.Schema.Types.ObjectId,
7
+ ref: "Facility",
8
+ required: true,
9
+ },
10
+ phoneNumber: {
11
+ type: String,
12
+ required: true
13
+ },
14
+ email: {
15
+ type: String,
16
+ required: true,
17
+ lowercase: true,
18
+ trim: true,
19
+ match: [/^\S+@\S+\.\S+$/, "Please enter a valid email address"]
20
+ }
21
+ },
22
+ {
23
+ timestamps: true,
24
+ }
25
+ );
26
+
27
+ // Create the model
28
+ const Recipient = mongoose.model("Recipient", RecipientSchema);
29
+
30
+ // Export the model as default and the schema as a named export
31
+ module.exports = Recipient;
32
+ module.exports.RecipientSchema = RecipientSchema;
33
33
  module.exports.schema = RecipientSchema; // For compatibility with getModel if needed