يغطي هذا الموديول الجانب المالي للعيادة ومنظومة التقارير بأكملها: تسجيل رسوم الكشف مع كل زيارة (نقدًا أو فيزا مع الخصم والمتبقي)، وإدارة رصيد إجمالي للمريضة يُسدَّد على أقساط، وتقارير الإيرادات اليومية والمديونيات، إضافة إلى التقارير السريرية المجمَّعة (التقرير الكامل، المدمج، الشامل، وإحصاءات الحقن المجهري)، وأدوات صيانة قاعدة البيانات (النسخ الاحتياطي، دمج قواعد قديمة، واستيراد ملفات SQL).
visits نفسه: نوع الكشف من كتالوج detections مع الحقول المالية totaldetectionvalue وdetectionvalue_cash وdetectionvalue_visa وdiscount وrestdetectionvalue (المتبقي كدَين).totalbalance (من شاشة الزيارات بطلب AJAX) وحساب المتبقي = مجموع الرصيد − مدفوعات الأقساط المسجلة كزيارات بكود detectionid = -99.totalbalance مع مدفوعات الأقساط من visits عبر استعلام UNION لعرض صافي الحركة.restdetectionvalue > 0 بعد خصم ما سُدِّد لاحقًا (زيارات بكود detectionid = 999 "دفع متبقى") وما خُصم.detectionid = 9999 "مرتجع العملاء" مرتبطة بالزيارة الأصلية عبر visits.visitid وتُخصم من إيرادات اليوم.excel.php وحفظ الملفات في core/excel_backups/<statusno>.ivfsheet بتاريخ آخر دورة شهرية (fresh/frozen) مع بروتوكول التنشيط ومراحل التحضير (ovst، eprep) وحساب سن المريضة وقت المحاولة.mysqldump وحفظ النسخة في core/db_backups وفي مسار إضافي من إعدادات البرنامج، مع تنزيلها للمتصفح، إضافة لأدوات إصلاح بيانات (استكمال drugid الناقص وتوليد أرقام ملفات statusno المفقودة).| الجدول | الغرض | أهم الحقول | العلاقات |
|---|---|---|---|
totalbalance | سجل إضافات الرصيد الإجمالي للمريضة (دائن يُسدَّد لاحقًا على أقساط)؛ يُضاف من شاشة الزيارات ويُحتسب المتبقي بخصم زيارات "دفع قسط" | id, patientid, balance, deleted, userid, adddate | patients عبر patientid، awusers عبر userid (استنتاج) |
totalbalancepaids | كان مخصصًا لتسجيل سداد دفعات الرصيد الإجمالي، لكنه جدول مهجور: لا يوجد أي كود يقرأ منه أو يكتب فيه؛ السداد الفعلي يُسجَّل كصفوف في visits بكود detectionid = -99 | id, patientid, paid, userid, paydate | patients عبر patientid (استنتاج) |
visits.php) تختار الموظفة نوع الكشف من كتالوج detections، فتُسجَّل قيمته الإجمالية والمدفوع نقدًا/فيزا والخصم والمتبقي في صف الزيارة نفسه بجدول visits.visits.php?addbalance فيُخزَّن صف جديد في totalbalance باسم المستخدم وتاريخ اليوم، ويعرض النظام فورًا المتبقي (مجموع الأرصدة − مدفوعات الأقساط).detectionid = -99، وسداد متبقي زيارة سابقة بكود 999 مع ربطها بالزيارة الأصلية عبر visits.visitid، والمرتجع بكود 9999.financialreport.php?index/search) لعرض حركة اليوم أو فترة: لكل زيارة النوع والقيمة والنقدي والفيزا والخصم والمتبقي والمرتجع، مع إجماليات وقائمة المرضى الجدد، ثم الطباعة من showprint.financialreport.php?balance (وبحثه عبر monitoring.php) يعرض حركة "إضافة للمبلغ الإجمالي" مقابل "دفع قسط" بصافي محسوب، وتقرير المتبقيات rest يحصر المديونيات القائمة.fullreport يحدد فترة ويستعرض نشاط كل مريضة في كل قسم، وcombinedreport يجري بحثًا إحصائيًا بمعايير تشخيصية، وcompletereport/Completesreport يولّدان ملفًا شاملًا لمريضة واحدة مع إمكانية تصدير Excel، وIvfstatistics يستخرج إحصاءات دورات الحقن المجهري.backup.php?takeit (mysqldump ثم تنزيل)، وعند الانتقال من نظام قديم تُستخدم merge.php لدمج قاعدة قديمة أو newdb.php لتنفيذ ملف SQL مرفوع.totalbalance.patientid وtotalbalancepaids.patientid ↔ patients.id، وكل التقارير تعرض wifename وhusdandname وstatusno.visits (detectionid, detectionvalue_cash, detectionvalue_visa, restdetectionvalue) وهي مصدر كل التقارير المالية، مع كتالوج أنواع الكشف detections وجدول إقفال اليوم endvisitreports.drugs وجداول الوصفات الست عبر drugid وpatientid.ph*, examination, semen, hsg, gyna, mainantenental, ultrasound*, sonar, operativedetails...) في التقارير الكاملة والمدمجة عبر patientid.Completesreport وIvfstatistics يقرآن infertilitysheet وivfsheet وancsheet وجداولهما الفرعية عبر patientid وivfsheetid وinfertilitysheetid.programesetting (مسار النسخ الاحتياطي وphppath وقاعدة ERP الخارجية) وtotalbalance.userid ↔ مستخدمي النظام awusers (استنتاج)، كما توجد دالة مزامنة كتالوج الكشوفات إلى قاعدة ERP خارجية (addAllDetectionToERP في visits.php).totalbalancepaids جدول ميت تمامًا: لا يظهر في أي كنترولر أو قالب؛ المدفوعات تُسجَّل بدلًا منه كزيارات بأكواد سحرية.detectionid = -99 قسط، 999 سداد متبقٍ، 9999 مرتجع) دون جدول أنواع حركات، ما يجعل جدول الزيارات يلعب دور دفتر يومية مالي.Add() في Completesreport وIvfstatistics تكتب في أي جدول/عمود يصل عبر POST دون أي تحقق.newdb.php ينفّذ ملف SQL مرفوعًا مباشرة، وbackup.php يمرر كلمة مرور القاعدة في أمر نظام (system())، مع بقايا بيانات اعتماد قديمة معلَّقة في الكود.visits تستخدم decimal(10,0) وtotalbalance.balance من نوع int (لا كسور عملة)، والجدولان بترميز latin1 بخلاف باقي القاعدة utf8mb4.onesetup (حذف قوائم وأدوار) مكرر في أكثر من كنترولر تقارير بلا علاقة بالتقارير.exec() لمسار PHP مخزَّن في الإعدادات (إرث تشغيل على Windows/WAMP) ويكتب ملفات لكل مريضة في مجلدات باسم رقم الملف.PatientLedgerEntry (دفتر حساب المريض) موحَّد يستوعب: رسوم الزيارة، إضافة رصيد (يحل محل totalbalance)، سداد قسط، سداد متبقٍ، خصم، مرتجع — بعمود type (enum) بدل الأكواد السحرية -99/999/9999، مع reference_id للحركة الأصلية بدل visits.visitid.Invoice مرتبط بالزيارة (بنود من كتالوج الخدمات services الذي يحل محل detections) ونموذج Payment بعمود طريقة الدفع (cash/visa) بدل عمودين منفصلين، وحساب المتبقي والمديونية ديناميكيًا لا تخزينه.totalbalancepaids نهائيًا دون ترحيل (جدول ميت)، وترحيل صفوف totalbalance إن وُجدت إلى حركات إيداع في دفتر الحساب.decimal(10,2) لكل المبالغ، وقيود مفاتيح أجنبية فعلية إلى patients وusers، وحذف ناعم موحَّد (deleted_at) بدل أعمدة deleted الرقمية.exec().backup.php وmerge.php وnewdb.php: النسخ الاحتياطي عبر أدوات مُدارة (spatie/laravel-backup أو نسخ على مستوى الخادم)، ودمج القواعد القديمة كسكربتات ترحيل (ETL) تُنفَّذ مرة واحدة وقت الانتقال، ومنع أي رفع/تنفيذ SQL من الواجهة.Add()، مع صلاحيات دقيقة للتقارير المالية (أدوار محاسب/مدير).