# Helpers

## Arquitectura

Las funciones globales (usables en Blade y PHP sin imports) viven en `app/helpers.php`, pero **solo como wrappers de una línea**. La lógica real vive en clases estáticas bajo `App\Helpers\` o `Modules\*/Helpers\`.

Esto permite que las clases se carguen on-demand via PSR-4 en lugar de en cada request.

```
app/
  helpers.php          ← aliases globales (siempre cargado, solo definiciones)
  Helpers/
    MoneyHelper.php    ← lógica real de moneda/decimales (carga lazy)

Modules/
  MiModulo/
    Helpers/
      MiHelper.php     ← helpers propios del módulo (carga lazy)
```

## Helpers globales actuales

| Función | Delega a |
|---|---|
| `currency_symbol()` | `MoneyHelper::symbol()` |
| `decimals_show()` | `MoneyHelper::decimalsShow()` |
| `decimals_calc()` | `MoneyHelper::decimalsCalc()` |

## Agregar un helper global

1. Crear o agregar el método en una clase bajo `app/Helpers/`.
2. Agregar el wrapper en `app/helpers.php`:

```php
if (!function_exists('mi_funcion')) {
    function mi_funcion(): string { return MiHelper::metodo(); }
}
```

## Agregar helpers a un módulo

Crear la clase en `Modules/NombreModulo/Helpers/MiHelper.php`:

```php
namespace Modules\NombreModulo\Helpers;

class MiHelper
{
    public static function metodo(): string { ... }
}
```

Uso dentro del mismo módulo:

```php
use Modules\NombreModulo\Helpers\MiHelper;

MiHelper::metodo();
```

## Usar helpers de un módulo en otro

Simplemente importar la clase del otro módulo:

```php
use Modules\OtroModulo\Helpers\SuHelper;

SuHelper::metodo();
```

Si el helper empieza a usarse en muchos módulos, es señal de que debe ascender a `App\Helpers\` y opcionalmente tener un alias global en `helpers.php`.

## Carga

| Qué | Cuándo carga |
|---|---|
| `app/helpers.php` | Siempre (Composer), pero solo define funciones vacías |
| `App\Helpers\*` | Primera vez que se llama la función global en ese request |
| `Modules\*\Helpers\*` | Primera vez que algo lo usa en ese request |
