287 lines
7.2 KiB
Markdown
287 lines
7.2 KiB
Markdown
# 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
|