$this->uuid, 'db_id' => $this->id, 'name' => $this->name, 'status' => $this->status, 'area' => ServiceAreaResource::make($this->whenLoaded('area')), 'driver' => UserResource::make($this->whenLoaded('driver')), 'scanner' => UserResource::make($this->whenLoaded('scanner')), 'truck' => TruckResource::make($this->whenLoaded('truck')), 'helpers' => $this->whenLoaded('helpers', fn () => $this->helpers->map(fn ($m) => [ 'id' => $m->user?->uuid, 'db_id' => $m->user?->id, 'name' => $m->user?->full_name, 'assigned_from' => $m->assigned_from?->toDateString(), 'assigned_until' => $m->assigned_until?->toDateString(), 'status' => $m->status, ])), 'is_full' => $this->is_full, 'truck_is_full' => $this->whenLoaded('currentTrip', function () { $trip = $this->currentTrip; if (! $trip) return false; $capacity = $this->truck?->capacity_kg; // Prefer driver's live estimate; fall back to dumpsite-scale total $effectiveLoad = $trip->current_load_kg ?? $trip->total_load_kg ?? 0; return ($capacity && $effectiveLoad >= $capacity) || $trip->status === 'at_dumpsite'; }, false), 'performance_stats' => $this->getPerformanceStats(), 'current_trip' => TripResource::make($this->whenLoaded('currentTrip')), 'notes' => $this->notes, 'tenant' => $this->whenLoaded('tenant', fn () => [ 'id' => $this->tenant->id, 'name' => $this->tenant->name, ]), 'created_at' => $this->created_at?->toIso8601String(), ]; } }