@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.
- package/README.md +82 -0
- package/dist/cjs/api/admin-b2b.js +260 -0
- package/dist/cjs/api/admin-b2b.js.map +1 -0
- package/dist/cjs/api/admin-finance.js +78 -0
- package/dist/cjs/api/admin-finance.js.map +1 -0
- package/dist/cjs/api/admin-payouts.js +54 -0
- package/dist/cjs/api/admin-payouts.js.map +1 -0
- package/dist/cjs/api/admin-qc.js +237 -0
- package/dist/cjs/api/admin-qc.js.map +1 -0
- package/dist/cjs/api/admin.js +280 -24
- package/dist/cjs/api/admin.js.map +1 -1
- package/dist/cjs/api/b2b.js +124 -0
- package/dist/cjs/api/b2b.js.map +1 -0
- package/dist/cjs/api/communication.js +283 -0
- package/dist/cjs/api/communication.js.map +1 -0
- package/dist/cjs/api/index.js +33 -1
- package/dist/cjs/api/index.js.map +1 -1
- package/dist/cjs/api/jobs.js +304 -43
- package/dist/cjs/api/jobs.js.map +1 -1
- package/dist/cjs/api/location.js +91 -0
- package/dist/cjs/api/location.js.map +1 -0
- package/dist/cjs/api/payments.js +129 -0
- package/dist/cjs/api/payments.js.map +1 -0
- package/dist/cjs/api/support.js +148 -0
- package/dist/cjs/api/support.js.map +1 -0
- package/dist/cjs/hooks/index.js +1738 -4
- package/dist/cjs/hooks/index.js.map +1 -1
- package/dist/cjs/index.js +35 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/types/admin-finance.js +7 -0
- package/dist/cjs/types/admin-finance.js.map +1 -0
- package/dist/cjs/types/admin-invoice.js +7 -0
- package/dist/cjs/types/admin-invoice.js.map +1 -0
- package/dist/cjs/types/admin-payout.js +7 -0
- package/dist/cjs/types/admin-payout.js.map +1 -0
- package/dist/cjs/types/b2b.js +7 -0
- package/dist/cjs/types/b2b.js.map +1 -0
- package/dist/cjs/types/communication.js +90 -0
- package/dist/cjs/types/communication.js.map +1 -0
- package/dist/cjs/types/enums.js +343 -1
- package/dist/cjs/types/enums.js.map +1 -1
- package/dist/cjs/types/index.js +18 -2
- package/dist/cjs/types/index.js.map +1 -1
- package/dist/cjs/types/job.js +1 -0
- package/dist/cjs/types/job.js.map +1 -1
- package/dist/cjs/types/location.js +7 -0
- package/dist/cjs/types/location.js.map +1 -0
- package/dist/cjs/types/payment.js +7 -0
- package/dist/cjs/types/payment.js.map +1 -0
- package/dist/cjs/types/qc.js +8 -0
- package/dist/cjs/types/qc.js.map +1 -0
- package/dist/cjs/types/support.js +7 -0
- package/dist/cjs/types/support.js.map +1 -0
- package/dist/esm/api/admin-b2b.js +255 -0
- package/dist/esm/api/admin-b2b.js.map +1 -0
- package/dist/esm/api/admin-finance.js +74 -0
- package/dist/esm/api/admin-finance.js.map +1 -0
- package/dist/esm/api/admin-payouts.js +50 -0
- package/dist/esm/api/admin-payouts.js.map +1 -0
- package/dist/esm/api/admin-qc.js +233 -0
- package/dist/esm/api/admin-qc.js.map +1 -0
- package/dist/esm/api/admin.js +275 -22
- package/dist/esm/api/admin.js.map +1 -1
- package/dist/esm/api/b2b.js +120 -0
- package/dist/esm/api/b2b.js.map +1 -0
- package/dist/esm/api/communication.js +275 -0
- package/dist/esm/api/communication.js.map +1 -0
- package/dist/esm/api/index.js +10 -1
- package/dist/esm/api/index.js.map +1 -1
- package/dist/esm/api/jobs.js +304 -43
- package/dist/esm/api/jobs.js.map +1 -1
- package/dist/esm/api/location.js +87 -0
- package/dist/esm/api/location.js.map +1 -0
- package/dist/esm/api/payments.js +124 -0
- package/dist/esm/api/payments.js.map +1 -0
- package/dist/esm/api/support.js +143 -0
- package/dist/esm/api/support.js.map +1 -0
- package/dist/esm/hooks/index.js +1552 -3
- package/dist/esm/hooks/index.js.map +1 -1
- package/dist/esm/index.js +36 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/types/admin-finance.js +6 -0
- package/dist/esm/types/admin-finance.js.map +1 -0
- package/dist/esm/types/admin-invoice.js +6 -0
- package/dist/esm/types/admin-invoice.js.map +1 -0
- package/dist/esm/types/admin-payout.js +6 -0
- package/dist/esm/types/admin-payout.js.map +1 -0
- package/dist/esm/types/b2b.js +6 -0
- package/dist/esm/types/b2b.js.map +1 -0
- package/dist/esm/types/communication.js +87 -0
- package/dist/esm/types/communication.js.map +1 -0
- package/dist/esm/types/enums.js +341 -0
- package/dist/esm/types/enums.js.map +1 -1
- package/dist/esm/types/index.js +18 -2
- package/dist/esm/types/index.js.map +1 -1
- package/dist/esm/types/job.js +1 -0
- package/dist/esm/types/job.js.map +1 -1
- package/dist/esm/types/location.js +6 -0
- package/dist/esm/types/location.js.map +1 -0
- package/dist/esm/types/payment.js +6 -0
- package/dist/esm/types/payment.js.map +1 -0
- package/dist/esm/types/qc.js +7 -0
- package/dist/esm/types/qc.js.map +1 -0
- package/dist/esm/types/support.js +6 -0
- package/dist/esm/types/support.js.map +1 -0
- package/dist/types/api/admin-b2b.d.ts +225 -0
- package/dist/types/api/admin-b2b.d.ts.map +1 -0
- package/dist/types/api/admin-finance.d.ts +52 -0
- package/dist/types/api/admin-finance.d.ts.map +1 -0
- package/dist/types/api/admin-payouts.d.ts +37 -0
- package/dist/types/api/admin-payouts.d.ts.map +1 -0
- package/dist/types/api/admin-qc.d.ts +157 -0
- package/dist/types/api/admin-qc.d.ts.map +1 -0
- package/dist/types/api/admin.d.ts +184 -17
- package/dist/types/api/admin.d.ts.map +1 -1
- package/dist/types/api/b2b.d.ts +77 -0
- package/dist/types/api/b2b.d.ts.map +1 -0
- package/dist/types/api/communication.d.ts +201 -0
- package/dist/types/api/communication.d.ts.map +1 -0
- package/dist/types/api/index.d.ts +10 -1
- package/dist/types/api/index.d.ts.map +1 -1
- package/dist/types/api/jobs.d.ts +197 -38
- package/dist/types/api/jobs.d.ts.map +1 -1
- package/dist/types/api/location.d.ts +76 -0
- package/dist/types/api/location.d.ts.map +1 -0
- package/dist/types/api/payments.d.ts +81 -0
- package/dist/types/api/payments.d.ts.map +1 -0
- package/dist/types/api/support.d.ts +101 -0
- package/dist/types/api/support.d.ts.map +1 -0
- package/dist/types/hooks/index.d.ts +965 -6
- package/dist/types/hooks/index.d.ts.map +1 -1
- package/dist/types/index.d.ts +32 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/types/admin-finance.d.ts +265 -0
- package/dist/types/types/admin-finance.d.ts.map +1 -0
- package/dist/types/types/admin-invoice.d.ts +262 -0
- package/dist/types/types/admin-invoice.d.ts.map +1 -0
- package/dist/types/types/admin-payout.d.ts +180 -0
- package/dist/types/types/admin-payout.d.ts.map +1 -0
- package/dist/types/types/admin.d.ts +1341 -0
- package/dist/types/types/admin.d.ts.map +1 -1
- package/dist/types/types/b2b.d.ts +687 -0
- package/dist/types/types/b2b.d.ts.map +1 -0
- package/dist/types/types/communication.d.ts +670 -0
- package/dist/types/types/communication.d.ts.map +1 -0
- package/dist/types/types/enums.d.ts +311 -0
- package/dist/types/types/enums.d.ts.map +1 -1
- package/dist/types/types/index.d.ts +10 -1
- package/dist/types/types/index.d.ts.map +1 -1
- package/dist/types/types/job.d.ts +576 -55
- package/dist/types/types/job.d.ts.map +1 -1
- package/dist/types/types/location.d.ts +74 -0
- package/dist/types/types/location.d.ts.map +1 -0
- package/dist/types/types/payment.d.ts +281 -0
- package/dist/types/types/payment.d.ts.map +1 -0
- package/dist/types/types/qc.d.ts +589 -0
- package/dist/types/types/qc.d.ts.map +1 -0
- package/dist/types/types/support.d.ts +194 -0
- package/dist/types/types/support.d.ts.map +1 -0
- 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
|
-
|
|
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?:
|
|
92
|
+
quote?: JobQuoteDtoLegacy;
|
|
45
93
|
payment?: JobPaymentDto;
|
|
46
|
-
rating?:
|
|
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
|
-
|
|
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
|
-
/**
|
|
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
|
-
/**
|
|
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
|
-
/**
|
|
145
|
-
export interface
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
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
|
-
/**
|
|
160
|
-
export interface
|
|
161
|
-
|
|
162
|
-
|
|
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
|
-
/**
|
|
173
|
-
export interface
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
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
|
-
/**
|
|
201
|
-
export interface
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
distanceKm: number;
|
|
205
|
-
estimatedEarning: number;
|
|
503
|
+
/** Accept job request */
|
|
504
|
+
export interface AcceptJobDto {
|
|
505
|
+
estimatedArrivalMinutes: number;
|
|
506
|
+
notes?: string;
|
|
206
507
|
}
|
|
207
|
-
/**
|
|
208
|
-
export interface
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
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
|