@osise/api-client 0.0.1 → 0.0.2

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 (160) hide show
  1. package/README.md +82 -0
  2. package/dist/cjs/api/admin-b2b.js +260 -0
  3. package/dist/cjs/api/admin-b2b.js.map +1 -0
  4. package/dist/cjs/api/admin-finance.js +78 -0
  5. package/dist/cjs/api/admin-finance.js.map +1 -0
  6. package/dist/cjs/api/admin-payouts.js +54 -0
  7. package/dist/cjs/api/admin-payouts.js.map +1 -0
  8. package/dist/cjs/api/admin-qc.js +237 -0
  9. package/dist/cjs/api/admin-qc.js.map +1 -0
  10. package/dist/cjs/api/admin.js +280 -24
  11. package/dist/cjs/api/admin.js.map +1 -1
  12. package/dist/cjs/api/b2b.js +124 -0
  13. package/dist/cjs/api/b2b.js.map +1 -0
  14. package/dist/cjs/api/communication.js +283 -0
  15. package/dist/cjs/api/communication.js.map +1 -0
  16. package/dist/cjs/api/index.js +33 -1
  17. package/dist/cjs/api/index.js.map +1 -1
  18. package/dist/cjs/api/jobs.js +304 -43
  19. package/dist/cjs/api/jobs.js.map +1 -1
  20. package/dist/cjs/api/location.js +91 -0
  21. package/dist/cjs/api/location.js.map +1 -0
  22. package/dist/cjs/api/payments.js +129 -0
  23. package/dist/cjs/api/payments.js.map +1 -0
  24. package/dist/cjs/api/support.js +148 -0
  25. package/dist/cjs/api/support.js.map +1 -0
  26. package/dist/cjs/hooks/index.js +1738 -4
  27. package/dist/cjs/hooks/index.js.map +1 -1
  28. package/dist/cjs/index.js +35 -1
  29. package/dist/cjs/index.js.map +1 -1
  30. package/dist/cjs/types/admin-finance.js +7 -0
  31. package/dist/cjs/types/admin-finance.js.map +1 -0
  32. package/dist/cjs/types/admin-invoice.js +7 -0
  33. package/dist/cjs/types/admin-invoice.js.map +1 -0
  34. package/dist/cjs/types/admin-payout.js +7 -0
  35. package/dist/cjs/types/admin-payout.js.map +1 -0
  36. package/dist/cjs/types/b2b.js +7 -0
  37. package/dist/cjs/types/b2b.js.map +1 -0
  38. package/dist/cjs/types/communication.js +90 -0
  39. package/dist/cjs/types/communication.js.map +1 -0
  40. package/dist/cjs/types/enums.js +343 -1
  41. package/dist/cjs/types/enums.js.map +1 -1
  42. package/dist/cjs/types/index.js +18 -2
  43. package/dist/cjs/types/index.js.map +1 -1
  44. package/dist/cjs/types/job.js +1 -0
  45. package/dist/cjs/types/job.js.map +1 -1
  46. package/dist/cjs/types/location.js +7 -0
  47. package/dist/cjs/types/location.js.map +1 -0
  48. package/dist/cjs/types/payment.js +7 -0
  49. package/dist/cjs/types/payment.js.map +1 -0
  50. package/dist/cjs/types/qc.js +8 -0
  51. package/dist/cjs/types/qc.js.map +1 -0
  52. package/dist/cjs/types/support.js +7 -0
  53. package/dist/cjs/types/support.js.map +1 -0
  54. package/dist/esm/api/admin-b2b.js +255 -0
  55. package/dist/esm/api/admin-b2b.js.map +1 -0
  56. package/dist/esm/api/admin-finance.js +74 -0
  57. package/dist/esm/api/admin-finance.js.map +1 -0
  58. package/dist/esm/api/admin-payouts.js +50 -0
  59. package/dist/esm/api/admin-payouts.js.map +1 -0
  60. package/dist/esm/api/admin-qc.js +233 -0
  61. package/dist/esm/api/admin-qc.js.map +1 -0
  62. package/dist/esm/api/admin.js +275 -22
  63. package/dist/esm/api/admin.js.map +1 -1
  64. package/dist/esm/api/b2b.js +120 -0
  65. package/dist/esm/api/b2b.js.map +1 -0
  66. package/dist/esm/api/communication.js +275 -0
  67. package/dist/esm/api/communication.js.map +1 -0
  68. package/dist/esm/api/index.js +10 -1
  69. package/dist/esm/api/index.js.map +1 -1
  70. package/dist/esm/api/jobs.js +304 -43
  71. package/dist/esm/api/jobs.js.map +1 -1
  72. package/dist/esm/api/location.js +87 -0
  73. package/dist/esm/api/location.js.map +1 -0
  74. package/dist/esm/api/payments.js +124 -0
  75. package/dist/esm/api/payments.js.map +1 -0
  76. package/dist/esm/api/support.js +143 -0
  77. package/dist/esm/api/support.js.map +1 -0
  78. package/dist/esm/hooks/index.js +1552 -3
  79. package/dist/esm/hooks/index.js.map +1 -1
  80. package/dist/esm/index.js +36 -2
  81. package/dist/esm/index.js.map +1 -1
  82. package/dist/esm/types/admin-finance.js +6 -0
  83. package/dist/esm/types/admin-finance.js.map +1 -0
  84. package/dist/esm/types/admin-invoice.js +6 -0
  85. package/dist/esm/types/admin-invoice.js.map +1 -0
  86. package/dist/esm/types/admin-payout.js +6 -0
  87. package/dist/esm/types/admin-payout.js.map +1 -0
  88. package/dist/esm/types/b2b.js +6 -0
  89. package/dist/esm/types/b2b.js.map +1 -0
  90. package/dist/esm/types/communication.js +87 -0
  91. package/dist/esm/types/communication.js.map +1 -0
  92. package/dist/esm/types/enums.js +341 -0
  93. package/dist/esm/types/enums.js.map +1 -1
  94. package/dist/esm/types/index.js +18 -2
  95. package/dist/esm/types/index.js.map +1 -1
  96. package/dist/esm/types/job.js +1 -0
  97. package/dist/esm/types/job.js.map +1 -1
  98. package/dist/esm/types/location.js +6 -0
  99. package/dist/esm/types/location.js.map +1 -0
  100. package/dist/esm/types/payment.js +6 -0
  101. package/dist/esm/types/payment.js.map +1 -0
  102. package/dist/esm/types/qc.js +7 -0
  103. package/dist/esm/types/qc.js.map +1 -0
  104. package/dist/esm/types/support.js +6 -0
  105. package/dist/esm/types/support.js.map +1 -0
  106. package/dist/types/api/admin-b2b.d.ts +225 -0
  107. package/dist/types/api/admin-b2b.d.ts.map +1 -0
  108. package/dist/types/api/admin-finance.d.ts +52 -0
  109. package/dist/types/api/admin-finance.d.ts.map +1 -0
  110. package/dist/types/api/admin-payouts.d.ts +37 -0
  111. package/dist/types/api/admin-payouts.d.ts.map +1 -0
  112. package/dist/types/api/admin-qc.d.ts +157 -0
  113. package/dist/types/api/admin-qc.d.ts.map +1 -0
  114. package/dist/types/api/admin.d.ts +184 -17
  115. package/dist/types/api/admin.d.ts.map +1 -1
  116. package/dist/types/api/b2b.d.ts +77 -0
  117. package/dist/types/api/b2b.d.ts.map +1 -0
  118. package/dist/types/api/communication.d.ts +201 -0
  119. package/dist/types/api/communication.d.ts.map +1 -0
  120. package/dist/types/api/index.d.ts +10 -1
  121. package/dist/types/api/index.d.ts.map +1 -1
  122. package/dist/types/api/jobs.d.ts +197 -38
  123. package/dist/types/api/jobs.d.ts.map +1 -1
  124. package/dist/types/api/location.d.ts +76 -0
  125. package/dist/types/api/location.d.ts.map +1 -0
  126. package/dist/types/api/payments.d.ts +81 -0
  127. package/dist/types/api/payments.d.ts.map +1 -0
  128. package/dist/types/api/support.d.ts +101 -0
  129. package/dist/types/api/support.d.ts.map +1 -0
  130. package/dist/types/hooks/index.d.ts +965 -6
  131. package/dist/types/hooks/index.d.ts.map +1 -1
  132. package/dist/types/index.d.ts +32 -2
  133. package/dist/types/index.d.ts.map +1 -1
  134. package/dist/types/types/admin-finance.d.ts +265 -0
  135. package/dist/types/types/admin-finance.d.ts.map +1 -0
  136. package/dist/types/types/admin-invoice.d.ts +262 -0
  137. package/dist/types/types/admin-invoice.d.ts.map +1 -0
  138. package/dist/types/types/admin-payout.d.ts +180 -0
  139. package/dist/types/types/admin-payout.d.ts.map +1 -0
  140. package/dist/types/types/admin.d.ts +1341 -0
  141. package/dist/types/types/admin.d.ts.map +1 -1
  142. package/dist/types/types/b2b.d.ts +687 -0
  143. package/dist/types/types/b2b.d.ts.map +1 -0
  144. package/dist/types/types/communication.d.ts +670 -0
  145. package/dist/types/types/communication.d.ts.map +1 -0
  146. package/dist/types/types/enums.d.ts +311 -0
  147. package/dist/types/types/enums.d.ts.map +1 -1
  148. package/dist/types/types/index.d.ts +10 -1
  149. package/dist/types/types/index.d.ts.map +1 -1
  150. package/dist/types/types/job.d.ts +576 -55
  151. package/dist/types/types/job.d.ts.map +1 -1
  152. package/dist/types/types/location.d.ts +74 -0
  153. package/dist/types/types/location.d.ts.map +1 -0
  154. package/dist/types/types/payment.d.ts +281 -0
  155. package/dist/types/types/payment.d.ts.map +1 -0
  156. package/dist/types/types/qc.d.ts +589 -0
  157. package/dist/types/types/qc.d.ts.map +1 -0
  158. package/dist/types/types/support.d.ts +194 -0
  159. package/dist/types/types/support.d.ts.map +1 -0
  160. package/package.json +1 -1
