291 lines
8.0 KiB
Markdown
291 lines
8.0 KiB
Markdown
# Directiva: Extensión de Verticales
|
|
|
|
## Propósito
|
|
|
|
Define las reglas para que las verticales (construcción, vidrio-templado, etc.) extiendan correctamente el ERP Core sin modificarlo.
|
|
|
|
## Principio Fundamental
|
|
|
|
```
|
|
Las verticales EXTIENDEN el core, NUNCA lo modifican.
|
|
```
|
|
|
|
---
|
|
|
|
## Arquitectura de Extensión
|
|
|
|
```
|
|
erp-core (60-70% código base)
|
|
│
|
|
├── core_auth.* → Heredado por todas las verticales
|
|
├── core_users.* → Heredado por todas las verticales
|
|
├── core_tenants.* → Heredado por todas las verticales
|
|
└── core_catalogs.* → Heredado por todas las verticales
|
|
│
|
|
▼
|
|
verticales/{nombre}/ (+30-40% código específico)
|
|
│
|
|
├── {nombre}_*.schemas → Schemas propios de la vertical
|
|
├── /backend/src/modules/ → Módulos específicos
|
|
└── /frontend/src/ → Componentes específicos
|
|
```
|
|
|
|
---
|
|
|
|
## Reglas de Extensión
|
|
|
|
### 1. Schemas de Base de Datos
|
|
|
|
```sql
|
|
-- CORRECTO: Crear schema propio
|
|
CREATE SCHEMA construccion_management;
|
|
|
|
-- CORRECTO: Referenciar tablas del core
|
|
CREATE TABLE construccion_management.projects (
|
|
id UUID PRIMARY KEY,
|
|
tenant_id UUID NOT NULL REFERENCES core_tenants.tenants(id),
|
|
created_by UUID REFERENCES core_auth.users(id),
|
|
-- ... columnas específicas de construcción
|
|
);
|
|
|
|
-- INCORRECTO: Modificar tablas del core
|
|
ALTER TABLE core_auth.users ADD COLUMN campo_construccion TEXT; -- ❌ PROHIBIDO
|
|
```
|
|
|
|
### 2. Backend - Servicios
|
|
|
|
```typescript
|
|
// CORRECTO: Importar y extender servicios del core
|
|
import { AuthService } from '@erp-core/auth';
|
|
import { BaseService } from '@erp-core/shared';
|
|
|
|
@Injectable()
|
|
export class ProjectService extends BaseService<Project> {
|
|
constructor(
|
|
private authService: AuthService, // Usar del core
|
|
) {
|
|
super();
|
|
}
|
|
}
|
|
|
|
// INCORRECTO: Duplicar lógica del core
|
|
export class MyAuthService { } // ❌ PROHIBIDO - usar el del core
|
|
```
|
|
|
|
### 3. Backend - Entidades
|
|
|
|
```typescript
|
|
// CORRECTO: Extender entidad base
|
|
import { BaseEntity } from '@erp-core/shared';
|
|
|
|
@Entity('construccion_management.projects')
|
|
export class Project extends BaseEntity {
|
|
// BaseEntity ya tiene: id, tenantId, createdAt, updatedAt
|
|
|
|
@Column()
|
|
nombre: string;
|
|
|
|
// Referencia a usuario del core
|
|
@ManyToOne(() => User)
|
|
@JoinColumn({ name: 'project_manager_id' })
|
|
projectManager: User;
|
|
}
|
|
```
|
|
|
|
### 4. Frontend - Componentes
|
|
|
|
```typescript
|
|
// CORRECTO: Usar componentes del core
|
|
import { Button, Input, DataTable } from '@erp-core/ui';
|
|
import { useAuth, useTenant } from '@erp-core/hooks';
|
|
|
|
export const ProjectList = () => {
|
|
const { user } = useAuth(); // Hook del core
|
|
|
|
return (
|
|
<DataTable columns={columns} /> // Componente del core
|
|
);
|
|
};
|
|
|
|
// INCORRECTO: Reimplementar componentes base
|
|
export const MyButton = () => { }; // ❌ PROHIBIDO - usar el del core
|
|
```
|
|
|
|
---
|
|
|
|
## Estructura de Directorio para Verticales
|
|
|
|
```
|
|
verticales/{nombre}/
|
|
├── backend/
|
|
│ └── src/
|
|
│ ├── modules/ # Módulos específicos
|
|
│ │ ├── projects/ # Ejemplo: proyectos de construcción
|
|
│ │ └── estimates/ # Ejemplo: estimaciones
|
|
│ └── index.ts # Exporta módulos de la vertical
|
|
│
|
|
├── frontend/
|
|
│ └── src/
|
|
│ ├── components/ # Componentes específicos
|
|
│ ├── pages/ # Páginas específicas
|
|
│ └── index.ts # Exporta componentes de la vertical
|
|
│
|
|
├── database/
|
|
│ ├── ddl/ # Schemas específicos
|
|
│ ├── migrations/ # Migraciones específicas
|
|
│ └── seeds/ # Seeds específicos
|
|
│
|
|
├── docs/ # Documentación específica
|
|
└── orchestration/ # Orquestación específica
|
|
```
|
|
|
|
---
|
|
|
|
## Cómo Extender Funcionalidad
|
|
|
|
### Caso 1: Agregar campos a una entidad del core
|
|
|
|
```typescript
|
|
// NO modificar core_auth.users
|
|
|
|
// Crear tabla de extensión en la vertical
|
|
CREATE TABLE construccion_management.user_extensions (
|
|
id UUID PRIMARY KEY,
|
|
user_id UUID NOT NULL REFERENCES core_auth.users(id),
|
|
cargo_obra VARCHAR(100),
|
|
numero_imss VARCHAR(50),
|
|
UNIQUE(user_id)
|
|
);
|
|
|
|
// Crear vista que combina ambas
|
|
CREATE VIEW construccion_management.users_complete AS
|
|
SELECT u.*, ue.cargo_obra, ue.numero_imss
|
|
FROM core_auth.users u
|
|
LEFT JOIN construccion_management.user_extensions ue ON u.id = ue.user_id;
|
|
```
|
|
|
|
### Caso 2: Agregar validación específica
|
|
|
|
```typescript
|
|
// En la vertical, crear decorator que usa el del core
|
|
import { ValidateTenant } from '@erp-core/validators';
|
|
|
|
// Agregar validación específica
|
|
export const ValidateProject = () => {
|
|
return applyDecorators(
|
|
ValidateTenant(), // Del core
|
|
ValidateProjectBudget(), // Específico de construcción
|
|
);
|
|
};
|
|
```
|
|
|
|
### Caso 3: Agregar endpoint específico
|
|
|
|
```typescript
|
|
// En la vertical
|
|
@Controller('construction/projects')
|
|
export class ProjectController {
|
|
@Get()
|
|
@UseGuards(AuthGuard) // Guard del core
|
|
async findAll() {
|
|
// Lógica específica de construcción
|
|
}
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## Validaciones Obligatorias
|
|
|
|
### Antes de crear código en vertical:
|
|
- [ ] ¿El core ya tiene esta funcionalidad? → Usar del core
|
|
- [ ] ¿Se puede extender algo del core? → Extender, no duplicar
|
|
- [ ] ¿Es realmente específico de la vertical? → Ok crear nuevo
|
|
|
|
### Antes de modificar el core:
|
|
- [ ] ¿Beneficia a TODAS las verticales? → Ok modificar core
|
|
- [ ] ¿Es específico de una vertical? → Crear en la vertical
|
|
- [ ] ¿Rompe compatibilidad? → Crear versión nueva, deprecar antigua
|
|
|
|
---
|
|
|
|
## Verticales Registradas
|
|
|
|
| Vertical | Código | Módulos | SP | Estado | SPECS Aplicables |
|
|
|----------|--------|---------|----:|--------|------------------|
|
|
| **Construcción** | CONS | 18 (MAI/MAE/MAA) | 450+ | EN_DESARROLLO | 27 |
|
|
| **Mecánicas Diesel** | MMD | 5 (MMD) | 150+ | DDL_IMPLEMENTADO | 25 |
|
|
| **Vidrio Templado** | VT | 8 (VT) | 212 | PLANIFICACION_COMPLETA | 25 |
|
|
| **Retail/POS** | RT | 10 (RT) | 322 | PLANIFICACION_COMPLETA | 26 |
|
|
| **Clínicas** | CL | 12 (CL) | 395 | PLANIFICACION_COMPLETA | 22 |
|
|
|
|
**Total:** 53 módulos | 1529+ Story Points | 30 SPECS transversales disponibles
|
|
|
|
---
|
|
|
|
## SPECS Obligatorias por Vertical
|
|
|
|
### Todas las Verticales (Obligatorias)
|
|
- `SPEC-SISTEMA-SECUENCIAS` - Secuencias automáticas
|
|
- `SPEC-SEGURIDAD-API-KEYS-PERMISOS` - API Keys y ACL
|
|
- `SPEC-MAIL-THREAD-TRACKING` - Comunicación
|
|
|
|
### Por Tipo de Vertical
|
|
|
|
| SPEC | CONS | MMD | VT | RT | CL |
|
|
|------|:----:|:---:|:--:|:--:|:--:|
|
|
| SPEC-VALORACION-INVENTARIO | ✓ | ✓ | ✓ | ✓ | ○ |
|
|
| SPEC-TRAZABILIDAD-LOTES-SERIES | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
| SPEC-PRICING-RULES | ✗ | ✓ | ✓ | ✓ | ✗ |
|
|
| SPEC-PROYECTOS-DEPENDENCIAS | ✓ | ✗ | ✓ | ✗ | ✗ |
|
|
| SPEC-INTEGRACION-CALENDAR | ✗ | ✗ | ✗ | ✗ | ✓ |
|
|
| SPEC-FACTURACION-CFDI | ✓ | ✓ | ○ | ✓ | ✓ |
|
|
| SPEC-INVENTARIOS-CICLICOS | ✗ | ✓ | ✗ | ✓ | ○ |
|
|
| SPEC-RRHH-EVALUACIONES | ✓ | ○ | ○ | ○ | ✓ |
|
|
|
|
**Leyenda:** ✓ Obligatoria | ○ Opcional | ✗ No aplica
|
|
|
|
---
|
|
|
|
## Documentación de Herencia por Vertical
|
|
|
|
Cada vertical debe tener:
|
|
|
|
1. **`orchestration/00-guidelines/HERENCIA-SPECS-CORE.md`**
|
|
- Lista de SPECS aplicables con estado
|
|
- Adaptaciones específicas por SPEC
|
|
- Módulos afectados
|
|
|
|
2. **`database/HERENCIA-ERP-CORE.md`**
|
|
- Tablas del core heredadas
|
|
- Schemas específicos
|
|
- Extensiones planeadas
|
|
|
|
3. **`orchestration/inventarios/MASTER_INVENTORY.yml`**
|
|
- Métricas de herencia
|
|
- specs_aplicables / specs_implementadas
|
|
- Referencias a core
|
|
|
|
---
|
|
|
|
## Mapeo Completo
|
|
|
|
Ver matriz detallada de aplicabilidad:
|
|
```
|
|
apps/erp-core/docs/04-modelado/MAPEO-SPECS-VERTICALES.md
|
|
```
|
|
|
|
---
|
|
|
|
## Referencias
|
|
|
|
- ERP-Core: `../../../erp-core/`
|
|
- Directiva Multi-Tenant: `DIRECTIVA-MULTI-TENANT.md`
|
|
- Mapeo SPECS-Verticales: `../../../erp-core/docs/04-modelado/MAPEO-SPECS-VERTICALES.md`
|
|
- Suite Master Inventory: `../../../orchestration/inventarios/SUITE_MASTER_INVENTORY.yml`
|
|
|
|
---
|
|
|
|
*Directiva específica de ERP-Core*
|
|
*Última actualización: 2025-12-08*
|