erp-core/docs/06-test-plans/TEST-PLAN-MGN-002-empresas.md

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

  1. Gestión de Empresas: CRUD de empresas, logo y branding
  2. Configuración Empresarial: Parámetros fiscales, contables, moneda base, país
  3. Multi-Empresa: Asignación de usuarios a múltiples empresas, company switcher
  4. Jerarquías: Holdings y subsidiarias (parent-child relationships)
  5. 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

  1. 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
  2. User-Company Assignments: 6 tests

    • POST /api/v1/users/:id/companies
    • GET /api/v1/users/:id/companies
    • DELETE /api/v1/users/:id/companies/:companyId
  3. Company Hierarchies: 3 tests

    • GET /api/v1/companies/:id/subsidiaries
    • PUT /api/v1/companies/:id/parent

E2E Tests: 7 tests

  1. Admin crea empresa, configura parámetros fiscales, asigna logo
  2. Admin asigna usuario a empresa, usuario puede acceder a ella
  3. Usuario cambia de empresa activa con company switcher
  4. Admin crea holding con subsidiarias, valida jerarquía
  5. Admin usa plantilla de país para crear empresa
  6. Tenant isolation: empresas no visibles entre tenants
  7. 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:

  1. Navegar a /companies
  2. Click en "Nueva Empresa"
  3. Ingresar datos:
    • Nombre: "Acme Corp"
    • Tax ID: "20-12345678-9"
    • País: "Argentina"
    • Moneda: "ARS"
  4. 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:

  1. 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:

  1. Navegar a /users/:id/companies
  2. Seleccionar empresa "Acme Corp"
  3. Click en "Asignar"
  4. Login como "contador@tenant-a.com"
  5. 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:

  1. Click en company switcher (dropdown)
  2. Seleccionar "Beta Inc"
  3. Navegar a /products
  4. 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:

  1. PUT /api/v1/companies/acme-argentina con body: { "parent_id": "acme-holding" }
  2. PUT /api/v1/companies/acme-chile con body: { "parent_id": "acme-holding" }
  3. 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:

  1. 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:

  1. Login como usuario de Tenant A
  2. GET /api/v1/companies
  3. Verificar que solo retorna empresas de Tenant A
  4. 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


Versión: 1.0 Última actualización: 2025-11-24 Estado: Draft