companyId); if (! $company) { return; } $tenants->setCurrent($company); $job = OcrJob::find($this->ocrJobId); if (! $job) return; $job->update(['status' => 'processing']); try { $absPath = Storage::disk('local')->path($job->file_path); $result = $svc->extract($absPath); $job->update([ 'status' => 'done', 'result' => $result, 'processed_at' => now(), 'ai_provider' => 'claude', ]); } catch (\Throwable $e) { $job->update([ 'status' => 'failed', 'error_message' => $e->getMessage(), 'processed_at' => now(), ]); throw $e; } } public function failed(\Throwable $e): void { $job = OcrJob::find($this->ocrJobId); $job?->update(['status' => 'failed', 'error_message' => $e->getMessage()]); } }