# NAMING CONVENTIONS - ERP CONSTRUCCION
## Convenciones de Nomenclatura Unificadas

**Version**: 1.0.0
**Fecha**: 2025-12-06
**Estado**: ACTIVO

---

## 1. SCHEMAS DE BASE DE DATOS

### 1.1 Nomenclatura Oficial

| Schema | Proposito | Tipo | Archivo DDL |
|--------|-----------|------|-------------|
| `construction` | Proyectos, estructura de obra, avances, calidad, contratos | Especifico | construction-schema-ddl.sql |
| `estimates` | Presupuestos, estimaciones, generadores, anticipos | Especifico | estimates-schema-ddl.sql |
| `infonavit` | Integracion INFONAVIT, RUV, derechohabientes | Especifico | infonavit-schema-ddl.sql |
| `hr` | Extension RRHH: asistencias, destajo, cuadrillas | Extension | hr-ext-schema-ddl.sql |
| `inventory` | Extension Inventario: almacenes obra, requisiciones, consumos | Extension | inventory-ext-schema-ddl.sql |
| `purchase` | Extension Compras: OC construccion, comparativos | Extension | purchase-ext-schema-ddl.sql |

### 1.2 Mapeo de Nombres Anteriores (DEPRECADOS)

| Nombre Anterior | Nombre Actual | Accion |
|-----------------|---------------|--------|
| `project_management` | `construction` | MIGRAR |
| `financial_management` | `estimates` | MIGRAR |
| `hr_management` | `hr` | MIGRAR |
| `purchasing_management` | `purchase` | MIGRAR |
| `quality_management` | `construction` (integrado) | ELIMINAR |
| `contract_management` | `construction` (integrado) | ELIMINAR |
| `crm_management` | `infonavit` (integrado) | ELIMINAR |
| `assets_management` | (Fase 2 - pendiente) | POSTERGAR |
| `documents_management` | (Fase 2 - pendiente) | POSTERGAR |

### 1.3 Justificacion de Consolidacion

**Antes (11 schemas):**
```
project_management, financial_management, hr_management,
purchasing_management, construction_management, quality_management,
infonavit_management, crm_management, contract_management,
assets_management, documents_management
```

**Despues (6 schemas):**
```
construction, estimates, infonavit, hr, inventory, purchase
```

**Beneficios:**
- Menos complejidad en queries cross-schema
- Alineacion con archivos DDL existentes
- Nombres cortos y claros
- Patron de extension consistente (_ext suffix)

---

## 2. CONVENCIONES DE TABLAS

### 2.1 Prefijos por Tipo

| Tipo | Prefijo | Ejemplo |
|------|---------|---------|
| Tabla master | (ninguno) | `fraccionamientos`, `estimaciones` |
| Tabla detalle | (ninguno, singular) | `estimacion_conceptos` |
| Tabla extension | (schema).table_ext | `hr.employee_construction` |
| Tabla pivot/relacion | (entidad1)_(entidad2) | `cuadrilla_miembros` |
| Tabla historico | (tabla)_history | `estimaciones_history` |

### 2.2 Nombres en Espanol vs Ingles

**Regla General**: Usar espanol para entidades de dominio mexicano, ingles para terminos tecnicos.

| Tipo | Idioma | Ejemplos |
|------|--------|----------|
| Entidades de dominio MX | Espanol | `fraccionamientos`, `lotes`, `estimaciones`, `derechohabientes` |
| Terminos INFONAVIT | Espanol | `cofinavit`, `ruv`, `puntos_ecologicos` |
| Campos tecnicos | Ingles | `tenant_id`, `created_at`, `is_active` |
| Campos de auditoria | Ingles | `created_by`, `updated_at`, `deleted_at` |
| Estados/Enums | Ingles | `draft`, `approved`, `cancelled` |

### 2.3 Sufijos Estandar

| Sufijo | Significado | Ejemplo |
|--------|-------------|---------|
| `_id` | Foreign key | `fraccionamiento_id` |
| `_at` | Timestamp | `created_at`, `approved_at` |
| `_by` | Usuario que ejecuto | `created_by`, `approved_by` |
| `_date` | Solo fecha | `requisition_date` |
| `_number` | Codigo/numero | `requisition_number` |
| `_amount` | Monto monetario | `total_amount` |
| `_quantity` | Cantidad | `quantity_requested` |

---

## 3. CONVENCIONES DE MODULOS

### 3.1 Codigos de Modulo

| Prefijo | Significado | Rango |
|---------|-------------|-------|
| `MAI-` | Modulo Alcance Inicial (Fase 1) | 001-019 |
| `MAE-` | Modulo Alcance Enterprise (Fase 2) | 014-016 |
| `MAA-` | Modulo Alcance Avanzado (Fase 3) | 017+ |
| `MOB-` | Aplicacion Movil | 001-005 |

### 3.2 Mapeo Modulo -> Schema

