@updraft-solutions/mcrit-sdk 0.1.0

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 (79) hide show
  1. package/README.md +240 -0
  2. package/dist/chunk-2DRKSYW4.cjs +99 -0
  3. package/dist/chunk-2M32EOYI.js +145 -0
  4. package/dist/chunk-AN55SAGU.js +1189 -0
  5. package/dist/chunk-D5DUVW34.js +176 -0
  6. package/dist/chunk-HQSF3WGF.cjs +14 -0
  7. package/dist/chunk-JGIAOBZI.js +99 -0
  8. package/dist/chunk-JRVRIKNM.cjs +168 -0
  9. package/dist/chunk-LVTDNDWE.cjs +124 -0
  10. package/dist/chunk-LXNCAKJZ.js +0 -0
  11. package/dist/chunk-MF7G76QS.cjs +176 -0
  12. package/dist/chunk-MI4YBENQ.cjs +145 -0
  13. package/dist/chunk-MOOGM3DW.cjs +1 -0
  14. package/dist/chunk-NQV2D3FJ.js +14 -0
  15. package/dist/chunk-TJXWL42D.js +124 -0
  16. package/dist/chunk-VYT5KQWF.js +168 -0
  17. package/dist/chunk-XKZQ5W7E.cjs +1189 -0
  18. package/dist/courses/index.cjs +7 -0
  19. package/dist/courses/index.d.cts +58 -0
  20. package/dist/courses/index.d.ts +58 -0
  21. package/dist/courses/index.js +7 -0
  22. package/dist/crew/index.cjs +10 -0
  23. package/dist/crew/index.d.cts +102 -0
  24. package/dist/crew/index.d.ts +102 -0
  25. package/dist/crew/index.js +10 -0
  26. package/dist/crew/vue.cjs +34 -0
  27. package/dist/crew/vue.d.cts +31 -0
  28. package/dist/crew/vue.d.ts +31 -0
  29. package/dist/crew/vue.js +34 -0
  30. package/dist/format/index.cjs +44 -0
  31. package/dist/format/index.d.cts +69 -0
  32. package/dist/format/index.d.ts +69 -0
  33. package/dist/format/index.js +44 -0
  34. package/dist/index.cjs +261 -0
  35. package/dist/index.d.cts +11 -0
  36. package/dist/index.d.ts +11 -0
  37. package/dist/index.js +261 -0
  38. package/dist/media/index.cjs +30 -0
  39. package/dist/media/index.d.cts +89 -0
  40. package/dist/media/index.d.ts +89 -0
  41. package/dist/media/index.js +30 -0
  42. package/dist/models-CY3MmvCg.d.cts +33801 -0
  43. package/dist/models-CY3MmvCg.d.ts +33801 -0
  44. package/dist/money/index.cjs +18 -0
  45. package/dist/money/index.d.cts +66 -0
  46. package/dist/money/index.d.ts +66 -0
  47. package/dist/money/index.js +18 -0
  48. package/dist/pagination/index.cjs +6 -0
  49. package/dist/pagination/index.d.cts +16 -0
  50. package/dist/pagination/index.d.ts +16 -0
  51. package/dist/pagination/index.js +6 -0
  52. package/dist/schemas/index.cjs +158 -0
  53. package/dist/schemas/index.d.cts +1019 -0
  54. package/dist/schemas/index.d.ts +1019 -0
  55. package/dist/schemas/index.js +158 -0
  56. package/dist/types/index.cjs +1 -0
  57. package/dist/types/index.d.cts +143 -0
  58. package/dist/types/index.d.ts +143 -0
  59. package/dist/types/index.js +1 -0
  60. package/package.json +171 -0
  61. package/src/courses/index.ts +202 -0
  62. package/src/crew/index.ts +255 -0
  63. package/src/crew/vue.ts +70 -0
  64. package/src/format/index.ts +265 -0
  65. package/src/index.ts +76 -0
  66. package/src/media/index.ts +224 -0
  67. package/src/money/index.ts +168 -0
  68. package/src/pagination/index.ts +27 -0
  69. package/src/schemas/common.ts +73 -0
  70. package/src/schemas/faq.ts +94 -0
  71. package/src/schemas/fee.ts +37 -0
  72. package/src/schemas/index.ts +6 -0
  73. package/src/schemas/models.ts +996 -0
  74. package/src/schemas/report.ts +306 -0
  75. package/src/schemas/safety-report.ts +163 -0
  76. package/src/types/api.ts +37 -0
  77. package/src/types/compliance.ts +44 -0
  78. package/src/types/index.ts +3 -0
  79. package/src/types/models.ts +124 -0
