# Koneko ERP - Component Access & Exposure Policy

Este documento define las reglas de exposición y acceso para los servicios técnicos clave dentro del ecosistema **Koneko ERP**. Establece los principios para mantener una arquitectura limpia, segura y coherente, facilitando su extensión y documentación.

---

## ✅ Componentes y su Exposición

| Clase Técnica                     | Expuesta al Usuario | Acceso Recomendado         | Notas                                                            |
| --------------------------------- | ------------------- | -------------------------- | ---------------------------------------------------------------- |
| `KonekoSettingManager`           | ❌ No                | `settings()` helper        | Configuración modular con soporte de namespaces.                 |
| `KonekoCacheManager`              | ❌ No                | `cache_m()` helper   | Acceso al sistema de cache multi-driver y con TTL configurables. |
| `KonekoSystemLogger`              | ❌ No                | `log_system()` helper      | Logger morfable con niveles y contexto extendido.                |
| `KonekoSecurityLogger`            | ❌ No                | `log_security()` helper    | Eventos de seguridad con GeoIP y proxy detection.                |
| `KonekoUserInteractionLogger`     | ❌ No                | `log_interaction()` helper | Auditoría de componentes y acciones sensibles.                   |
| `KonekoComponentContextRegistrar` | ❌ No                | ❄ Solo Bootstrap           | Registra el `namespace` del componente y su `slug` actual.       |

---

## ⚖️ Principios de Acceso

* **Acceso exclusivo por helpers**: Los helpers representan la única interfaz pública soportada para operaciones de configuración, cache y logs.
* **Encapsulamiento interno**: Ningún componente debería invocar directamente servicios como `KonekoSettingManager` o `KonekoSystemLogger`.
* **UI y CLI desacoplados**: Tanto los comandos artisan como el panel administrativo utilizan los helpers, nunca instancias directas.

---

## 💡 Buenas prácticas para desarrolladores

* Usa `settings()` para acceder o escribir configuraciones modulares.
* Usa `cache_m()` para obtener TTL, flush o debug por componente.
* Usa `log_system()` para registrar eventos de sistema de forma morfable.
* Usa `log_security()` para eventos como logins fallidos o IP sospechosas.
* Usa `log_interaction()` para acciones en Livewire, eventos UI o tracking avanzado.

---

## 🔹 Ejemplo práctico

```php
// Correcto
settings()->in('website')->get('general.site_name');
cache_m('admin', 'menu')->ttl();
log_system('info', 'Menú regenerado');
```

```php
// Incorrecto ❌
app(KonekoSettingManager::class)->get(...);
new KonekoCacheManager(...);
(new KonekoSystemLogger)->log(...);
```

---

## 📃 Futuras extensiones

* Se agregará soporte en este esquema para:

  * APIManager: `api_manager()`
  * Catalogs: `catalog()`
  * Event Dispatchers: `event_dispatcher()`

Cada uno seguirá el mismo patrón: clase técnica interna, helper de acceso documentado, y uso controlado por contexto registrado.

---

> Este documento forma parte del conjunto `docs/architecture/components/`. Asegúrese de mantenerlo actualizado ante cualquier refactor o nuevo helper público.