@@ -1,9 +1,43 @@
1
1
  /**
2
2
  * Job DTOs
3
+ * Types for job management, quotes, ratings, and artisan job operations
3
4
  */
4
- import { JobStatus, PaymentMethod, PaymentStatus, ServiceCategory } from './enums';
5
+ import { JobStatus, JobUrgency, JobPriority, JobMediaType, QuoteStatus, PaymentMethod, PaymentStatus, AccountType, AvailabilityStatus, ServiceCategory } from './enums';
5
6
  import { Coordinates, PaginationParams, DateRange, Quote, RatingBreakdown } from './common';
6
- /** Create job request */
7
+ import { AddressDto } from './consumer';
8
+ /** Service category response */
9
+ export interface ServiceCategoryDto {
10
+ id: string;
11
+ name: string;
12
+ description?: string;
13
+ iconUrl?: string;
14
+ basePrice: number;
15
+ isActive: boolean;
16
+ displayOrder: number;
17
+ }
18
+ /** Estimate request */
19
+ export interface EstimateRequestDto {
20
+ serviceCategoryId: string;
21
+ description: string;
22
+ urgency?: string;
23
+ addressId?: string;
24
+ latitude?: number;
25
+ longitude?: number;
26
+ }
27
+ /** Estimate response */
28
+ export interface EstimateResponseDto {
29
+ serviceCategory: ServiceCategoryDto;
30
+ estimatedMinPrice: number;
31
+ estimatedMaxPrice: number;
32
+ estimatedServiceFee: number;
33
+ estimatedTotalMin: number;
34
+ estimatedTotalMax: number;
35
+ estimatedResponseTimeMinutes: number;
36
+ availableArtisansCount: number;
37
+ notes?: string;
38
+ urgencySurchargePercent: number;
39
+ }
40
+ /** Create job request (legacy - for backwards compatibility) */
7
41
  export interface CreateJobRequestDto {
8
42
  serviceCategory: ServiceCategory;
9
43
  title: string;
@@ -15,6 +49,20 @@ export interface CreateJobRequestDto {
15
49
  photos?: string[];
16
50
  notes?: string;
17
51
  }
52
+ /** Create job request (new format) */
53
+ export interface CreateJobDto {
54
+ serviceCategoryId: string;
55
+ title: string;
56
+ description: string;
57
+ voiceNoteUrl?: string;
58
+ photoUrls?: string[];
59
+ videoUrls?: string[];
60
+ urgency?: JobUrgency;
61
+ scheduledDateTime?: string;
62
+ addressId: string;
63
+ preferredArtisanId?: string;
64
+ departmentCode?: string;
65
+ }
18
66
  /** Update job request */
19
67
  export interface UpdateJobRequestDto {
20
68
  title?: string;
@@ -26,7 +74,7 @@ export interface UpdateJobRequestDto {
26
74
  photos?: string[];
27
75
  notes?: string;
28
76
  }
29
- /** Job request response */
77
+ /** Job request response (legacy) */
30
78
  export interface JobRequestDto {
31
79
  id: string;
32
80
  requestNumber: string;
@@ -41,9 +89,9 @@ export interface JobRequestDto {
41
89
  photos: string[];
42
90
  notes?: string;
43
91
  assignedArtisan?: JobArtisanDto;
44
- quote?: JobQuoteDto;
92
+ quote?: JobQuoteDtoLegacy;
45
93
  payment?: JobPaymentDto;
46
- rating?: JobRatingDto;
94
+ rating?: JobRatingDtoLegacy;
47
95
  createdAt: string;
48
96
  updatedAt?: string;
49
97
  completedAt?: string;
@@ -59,7 +107,8 @@ export interface JobAddressDto {
59
107
  longitude: number;
60
108
  instructions?: string;
61
109
  }
62
- /** Artisan assigned to job */
110
+ export type { AddressDto } from './consumer';
111
+ /** Artisan assigned to job (legacy) */
63
112
  export interface JobArtisanDto {
64
113
  id: string;
65
114
  firstName: string;
@@ -71,8 +120,219 @@ export interface JobArtisanDto {
71
120
  currentLocation?: Coordinates;
72
121
  estimatedArrival?: string;
73
122
  }
74
- /** Job quote */
123
+ /** Consumer info in job context */
124
+ export interface JobConsumerDto {
125
+ id: string;
126
+ name: string;
127
+ phoneNumber: string;
128
+ profileImageUrl?: string;
129
+ accountType: AccountType;
130
+ companyName?: string;
131
+ }
132
+ /** Media item in job */
133
+ export interface JobMediaDto {
134
+ id: string;
135
+ mediaType: JobMediaType;
136
+ url: string;
137
+ thumbnailUrl?: string;
138
+ caption?: string;
139
+ uploadContext?: string;
140
+ createdAt: string;
141
+ }
142
+ /** Job list item */
143
+ export interface JobListItemDto {
144
+ id: string;
145
+ requestNumber: string;
146
+ referenceNumber?: string;
147
+ serviceCategory: ServiceCategory;
148
+ serviceCategoryName?: string;
149
+ title: string;
150
+ status: JobStatus;
151
+ address: string;
152
+ area?: string;
153
+ city?: string;
154
+ isUrgent: boolean;
155
+ urgency?: JobUrgency;
156
+ assignedArtisanName?: string;
157
+ assignedArtisanPhoto?: string;
158
+ artisanProfileImageUrl?: string;
159
+ totalAmount?: number;
160
+ approvedQuoteTotal?: number;
161
+ createdAt: string;
162
+ scheduledFor?: string;
163
+ scheduledDateTime?: string;
164
+ statusChangedAt?: string;
165
+ }
166
+ /** Full job detail response */
167
+ export interface JobDetailDto {
168
+ id: string;
169
+ referenceNumber: string;
170
+ title: string;
171
+ description: string;
172
+ voiceNoteUrl?: string;
173
+ serviceCategory: ServiceCategoryDto;
174
+ status: JobStatus;
175
+ statusChangedAt: string;
176
+ urgency: JobUrgency;
177
+ priority: JobPriority;
178
+ scheduledDateTime?: string;
179
+ address: AddressDto;
180
+ latitude: number;
181
+ longitude: number;
182
+ consumer: JobConsumerDto;
183
+ artisan?: ArtisanForJobDto;
184
+ media: JobMediaDto[];
185
+ currentQuote?: JobQuoteDto;
186
+ rating?: JobRatingDto;
187
+ assignedAt?: string;
188
+ acknowledgedAt?: string;
189
+ enRouteAt?: string;
190
+ arrivedAt?: string;
191
+ startedAt?: string;
192
+ completedAt?: string;
193
+ confirmedCompletionAt?: string;
194
+ cancelledAt?: string;
195
+ cancellationReason?: string;
196
+ initialEstimate?: number;
197
+ approvedQuoteTotal?: number;
198
+ finalTotal?: number;
199
+ serviceFee?: number;
200
+ paymentMethod?: PaymentMethod;
201
+ paymentStatus?: PaymentStatus;
202
+ paidAt?: string;
203
+ canBeCancelled: boolean;
204
+ canBeRated: boolean;
205
+ hasPendingQuote: boolean;
206
+ isEscalated: boolean;
207
+ isRedo: boolean;
208
+ warrantyExpiresAt?: string;
209
+ createdAt: string;
210
+ updatedAt?: string;
211
+ }
212
+ /** Job status response */
213
+ export interface JobStatusDto {
214
+ jobId: string;
215
+ referenceNumber: string;
216
+ status: JobStatus;
217
+ statusDisplayText: string;
218
+ statusChangedAt: string;
219
+ history: JobStatusHistoryItemDto[];
220
+ nextExpectedStatus?: string;
221
+ isActive: boolean;
222
+ }
223
+ /** Status history item */
224
+ export interface JobStatusHistoryItemDto {
225
+ status: JobStatus;
226
+ statusDisplayText: string;
227
+ timestamp: string;
228
+ notes?: string;
229
+ }
230
+ /** Job updates/timeline event */
231
+ export interface JobUpdateDto {
232
+ id: string;
233
+ type: string;
234
+ title: string;
235
+ message?: string;
236
+ actor?: string;
237
+ actorRole?: string;
238
+ timestamp: string;
239
+ metadata?: Record<string, unknown>;
240
+ }
241
+ /** Job timeline event (legacy) */
242
+ export interface JobTimelineEventDto {
243
+ id: string;
244
+ eventType: string;
245
+ title: string;
246
+ description?: string;
247
+ actor?: string;
248
+ actorRole?: string;
249
+ timestamp: string;
250
+ metadata?: Record<string, unknown>;
251
+ }
252
+ /** Artisan info for job display */
253
+ export interface ArtisanForJobDto {
254
+ id: string;
255
+ name: string;
256
+ profileImageUrl?: string;
257
+ phoneNumber?: string;
258
+ primaryTrade: string;
259
+ yearsOfExperience: number;
260
+ overallRating: number;
261
+ totalRatings: number;
262
+ completedJobs: number;
263
+ completionRate: number;
264
+ isVerified: boolean;
265
+ badges: string[];
266
+ }
267
+ /** ETA response */
268
+ export interface EtaDto {
269
+ jobId: string;
270
+ estimatedArrivalTime?: string;
271
+ estimatedMinutes?: number;
272
+ estimatedDistanceKm?: number;
273
+ updatedAt?: string;
274
+ isEnRoute: boolean;
275
+ hasArrived: boolean;
276
+ message?: string;
277
+ }
278
+ /** Artisan location tracking */
279
+ export interface LocationDto {
280
+ jobId: string;
281
+ latitude: number;
282
+ longitude: number;
283
+ updatedAt: string;
284
+ destinationLatitude: number;
285
+ destinationLongitude: number;
286
+ status: JobStatus;
287
+ heading?: number;
288
+ speedKmh?: number;
289
+ }
290
+ /** Quote item (material) */
291
+ export interface QuoteItemDto {
292
+ id: string;
293
+ item: string;
294
+ quantity: number;
295
+ unit?: string;
296
+ unitPrice: number;
297
+ totalPrice: number;
298
+ notes?: string;
299
+ }
300
+ /** Create quote item */
301
+ export interface CreateQuoteItemDto {
302
+ item: string;
303
+ quantity: number;
304
+ unit?: string;
305
+ unitPrice: number;
306
+ notes?: string;
307
+ }
308
+ /** Job quote response */
75
309
  export interface JobQuoteDto {
310
+ id: string;
311
+ jobId: string;
312
+ artisanId: string;
313
+ artisanName: string;
314
+ laborCost: number;
315
+ materials: QuoteItemDto[];
316
+ materialsTotal: number;
317
+ serviceFee: number;
318
+ total: number;
319
+ estimatedDurationMinutes: number;
320
+ estimatedDuration: string;
321
+ notes?: string;
322
+ status: QuoteStatus;
323
+ submittedAt: string;
324
+ expiresAt?: string;
325
+ approvedAt?: string;
326
+ rejectedAt?: string;
327
+ rejectionReason?: string;
328
+ negotiationMessage?: string;
329
+ version: number;
330
+ isPending: boolean;
331
+ isApproved: boolean;
332
+ isExpired: boolean;
333
+ }
334
+ /** Job quote (legacy format) */
335
+ export interface JobQuoteDtoLegacy {
76
336
  id: string;
77
337
  quote: Quote;
78
338
  status: 'pending' | 'approved' | 'rejected' | 'revised';
@@ -82,7 +342,7 @@ export interface JobQuoteDto {
82
342
  rejectionReason?: string;
83
343
  revisionNumber: number;
84
344
  }
85
- /** Submit quote (artisan) */
345
+ /** Submit quote (artisan) - legacy */
86
346
  export interface SubmitQuoteDto {
87
347
  laborCost: number;
88
348
  materials: {
@@ -93,11 +353,31 @@ export interface SubmitQuoteDto {
93
353
  estimatedDuration: string;
94
354
  notes?: string;
95
355
  }
96
- /** Approve/reject quote (consumer) */
356
+ /** Create quote request (artisan) */
357
+ export interface CreateQuoteDto {
358
+ laborCost: number;
359
+ materials: CreateQuoteItemDto[];
360
+ estimatedDurationMinutes: number;
361
+ notes?: string;
362
+ }
363
+ /** Approve/reject quote (consumer) - legacy */
97
364
  export interface QuoteDecisionDto {
98
365
  decision: 'approve' | 'reject';
99
366
  rejectionReason?: string;
100
367
  }
368
+ /** Approve quote request */
369
+ export interface ApproveQuoteDto {
370
+ notes?: string;
371
+ }
372
+ /** Reject quote request */
373
+ export interface RejectQuoteDto {
374
+ reason: string;
375
+ }
376
+ /** Negotiate quote request */
377
+ export interface NegotiateQuoteDto {
378
+ message: string;
379
+ suggestedTotal?: number;
380
+ }
101
381
  /** Job payment */
102
382
  export interface JobPaymentDto {
103
383
  id: string;
@@ -121,8 +401,24 @@ export interface PaymentResponseDto {
121
401
  reference: string;
122
402
  expiresAt?: string;
123
403
  }
124
- /** Job rating */
404
+ /** Job rating response */
125
405
  export interface JobRatingDto {
406
+ id: string;
407
+ jobId: string;
408
+ overallRating: number;
409
+ qualityRating: number;
410
+ punctualityRating: number;
411
+ professionalismRating: number;
412
+ valueRating: number;
413
+ reviewText?: string;
414
+ photoUrls?: string[];
415
+ artisanResponse?: string;
416
+ tipAmount?: number;
417
+ createdAt: string;
418
+ updatedAt?: string;
419
+ }
420
+ /** Job rating (legacy format) */
421
+ export interface JobRatingDtoLegacy {
126
422
  id: string;
127
423
  overall: number;
128
424
  quality: number;
@@ -132,7 +428,7 @@ export interface JobRatingDto {
132
428
  reviewText?: string;
133
429
  createdAt: string;
134
430
  }
135
- /** Submit rating (consumer) */
431
+ /** Submit rating (consumer) - legacy */
136
432
  export interface SubmitRatingDto {
137
433
  overall: number;
138
434
  quality: number;
@@ -141,44 +437,51 @@ export interface SubmitRatingDto {
141
437
  value: number;
142
438
  reviewText?: string;
143
439
  }
144
- /** Job list item */
145
- export interface JobListItemDto {
146
- id: string;
147
- requestNumber: string;
148
- serviceCategory: ServiceCategory;
149
- title: string;
150
- status: JobStatus;
151
- address: string;
152
- isUrgent: boolean;
153
- assignedArtisanName?: string;
154
- assignedArtisanPhoto?: string;
155
- totalAmount?: number;
156
- createdAt: string;
157
- scheduledFor?: string;
440
+ /** Create rating request */
441
+ export interface CreateRatingDto {
442
+ overallRating: number;
443
+ qualityRating: number;
444
+ punctualityRating: number;
445
+ professionalismRating: number;
446
+ valueRating: number;
447
+ reviewText?: string;
448
+ photoUrls?: string[];
158
449
  }
159
- /** Job filter parameters */
160
- export interface JobFilterDto extends PaginationParams, DateRange {
161
- status?: JobStatus | JobStatus[];
162
- serviceCategory?: ServiceCategory;
163
- isUrgent?: boolean;
164
- search?: string;
165
- sortBy?: 'createdAt' | 'scheduledFor' | 'status' | 'amount';
166
- sortDirection?: 'asc' | 'desc';
450
+ /** Add tip request */
451
+ export interface AddTipDto {
452
+ amount: number;
453
+ message?: string;
167
454
  }
168
455
  /** Cancel job request */
169
456
  export interface CancelJobDto {
170
457
  reason: string;
171
458
  }
172
- /** Job timeline event */
173
- export interface JobTimelineEventDto {
174
- id: string;
175
- eventType: string;
176
- title: string;
177
- description?: string;
178
- actor?: string;
179
- actorRole?: string;
180
- timestamp: string;
181
- metadata?: Record<string, unknown>;
459
+ /** Reschedule job request */
460
+ export interface RescheduleJobDto {
461
+ scheduledDateTime: string;
462
+ reason?: string;
463
+ }
464
+ /** Escalate job request */
465
+ export interface EscalateJobDto {
466
+ reason: string;
467
+ details?: string;
468
+ }
469
+ /** Report issue request */
470
+ export interface ReportIssueDto {
471
+ issueType: string;
472
+ description: string;
473
+ photoUrls?: string[];
474
+ preferredResolution?: string;
475
+ }
476
+ /** Request redo request */
477
+ export interface RequestRedoDto {
478
+ reason: string;
479
+ photoUrls?: string[];
480
+ preferredDateTime?: string;
481
+ }
482
+ /** Confirm completion request */
483
+ export interface ConfirmCompletionDto {
484
+ notes?: string;
182
485
  }
183
486
  /** Job dispute */
184
487
  export interface JobDisputeDto {
@@ -197,18 +500,56 @@ export interface CreateDisputeDto {
197
500
  description: string;
198
501
  photos?: string[];
199
502
  }
200
- /** Artisan job view */
201
- export interface ArtisanJobDto extends JobRequestDto {
202
- consumerName: string;
203
- consumerPhone: string;
204
- distanceKm: number;
205
- estimatedEarning: number;
503
+ /** Accept job request */
504
+ export interface AcceptJobDto {
505
+ estimatedArrivalMinutes: number;
506
+ notes?: string;
206
507
  }
207
- /** Artisan job filter */
208
- export interface ArtisanJobFilterDto extends PaginationParams, DateRange {
209
- status?: JobStatus | JobStatus[];
210
- sortBy?: 'createdAt' | 'completedAt' | 'earning';
211
- sortDirection?: 'asc' | 'desc';
508
+ /** Decline job request */
509
+ export interface DeclineJobDto {
510
+ reason: string;
511
+ details?: string;
512
+ }
513
+ /** Acknowledge job request */
514
+ export interface AcknowledgeJobDto {
515
+ estimatedArrivalMinutes: number;
516
+ }
517
+ /** Mark en route request */
518
+ export interface MarkEnRouteDto {
519
+ latitude: number;
520
+ longitude: number;
521
+ estimatedArrivalMinutes: number;
522
+ }
523
+ /** Mark arrived request */
524
+ export interface MarkArrivedDto {
525
+ latitude: number;
526
+ longitude: number;
527
+ }
528
+ /** Request materials request */
529
+ export interface RequestMaterialsDto {
530
+ materials: CreateQuoteItemDto[];
531
+ reason: string;
532
+ photoUrls?: string[];
533
+ }
534
+ /** Job progress update request */
535
+ export interface JobProgressUpdateDto {
536
+ message: string;
537
+ estimatedRemainingMinutes?: number;
538
+ photoUrls?: string[];
539
+ }
540
+ /** Mark job complete request */
541
+ export interface MarkJobCompleteDto {
542
+ notes?: string;
543
+ photoUrls?: string[];
544
+ hasFinalAmountChange?: boolean;
545
+ finalLaborCost?: number;
546
+ finalMaterialsTotal?: number;
547
+ amountChangeReason?: string;
548
+ }
549
+ /** Confirm cash received request */
550
+ export interface ConfirmCashReceivedDto {
551
+ amountReceived: number;
552
+ notes?: string;
212
553
  }
213
554
  /** Update job status (artisan) */
214
555
  export interface UpdateJobStatusDto {
@@ -216,11 +557,191 @@ export interface UpdateJobStatusDto {
216
557
  notes?: string;
217
558
  location?: Coordinates;
218
559
  }
219
- /** Artisan location update */
560
+ /** Artisan location update (legacy) */
220
561
  export interface ArtisanLocationUpdateDto {
221
562
  latitude: number;
222
563
  longitude: number;
223
564
  heading?: number;
224
565
  speed?: number;
225
566
  }
567
+ /** Update artisan location request */
568
+ export interface UpdateArtisanLocationDto {
569
+ latitude: number;
570
+ longitude: number;
571
+ heading?: number;
572
+ speedKmh?: number;
573
+ }
574
+ /** Artisan job view (legacy) */
575
+ export interface ArtisanJobDto extends JobRequestDto {
576
+ consumerName: string;
577
+ consumerPhone: string;
578
+ distanceKm: number;
579
+ estimatedEarning: number;
580
+ }
581
+ /** Artisan job detail (extends detail with artisan-specific info) */
582
+ export interface ArtisanJobDetailDto extends JobDetailDto {
583
+ distanceKm: number;
584
+ estimatedEarning: number;
585
+ consumerRatingAverage?: number;
586
+ }
587
+ /** Job queue item (admin dispatch view) */
588
+ export interface JobQueueItemDto {
589
+ id: string;
590
+ referenceNumber: string;
591
+ title: string;
592
+ serviceCategoryName: string;
593
+ status: JobStatus;
594
+ urgency: JobUrgency;
595
+ priority: JobPriority;
596
+ scheduledDateTime?: string;
597
+ consumerName: string;
598
+ consumerPhone: string;
599
+ accountType: AccountType;
600
+ companyName?: string;
601
+ area: string;
602
+ city: string;
603
+ latitude: number;
604
+ longitude: number;
605
+ assignedArtisanName?: string;
606
+ assignedArtisanId?: string;
607
+ availableArtisansCount: number;
608
+ waitingMinutes: number;
609
+ isEscalated: boolean;
610
+ hasPreferredArtisan: boolean;
611
+ tags?: string;
612
+ createdAt: string;
613
+ statusChangedAt: string;
614
+ }
615
+ /** Job queue filter */
616
+ export interface JobQueueFilterDto extends PaginationParams {
617
+ status?: JobStatus | JobStatus[];
618
+ urgency?: JobUrgency | JobUrgency[];
619
+ priority?: JobPriority | JobPriority[];
620
+ serviceCategoryId?: string;
621
+ area?: string;
622
+ city?: string;
623
+ isEscalated?: boolean;
624
+ hasAssignedArtisan?: boolean;
625
+ search?: string;
626
+ sortBy?: 'createdAt' | 'waitingMinutes' | 'priority' | 'urgency';
627
+ sortDirection?: 'asc' | 'desc';
628
+ }
629
+ /** Active jobs filter */
630
+ export interface ActiveJobsFilterDto extends PaginationParams {
631
+ status?: JobStatus | JobStatus[];
632
+ artisanId?: string;
633
+ serviceCategoryId?: string;
634
+ area?: string;
635
+ city?: string;
636
+ sortBy?: 'statusChangedAt' | 'scheduledDateTime' | 'priority';
637
+ sortDirection?: 'asc' | 'desc';
638
+ }
639
+ /** Available artisan for job (admin view) */
640
+ export interface AvailableArtisanDto {
641
+ id: string;
642
+ name: string;
643
+ profileImageUrl?: string;
644
+ phoneNumber: string;
645
+ primaryTrade: string;
646
+ overallRating: number;
647
+ totalRatings: number;
648
+ completedJobs: number;
649
+ completionRate: number;
650
+ distanceKm: number;
651
+ estimatedTravelMinutes: number;
652
+ availabilityStatus: AvailabilityStatus;
653
+ activeJobsCount: number;
654
+ currentJobExpectedCompletion?: string;
655
+ isOnProbation: boolean;
656
+ yearsOfExperience: number;
657
+ isPreferred: boolean;
658
+ latitude: number;
659
+ longitude: number;
660
+ }
661
+ /** Suggested artisan (system recommendation) */
662
+ export interface SuggestedArtisanDto extends AvailableArtisanDto {
663
+ suggestionScore: number;
664
+ suggestionReasons: string[];
665
+ rank: number;
666
+ }
667
+ /** Assign artisan request */
668
+ export interface AssignArtisanDto {
669
+ artisanId: string;
670
+ notes?: string;
671
+ notifyArtisan?: boolean;
672
+ expectedResponseMinutes?: number;
673
+ }
674
+ /** Broadcast job request */
675
+ export interface BroadcastJobDto {
676
+ artisanIds?: string[];
677
+ radiusKm?: number;
678
+ maxArtisans?: number;
679
+ message?: string;
680
+ expiresInMinutes?: number;
681
+ }
682
+ /** Reassign job request */
683
+ export interface ReassignJobDto {
684
+ newArtisanId: string;
685
+ reason: string;
686
+ notifyCurrentArtisan?: boolean;
687
+ notifyNewArtisan?: boolean;
688
+ }
689
+ /** Update job priority request */
690
+ export interface UpdateJobPriorityDto {
691
+ priority: JobPriority;
692
+ reason?: string;
693
+ }
694
+ /** Add job note request */
695
+ export interface AddJobNoteDto {
696
+ content: string;
697
+ isInternal?: boolean;
698
+ }
699
+ /** Job note response */
700
+ export interface JobNoteDto {
701
+ id: string;
702
+ jobId: string;
703
+ content: string;
704
+ isInternal: boolean;
705
+ createdBy: string;
706
+ createdByName: string;
707
+ createdAt: string;
708
+ }
709
+ /** Update job ETA request */
710
+ export interface UpdateJobEtaDto {
711
+ estimatedArrivalTime: string;
712
+ reason?: string;
713
+ }
714
+ /** Log contact request */
715
+ export interface LogContactDto {
716
+ contactedParty: 'customer' | 'artisan';
717
+ contactMethod: 'phone' | 'sms' | 'inApp';
718
+ outcome: 'reached' | 'noAnswer' | 'voicemail' | 'busy';
719
+ notes?: string;
720
+ }
721
+ /** Admin job detail (extended) */
722
+ export interface AdminJobDetailDto extends JobDetailDto {
723
+ notes: JobNoteDto[];
724
+ statusHistory: JobStatusHistoryItemDto[];
725
+ dispatchedBy?: string;
726
+ dispatchedAt?: string;
727
+ totalContactAttempts: number;
728
+ lastContactAttemptAt?: string;
729
+ }
730
+ /** Consumer job filter */
731
+ export interface JobFilterDto extends PaginationParams, DateRange {
732
+ status?: JobStatus | JobStatus[];
733
+ serviceCategory?: ServiceCategory;
734
+ urgency?: JobUrgency | JobUrgency[];
735
+ serviceCategoryId?: string;
736
+ isUrgent?: boolean;
737
+ search?: string;
738
+ sortBy?: 'createdAt' | 'scheduledFor' | 'scheduledDateTime' | 'status' | 'amount';
739
+ sortDirection?: 'asc' | 'desc';
740
+ }
741
+ /** Artisan job filter */
742
+ export interface ArtisanJobFilterDto extends PaginationParams, DateRange {
743
+ status?: JobStatus | JobStatus[];
744
+ sortBy?: 'createdAt' | 'completedAt' | 'earning';
745
+ sortDirection?: 'asc' | 'desc';
746
+ }
226
747
  //# sourceMappingURL=job.d.ts.map