'decimal:2', 'saldo_inicial_acreedor' => 'decimal:2', 'cargos' => 'decimal:2', 'abonos' => 'decimal:2', 'saldo_final_deudor' => 'decimal:2', 'saldo_final_acreedor' => 'decimal:2', 'excluida' => 'boolean', 'es_cuenta_padre' => 'boolean', 'requiere_revision' => 'boolean', ]; } public function balanza(): BelongsTo { return $this->belongsTo(Balanza::class); } public function reporteContable(): BelongsTo { return $this->belongsTo(ReporteContable::class); } public function categoriaContable(): BelongsTo { return $this->belongsTo(CategoriaContable::class); } public function cuentaPadre(): BelongsTo { return $this->belongsTo(Cuenta::class, 'cuenta_padre_id'); } public function cuentasHijo(): HasMany { return $this->hasMany(Cuenta::class, 'cuenta_padre_id'); } public function getSaldoInicialNetoAttribute(): float { return $this->saldo_inicial_deudor - $this->saldo_inicial_acreedor; } public function getSaldoFinalNetoAttribute(): float { return $this->saldo_final_deudor - $this->saldo_final_acreedor; } public function getMovimientoNetoAttribute(): float { return $this->cargos - $this->abonos; } /** * Recalcula el saldo considerando solo cuentas hijo activas */ public function recalcularSaldoDesdeHijos(): void { if (!$this->es_cuenta_padre) { return; } $hijosActivos = $this->cuentasHijo()->where('excluida', false)->get(); $this->saldo_inicial_deudor = $hijosActivos->sum('saldo_inicial_deudor'); $this->saldo_inicial_acreedor = $hijosActivos->sum('saldo_inicial_acreedor'); $this->cargos = $hijosActivos->sum('cargos'); $this->abonos = $hijosActivos->sum('abonos'); $this->saldo_final_deudor = $hijosActivos->sum('saldo_final_deudor'); $this->saldo_final_acreedor = $hijosActivos->sum('saldo_final_acreedor'); $this->save(); } }