@platform-modules/foreign-ministry 1.1.73 → 1.1.75

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.
@@ -0,0 +1,317 @@
1
+ import { Column, Entity } from "typeorm";
2
+ import { BaseModel } from './BaseModel';
3
+
4
+ export enum ProfileUpdateRequestStatus {
5
+ PENDING = "Pending",
6
+ ASSIGNED = "Assigned",
7
+ IN_PROGRESS = "In Progress",
8
+ APPROVED = "Approved",
9
+ REJECTED = "Rejected",
10
+ COMPLETED = "Completed"
11
+ }
12
+
13
+ @Entity({ name: 'user_profile_update_requests' })
14
+ export class ProfileUpdateRequests extends BaseModel {
15
+ @Column({ type: 'int', nullable: true })
16
+ req_user_department_id: number | null;
17
+
18
+ @Column({ type: 'int', nullable: true })
19
+ req_user_section_id: number | null;
20
+
21
+ @Column({ type: 'int', nullable: true })
22
+ service_id: number | null;
23
+
24
+ @Column({ type: 'int', nullable: true })
25
+ sub_service_id: number | null;
26
+
27
+ @Column({ type: 'int', nullable: false })
28
+ user_id: number;
29
+
30
+ @Column({ type: 'enum', enum: ProfileUpdateRequestStatus, default: ProfileUpdateRequestStatus.PENDING, nullable: false })
31
+ status: ProfileUpdateRequestStatus;
32
+
33
+ @Column({ type: 'varchar', nullable: true })
34
+ workflow_execution_id: string | null;
35
+
36
+ // Decision workflow fields
37
+ @Column({ type: 'varchar', length: 50, nullable: true })
38
+ employee_type: string | null; // 'FM', 'M&C'
39
+
40
+ @Column({ type: 'boolean', default: false, nullable: true })
41
+ is_diplomatic: boolean | null;
42
+
43
+ @Column({ type: 'varchar', length: 255, nullable: true })
44
+ assigned_to_department: string | null; // 'HR_FM' or 'M&C_Admin_Finance'
45
+
46
+ @Column({ type: 'varchar', length: 500, nullable: true })
47
+ comments: string | null;
48
+
49
+ // ========== PERSONAL DETAILS FIELDS (all nullable) ==========
50
+ // Name fields
51
+ @Column({ type: 'varchar', length: 255, nullable: true })
52
+ title: string | null;
53
+
54
+ @Column({ type: 'varchar', length: 255, nullable: true })
55
+ first_name: string | null;
56
+
57
+ @Column({ type: 'varchar', length: 255, nullable: true })
58
+ second_name: string | null;
59
+
60
+ @Column({ type: 'varchar', length: 255, nullable: true })
61
+ third_name: string | null;
62
+
63
+ @Column({ type: 'varchar', length: 255, nullable: true })
64
+ fourth_name: string | null;
65
+
66
+ @Column({ type: 'varchar', length: 255, nullable: true })
67
+ family_name_tribe: string | null;
68
+
69
+ @Column({ type: 'varchar', length: 255, nullable: true })
70
+ previous_name: string | null;
71
+
72
+ // Personal Information
73
+ @Column({ type: 'varchar', length: 100, nullable: true })
74
+ religion: string | null;
75
+
76
+ @Column({ type: 'varchar', length: 100, nullable: true })
77
+ sect: string | null;
78
+
79
+ @Column({ type: 'date', nullable: true })
80
+ date_of_birth: Date | null;
81
+
82
+ @Column({ type: 'varchar', length: 255, nullable: true })
83
+ place_of_birth: string | null;
84
+
85
+ @Column({ type: 'varchar', length: 100, nullable: true })
86
+ nationality: string | null;
87
+
88
+ @Column({ type: 'varchar', length: 50, nullable: true })
89
+ gender: string | null;
90
+
91
+ @Column({ type: 'varchar', length: 50, nullable: true })
92
+ marital_status: string | null;
93
+
94
+ @Column({ type: 'int', nullable: true })
95
+ number_of_dependents: number | null;
96
+
97
+ // Passport Information
98
+ @Column({ type: 'varchar', length: 100, nullable: true })
99
+ passport_number: string | null;
100
+
101
+ @Column({ type: 'varchar', length: 50, nullable: true })
102
+ passport_type: string | null;
103
+
104
+ @Column({ type: 'date', nullable: true })
105
+ issue_date: Date | null; // Passport Issue Date
106
+
107
+ @Column({ type: 'varchar', length: 255, nullable: true })
108
+ place_of_issue: string | null; // Passport Place of Issue
109
+
110
+ @Column({ type: 'date', nullable: true })
111
+ expiry_date: Date | null; // Passport Expiry Date
112
+
113
+ // ID Card Information
114
+ @Column({ type: 'varchar', length: 100, nullable: true })
115
+ id_card_number: string | null;
116
+
117
+ @Column({ type: 'varchar', length: 255, nullable: true })
118
+ id_card_place_of_issue: string | null;
119
+
120
+ @Column({ type: 'date', nullable: true })
121
+ id_card_expiry_date: Date | null;
122
+
123
+ // Address Information
124
+ @Column({ type: 'text', nullable: true })
125
+ permanent_address: string | null;
126
+
127
+ @Column({ type: 'varchar', length: 255, nullable: true })
128
+ governorate_wilaya: string | null;
129
+
130
+ @Column({ type: 'varchar', length: 100, nullable: true })
131
+ po_box: string | null; // P.O. Box
132
+
133
+ @Column({ type: 'varchar', length: 50, nullable: true })
134
+ zip_code: string | null;
135
+
136
+ @Column({ type: 'varchar', length: 100, nullable: true })
137
+ house_number: string | null;
138
+
139
+ @Column({ type: 'varchar', length: 100, nullable: true })
140
+ railway_number: string | null;
141
+
142
+ @Column({ type: 'varchar', length: 255, nullable: true })
143
+ governorate: string | null;
144
+
145
+ @Column({ type: 'varchar', length: 255, nullable: true })
146
+ wilayat: string | null;
147
+
148
+ @Column({ type: 'varchar', length: 255, nullable: true })
149
+ locality: string | null;
150
+
151
+ @Column({ type: 'varchar', length: 100, nullable: true })
152
+ country: string | null;
153
+
154
+ // Contact Information
155
+ @Column({ type: 'varchar', length: 50, nullable: true })
156
+ phone_number: string | null;
157
+
158
+ @Column({ type: 'varchar', length: 50, nullable: true })
159
+ fax_number: string | null;
160
+
161
+ @Column({ type: 'varchar', length: 255, nullable: true })
162
+ email: string | null;
163
+
164
+ @Column({ type: 'varchar', length: 255, nullable: true })
165
+ email_address_personal: string | null; // Email Address (Personal)
166
+
167
+ // Additional Personal Information
168
+ @Column({ type: 'varchar', length: 255, nullable: true })
169
+ sheikh_name: string | null; // Sheikh's Name
170
+
171
+ @Column({ type: 'varchar', length: 500, nullable: true })
172
+ photo: string | null;
173
+
174
+ // ========== EMPLOYMENT DETAILS FIELDS (all nullable) ==========
175
+ // Job Information
176
+ @Column({ type: 'varchar', length: 255, nullable: true })
177
+ job_title: string | null;
178
+
179
+ @Column({ type: 'date', nullable: true })
180
+ date_of_decree_issuance: Date | null;
181
+
182
+ @Column({ type: 'varchar', length: 100, nullable: true })
183
+ civil_service_number: string | null;
184
+
185
+ @Column({ type: 'varchar', length: 100, nullable: true })
186
+ information_number: string | null;
187
+
188
+ @Column({ type: 'varchar', length: 100, nullable: true })
189
+ manpower_number: string | null;
190
+
191
+ @Column({ type: 'varchar', length: 100, nullable: true })
192
+ computer_number: string | null;
193
+
194
+ @Column({ type: 'boolean', nullable: true })
195
+ contract_employee: boolean | null;
196
+
197
+ @Column({ type: 'varchar', length: 255, nullable: true })
198
+ nature_of_work: string | null;
199
+
200
+ @Column({ type: 'date', nullable: true })
201
+ retirement_date: Date | null;
202
+
203
+ @Column({ type: 'varchar', length: 255, nullable: true })
204
+ proposed_position: string | null;
205
+
206
+ @Column({ type: 'varchar', length: 100, nullable: true })
207
+ proposed_financial_grade: string | null;
208
+
209
+ @Column({ type: 'date', nullable: true })
210
+ secondment_start_date: Date | null;
211
+
212
+ @Column({ type: 'date', nullable: true })
213
+ secondment_end_date: Date | null;
214
+
215
+ @Column({ type: 'varchar', length: 100, nullable: true })
216
+ disability_type: string | null;
217
+
218
+ @Column({ type: 'date', nullable: true })
219
+ retirement_start_date: Date | null;
220
+
221
+ @Column({ type: 'date', nullable: true })
222
+ contract_end_date: Date | null;
223
+
224
+ @Column({ type: 'varchar', length: 255, nullable: true })
225
+ job_type_group: string | null;
226
+
227
+ // Transfer Information
228
+ @Column({ type: 'varchar', length: 255, nullable: true })
229
+ entity_transferred_from: string | null;
230
+
231
+ @Column({ type: 'date', nullable: true })
232
+ date_of_transfer: Date | null; // Date of Transfer (from)
233
+
234
+ @Column({ type: 'varchar', length: 255, nullable: true })
235
+ entity_transferred_to: string | null;
236
+
237
+ @Column({ type: 'date', nullable: true })
238
+ date_of_transfer_to: Date | null; // Date of Transfer (to)
239
+
240
+ @Column({ type: 'text', nullable: true })
241
+ job_description: string | null;
242
+
243
+ // Appointment Information
244
+ @Column({ type: 'varchar', length: 255, nullable: true })
245
+ country_appointment: string | null;
246
+
247
+ @Column({ type: 'date', nullable: true })
248
+ date_of_appointment: Date | null;
249
+
250
+ @Column({ type: 'varchar', length: 100, nullable: true })
251
+ appointment_grade: string | null;
252
+
253
+ @Column({ type: 'varchar', length: 100, nullable: true })
254
+ type_of_appointment: string | null;
255
+
256
+ @Column({ type: 'varchar', length: 100, nullable: true })
257
+ unit_code: string | null;
258
+
259
+ @Column({ type: 'boolean', nullable: true })
260
+ mc_work: boolean | null; // M&C Work
261
+
262
+ @Column({ type: 'varchar', length: 255, nullable: true })
263
+ office: string | null;
264
+
265
+ @Column({ type: 'varchar', length: 255, nullable: true })
266
+ governorate_name: string | null;
267
+
268
+ @Column({ type: 'varchar', length: 255, nullable: true })
269
+ department: string | null;
270
+
271
+ @Column({ type: 'varchar', length: 255, nullable: true })
272
+ works_in_department: string | null;
273
+
274
+ // Mission Information
275
+ @Column({ type: 'varchar', length: 255, nullable: true })
276
+ full_name_of_mission: string | null;
277
+
278
+ @Column({ type: 'varchar', length: 255, nullable: true })
279
+ mission: string | null;
280
+
281
+ @Column({ type: 'text', nullable: true })
282
+ description_of_mission: string | null;
283
+
284
+ @Column({ type: 'date', nullable: true })
285
+ date_of_last_transfer_to_mission: Date | null;
286
+
287
+ @Column({ type: 'date', nullable: true })
288
+ date_of_last_transfer_from_mission: Date | null;
289
+
290
+ @Column({ type: 'boolean', nullable: true })
291
+ diplomat: boolean | null;
292
+
293
+ // Performance and Termination
294
+ @Column({ type: 'varchar', length: 100, nullable: true })
295
+ efficiency_rating_for_the_year_month: string | null; // Efficiency rating for the year/month
296
+
297
+ @Column({ type: 'date', nullable: true })
298
+ retirement_termination_of_service_date: Date | null; // Retirement/Termination of Service Date
299
+
300
+ @Column({ type: 'text', nullable: true })
301
+ reason_for_leaving_service: string | null;
302
+
303
+ // ========== EDUCATION DETAILS FIELDS (all nullable) ==========
304
+ // Education Information
305
+ @Column({ type: 'date', nullable: true })
306
+ study_start_date: Date | null;
307
+
308
+ @Column({ type: 'date', nullable: true })
309
+ study_end_date: Date | null;
310
+
311
+ // Training Information
312
+ @Column({ type: 'date', nullable: true })
313
+ training_course_start_date: Date | null;
314
+
315
+ @Column({ type: 'date', nullable: true })
316
+ training_course_end_date: Date | null;
317
+ }
@@ -45,6 +45,9 @@ export class UpdateAttendanceApprovalDetails extends BaseModel {
45
45
 
46
46
  @Column({ type: 'enum', enum: UpdateAttendanceApprovalStatus, default: UpdateAttendanceApprovalStatus.PENDING, nullable: false })
47
47
  approval_status: UpdateAttendanceApprovalStatus;
48
+
49
+ @Column({ type: 'boolean', default: true, nullable: false })
50
+ is_allowed: boolean;
48
51
  }