| Modulo | Schema Principal | Schemas Secundarios |
|--------|------------------|---------------------|
| MAI-001 | auth (core) | - |
| MAI-002 | construction | - |
| MAI-003 | estimates | construction |
| MAI-004 | purchase, inventory | construction |
| MAI-005 | construction | estimates |
| MAI-006 | (reportes - sin schema) | todos |
| MAI-007 | hr | construction |
| MAI-008 | estimates | construction |
| MAI-009 | construction | - |
| MAI-010 | infonavit | - |
| MAI-011 | infonavit | - |
| MAI-012 | construction | - |
| MAI-013 | (admin - usa core) | estimates |
| MAI-018 | construction | estimates |

---

## 4. CONVENCIONES DE CODIGO

### 4.1 Backend (Node.js/TypeScript)

```typescript
// Entidades - PascalCase singular
class Fraccionamiento { }
class Estimacion { }
class DerechoHabiente { }

// Services - PascalCase + Service
class FraccionamientoService { }
class EstimacionService { }

// Controllers - PascalCase + Controller
class FraccionamientoController { }

// Repositories - PascalCase + Repository
class FraccionamientoRepository { }

// DTOs - PascalCase + sufijo
class CreateFraccionamientoDto { }
class UpdateFraccionamientoDto { }
class FraccionamientoResponseDto { }

// Archivos - kebab-case
fraccionamiento.entity.ts
fraccionamiento.service.ts
fraccionamiento.controller.ts
create-fraccionamiento.dto.ts
```

### 4.2 Frontend (React/TypeScript)

```typescript
// Componentes - PascalCase
FraccionamientoList.tsx
FraccionamientoForm.tsx
FraccionamientoCard.tsx

// Hooks - camelCase con prefijo use
useFraccionamientos.ts
useEstimacion.ts

// Stores (Zustand) - camelCase + Store
fraccionamientoStore.ts
estimacionStore.ts

// Pages - PascalCase + Page
FraccionamientosPage.tsx
EstimacionDetailPage.tsx

// Archivos - kebab-case o PascalCase (consistente por proyecto)
```

### 4.3 API Endpoints

```
# Patron RESTful
GET    /api/v1/construccion/fraccionamientos
GET    /api/v1/construccion/fraccionamientos/:id
POST   /api/v1/construccion/fraccionamientos
PUT    /api/v1/construccion/fraccionamientos/:id
DELETE /api/v1/construccion/fraccionamientos/:id

# Recursos anidados
GET    /api/v1/construccion/fraccionamientos/:id/etapas
GET    /api/v1/construccion/fraccionamientos/:id/lotes

# Acciones especiales (verbos)
POST   /api/v1/estimaciones/:id/aprobar
POST   /api/v1/estimaciones/:id/facturar
```

---

## 5. CONVENCIONES DE DOCUMENTACION

### 5.1 Archivos de Especificacion

| Tipo | Prefijo | Ejemplo |
|------|---------|---------|
| Requerimiento Funcional | `RF-` | `RF-MAI002-001.md` |
| Especificacion Tecnica | `ET-` | `ET-MAI002-DB-001.md` |
| User Story | `US-` | `US-MAI002-001.md` |
| ADR | `ADR-` | `ADR-001-arquitectura-multi-tenant.md` |

### 5.2 Nomenclatura ET

```
ET-{MODULO}-{CAPA}-{NUMERO}.md

Capas:
- DB  = Database
- BE  = Backend
- FE  = Frontend
- API = API/Integracion
- MOB = Mobile
```

---

## 6. ACTUALIZACIONES REQUERIDAS

### 6.1 Inventarios a Actualizar

- [ ] `MASTER_INVENTORY.yml` - Cambiar nombres de schemas
- [ ] `DATABASE_INVENTORY.yml` - Alinear con DDL real
- [ ] `DEPENDENCY_GRAPH.yml` - Verificar referencias

### 6.2 Documentacion a Actualizar

- [ ] Especificaciones ET-*-DB-* que referencian schemas antiguos
- [ ] MATRIZ-TRAZABILIDAD-COMPLETA.md

---

## 7. VALIDACION

### 7.1 Script de Validacion

```bash
#!/bin/bash
# validate-naming.sh

# Verificar que schemas en DDL coinciden con NAMING-CONVENTIONS
grep -r "CREATE SCHEMA" docs/04-modelado/database-design/schemas/*.sql

# Verificar referencias a schemas deprecados
grep -rn "project_management\|financial_management\|hr_management" .
```

### 7.2 Checklist de Cumplimiento

- [ ] Todos los DDL usan schemas oficiales
- [ ] MASTER_INVENTORY alineado
- [ ] DATABASE_INVENTORY alineado
- [ ] No hay referencias a schemas deprecados
- [ ] Entidades backend siguen convencion
- [ ] Componentes frontend siguen convencion

---

**Fin del Documento**

*Autor: Requirements-Analyst*
*Version: 1.0.0*
