Skip to content

Eloquent Relationships

The CPR backend has 63 Eloquent models with extensive relationships. This page documents the key model relationships.

Core Relationships

User

php
$user->branches()          // belongsToMany(Branch) - branches user works at
$user->defaultBranch()     // belongsTo(Branch) - user's default branch
$user->branchServices()    // belongsToMany(BranchService) - assigned queue services

Traits: HasApiTokens, HasRoles (Spatie), LogsActivity, Notifiable

Branch

php
$branch->users()           // belongsToMany(User) - staff at this branch
$branch->defaultUsers()    // hasMany(User) - users with this as default
$branch->deliveries()      // hasMany(Delivery)
$branch->branchServices()  // hasMany(BranchService)

Uses soft deletes. Settings stored as JSON (operating hours, services config).

Patient

php
$patient->visits()         // hasMany(PatientVisit)
$patient->transactions()   // hasMany(Transaction)

Key fields: pin (auto-generated code, format BRANCH-XXXXXX), demographics, address components, referral info, photo.

Query scopes: search(), filterByGender(), filterByCivilStatus(), filterByStatus(), filterByBirthDate(), filterByNationality(), filterByTelephone()

PatientVisit

php
$visit->branch()           // belongsTo(Branch)
$visit->patient()          // belongsTo(Patient)
$visit->queueTickets()     // hasMany(QueueTicket)
$visit->plans()            // hasMany(PatientVisitPlan)

Status tracked via PatientVisitStatus enum (active, completed).

Transaction

php
$transaction->queueTicket()   // belongsTo(QueueTicket)
$transaction->branch()        // belongsTo(Branch)
$transaction->patient()       // belongsTo(Patient)
$transaction->paymentMethod() // belongsTo(PaymentMethod)
$transaction->items()         // hasMany(TransactionItem)

Transaction numbers are auto-generated with format TRX-XXXXXXXXXX.

QueueTicket

php
$ticket->visit()              // belongsTo(PatientVisit)
$ticket->service()            // belongsTo(BranchService)
$ticket->patient()            // belongsTo(Patient)
$ticket->transferredFrom()    // belongsTo(QueueTicket) - self-reference
$ticket->registeredBy()       // belongsTo(User)
$ticket->calledBy()           // belongsTo(User)
$ticket->servedBy()           // belongsTo(User)
$ticket->transferredBy()      // belongsTo(User)
$ticket->billingTransactions() // hasMany(PatientBillingTransaction)
$ticket->medicineTransaction() // hasOne(Transaction)

Status tracked via QueueTicketStatus enum. Supports priority types and appointment flags.

Clinical Examination Models

All clinical exam models share the same base relationship:

php
$exam->patientVisit()      // belongsTo(PatientVisit)

14 exam models: VisualAcuity, Refraction, Tonometry, SlitLamp, Funduscopy, Gonioscopy, CornealTopography, AmslerGrid, Eom, Exophthalmometry, LacrimalIrrigation, Radiology, GrossExamination, IndirectOphthalmoscopy

Pharmacy & Inventory

PharmacyItem

php
$item->category()           // belongsTo(PharmacyItemCategory)
$item->form()               // belongsTo(PharmacyItemForm)
$item->unit()               // belongsTo(StockAvailableUnit)
$item->stockAvailables()    // hasMany(StockAvailable)

Supply Chain

PurchaseOrder → PurchaseOrderDetail → Delivery → DeliveryDetail

Stock movements track FIFO deductions when transactions are completed.

Service & Queue

php
$branchService->branch()    // belongsTo(Branch)
$branchService->service()   // belongsTo(Service)
$branchService->counters()  // hasMany(BranchServiceCounter)
$branchService->users()     // belongsToMany(User)

Common Traits

LogsActivity

All models use Spatie's LogsActivity trait, which automatically logs create, update, and delete operations to the activity_log table.

Relationship Diagram

User ──┬── Branch (many-to-many via branch_users)
       ├── BranchService (many-to-many)
       └── Role (many-to-many via Spatie)

Patient ──┬── PatientVisit
          │     ├── QueueTicket
          │     │     ├── PatientBillingTransaction
          │     │     └── Transaction (medicine)
          │     ├── PatientVisitPlan
          │     ├── PatientVisitPrescribedMedicine
          │     ├── Complaint
          │     ├── MedicalCertificate
          │     └── [14 Clinical Exam Models]
          └── Transaction (billing)

Branch ──┬── BranchService
         │     ├── BranchServiceCounter
         │     └── QueueTicket
         ├── Delivery
         └── PatientVisit

PharmacyItem ── StockAvailable
             └── TransactionItem

PurchaseOrder ── PurchaseOrderDetail
Delivery ── DeliveryDetail

CPR - Clinical Patient Records