'datetime', 'payment_datetime' => 'datetime', 'due_date' => 'date', 'subtotal' => 'decimal:2', 'tax_amount' => 'decimal:2', 'discount_amount' => 'decimal:2', 'grand_total' => 'decimal:2', 'paid_amount' => 'decimal:2', 'change_amount' => 'decimal:2', 'insurance_covered_amount' => 'decimal:2', 'patient_responsibility' => 'decimal:2', ]; // Relationships public function registration(): BelongsTo { return $this->belongsTo(Registration::class, 'registration_id'); } public function patient(): BelongsTo { return $this->belongsTo(Patient::class, 'patient_id'); } public function insurance(): BelongsTo { return $this->belongsTo(Insurance::class, 'insurance_id'); } public function cashier(): BelongsTo { return $this->belongsTo(User::class, 'cashier_id'); } public function details(): HasMany { return $this->hasMany(TransactionDetail::class, 'transaction_id'); } // helper untuk generate invoice number public static function generateInvoiceNumber(): string { $datePart = now()->format('Ymd'); $lastInvoice = self::where('invoice_number', 'like', "INV-{$datePart}-%") ->orderBy('invoice_number', 'desc') ->first(); $sequence = $lastInvoice ? (int) substr($lastInvoice->invoice_number, -3) + 1 : 1; return sprintf('INV-%s-%03d', $datePart, $sequence); } }