# ADR-009: Frontend Architecture - Feature-Sliced Design

**Estado:** Aceptada
**Fecha:** 2025-11-24
**Responsable:** Architecture-Analyst
**Proyecto:** ERP Construccion

## Contexto

Frontend debe soportar:
- Multiples roles (director, residente, almacenista)
- Dashboards especificos por rol
- Portal de derechohabientes
- App movil (React Native)

## Decision

**Feature-Sliced Design (FSD):**

```
frontend/src/
+-- shared/             # Componentes reutilizables
|   +-- ui/             # Botones, inputs, modals
|   +-- api/            # Clientes API
|   +-- utils/          # Helpers
+-- features/           # Por rol/funcionalidad
|   +-- director/       # Dashboard director
|   +-- residente/      # Vistas residente obra
|   +-- almacenista/    # Gestion inventarios
|   +-- portal/         # Portal derechohabientes
+-- pages/              # Paginas de la app
+-- app/                # Configuracion global
```

## Justificacion

### Referencia a Gamilit
- 180+ componentes reutilizables
- Arquitectura escalable probada

### Especifico para Construccion
- Features separados por rol de construccion
- Portal derechohabientes como feature aislado
- Componentes especificos: KardexTable, EstimateForm, AvanceGantt

## Consecuencias

### Positivas
- Desarrollo 40% mas rapido
- Reutilizacion maxima de componentes
- Separacion clara por rol
- Mantenibilidad +50%

### Negativas
- Curva de aprendizaje FSD
- Mitigacion: Documentacion y ejemplos

## Implementacion

### Acciones Requeridas
- [ ] Migrar a estructura FSD
- [ ] Crear componentes shared/ui base
- [ ] Implementar features por rol
- [ ] Separar portal como feature

### Criterios de Aceptacion
- Componentes compartidos funcionan en todas las features
- Cada rol tiene su dashboard
- Portal funciona como SPA independiente

## Referencias
- [ERP Generico ADR-009](../../erp-generic/docs/adr/ADR-009-frontend-architecture.md)
- [Gamilit Frontend Patterns](../../shared/reference/gamilit/frontend-patterns.md)