49
52
 
50
53
 
@@ -0,0 +1,26 @@
1
+ import { Column, Entity } from "typeorm";
2
+ import { BaseModel } from './BaseModel';
3
+
4
+ /**
5
+ * User Education Details - only fields from business requirements
6
+ * Linked by user_id (not request_id)
7
+ */
8
+ @Entity({ name: 'user_education_details' })
9
+ export class UserEducationDetails extends BaseModel {
10
+ @Column({ type: 'int', nullable: false })
11
+ user_id: number; // Foreign key to users table
12
+
13
+ // Education Information
14
+ @Column({ type: 'date', nullable: true })
15
+ study_start_date: Date | null;
16
+
17
+ @Column({ type: 'date', nullable: true })
18
+ study_end_date: Date | null;
19
+
20
+ // Training Information
21
+ @Column({ type: 'date', nullable: true })
22
+ training_course_start_date: Date | null;
23
+
24
+ @Column({ type: 'date', nullable: true })
25
+ training_course_end_date: Date | null;
26
+ }
@@ -0,0 +1,141 @@
1
+ import { Column, Entity } from "typeorm";
2
+ import { BaseModel } from './BaseModel';
3
+
4
+ /**
5
+ * User Employment Details - only fields from business requirements
6
+ * Linked by user_id (not request_id)
7
+ * When profile update is approved, data from this table updates users table
8
+ */
9
+ @Entity({ name: 'user_employment_details' })
10
+ export class UserEmploymentDetails extends BaseModel {
11
+ @Column({ type: 'int', nullable: false })
12
+ user_id: number; // Foreign key to users table
13
+
14
+ // Job Information
15
+ @Column({ type: 'varchar', length: 255, nullable: true })
16
+ job_title: string | null;
17
+
18
+ @Column({ type: 'date', nullable: true })
19
+ date_of_decree_issuance: Date | null;
20
+
21
+ @Column({ type: 'varchar', length: 100, nullable: true })
22
+ civil_service_number: string | null;
23
+
24
+ @Column({ type: 'varchar', length: 100, nullable: true })
25
+ information_number: string | null;
26
+
27
+ @Column({ type: 'varchar', length: 100, nullable: true })
28
+ manpower_number: string | null;
29
+
30
+ @Column({ type: 'varchar', length: 100, nullable: true })
31
+ computer_number: string | null;
32
+
33
+ @Column({ type: 'boolean', nullable: true })
34
+ contract_employee: boolean | null;
35
+
36
+ @Column({ type: 'varchar', length: 255, nullable: true })
37
+ nature_of_work: string | null;
38
+
39
+ @Column({ type: 'date', nullable: true })
40
+ retirement_date: Date | null;
41
+
42
+ @Column({ type: 'varchar', length: 255, nullable: true })
43
+ proposed_position: string | null;
44
+
45
+ @Column({ type: 'varchar', length: 100, nullable: true })
46
+ proposed_financial_grade: string | null;
47
+
48
+ @Column({ type: 'date', nullable: true })
49
+ secondment_start_date: Date | null;
50
+
51
+ @Column({ type: 'date', nullable: true })
52
+ secondment_end_date: Date | null;
53
+
54
+ @Column({ type: 'varchar', length: 100, nullable: true })
55
+ disability_type: string | null;
56
+
57
+ @Column({ type: 'date', nullable: true })
58
+ retirement_start_date: Date | null;
59
+
60
+ @Column({ type: 'date', nullable: true })
61
+ contract_end_date: Date | null;
62
+
63
+ @Column({ type: 'varchar', length: 255, nullable: true })
64
+ job_type_group: string | null;
65
+
66
+ // Transfer Information
67
+ @Column({ type: 'varchar', length: 255, nullable: true })
68
+ entity_transferred_from: string | null;
69
+
70
+ @Column({ type: 'date', nullable: true })
71
+ date_of_transfer: Date | null; // Date of Transfer (from)
72
+
73
+ @Column({ type: 'varchar', length: 255, nullable: true })
74
+ entity_transferred_to: string | null;
75
+
76
+ @Column({ type: 'date', nullable: true })
77
+ date_of_transfer_to: Date | null; // Date of Transfer (to)
78
+
79
+ @Column({ type: 'text', nullable: true })
80
+ job_description: string | null;
81
+
82
+ // Appointment Information
83
+ @Column({ type: 'varchar', length: 255, nullable: true })
84
+ country_appointment: string | null;
85
+
86
+ @Column({ type: 'date', nullable: true })
87
+ date_of_appointment: Date | null;
88
+
89
+ @Column({ type: 'varchar', length: 100, nullable: true })
90
+ appointment_grade: string | null;
91
+
92
+ @Column({ type: 'varchar', length: 100, nullable: true })
93
+ type_of_appointment: string | null;
94
+
95
+ @Column({ type: 'varchar', length: 100, nullable: true })
96
+ unit_code: string | null;
97
+
98
+ @Column({ type: 'boolean', nullable: true })
99
+ mc_work: boolean | null; // M&C Work
100
+
101
+ @Column({ type: 'varchar', length: 255, nullable: true })
102
+ office: string | null;
103
+
104
+ @Column({ type: 'varchar', length: 255, nullable: true })
105
+ governorate_name: string | null;
106
+
107
+ @Column({ type: 'varchar', length: 255, nullable: true })
108
+ department: string | null;
109
+
110
+ @Column({ type: 'varchar', length: 255, nullable: true })
111
+ works_in_department: string | null;
112
+
113
+ // Mission Information
114
+ @Column({ type: 'varchar', length: 255, nullable: true })
115
+ full_name_of_mission: string | null;
116
+
117
+ @Column({ type: 'varchar', length: 255, nullable: true })
118
+ mission: string | null;
119
+
120
+ @Column({ type: 'text', nullable: true })
121
+ description_of_mission: string | null;
122
+
123
+ @Column({ type: 'date', nullable: true })
124
+ date_of_last_transfer_to_mission: Date | null;
125
+
126
+ @Column({ type: 'date', nullable: true })
127
+ date_of_last_transfer_from_mission: Date | null;
128
+
129
+ @Column({ type: 'boolean', nullable: true })
130
+ diplomat: boolean | null;
131
+
132
+ // Performance and Termination
133
+ @Column({ type: 'varchar', length: 100, nullable: true })
134
+ efficiency_rating_for_the_year_month: string | null; // Efficiency rating for the year/month
135
+
136
+ @Column({ type: 'date', nullable: true })
137
+ retirement_termination_of_service_date: Date | null; // Retirement/Termination of Service Date
138
+
139
+ @Column({ type: 'text', nullable: true })
140
+ reason_for_leaving_service: string | null;
141
+ }
@@ -0,0 +1,137 @@
1
+ import { Column, Entity } from "typeorm";
2
+ import { BaseModel } from './BaseModel';
3
+
4
+ /**
5
+ * User Personal Details - only fields from business requirements
6
+ * Linked by user_id (not request_id)
7
+ * When profile update is approved, data from this table updates users table
8
+ */
9
+ @Entity({ name: 'user_personal_details' })
10
+ export class UserPersonalDetails extends BaseModel {
11
+ @Column({ type: 'int', nullable: false })
12
+ user_id: number; // Foreign key to users table
13
+
14
+ // Name fields
15
+ @Column({ type: 'varchar', length: 255, nullable: true })
16
+ title: string | null;
17
+
18
+ @Column({ type: 'varchar', length: 255, nullable: true })
19
+ first_name: string | null;
20
+
21
+ @Column({ type: 'varchar', length: 255, nullable: true })
22
+ second_name: string | null;
23
+
24
+ @Column({ type: 'varchar', length: 255, nullable: true })
25
+ third_name: string | null;
26
+
27
+ @Column({ type: 'varchar', length: 255, nullable: true })
28
+ fourth_name: string | null;
29
+
30
+ @Column({ type: 'varchar', length: 255, nullable: true })
31
+ family_name_tribe: string | null;
32
+
33
+ @Column({ type: 'varchar', length: 255, nullable: true })
34
+ previous_name: string | null;
35
+
36
+ // Personal Information
37
+ @Column({ type: 'varchar', length: 100, nullable: true })
38
+ religion: string | null;
39
+
40
+ @Column({ type: 'varchar', length: 100, nullable: true })
41
+ sect: string | null;
42
+
43
+ @Column({ type: 'date', nullable: true })
44
+ date_of_birth: Date | null;
45
+
46
+ @Column({ type: 'varchar', length: 255, nullable: true })
47
+ place_of_birth: string | null;
48
+
49
+ @Column({ type: 'varchar', length: 100, nullable: true })
50
+ nationality: string | null;
51
+
52
+ @Column({ type: 'varchar', length: 50, nullable: true })
53
+ gender: string | null;
54
+
55
+ @Column({ type: 'varchar', length: 50, nullable: true })
56
+ marital_status: string | null;
57
+
58
+ @Column({ type: 'int', nullable: true })
59
+ number_of_dependents: number | null;
60
+
61
+ // Passport Information
62
+ @Column({ type: 'varchar', length: 100, nullable: true })
63
+ passport_number: string | null;
64
+
65
+ @Column({ type: 'varchar', length: 50, nullable: true })
66
+ passport_type: string | null;
67
+
68
+ @Column({ type: 'date', nullable: true })
69
+ issue_date: Date | null; // Passport Issue Date
70
+
71
+ @Column({ type: 'varchar', length: 255, nullable: true })
72
+ place_of_issue: string | null; // Passport Place of Issue
73
+
74
+ @Column({ type: 'date', nullable: true })
75
+ expiry_date: Date | null; // Passport Expiry Date
76
+
77
+ // ID Card Information
78
+ @Column({ type: 'varchar', length: 100, nullable: true })
79
+ id_card_number: string | null;
80
+
81
+ @Column({ type: 'varchar', length: 255, nullable: true })
82
+ id_card_place_of_issue: string | null;
83
+
84
+ @Column({ type: 'date', nullable: true })
85
+ id_card_expiry_date: Date | null;
86
+
87
+ // Address Information
88
+ @Column({ type: 'text', nullable: true })
89
+ permanent_address: string | null;
90
+
91
+ @Column({ type: 'varchar', length: 255, nullable: true })
92
+ governorate_wilaya: string | null;
93
+
94
+ @Column({ type: 'varchar', length: 100, nullable: true })
95
+ po_box: string | null; // P.O. Box
96
+
97
+ @Column({ type: 'varchar', length: 50, nullable: true })
98
+ zip_code: string | null;
99
+
100
+ @Column({ type: 'varchar', length: 100, nullable: true })
101
+ house_number: string | null;
102
+
103
+ @Column({ type: 'varchar', length: 100, nullable: true })
104
+ railway_number: string | null;
105
+
106
+ @Column({ type: 'varchar', length: 255, nullable: true })
107
+ governorate: string | null;
108
+
109
+ @Column({ type: 'varchar', length: 255, nullable: true })
110
+ wilayat: string | null;
111
+
112
+ @Column({ type: 'varchar', length: 255, nullable: true })
113
+ locality: string | null;
114
+
115
+ @Column({ type: 'varchar', length: 100, nullable: true })
116
+ country: string | null;
117
+
118
+ // Contact Information
119
+ @Column({ type: 'varchar', length: 50, nullable: true })
120
+ phone_number: string | null;
121
+
122
+ @Column({ type: 'varchar', length: 50, nullable: true })
123
+ fax_number: string | null;
124
+
125
+ @Column({ type: 'varchar', length: 255, nullable: true })
126
+ email: string | null;
127
+
128
+ @Column({ type: 'varchar', length: 255, nullable: true })
129
+ email_address_personal: string | null; // Email Address (Personal)
130
+
131
+ // Additional Personal Information
132
+ @Column({ type: 'varchar', length: 255, nullable: true })
133
+ sheikh_name: string | null; // Sheikh's Name
134
+
135
+ @Column({ type: 'varchar', length: 500, nullable: true })
136
+ photo: string | null;
137
+ }