false, 'credit' => null, 'voucher' => null, 'entries' => [], ], 'محفظة الوقود غير مفعّلة'); } fuelExpireStaleVouchers($con, $driverId); $state = fuelCreditState($con, $obligation); $voucher = null; $entries = []; try { $st = $con->prepare(" SELECT id, code, amount_authorized, currency, expires_at FROM fuel_vouchers WHERE driver_id = ? AND status = 'issued' AND expires_at >= NOW() LIMIT 1 "); $st->execute([$driverId]); if ($row = $st->fetch(PDO::FETCH_ASSOC)) { $voucher = [ 'voucher_id' => (int) $row['id'], 'code' => $row['code'], 'amount' => (float) $row['amount_authorized'], 'expires_at' => $row['expires_at'], ]; } // ‏آخر عشرين حركة: كافية لشهر تزوّد، وتمنع رداً ينمو بلا حد. $st = $con->prepare(" SELECT charge_date, amount, amount_collected, amount_remaining, currency, status, note FROM obligation_ledger WHERE obligation_id = ? ORDER BY id DESC LIMIT 20 "); $st->execute([(int) $obligation['id']]); $entries = $st->fetchAll(PDO::FETCH_ASSOC); } catch (PDOException $e) { error_log('[fuel/get] تعذّرت قراءة الحالة: ' . $e->getMessage()); } jsonSuccess([ 'enrolled' => true, 'credit' => [ 'limit' => $state['limit'], 'outstanding' => $state['outstanding'], 'held' => $state['held'], 'available' => $state['available'], 'currency' => $obligation['currency'], // ‏نسبة الاقتطاع اليومي معروضة صراحةً: الخصم من الأرباح يجب ألّا // ‏يكون مفاجأة، والسائق الذي يعرف أن الاقتطاع ١٥٪ يخطّط عليه. 'daily_cap_percent' => (float) $obligation['daily_cap_percent'], ], 'voucher' => $voucher, 'entries' => $entries, ], 'success');