items() ->orderBy('id') ->paginate($p['perPage'], ['*'], 'page', $p['page']); $transferNos = collect($paginator->items()) ->map(fn (ReconcileItem $item) => $item->side_a_ref) ->filter(fn ($value) => is_string($value) && $value !== '') ->values() ->all(); $transferStatuses = $transferNos === [] ? [] : TransferOrder::query() ->whereIn('transfer_no', $transferNos) ->pluck('status', 'transfer_no') ->all(); return AdminApiList::jsonWith($paginator, fn (ReconcileItem $r) => [ 'id' => (int) $r->id, 'side_a_ref' => $r->side_a_ref, 'side_b_ref' => $r->side_b_ref, 'difference_amount' => (int) $r->difference_amount, 'status' => $r->status, 'resolved_at' => $r->resolved_at?->toIso8601String(), 'is_resolved' => $r->resolved_at !== null || in_array($transferStatuses[$r->side_a_ref ?? ''] ?? null, ['success', 'reversed', 'manually_processed'], true), 'current_transfer_status' => $transferStatuses[$r->side_a_ref ?? ''] ?? null, 'created_at' => $r->created_at?->toIso8601String(), ], [ 'job_id' => (int) $reconcile_job->id, 'job_no' => $reconcile_job->job_no, ]); } }