@@ -0,0 +1,996 @@
1
+ import { z } from "zod";
2
+ import {
3
+ BaseModel,
4
+ companySchema,
5
+ contactAttributeSchema,
6
+ mediaSchema,
7
+ userSchema,
8
+ zContactDTO,
9
+ zNullableBool,
10
+ zNetGross,
11
+ zPhpMoneyObject,
12
+ } from "./common";
13
+
14
+ export const baseMembershipSchema = z.object({
15
+ type: z.literal("membership"),
16
+ id: z.number(),
17
+ user_id: z.number(),
18
+ user: userSchema.optional(),
19
+ company_id: z.number(),
20
+ company: companySchema.nullable().optional(),
21
+ name: z.string(),
22
+ status: z.string(),
23
+ instructor: z.boolean(),
24
+ admin: z.boolean(),
25
+ accountant: z.boolean(),
26
+ student: z.boolean(),
27
+ created_at: z.string(),
28
+ updated_at: z.string(),
29
+ can: z
30
+ .object({
31
+ update: zNullableBool,
32
+ deactivate: zNullableBool,
33
+ activate: zNullableBool,
34
+ delete: zNullableBool,
35
+ })
36
+ .optional(),
37
+ });
38
+
39
+ export const membershipSchema = baseMembershipSchema.extend({
40
+ remarks: z.string().nullable().optional(),
41
+ confirmed_at: z.string().nullable(),
42
+ created_at: z.string(),
43
+ updated_at: z.string(),
44
+ });
45
+
46
+ export const documentType = z.object({
47
+ label: z.string(),
48
+ description: z.string(),
49
+ documentTypeClass: z.string(),
50
+ requiresFile: z.boolean().optional(),
51
+ fieldDefinitions: z
52
+ .object({
53
+ base: z.record(z.any()).optional(),
54
+ data: z.record(z.any()).optional(),
55
+ })
56
+ .optional(),
57
+ validationRules: z.record(z.any()).optional(),
58
+ });
59
+
60
+ export const priceSchema = z.object({
61
+ id: z.number(),
62
+ gross_total: zPhpMoneyObject,
63
+ net_total: zPhpMoneyObject,
64
+ tax_percentage: z.number(),
65
+ valid_from: z.string(),
66
+ created_at: z.string(),
67
+ updated_at: z.string(),
68
+ input_value: z.number().optional(),
69
+ net_gross: zNetGross,
70
+ });
71
+
72
+ export const feeSchema = BaseModel.extend({
73
+ type: z.literal("fee"),
74
+ id: z.number(),
75
+ price: priceSchema.optional(),
76
+ prices: z.array(priceSchema).optional(),
77
+ provider: z.string().optional(),
78
+ company_id: z.number().optional(),
79
+ company: companySchema.optional(),
80
+ ident: z.string().optional(),
81
+ category: z.string().optional(),
82
+ subcategory: z.string().optional(),
83
+ title: z.string().optional(),
84
+ relation: z
85
+ .array(z.enum(["booking", "flightLog", "invoice", "instructor"]))
86
+ .optional(),
87
+ payment_per: z.string().optional(),
88
+ can: z
89
+ .object({
90
+ update: zNullableBool,
91
+ delete: zNullableBool,
92
+ })
93
+ .optional(),
94
+ course_count: z.number().optional(),
95
+ count: z.number().optional(),
96
+ variant: z.string().optional(),
97
+ is_optional: z.boolean().optional(),
98
+ input_value: z.number().optional(),
99
+ net_gross: zNetGross,
100
+ tax_percentage: z.string().optional(),
101
+ valid_from: z.string(),
102
+ });
103
+
104
+ export const courseFeeSchema = feeSchema.extend({
105
+ count: z.number().optional(),
106
+ variant: z.string().optional(),
107
+ is_optional: z.boolean().optional(),
108
+ });
109
+
110
+ export const airplaneSchema = BaseModel.extend({
111
+ type: z.literal("airplane"),
112
+ id: z.number(),
113
+ company_id: z.number(),
114
+ registration: z.string(),
115
+ model: z.string(),
116
+ media: z
117
+ .object({
118
+ avatar: mediaSchema.nullable().optional(),
119
+ header: mediaSchema.nullable().optional(),
120
+ images: z.array(mediaSchema).nullable().optional(),
121
+ documents: z.array(mediaSchema).nullable().optional(),
122
+ })
123
+ .nullable()
124
+ .optional()
125
+ .optional(),
126
+ fee: feeSchema.optional(),
127
+ booking_fee: feeSchema.optional(),
128
+ hasFavorited: z.boolean().optional(),
129
+ homebase_id: z.number().nullable().optional(),
130
+ description: z.string().optional(),
131
+ capacity: z.number().optional(),
132
+ manufacturer: z.string().optional(),
133
+ year_of_construction: z.string().optional(),
134
+ span: z.string().optional(),
135
+ height: z.string().optional(),
136
+ length: z.string().optional(),
137
+ ato: z.boolean().optional(),
138
+ restricted_access: z.boolean().optional(),
139
+ can: z.object({
140
+ view: zNullableBool,
141
+ update: zNullableBool,
142
+ viewMaintenanceEvents: zNullableBool,
143
+ createMaintenanceEvents: zNullableBool,
144
+ createBooking: zNullableBool,
145
+ manageAirplanePermissions: zNullableBool,
146
+ }),
147
+ });
148
+
149
+ export const airplanePermissionSchema = z.object({
150
+ type: z.literal("airplane_permission"),
151
+ id: z.number(),
152
+ airplane_id: z.number(),
153
+ airplane: airplaneSchema.optional(),
154
+ membership_id: z.number(),
155
+ membership: baseMembershipSchema.optional(),
156
+ notes: z.string().nullable().optional(),
157
+ conditions: z.string().nullable().optional(),
158
+ expires_at: z.string().nullable().optional(),
159
+ is_active: z.boolean(),
160
+ granted_by: userSchema.nullable().optional(),
161
+ granted_at: z.string(),
162
+ created_at: z.string(),
163
+ updated_at: z.string(),
164
+ can: z
165
+ .object({
166
+ view: zNullableBool,
167
+ update: zNullableBool,
168
+ delete: zNullableBool,
169
+ })
170
+ .optional(),
171
+ });
172
+
173
+ export const landingFeeSchema = z.object({
174
+ id: z.number(),
175
+ airplane_id: z.number(),
176
+ price: priceSchema.optional(),
177
+ });
178
+
179
+ export const aircraftRatingSchema = z.object({
180
+ id: z.number(),
181
+ manufacturer: z.string(),
182
+ aircraft_model: z.string(),
183
+ licence_endorsement: z.string(),
184
+ is_complex: z.boolean(),
185
+ is_single_pilot: z.boolean(),
186
+ is_high_performance: z.boolean(),
187
+ is_multi_pilot: z.boolean(),
188
+ remarks: z.string().optional(),
189
+ });
190
+
191
+ export const userAircraftRatingSchema = z.object({
192
+ id: z.number(),
193
+ user_id: z.number(),
194
+ aircraft_rating_id: z.number(),
195
+ aircraftRating: aircraftRatingSchema,
196
+ reminder_enabled: z.boolean(),
197
+ reminder_days: z.number(),
198
+ expires_at: z.string(),
199
+ created_at: z.string(),
200
+ updated_at: z.string(),
201
+ });
202
+
203
+ export const userQualificationSchema = z.object({
204
+ id: z.number(),
205
+ user_id: z.number(),
206
+ title: z.string(),
207
+ reminder_enabled: z.boolean(),
208
+ reminder_days: z.number(),
209
+ expires_at: z.string(),
210
+ created_at: z.string(),
211
+ updated_at: z.string(),
212
+ });
213
+
214
+ export const airportSchema = z.object({
215
+ type: z.literal("airport"),
216
+ id: z.number(),
217
+ ident: z.string(),
218
+ name: z.string(),
219
+ country: z.string(),
220
+ });
221
+
222
+ export const recurringFlightSchema = z.object({
223
+ id: z.number(),
224
+ departure_airport_id: z.number(),
225
+ departure_airport: airportSchema.optional(),
226
+ destination_airport_id: z.number(),
227
+ destination_airport: airportSchema.optional(),
228
+ dep_time: z.string(),
229
+ arr_time: z.string(),
230
+ });
231
+
232
+ export const maintenanceEventSchema = z.object({
233
+ type: z.literal("maintenanceEvent"),
234
+ id: z.number(),
235
+ airplane_id: z.number(),
236
+ company_id: z.number(),
237
+ description: z.string().nullable(),
238
+ remarks: z.string().nullable(),
239
+ scheduled_at: z.string().nullable(),
240
+ completed_at: z.string().nullable(),
241
+ created_at: z.string(),
242
+ updated_at: z.string(),
243
+ elapsed_time: z.number().nullable(),
244
+ remaining_time: z.number().nullable(),
245
+ can: z
246
+ .object({
247
+ update: zNullableBool,
248
+ })
249
+ .optional(),
250
+ });
251
+
252
+ export const maintenanceEventEstimationSchema = z.object({
253
+ estimated_at: z.string().nullable().optional(),
254
+ actual_at: z.string().nullable().optional(),
255
+ });
256
+
257
+ export const maintenanceStatusSchema = z.object({
258
+ intervalSetting: z.number().optional(),
259
+ lastMaintenanceEvent: maintenanceEventSchema.nullable().optional(),
260
+ nextMaintenanceEventEstimation: maintenanceEventEstimationSchema
261
+ .nullable()
262
+ .optional(),
263
+ });
264
+
265
+ export const extendedAirplaneSchema = airplaneSchema.extend({
266
+ manufacturer: z.string().optional(),
267
+ capacity: z.number().optional(),
268
+ description: z.string().optional(),
269
+ homebase_id: z.number().optional(),
270
+ ato: z.boolean().optional(),
271
+ year_of_construction: z.string().optional(),
272
+ span: z.string().optional(),
273
+ height: z.string().optional(),
274
+ length: z.string().optional(),
275
+ empty_weight: z.string().optional(),
276
+ max_takeoff_mass: z.string().optional(),
277
+ max_speed: z.string().optional(),
278
+ max_range: z.string().optional(),
279
+ power: z.string().optional(),
280
+ fuel_type: z.string().optional(),
281
+ oil_min: z.string().optional(),
282
+ oil_max: z.string().optional(),
283
+ oil_type_winter: z.string().optional(),
284
+ oil_type_summer: z.string().optional(),
285
+ minimumCrewCount: z.number().optional(),
286
+ VFR: z.boolean().optional(),
287
+ VFRNight: z.boolean().optional(),
288
+ IFR: z.boolean().optional(),
289
+ IFRKnownIcing: z.boolean().optional(),
290
+ equipment: z.array(z.any()).optional(),
291
+ contact: contactAttributeSchema.optional(),
292
+ hints: z
293
+ .object({
294
+ booking: z
295
+ .object({
296
+ ifr: z.string().optional(),
297
+ })
298
+ .optional(),
299
+ })
300
+ .optional(),
301
+ has_pre_paid_package: z.boolean().optional(),
302
+ fee_id: z.number().optional(),
303
+ booking_fee_id: z.number().optional(),
304
+ logging_required_from: z.string().optional(),
305
+ foreflight_profile_url: z.string().optional(),
306
+ media: z
307
+ .object({
308
+ avatar: z.any().optional(),
309
+ header: z.any().optional(),
310
+ images: z.array(z.any()).optional(),
311
+ documents: z.array(z.any()).optional(),
312
+ })
313
+ .optional(),
314
+ can: z
315
+ .object({
316
+ update: zNullableBool,
317
+ viewMaintenanceEvents: zNullableBool,
318
+ })
319
+ .optional(),
320
+ });
321
+
322
+ export const availSchema = z.object({
323
+ type: z.literal("avail"),
324
+ id: z.number(),
325
+ airplane_id: z.number(),
326
+ title: z.string(),
327
+ etdZ: z.string(),
328
+ etaZ: z.string(),
329
+ can: z
330
+ .object({
331
+ update: zNullableBool,
332
+ })
333
+ .optional(),
334
+ });
335
+
336
+ export const bookingSchema = BaseModel.extend({
337
+ type: z.literal("booking"),
338
+ ifr: z.boolean().default(false),
339
+ airplane_id: z.number(),
340
+ author: userSchema.optional(),
341
+ attendants: z.array(userSchema).optional(),
342
+ company_id: z.number(),
343
+ company: companySchema.optional(),
344
+ airplane: airplaneSchema.optional(),
345
+ attendant_ids: z.array(z.number()).optional(),
346
+ etdZ: z.string(),
347
+ etaZ: z.string(),
348
+ duration_minutes: z.number().optional(),
349
+ departure_airport_id: z.number().optional(),
350
+ destination_airport_id: z.number().optional(),
351
+ departure_airport: airportSchema.optional(),
352
+ destination_airport: airportSchema.optional(),
353
+ next_booking_id: z.number().nullable().optional(),
354
+ previous_booking_id: z.number().nullable().optional(),
355
+ maintenance: z.number().optional(),
356
+ contact: zContactDTO.optional(),
357
+ remarks: z.string().optional(),
358
+ can: z
359
+ .object({
360
+ update: zNullableBool,
361
+ })
362
+ .optional(),
363
+ });
364
+
365
+ export const alertSchema = z.object({
366
+ id: z.number(),
367
+ start_time: z.string(),
368
+ finish_time: z.string(),
369
+ can: z
370
+ .object({
371
+ update: zNullableBool,
372
+ })
373
+ .optional(),
374
+ });
375
+
376
+ export const documentSchema = z.object({
377
+ type: z.literal("document"),
378
+ id: z.number(),
379
+ documentable_type: z.string(),
380
+ documentable_id: z.number(),
381
+ document_type_class: z.string(),
382
+ document_type: documentType.optional(),
383
+ title: z.string().nullable().optional(),
384
+ description: z.string().nullable().optional(),
385
+ expires_at: z.string().nullable().optional(),
386
+ is_notifiable: z.boolean().default(true),
387
+ notification_days: z.number().nullable().optional(),
388
+ data: z.record(z.any()).nullable().optional(),
389
+ created_by: z.number().nullable().optional(),
390
+ updated_by: z.number().nullable().optional(),
391
+ created_at: z.string(),
392
+ updated_at: z.string(),
393
+ media: z.array(mediaSchema).optional(),
394
+ can: z
395
+ .object({
396
+ update: zNullableBool,
397
+ delete: zNullableBool,
398
+ share: zNullableBool,
399
+ })
400
+ .optional(),
401
+ });
402
+
403
+ export const documentRequirement = z.object({
404
+ id: z.number(),
405
+ document_requirement_group_id: z.number(),
406
+ document_type_class: z.string(),
407
+ document_type: documentType.optional(),
408
+ logical_group: z.string().nullable().optional(),
409
+ group_operator: z.enum(["AND", "OR"]).nullable().optional(),
410
+ metadata: z
411
+ .object({
412
+ min_validity_days: z.number().optional(),
413
+ max_validity_days: z.number().optional(),
414
+ required_fields: z.array(z.string()).optional(),
415
+ })
416
+ .nullable()
417
+ .optional(),
418
+ created_by: z.number().nullable().optional(),
419
+ updated_by: z.number().nullable().optional(),
420
+ created_at: z.string(),
421
+ updated_at: z.string(),
422
+ });
423
+
424
+ export const documentRequirementGroup = z.object({
425
+ id: z.number(),
426
+ name: z.string(),
427
+ description: z.string().nullable().optional(),
428
+ target_model_type: z.string(),
429
+ company_id: z.number().nullable().optional(),
430
+ is_default_template: z.boolean().default(false),
431
+ is_active: z.boolean().default(true),
432
+ requirements: z.array(documentRequirement).optional(),
433
+ documentRequirements: z.array(documentRequirement).optional(),
434
+ group_operator: z.enum(["AND", "OR"]).default("AND"),
435
+ requirements_count: z.number().optional(),
436
+ assignments_count: z.number().optional(),
437
+ created_by: z.number().nullable().optional(),
438
+ updated_by: z.number().nullable().optional(),
439
+ created_at: z.string(),
440
+ updated_at: z.string(),
441
+ can: z
442
+ .object({
443
+ update: zNullableBool,
444
+ delete: zNullableBool,
445
+ assign: zNullableBool,
446
+ })
447
+ .optional(),
448
+ });
449
+
450
+ export const documentRequirementGroupAssignment = z.object({
451
+ id: z.number(),
452
+ assignable_type: z.string(),
453
+ assignable_id: z.number(),
454
+ document_requirement_group_id: z.number(),
455
+ requirement_group: documentRequirementGroup.optional(),
456
+ requirementGroup: documentRequirementGroup.optional(),
457
+ created_at: z.string(),
458
+ updated_at: z.string(),
459
+ });
460
+
461
+ export const documentComplianceStatus = z.object({
462
+ overall_compliant: z.boolean(),
463
+ missing_documents: z
464
+ .array(
465
+ z.object({
466
+ requirement_id: z.number(),
467
+ document_type_class: z.string(),
468
+ document_type: documentType.optional(),
469
+ reason: z.string(),
470
+ }),
471
+ )
472
+ .optional(),
473
+ expired_documents: z
474
+ .array(
475
+ z.object({
476
+ document_id: z.number(),
477
+ document_type_class: z.string(),
478
+ document_type: documentType.optional(),
479
+ expired_at: z.string(),
480
+ }),
481
+ )
482
+ .optional(),
483
+ expiring_soon_documents: z
484
+ .array(
485
+ z.object({
486
+ document_id: z.number(),
487
+ document_type_class: z.string(),
488
+ document_type: documentType.optional(),
489
+ expires_at: z.string(),
490
+ days_until_expiry: z.number(),
491
+ }),
492
+ )
493
+ .optional(),
494
+ group_compliance_status: z
495
+ .array(
496
+ z.object({
497
+ group_id: z.number(),
498
+ group_name: z.string(),
499
+ is_compliant: z.boolean(),
500
+ missing_requirements: z.array(z.string()).optional(),
501
+ }),
502
+ )
503
+ .optional(),
504
+ });
505
+
506
+ export const documentShareSchema = z.object({
507
+ id: z.number(),
508
+ document_id: z.number(),
509
+ document: documentSchema.optional(),
510
+ shared_by: z.number(),
511
+ sharer: userSchema.optional(),
512
+ shared_with_type: z.string(),
513
+ shared_with_id: z.number(),
514
+ can_download: z.boolean().default(true),
515
+ can_delete: z.boolean().default(false),
516
+ expires_at: z.string().nullable().optional(),
517
+ accessed_at: z.string().nullable().optional(),
518
+ access_count: z.number().default(0),
519
+ created_at: z.string(),
520
+ updated_at: z.string(),
521
+ });
522
+
523
+ export const allowedDocumentTypeSchema = z.object({
524
+ label: z.string(),
525
+ description: z.string(),
526
+ documentTypeClass: z.string(),
527
+ requiresFile: z.boolean(),
528
+ category: z.string().optional(),
529
+ fieldDefinitions: z
530
+ .object({
531
+ base: z
532
+ .record(
533
+ z.object({
534
+ type: z.string(),
535
+ label: z.string(),
536
+ required: z.boolean().optional(),
537
+ rules: z.array(z.any()).optional(),
538
+ options: z.array(z.any()).optional(),
539
+ hint: z.string().optional(),
540
+ }),
541
+ )
542
+ .optional(),
543
+ data: z
544
+ .record(
545
+ z.object({
546
+ type: z.string(),
547
+ label: z.string(),
548
+ required: z.boolean().optional(),
549
+ rules: z.array(z.any()).optional(),
550
+ options: z.array(z.any()).optional(),
551
+ hint: z.string().optional(),
552
+ }),
553
+ )
554
+ .optional(),
555
+ })
556
+ .optional(),
557
+ });
558
+
559
+ export const flightLogSchema = z.object({
560
+ type: z.literal("flightLog"),
561
+ id: z.number(),
562
+ airplane_id: z.number(),
563
+ airplane: airplaneSchema.optional(),
564
+ ac_type: z.string().nullable().optional(),
565
+ ac_reg: z.string().nullable().optional(),
566
+ ac_call: z.string().nullable().optional(),
567
+ booking_id: z.number().nullable().optional(),
568
+ membership_id: z.number().nullable().optional(),
569
+ membership: baseMembershipSchema.optional(),
570
+ author_id: z.number(),
571
+ author: userSchema.optional(),
572
+ invoice_id: z.number().nullable().optional(),
573
+ special_flight_id: z.number().nullable().optional(),
574
+ etdZ: z.string(),
575
+ etaZ: z.string(),
576
+ duration_minutes: z.number(),
577
+ crew: z.array(z.any()).nullable().optional(),
578
+ attendants: z.array(z.any()).nullable().optional(),
579
+ total_landings: z.number().nullable().optional(),
580
+ full_stop_landings: z.number().nullable().optional(),
581
+ touch_and_gos: z.number().default(0),
582
+ flight_rule: z.string().nullable().optional(),
583
+ flight_time_type: z.string().nullable().optional(),
584
+ dep_airport_id: z.number().nullable().optional(),
585
+ dep_airport: airportSchema.optional(),
586
+ arr_airport_id: z.number().nullable().optional(),
587
+ arr_airport: airportSchema.optional(),
588
+ from: z.string().nullable().optional(),
589
+ to: z.string().nullable().optional(),
590
+ costs: zPhpMoneyObject.nullable().optional(),
591
+ charge: zPhpMoneyObject.nullable().optional(),
592
+ remarks: z.string().nullable().optional(),
593
+ created_at: z.string(),
594
+ updated_at: z.string(),
595
+ can: z
596
+ .object({
597
+ update: zNullableBool,
598
+ delete: zNullableBool,
599
+ })
600
+ .optional(),
601
+ });
602
+
603
+ export const invoiceSchema = z.object({
604
+ type: z.literal("invoice"),
605
+ id: z.number(),
606
+ title: z.string(),
607
+ membership_id: z.number(),
608
+ membership: baseMembershipSchema.optional(),
609
+ company_id: z.number().optional(),
610
+ company: companySchema.optional(),
611
+ sequence_number: z.string().nullable().optional(),
612
+ order_number: z.string().nullable().optional(),
613
+ invoice_date: z.string().nullable().optional(),
614
+ due_date: z.string().nullable().optional(),
615
+ status: z.string().nullable().optional(),
616
+ paid_status: z.string().nullable().optional(),
617
+ total: zPhpMoneyObject.nullable().optional(),
618
+ subtotal: zPhpMoneyObject.nullable().optional(),
619
+ tax_amount: zPhpMoneyObject.nullable().optional(),
620
+ discount_amount: zPhpMoneyObject.nullable().optional(),
621
+ paid_at: z.string().nullable().optional(),
622
+ released_at: z.string().nullable().optional(),
623
+ sent: z.number().default(0),
624
+ viewed: z.boolean().default(false),
625
+ remarks: z.string().nullable().optional(),
626
+ notes: z.string().nullable().optional(),
627
+ recipient_company: z.string().nullable().optional(),
628
+ recipient_name: z.string().nullable().optional(),
629
+ recipient_address_street_1: z.string().nullable().optional(),
630
+ recipient_address_street_2: z.string().nullable().optional(),
631
+ recipient_city: z.string().nullable().optional(),
632
+ recipient_zip: z.string().nullable().optional(),
633
+ recipient_state: z.string().nullable().optional(),
634
+ recipient_country: z.string().nullable().optional(),
635
+ issuer_name: z.string().nullable().optional(),
636
+ issuer_address_street_1: z.string().nullable().optional(),
637
+ issuer_address_street_2: z.string().nullable().optional(),
638
+ issuer_city: z.string().nullable().optional(),
639
+ issuer_zip: z.string().nullable().optional(),
640
+ issuer_state: z.string().nullable().optional(),
641
+ created_at: z.string(),
642
+ updated_at: z.string(),
643
+ can: z
644
+ .object({
645
+ update: zNullableBool,
646
+ delete: zNullableBool,
647
+ release: zNullableBool,
648
+ view: zNullableBool,
649
+ })
650
+ .optional(),
651
+ });
652
+
653
+ export const scheduledFlightSchema = z.object({
654
+ type: z.literal("scheduledFlight"),
655
+ id: z.number(),
656
+ booking_id: z.number(),
657
+ departure_time: z.string(),
658
+ arrival_time: z.string(),
659
+ departure_airport_id: z.number().nullable().optional(),
660
+ departure_airport: airportSchema.optional(),
661
+ arrival_airport_id: z.number().nullable().optional(),
662
+ arrival_airport: airportSchema.optional(),
663
+ flight_number: z.string().nullable().optional(),
664
+ notes: z.string().nullable().optional(),
665
+ created_at: z.string(),
666
+ updated_at: z.string(),
667
+ });
668
+
669
+ export const qualificationSchema = z.object({
670
+ type: z.literal("qualification"),
671
+ id: z.number(),
672
+ title: z.string(),
673
+ description: z.string().nullable().optional(),
674
+ category: z.string().nullable().optional(),
675
+ created_at: z.string(),
676
+ updated_at: z.string(),
677
+ });
678
+
679
+ export const expenseSchema = z.object({
680
+ type: z.literal("expense"),
681
+ id: z.number(),
682
+ company_id: z.number(),
683
+ company: companySchema.optional(),
684
+ membership_id: z.number(),
685
+ membership: baseMembershipSchema.optional(),
686
+ title: z.string(),
687
+ description: z.string().nullable().optional(),
688
+ amount: zPhpMoneyObject,
689
+ status: z.string().nullable().optional(),
690
+ expense_date: z.string().nullable().optional(),
691
+ invoice_id: z.number().nullable().optional(),
692
+ created_at: z.string(),
693
+ updated_at: z.string(),
694
+ can: z
695
+ .object({
696
+ update: zNullableBool,
697
+ delete: zNullableBool,
698
+ approve: zNullableBool,
699
+ })
700
+ .optional(),
701
+ });
702
+
703
+ export const courseSchema = z.object({
704
+ type: z.literal("course"),
705
+ id: z.number(),
706
+ company_id: z.number(),
707
+ company: companySchema.optional(),
708
+ name: z.string(),
709
+ description: z.string().nullable().optional(),
710
+ start_date: z.string().nullable().optional(),
711
+ end_date: z.string().nullable().optional(),
712
+ max_participants: z.number().nullable().optional(),
713
+ price: zPhpMoneyObject.nullable().optional(),
714
+ instructor_id: z.number().nullable().optional(),
715
+ instructor: userSchema.optional(),
716
+ aircraft_required: z.boolean().default(false),
717
+ qualification_id: z.number().nullable().optional(),
718
+ qualification: qualificationSchema.optional(),
719
+ created_at: z.string(),
720
+ updated_at: z.string(),
721
+ can: z
722
+ .object({
723
+ update: zNullableBool,
724
+ delete: zNullableBool,
725
+ enroll: zNullableBool,
726
+ })
727
+ .optional(),
728
+ });
729
+
730
+ export const courseEnrollmentSchema = z.object({
731
+ type: z.literal("course_enrollment").optional(),
732
+ id: z.number(),
733
+ course_id: z.number(),
734
+ membership_id: z.number(),
735
+ company_id: z.number(),
736
+ mentor_id: z.number().nullable().optional(),
737
+ status: z.enum(["enrolled", "completed", "cancelled", "suspended"]),
738
+ enrollment_date: z.string(),
739
+ completion_date: z.string().nullable().optional(),
740
+ progress_percentage: z.number().default(0),
741
+ comments: z.string().nullable().optional(),
742
+ created_at: z.string(),
743
+ updated_at: z.string(),
744
+ course: courseSchema.optional(),
745
+ membership: membershipSchema.optional(),
746
+ mentor: userSchema.optional(),
747
+ can: z
748
+ .object({
749
+ view: zNullableBool,
750
+ update: zNullableBool,
751
+ delete: zNullableBool,
752
+ complete: zNullableBool,
753
+ })
754
+ .optional(),
755
+ });
756
+
757
+ export const eventSchema = z.object({
758
+ type: z.literal("event"),
759
+ id: z.number(),
760
+ company_id: z.number(),
761
+ company: companySchema.optional(),
762
+ title: z.string(),
763
+ description: z.string().nullable().optional(),
764
+ start_date: z.string(),
765
+ end_date: z.string().nullable().optional(),
766
+ all_day: z.boolean().default(false),
767
+ location: z.string().nullable().optional(),
768
+ category: z.string().nullable().optional(),
769
+ created_by: z.number(),
770
+ creator: userSchema.optional(),
771
+ created_at: z.string(),
772
+ updated_at: z.string(),
773
+ can: z
774
+ .object({
775
+ update: zNullableBool,
776
+ delete: zNullableBool,
777
+ attend: zNullableBool,
778
+ })
779
+ .optional(),
780
+ });
781
+
782
+ export const addressSchema = z.object({
783
+ type: z.literal("address"),
784
+ id: z.number(),
785
+ company_id: z.number().nullable().optional(),
786
+ addressable_type: z.string(),
787
+ addressable_id: z.number(),
788
+ street: z.string().nullable().optional(),
789
+ house_number: z.string().nullable().optional(),
790
+ postal_code: z.string().nullable().optional(),
791
+ city: z.string().nullable().optional(),
792
+ state: z.string().nullable().optional(),
793
+ country: z.string().nullable().optional(),
794
+ additional_info: z.string().nullable().optional(),
795
+ created_at: z.string(),
796
+ updated_at: z.string(),
797
+ });
798
+
799
+ export const roleSchema = z.object({
800
+ type: z.literal("role"),
801
+ id: z.number(),
802
+ company_id: z.number(),
803
+ name: z.string(),
804
+ description: z.string().nullable().optional(),
805
+ permissions: z.array(z.string()).optional(),
806
+ created_at: z.string(),
807
+ updated_at: z.string(),
808
+ });
809
+
810
+ export const landingSchema = z.object({
811
+ type: z.literal("landing"),
812
+ id: z.number(),
813
+ flight_log_id: z.number(),
814
+ approach_type_id: z.number().nullable().optional(),
815
+ airport_id: z.number().nullable().optional(),
816
+ airport: airportSchema.optional(),
817
+ landing_fee_id: z.number().nullable().optional(),
818
+ landing_time: z.string(),
819
+ price: zPhpMoneyObject.nullable().optional(),
820
+ created_at: z.string(),
821
+ updated_at: z.string(),
822
+ });
823
+
824
+ export const ticketSchema = z.object({
825
+ type: z.literal("ticket"),
826
+ id: z.number(),
827
+ company_id: z.number().nullable().optional(),
828
+ company: companySchema.optional(),
829
+ user_id: z.number(),
830
+ user: userSchema.optional(),
831
+ assigned_to: z.number().nullable().optional(),
832
+ assignee: userSchema.optional(),
833
+ title: z.string(),
834
+ description: z.string(),
835
+ status: z.string(),
836
+ priority: z.string().nullable().optional(),
837
+ category: z.string().nullable().optional(),
838
+ resolved_at: z.string().nullable().optional(),
839
+ created_at: z.string(),
840
+ updated_at: z.string(),
841
+ can: z
842
+ .object({
843
+ update: zNullableBool,
844
+ delete: zNullableBool,
845
+ resolve: zNullableBool,
846
+ })
847
+ .optional(),
848
+ });
849
+
850
+ export const runwaySchema = z.object({
851
+ type: z.literal("runway"),
852
+ id: z.number(),
853
+ airport_id: z.number(),
854
+ airport: airportSchema.optional(),
855
+ name: z.string(),
856
+ length_m: z.number().nullable().optional(),
857
+ width_m: z.number().nullable().optional(),
858
+ surface: z.string().nullable().optional(),
859
+ heading: z.number().nullable().optional(),
860
+ elevation_m: z.number().nullable().optional(),
861
+ active: z.boolean().default(true),
862
+ created_at: z.string(),
863
+ updated_at: z.string(),
864
+ });
865
+
866
+ export const settingSchema = z.object({
867
+ type: z.literal("setting"),
868
+ id: z.number(),
869
+ model_type: z.string(),
870
+ model_id: z.number(),
871
+ key: z.string(),
872
+ value: z.any(),
873
+ created_at: z.string(),
874
+ updated_at: z.string(),
875
+ });
876
+
877
+ export const postSchema = z.object({
878
+ type: z.literal("post"),
879
+ id: z.number(),
880
+ postable_type: z.string(),
881
+ postable_id: z.number(),
882
+ author_id: z.number(),
883
+ author: userSchema.optional(),
884
+ title: z.string(),
885
+ content: z.string(),
886
+ published: z.boolean().default(false),
887
+ published_at: z.string().nullable().optional(),
888
+ created_at: z.string(),
889
+ updated_at: z.string(),
890
+ can: z
891
+ .object({
892
+ update: zNullableBool,
893
+ delete: zNullableBool,
894
+ publish: zNullableBool,
895
+ })
896
+ .optional(),
897
+ });
898
+
899
+ export const commentSchema = z.object({
900
+ type: z.literal("comment"),
901
+ id: z.number(),
902
+ commentable_type: z.string().optional(),
903
+ commentable_id: z.number().optional(),
904
+ parent_id: z.number().optional().nullable(),
905
+ title: z.string().optional().nullable(),
906
+ body: z.string(),
907
+ author_id: z.number().optional(),
908
+ author: userSchema.optional(),
909
+ resolved_at: z.string().optional().nullable(),
910
+ created_at: z.string(),
911
+ updated_at: z.string().optional(),
912
+ children: z.lazy((): z.ZodTypeAny => commentSchema.array()).optional(),
913
+ can: z
914
+ .object({
915
+ view: z.boolean().optional(),
916
+ update: z.boolean().optional().nullable(),
917
+ delete: z.boolean().optional().nullable(),
918
+ resolve: z.boolean().optional(),
919
+ reply: z.boolean().optional(),
920
+ viewComments: z.boolean().optional(),
921
+ createComments: z.boolean().optional(),
922
+ })
923
+ .optional(),
924
+ });
925
+
926
+ export const specialFlightSchema = z.object({
927
+ type: z.literal("specialFlight"),
928
+ id: z.number(),
929
+ company_id: z.number(),
930
+ company: companySchema.optional(),
931
+ name: z.string(),
932
+ description: z.string().nullable().optional(),
933
+ fee_id: z.number().nullable().optional(),
934
+ fee: feeSchema.optional(),
935
+ active: z.boolean().default(true),
936
+ created_at: z.string(),
937
+ updated_at: z.string(),
938
+ });
939
+
940
+ export const prePaidPackageSchema = z.object({
941
+ type: z.literal("prePaidPackage"),
942
+ id: z.number(),
943
+ company_id: z.number(),
944
+ company: companySchema.optional(),
945
+ name: z.string(),
946
+ description: z.string().nullable().optional(),
947
+ balance: zPhpMoneyObject,
948
+ initial_amount: zPhpMoneyObject,
949
+ discount_percentage: z.number().nullable().optional(),
950
+ valid_until: z.string().nullable().optional(),
951
+ created_at: z.string(),
952
+ updated_at: z.string(),
953
+ can: z
954
+ .object({
955
+ update: zNullableBool,
956
+ delete: zNullableBool,
957
+ assign: zNullableBool,
958
+ })
959
+ .optional(),
960
+ });
961
+
962
+ export const expenseItemSchema = z.object({
963
+ type: z.literal("expenseItem"),
964
+ id: z.number(),
965
+ company_id: z.number(),
966
+ company: companySchema.optional(),
967
+ name: z.string(),
968
+ description: z.string().nullable().optional(),
969
+ category: z.string().nullable().optional(),
970
+ active: z.boolean().default(true),
971
+ created_at: z.string(),
972
+ updated_at: z.string(),
973
+ });
974
+
975
+ export const waypointSchema = z.object({
976
+ type: z.literal("waypoint"),
977
+ id: z.number(),
978
+ identifier: z.string(),
979
+ name: z.string(),
980
+ latitude: z.number(),
981
+ longitude: z.number(),
982
+ elevation_m: z.number().nullable().optional(),
983
+ country: z.string().nullable().optional(),
984
+ created_at: z.string(),
985
+ updated_at: z.string(),
986
+ });
987
+
988
+ export const approachTypeSchema = z.object({
989
+ type: z.literal("approachType"),
990
+ id: z.number(),
991
+ name: z.string(),
992
+ abbreviation: z.string(),
993
+ description: z.string().nullable().optional(),
994
+ created_at: z.string(),
995
+ updated_at: z.string(),
996
+ });