startOfMonth(); $newThisMonth = Person::where('created_at', '>=', $currentMonthStart)->count(); // Recent additions (last 30 days) $thirtyDaysAgo = Carbon::now()->subDays(30); $recentAdditions = Person::where('created_at', '>=', $thirtyDaysAgo)->count(); // Pending reviews - example: people with missing information $pendingReviews = Person::whereNull('date_of_birth') ->orWhereNull('place_of_birth') ->orWhereNull('occupation') ->count(); // Incomplete records - persons missing multiple key fields $incompleteRecords = Person::where(function($query) { $query->whereNull('date_of_birth') ->orWhereNull('place_of_birth'); }) ->where(function($query) { $query->whereNull('occupation') ->orWhereNull('reference') ->orWhereNull('id_card_no'); }) ->count(); // Find peak migration period (by year) $peakMigrationYear = Migration::select(DB::raw('YEAR(date_of_arrival_nt) as year'), DB::raw('COUNT(*) as count')) ->whereNotNull('date_of_arrival_nt') ->groupBy(DB::raw('YEAR(date_of_arrival_nt)')) ->orderBy('count', 'desc') ->first(); // Find most common place of birth $mostCommonOrigin = Person::select('place_of_birth', DB::raw('COUNT(*) as count')) ->whereNotNull('place_of_birth') ->where('place_of_birth', '!=', '') ->groupBy('place_of_birth') ->orderBy('count', 'desc') ->first(); return response()->json([ 'success' => true, 'data' => [ 'total_migrants' => $totalMigrants, 'new_this_month' => $newThisMonth, 'recent_additions' => $recentAdditions, 'pending_reviews' => $pendingReviews, 'incomplete_records' => $incompleteRecords, 'peak_migration_year' => $peakMigrationYear ? [ 'year' => $peakMigrationYear->year, 'count' => $peakMigrationYear->count ] : null, 'most_common_origin' => $mostCommonOrigin ? [ 'place' => $mostCommonOrigin->place_of_birth, 'count' => $mostCommonOrigin->count ] : null ] ]); } }