'boolean', ]; } public function reporteContable(): BelongsTo { return $this->belongsTo(ReporteContable::class); } public function categoriaContable(): BelongsTo { return $this->belongsTo(CategoriaContable::class); } /** * Verifica si un código de cuenta coincide con esta regla */ public function coincideCon(string $codigo): bool { // Si tiene patrón regex, usarlo if ($this->patron_regex) { return (bool) preg_match($this->patron_regex, $codigo); } // Si tiene rango, verificar if ($this->rango_inicio && $this->rango_fin) { $codigoNumerico = $this->codigoANumero($codigo); $inicioNumerico = $this->codigoANumero($this->rango_inicio); $finNumerico = $this->codigoANumero($this->rango_fin); return $codigoNumerico >= $inicioNumerico && $codigoNumerico <= $finNumerico; } return false; } /** * Convierte código tipo "001-100-000" a número para comparación */ private function codigoANumero(string $codigo): int { return (int) str_replace(['-', '.', ' '], '', $codigo); } }