v1.0
Reference
Admin

DAC Academy — Database Functional Map

1. DATA DOMAIN OVERVIEW

The DAC Academy database contains 34 tables organized into these functional domains:

DomainTablesPurpose
Academy Configuration4Academy settings, branches, sessions, courses
CRM (Leads)2Lead tracking and follow-up history
Registration1Paid registration bridge between lead and admission
Admissions4Admission records, fee components, checklist, items
Students4Student profiles, session enrollment, batch assignment
Fee Management5Fee types, batch templates, fee records, installments, components
Receipts1Immutable receipt generation
Hostel Management4Hostels, allocations, outings, medical requests
Communication2Announcements, WhatsApp logs
System4Users, audit logs, background jobs, notification settings
Authentication3Better Auth: session, account, verification

2. KEY RELATIONSHIP DIAGRAM (TEXT)

leads ──→ lead_followups │ ├──→ registrations ──→ receipts (REG kind) │ └──→ students ──→ student_sessions ──→ academic_sessions │ │ │ └──→ admissions ──→ admission_items │ ├── admission_checklist ──→ checklist_items │ └── fee_components ──→ fee_types │ ├──→ fee_records ──→ fee_installments ──→ receipts (ADM kind) │ ├──→ hostel_allocations ──→ hostels ──→ branches │ ├──→ hostel_outings │ ├──→ medical_requests │ └──→ receipts (ADM kind) batches ──→ courses batches ──→ branches batches ──→ batch_fee_templates ──→ fee_types users ──→ branches users ──→ hostels branches ──→ hostels

3. FINANCIAL INVARIANTS (DB-ENFORCED)

TableConstraintFormulaEnforcement
fee_recordsfee_aggregate_invarianttotalFeePaise = totalPaidPaise + remainingPaiseCHECK constraint
fee_recordsfee_non_negativeAll three >= 0CHECK constraint
fee_recordsfee_overpayment_invarianttotalPaidPaise <= totalFeePaiseCHECK constraint
admissionsadmission_non_negativeAll three >= 0CHECK constraint
coursescourse_fee_non_negativebaseFeePaise >= 0CHECK constraint
batchesbatches_fees_non_negativeAll fee columns >= 0CHECK constraint
registrationsreg_amounts_non_negativeFee and amount >= 0CHECK constraint
fee_installmentsinstallment_amount_non_negativeamountPaise >= 0CHECK constraint
receiptsreceipt_amount_non_negativeamountPaise >= 0CHECK constraint

4. SOFT DELETE PATTERN

Tables using isDeleted boolean (never hard-deleted): admissions, admission_items, admission_checklist, fee_records, fee_installments, hostel_allocations, hostel_outings, receipts

Tables NOT soft-deleted (immutable/append-only): audit_log, receipts (use isVoided instead)


5. MONEY STORAGE

All monetary values stored as paise (integer), never floating point:

  • *Paise suffix on all money columns
  • Convert to rupees for display: amount / 100
  • Format: toLocaleString('en-IN') with ₹ symbol