# ANALISIS MODULO RT-001: FUNDAMENTOS

**Fecha:** 2025-12-18
**Fase:** 2 - Analisis por Modulo
**Modulo:** RT-001 Fundamentos
**Herencia:** 100%
**Story Points:** 0 (heredado)
**Prioridad:** P0

---

## 1. DESCRIPCION GENERAL

### 1.1 Proposito
Modulo base que proporciona autenticacion, gestion de usuarios, roles y multi-tenancy para toda la vertical retail. Hereda el 100% del ERP-Core sin modificaciones.

### 1.2 Funcionalidades

| Funcionalidad | Descripcion |
|---------------|-------------|
| Autenticacion | Login/logout con JWT |
| Usuarios | CRUD de usuarios por sucursal |
| Roles | Cajero, Supervisor, Gerente, Admin |
| Multi-tenancy | Aislamiento por tenant |
| Sesiones | Gestion de sesiones activas |

---

## 2. HERENCIA DEL CORE

### 2.1 Modulos Core Heredados

| Modulo Core | Codigo | % Herencia | Tipo |
|-------------|--------|------------|------|
| Auth | MGN-001 | 100% | Import directo |
| Users | MGN-002 | 100% | Import directo |
| Roles | MGN-003 | 100% | Import directo |
| Tenants | MGN-004 | 100% | Import directo |

### 2.2 Servicios Heredados

```typescript
// Imports directos desde @erp-core
import { AuthService } from '@erp-core/auth';
import { UsersService } from '@erp-core/users';
import { RolesService } from '@erp-core/roles';
import { TenantsService } from '@erp-core/tenants';
```

### 2.3 Tablas Heredadas (26 tablas schema auth)

| Tabla | Proposito |
|-------|-----------|
| auth.users | Usuarios del sistema |
| auth.tenants | Tenants (empresas) |
| auth.companies | Companias por tenant |
| auth.roles | Roles del sistema |
| auth.permissions | Permisos granulares |
| auth.user_roles | Asignacion usuario-rol |
| auth.role_permissions | Asignacion rol-permiso |
| auth.sessions | Sesiones activas |
| auth.user_companies | Usuario-compania |
| auth.password_resets | Tokens reset password |
| auth.oauth_user_links | OAuth providers |
| auth.trusted_devices | Dispositivos confiables |
| auth.verification_codes | Codigos verificacion |
| auth.mfa_audit_log | Log de MFA |
| ... | (12 tablas adicionales) |

---

## 3. EXTENSIONES REQUERIDAS

### 3.1 Roles Especificos Retail

```yaml
roles_retail:
  - codigo: CAJERO
    descripcion: Operador de caja
    permisos:
      - pos.sales.create
      - pos.sales.read
      - cash.movements.read
      - inventory.stock.read

  - codigo: SUPERVISOR
    descripcion: Supervisor de sucursal
    permisos:
      - pos.sales.*
      - cash.*
      - inventory.stock.*
      - reports.sales.read
      - promotions.apply

  - codigo: GERENTE
    descripcion: Gerente de sucursal
    permisos:
      - pos.*
      - cash.*
      - inventory.*
      - reports.*
      - users.sucursal.*

  - codigo: ADMIN_RETAIL
    descripcion: Administrador retail
    permisos:
      - "*"  # Todos los permisos
```

### 3.2 Configuracion por Sucursal

```typescript
interface RetailUserConfig {
  userId: string;
  branchId: string;        // Sucursal asignada
  canAccessAllBranches: boolean;
  defaultCashRegisterId?: string;
  maxDiscountPercent: number;  // Limite descuento
}
```

---

## 4. COMPONENTES A IMPLEMENTAR

### 4.1 Backend

| Componente | Tipo | Accion |
|------------|------|--------|
| AuthModule | Module | HEREDAR de @erp-core |
| UsersModule | Module | HEREDAR de @erp-core |
| RolesModule | Module | HEREDAR de @erp-core |
| TenantsModule | Module | HEREDAR de @erp-core |
| RetailRolesSeeder | Seeder | CREAR - Roles retail |
| RetailPermissionsSeeder | Seeder | CREAR - Permisos retail |

### 4.2 Frontend

| Componente | Tipo | Accion |
|------------|------|--------|
| LoginPage | Page | HEREDAR de @erp-core |
| UserProfile | Component | HEREDAR de @erp-core |
| RoleSelector | Component | HEREDAR de @erp-core |

### 4.3 Database

| Tabla | Accion |
|-------|--------|
| auth.* (todas) | HEREDAR - Sin cambios |

### 4.4 Seeds Retail

