===================================================================
 ALIGANT ERP V5 - REGLA GLOBAL DE RUT (chileno)
===================================================================
Formateo automático, validación de dígito verificador (módulo 11),
y guardado normalizado. Frontend + backend. Reutilizable en cualquier
módulo con RUT.

  Pantalla:   12.345.678-5   (con puntos)
  Base datos: 12345678-5     (sin puntos, DV en mayúscula)
  Mensaje:    "El RUT ingresado no es válido."

-------------------------------------------------------------------
 1) DÓNDE PEGA CADA ARCHIVO (copiar sobre el proyecto)
-------------------------------------------------------------------
Descomprime y copia respetando rutas dentro de:
  C:\xampp2\htdocs\aligant_erp_v5\

PIEZAS REUTILIZABLES (sirven para TODOS los módulos):
  app\Support\Rut.php                       (NUEVO)  helper formato/validación
  app\Rules\Rut.php                         (NUEVO)  regla de validación backend
  resources\views\partials\rut.blade.php    (NUEVO)  script frontend (formateo+validación)

APLICADO A EMPRESAS (reemplazan a los actuales):
  app\Http\Requests\EmpresaRequest.php
  resources\views\empresas\_form.blade.php
  resources\views\empresas\index.blade.php
  resources\views\empresas\show.blade.php

-------------------------------------------------------------------
 2) COMANDO
-------------------------------------------------------------------
  php artisan optimize:clear
  (y recarga con Ctrl+F5)

  No hay migraciones nuevas: la columna 'rut' de empresas ya existe
  y el formato normalizado (12345678-5) cabe en ella.

-------------------------------------------------------------------
 3) CÓMO APLICARLO A OTRO MÓDULO (Clientes, Proveedores, Trabajadores...)
-------------------------------------------------------------------
Es el mismo patrón en 4 pasos:

  (a) MIGRACIÓN - columna rut:
        $table->string('rut', 12)->unique();

  (b) FORM REQUEST del módulo:
        use App\Rules\Rut as RutRule;
        use App\Support\Rut as RutHelper;

        protected function prepareForValidation(): void {
            if ($this->has('rut')) {
                $this->merge([
                    'rut' => RutHelper::normalize($this->input('rut')) ?? $this->input('rut'),
                ]);
            }
        }

        // dentro de rules():
        'rut' => ['required', 'string', 'max:12', new RutRule,
                  Rule::unique('NOMBRE_TABLA', 'rut')->ignore($this->route('PARAM')?->id)],

  (c) FORMULARIO (Blade) - el input y el script:
        <input type="text" name="rut" id="rut" class="aerp-input"
               value="{{ old('rut', $modelo->rut) }}"
               placeholder="12.345.678-5" maxlength="12" data-rut required>
        @error('rut') <p class="aerp-error">{{ $message }}</p> @enderror
        ...
        @include('partials.rut')   {{-- al final del formulario --}}

  (d) MOSTRAR en listados/fichas con formato de pantalla:
        {{ \App\Support\Rut::format($modelo->rut) }}

  -> Cualquier <input data-rut> de la página queda formateado y validado
     automáticamente. El backend siempre revalida y normaliza.

-------------------------------------------------------------------
 4) NOTA SOBRE USUARIOS
-------------------------------------------------------------------
El módulo Usuarios actualmente NO tiene columna 'rut'. Si quieres que
los usuarios tengan RUT, aplica el patrón anterior:
  - migración que agregue 'rut' a la tabla users,
  - agregar la regla en UserRequest,
  - agregar el input data-rut en usuarios/_form.blade.php,
  - mostrarlo con Rut::format en usuarios/index y show.
Dime y te dejo ese módulo ya enchufado (incluida la migración).

-------------------------------------------------------------------
 5) DETALLES TÉCNICOS
-------------------------------------------------------------------
  - Validación backend con la regla App\Rules\Rut (no se guarda si el DV
    es incorrecto; muestra "El RUT ingresado no es válido.").
  - Validación frontend con partials/rut.blade.php (mismo mensaje, bloquea
    el envío del formulario si el DV es incorrecto).
  - El script es autoprotegido: puedes @include('partials.rut') en varios
    formularios sin que se ejecute dos veces.
  - Se guarda normalizado (12345678-5); se muestra formateado (12.345.678-5).

===================================================================
