# US-MGN-002-001-001: CRUD de Empresas (Companies) **RF Asociado:** [RF-MGN-002-001](../../02-modelado/requerimientos-funcionales/mgn-002/RF-MGN-002-001-gestion-empresas.md) **Módulo:** MGN-002 - Empresas y Organizaciones **Epic:** Gestión de Empresas **Prioridad:** P0 (MVP) **Story Points:** 5 **Sprint:** Sprint 3 **Fecha:** 2025-11-24 --- ## User Story **Como** administrador, **Quiero** crear, listar, editar y desactivar empresas (companies), **Para** gestionar las organizaciones que operan dentro del tenant. --- ## Criterios de Aceptación ### Escenario 1: Crear empresa **Cuando** creo empresa con nombre, RFC/NIT, dirección fiscal, **Entonces** empresa creada, disponible para operaciones. ### Escenario 2: Listar empresas con jerarquía **Cuando** listo empresas, **Entonces** veo estructura jerárquica (holding → subsidiarias). ### Escenario 3: Editar empresa **Cuando** actualizo datos fiscales o logo, **Entonces** cambios se aplican inmediatamente. ### Escenario 4: Desactivar empresa **Cuando** desactivo empresa con transacciones, **Entonces** empresa inactiva, transacciones históricas preservadas. --- ## Reglas de Negocio - **RN-1:** Una empresa pertenece a un tenant - **RN-2:** Empresa puede ser holding (parent_company_id=null) o subsidiaria - **RN-3:** Soft delete: status='inactive' - **RN-4:** RFC/NIT único por tenant --- ## Tareas Técnicas ### Backend - [ ] POST /api/v1/companies - Crear - [ ] GET /api/v1/companies - Listar con jerarquía - [ ] PATCH /api/v1/companies/:id - Actualizar - [ ] DELETE /api/v1/companies/:id - Soft delete - [ ] CompaniesService.create/findAll/update/deactivate - [ ] Tests (10 casos) ### Frontend - [ ] CompaniesListPage con árbol jerárquico - [ ] CompanyFormModal (crear/editar) - [ ] API client + tests --- ## Estimación: 5 SP (9 horas) --- ## Referencias - [RF-MGN-002-001](../../02-modelado/requerimientos-funcionales/mgn-002/RF-MGN-002-001-gestion-empresas.md) - [ET-BACKEND-MGN-002-001](../../02-modelado/especificaciones-tecnicas/backend/mgn-002/ET-BACKEND-MGN-002-001-gestion-empresas.md)