```sql
-- Roles especificos retail
INSERT INTO auth.roles (id, tenant_id, name, code, description) VALUES
  (uuid_generate_v4(), :tenant_id, 'Cajero', 'CAJERO', 'Operador de caja'),
  (uuid_generate_v4(), :tenant_id, 'Supervisor', 'SUPERVISOR', 'Supervisor sucursal'),
  (uuid_generate_v4(), :tenant_id, 'Gerente', 'GERENTE', 'Gerente sucursal'),
  (uuid_generate_v4(), :tenant_id, 'Admin Retail', 'ADMIN_RETAIL', 'Administrador');

-- Permisos especificos retail
INSERT INTO auth.permissions (id, code, name, module) VALUES
  (uuid_generate_v4(), 'pos.sales.create', 'Crear ventas POS', 'pos'),
  (uuid_generate_v4(), 'pos.sales.read', 'Ver ventas POS', 'pos'),
  (uuid_generate_v4(), 'pos.sales.void', 'Anular ventas', 'pos'),
  (uuid_generate_v4(), 'cash.open', 'Abrir caja', 'cash'),
  (uuid_generate_v4(), 'cash.close', 'Cerrar caja', 'cash'),
  (uuid_generate_v4(), 'cash.movements.create', 'Crear movimientos', 'cash'),
  -- ... mas permisos
```

---

## 5. DEPENDENCIAS

### 5.1 Dependencias de Core

| Modulo | Estado | Bloqueante |
|--------|--------|------------|
| MGN-001 Auth | 40% | SI |
| MGN-002 Users | 30% | SI |
| MGN-003 Roles | 0% | SI |
| MGN-004 Tenants | 0% | SI |

### 5.2 Dependencias de Retail

| Modulo | Tipo |
|--------|------|
| RT-002 POS | Depende de RT-001 |
| RT-003 Inventario | Depende de RT-001 |
| RT-004 Compras | Depende de RT-001 |
| RT-005 Clientes | Depende de RT-001 |
| RT-006 Precios | Depende de RT-001 |
| RT-007 Caja | Depende de RT-001 |
| RT-008 Reportes | Depende de RT-001 |
| RT-009 E-commerce | Depende de RT-001 |
| RT-010 Facturacion | Depende de RT-001 |

---

## 6. ESPECIFICACIONES TECNICAS

### 6.1 Autenticacion

```yaml
auth_config:
  jwt:
    access_token_expiry: "15m"
    refresh_token_expiry: "7d"
  password:
    hash_algorithm: "bcrypt"
    rounds: 10
    min_length: 8
  rate_limiting:
    login_attempts: 5
    lockout_duration: "15m"
  session:
    max_concurrent: 3
    idle_timeout: "30m"
```

### 6.2 RLS Policies

```sql
-- Ya implementadas en core, se heredan
CREATE POLICY tenant_isolation ON auth.users
  FOR ALL USING (tenant_id = current_setting('app.current_tenant_id', true)::UUID);
```

---

## 7. CRITERIOS DE ACEPTACION

### 7.1 Funcionales

- [ ] Login con usuario y password funciona
- [ ] JWT se genera correctamente
- [ ] Refresh token funciona
- [ ] Roles se cargan con el usuario
- [ ] Permisos se validan en endpoints
- [ ] Multi-tenancy aisla datos

### 7.2 No Funcionales

- [ ] Login < 500ms
- [ ] Token validation < 50ms
- [ ] Session management sin memory leaks

---

## 8. RIESGOS

| Riesgo | Probabilidad | Impacto | Mitigacion |
|--------|--------------|---------|------------|
| Core auth incompleto | Alta | Critico | Completar core primero |
| Integracion fallida | Media | Alto | Tests de integracion |

---

## 9. ESTIMACION

| Tarea | SP |
|-------|---:|
| Configurar herencia modulos | 0 |
| Crear seeds roles retail | 0 |
| Crear seeds permisos retail | 0 |
| Tests de integracion | 0 |
| **TOTAL** | **0** |

*Nota: SP = 0 porque es 100% herencia del core*

---

## 10. REFERENCIAS

| Documento | Ubicacion |
|-----------|-----------|
| Modulo Auth Core | erp-core/docs/01-fase-foundation/MGN-001-auth/ |
| Modulo Users Core | erp-core/docs/01-fase-foundation/MGN-002-users/ |
| Modulo Roles Core | erp-core/docs/01-fase-foundation/MGN-003-roles/ |
| DDL Auth | erp-core/database/ddl/01-auth.sql |

---

**Estado:** ANALISIS COMPLETO
**Siguiente:** Esperar completitud de core auth
