@extends('admin.layouts.app') @section('title', 'Finance Reconciliation') @section('page-title', 'Finance Reconciliation') @section('page-subtitle', 'Reconcile portal payments, Paystack reports, and bank statement credits') @section('content') @if(session('success'))
{{ session('success') }}
@endif @if(session('error'))
{{ session('error') }}
@endif
Run New Reconciliation

Upload the Paystack Transaction Report and Payout Report CSV exports. Optionally upload your organization's bank statement (Excel, CSV, or PDF) to confirm Paystack payouts actually credited your account.

@csrf
@error('conference_id')
{{ $message }}
@enderror
@error('period_from')
{{ $message }}
@enderror
@error('period_to')
{{ $message }}
@enderror
@error('transactions_csv')
{{ $message }}
@enderror
@error('payouts_csv')
{{ $message }}
@enderror
Upload the account statement Paystack settles into. Supports NIAE bank PDF/Excel exports (NIBSS:PAYSTACK credits). Excel/CSV is most reliable.
@error('bank_statement')
{{ $message }}
@enderror
Reconciliation History
@forelse($runs as $run) @php $issues = $run->portal_only_count + $run->paystack_only_count + $run->amount_mismatch_count + $run->settlement_variance_count; if ($run->hasBankStatement()) { $issues += $run->payout_not_in_bank_count + $run->bank_only_count + $run->bank_variance_count; } @endphp @empty @endforelse
Run Period Matched Issues Status Date
#{{ $run->id }} @if($run->period_from || $run->period_to) {{ $run->period_from?->format('M d, Y') ?? '—' }} – {{ $run->period_to?->format('M d, Y') ?? '—' }} @else All dates @endif @if($run->conference)
{{ $run->conference->short_name ?? $run->conference->name }} @endif
{{ number_format($run->matched_count) }} / {{ number_format($run->portal_payment_count) }} @if($run->hasBankStatement())
Bank: {{ number_format($run->bank_matched_count) }} matched @endif
@if($run->status === 'completed' && $issues === 0) Balanced @elseif($run->status === 'completed') {{ number_format($issues) }} issue(s) @else — @endif @if($run->status === 'completed') Completed @elseif($run->status === 'failed') Failed @else {{ ucfirst($run->status) }} @endif {{ $run->created_at->format('M d, Y H:i') }} @if($run->status === 'completed') View @endif
No reconciliation runs yet.
{{ $runs->links() }}
@endsection