12 KiB
TEST PLAN - MGN-002: Empresas y Organizaciones
Módulo: MGN-002 - Empresas y Organizaciones Sprint: Sprint 3-7 (Semanas 5-14) Story Points: 34 SP User Stories: 7 US Fecha: 2025-11-24 QA Owner: TBD Estado: Draft
1. RESUMEN DEL MÓDULO
1.1 Descripción
El módulo MGN-002 Empresas y Organizaciones gestiona la información de las empresas dentro del sistema multi-tenancy. Permite crear múltiples empresas por tenant, configurar parámetros fiscales y contables, asignar usuarios a empresas y gestionar jerarquías empresariales (holdings).
Este módulo es crítico (P0) ya que establece el contexto empresarial para todos los módulos transaccionales.
1.2 Funcionalidades Principales
- Gestión de Empresas: CRUD de empresas, logo y branding
- Configuración Empresarial: Parámetros fiscales, contables, moneda base, país
- Multi-Empresa: Asignación de usuarios a múltiples empresas, company switcher
- Jerarquías: Holdings y subsidiarias (parent-child relationships)
- Plantillas por País: Configuración pre-cargada según país (plan contable, impuestos, etc.)
1.3 Dependencias
Módulos requeridos:
- MGN-001: Fundamentos (autenticación, usuarios, tenants)
Datos maestros necesarios:
- Tenant activo
- Usuarios creados
- Catálogos: países, monedas (MGN-003)
2. ALCANCE DEL TESTING
2.1 En Alcance
- ✅ CRUD de empresas (create, read, update, delete)
- ✅ Logo y branding por empresa
- ✅ Configuración fiscal y contable
- ✅ Asignación de usuarios a empresas (multi-company access)
- ✅ Company switcher (cambiar empresa activa)
- ✅ Jerarquías de empresas (parent-child)
- ✅ Plantillas de configuración por país
- ✅ Validación de empresa activa en contexto de usuario
- ✅ Tenant isolation (empresas solo visibles dentro de su tenant)
2.2 Fuera de Alcance
- ❌ Consolidación financiera entre empresas (Fase 2)
- ❌ Transferencias inter-company (Fase 2)
- ❌ Reportes consolidados de holdings (Fase 2)
2.3 Assumptions
- Tenant existe y está configurado
- Usuarios están creados y autenticados
- Catálogos de países y monedas están disponibles
3. ESTRATEGIA DE TESTING
3.1 Tipos de Tests
Unit Tests: 42 tests
Backend (28 tests):
- CompaniesService: 15 tests (CRUD, validaciones, jerarquías)
- CompaniesConfigService: 8 tests (configuración fiscal, plantillas)
- UserCompanyService: 5 tests (asignación usuarios a empresas)
Frontend (14 tests):
- CompanyList component: 5 tests
- CompanyForm component: 5 tests
- CompanySwitcher component: 4 tests
Integration Tests: 21 tests
-
Companies API: 12 tests
- GET /api/v1/companies
- POST /api/v1/companies
- PUT /api/v1/companies/:id
- DELETE /api/v1/companies/:id
- POST /api/v1/companies/:id/logo
-
User-Company Assignments: 6 tests
- POST /api/v1/users/:id/companies
- GET /api/v1/users/:id/companies
- DELETE /api/v1/users/:id/companies/:companyId
-
Company Hierarchies: 3 tests
- GET /api/v1/companies/:id/subsidiaries
- PUT /api/v1/companies/:id/parent
E2E Tests: 7 tests
- Admin crea empresa, configura parámetros fiscales, asigna logo
- Admin asigna usuario a empresa, usuario puede acceder a ella
- Usuario cambia de empresa activa con company switcher
- Admin crea holding con subsidiarias, valida jerarquía
- Admin usa plantilla de país para crear empresa
- Tenant isolation: empresas no visibles entre tenants
- Usuario elimina empresa sin transacciones
4. TEST CASES
4.1 Casos de Prueba Funcionales
TC-MGN-002-001: Crear Empresa Exitosamente
US: US-MGN-002-001-001 Prioridad: P0 Tipo: Functional Nivel: E2E
Precondiciones:
- Usuario admin autenticado
- Tenant activo
Pasos:
- Navegar a /companies
- Click en "Nueva Empresa"
- Ingresar datos:
- Nombre: "Acme Corp"
- Tax ID: "20-12345678-9"
- País: "Argentina"
- Moneda: "ARS"
- Click en "Guardar"
Resultado Esperado:
- Empresa se crea en companies table con tenant_id correcto
- Empresa aparece en lista de empresas
- Usuario admin se asigna automáticamente a la empresa
- Notificación de éxito se muestra
Criterios de Aceptación Validados:
- AC-001: Admin puede crear empresas
- AC-002: Empresa se asocia a tenant correcto
TC-MGN-002-002: Configurar Parámetros Fiscales
US: US-MGN-002-002-001 Prioridad: P0 Tipo: Functional Nivel: Integration
Precondiciones:
- Empresa "Acme Corp" creada
Pasos:
- PUT /api/v1/companies/:id/config con body:
{
"fiscal_regime": "responsable_inscripto",
"tax_id_type": "CUIT",
"accounting_method": "devengo",
"fiscal_year_start": "01-01"
}
Resultado Esperado:
- Status code: 200 OK
- Configuración se guarda en company_config table
- GET /api/v1/companies/:id retorna config actualizado
Criterios de Aceptación Validados:
- AC-003: Admin puede configurar parámetros fiscales
TC-MGN-002-003: Asignar Usuario a Empresa
US: US-MGN-002-003-001 Prioridad: P0 Tipo: Functional Nivel: E2E
Precondiciones:
- Usuario "contador@tenant-a.com" existe
- Empresa "Acme Corp" existe
Pasos:
- Navegar a /users/:id/companies
- Seleccionar empresa "Acme Corp"
- Click en "Asignar"
- Login como "contador@tenant-a.com"
- Verificar que ve "Acme Corp" en company switcher
Resultado Esperado:
- Relación se crea en user_companies table
- Usuario puede acceder a empresa
- Usuario ve empresa en company switcher
Criterios de Aceptación Validados:
- AC-004: Usuarios se asignan a empresas
- AC-005: Usuario solo ve empresas asignadas
TC-MGN-002-004: Company Switcher Cambia Contexto
US: US-MGN-002-003-002 Prioridad: P0 Tipo: Functional Nivel: E2E
Precondiciones:
- Usuario asignado a empresas "Acme Corp" y "Beta Inc"
- Usuario autenticado con empresa activa "Acme Corp"
Pasos:
- Click en company switcher (dropdown)
- Seleccionar "Beta Inc"
- Navegar a /products
- Verificar que se muestran productos de "Beta Inc"
Resultado Esperado:
- Context de usuario cambia a company_id de "Beta Inc"
- Todas las queries filtran por company_id nuevo
- Company switcher muestra "Beta Inc" como activa
Criterios de Aceptación Validados:
- AC-006: Usuario puede cambiar empresa activa
- AC-007: Datos filtran por empresa activa
TC-MGN-002-005: Jerarquía de Holding y Subsidiarias
US: US-MGN-002-004-001 Prioridad: P1 Tipo: Functional Nivel: Integration
Precondiciones:
- Empresa "Acme Holding" existe (parent)
- Empresas "Acme Argentina" y "Acme Chile" existen (subsidiaries)
Pasos:
- PUT /api/v1/companies/acme-argentina con body: { "parent_id": "acme-holding" }
- PUT /api/v1/companies/acme-chile con body: { "parent_id": "acme-holding" }
- GET /api/v1/companies/acme-holding/subsidiaries
Resultado Esperado:
- Relaciones parent-child se crean
- GET subsidiaries retorna array con "Acme Argentina" y "Acme Chile"
- Validación: no permite ciclos (empresa no puede ser su propio parent)
Criterios de Aceptación Validados:
- AC-008: Admin puede crear jerarquías de empresas
- AC-009: Subsidiarias listan su parent
TC-MGN-002-006: Plantilla de País Aplica Configuración
US: US-MGN-002-005-001 Prioridad: P1 Tipo: Functional Nivel: Integration
Precondiciones:
- Plantilla "Argentina" existe con plan contable y impuestos
Pasos:
- POST /api/v1/companies con body:
{
"name": "Nueva Empresa",
"country_code": "AR",
"apply_template": true
}
Resultado Esperado:
- Empresa se crea
- Plan contable se copia desde plantilla
- Impuestos se configuran según template
- Configuración fiscal se pre-carga
Criterios de Aceptación Validados:
- AC-010: Plantilla por país aplica configuración automática
TC-MGN-002-007: Tenant Isolation de Empresas
US: US-MGN-002-001-001 Prioridad: P0 Tipo: Security Nivel: Integration
Precondiciones:
- Tenant A tiene empresa "Acme Corp"
- Tenant B tiene empresa "Beta Inc"
Pasos:
- Login como usuario de Tenant A
- GET /api/v1/companies
- Verificar que solo retorna empresas de Tenant A
- Intentar GET /api/v1/companies/:id con company_id de Tenant B
Resultado Esperado:
- GET /companies retorna solo empresas de Tenant A
- Intentar acceder empresa de Tenant B resulta en 403 Forbidden
- RLS policies previenen acceso cross-tenant
Criterios de Aceptación Validados:
- AC-011: Empresas están aisladas por tenant
4.2 Casos de Prueba No Funcionales
TC-MGN-002-PERF-001: Performance de GET /companies
Tipo: Performance Herramienta: k6
Escenario:
- 50 usuarios concurrentes
- 500 requests/min
- Duración: 3 minutos
- Tenant con 100 empresas
Criterios de Éxito:
- p50: <80ms
- p95: <200ms
- p99: <400ms
- Error rate: <1%
5. DATOS DE PRUEBA
5.1 Test Data Requirements
Empresas (5 por tenant):
{
"acme-corp": {
"name": "Acme Corp",
"tax_id": "20-12345678-9",
"country": "AR",
"currency": "ARS",
"status": "active"
},
"beta-inc": {
"name": "Beta Inc",
"tax_id": "20-98765432-1",
"country": "AR",
"currency": "ARS",
"status": "active"
}
}
Jerarquías:
- Acme Holding (parent)
- Acme Argentina (subsidiary)
- Acme Chile (subsidiary)
User-Company Assignments:
- admin@tenant-a.com: todas las empresas
- contador@tenant-a.com: Acme Corp, Beta Inc
- vendedor@tenant-a.com: Acme Corp
6. AMBIENTE DE TESTING
6.1 Configuración
Base de datos: PostgreSQL 16
- Tables: companies, company_config, user_companies
Backend: NestJS
- Port: 3000
- Companies module
Frontend: React
- Port: 5173
- Companies feature
6.2 URLs
7. SCHEDULE
7.1 Timeline
| Sprint | RF | Actividad | Duración |
|---|---|---|---|
| Sprint 3 | RF-001, RF-003 | CRUD empresas, asignación usuarios | 2 sem |
| Sprint 4 | RF-002 | Configuración empresarial | 2 sem |
| Sprint 6 | RF-004 | Jerarquías de empresas | 2 sem |
| Sprint 7 | RF-005 | Plantillas por país | 2 sem |
8. ENTRY/EXIT CRITERIA
Entry Criteria
- MGN-001 (Fundamentos) completado
- Tenants y usuarios creados
- Test data preparado
- Ambiente QA disponible
Exit Criteria
- 70 tests ejecutados (100%)
- Unit coverage >80%
- Integration tests pasando (100%)
- E2E tests pasando (100%)
- Bugs P0/P1 resueltos
- Tenant isolation verificado
9. DEFECT MANAGEMENT
9.1 Severidad de Bugs
P0 - Blocker:
- Empresas no se crean
- Tenant isolation roto
- SLA: 24 horas
P1 - Critical:
- Company switcher no cambia contexto
- Configuración fiscal no se guarda
- SLA: 3 días
P2 - Major:
- Logo no se sube correctamente
- Jerarquías no se visualizan bien
- SLA: 1 sprint
10. RIESGOS ESPECÍFICOS DEL MÓDULO
| Riesgo | Probabilidad | Impacto | Mitigación |
|---|---|---|---|
| Company context no se aplica | Media | Alto | Tests de context switching. Validación en cada endpoint. |
| Jerarquías cíclicas | Baja | Medio | Validación de parent_id. No permitir empresa ser su propio ancestro. |
| Plantillas incompatibles | Media | Medio | Testing de plantillas por país. Versionado de templates. |
11. MÉTRICAS
11.1 Test Execution Metrics
Total test cases: 70
- Unit: 42
- Integration: 21
- E2E: 7
Executed: 0/70 (0%) Pass rate: 0% (objetivo: >95%)
11.2 Coverage Metrics
Unit test coverage: 0% (objetivo: >80%) API coverage: 0/15 endpoints (objetivo: 100%)
12. SIGN-OFF
QA Engineer: _______________ Date: _______ Tech Lead: _______________ Date: _______ Product Owner: _______________ Date: _______
13. REFERENCIAS
- User Stories MGN-002
- RF MGN-002
- ET Backend MGN-002
- ET Frontend MGN-002
- Traceability MGN-002
- Master Test Plan
Versión: 1.0 Última actualización: 2025-11-24 Estado: Draft