# GUÍA COMPLETA: NOMENCLATURA Y ESTÁNDARES **Proyecto:** GAMILIT - Sistema de Gamificación Educativa **Versión:** 1.0.0 **Fecha:** 2025-11-20 **Ámbito:** Todos los agentes y desarrolladores **Tipo:** Guía de Referencia Obligatoria --- ## 🎯 PROPÓSITO Esta guía define **TODOS** los estándares de nomenclatura del proyecto para garantizar: - **Consistencia** en todo el codebase - **Legibilidad** y comprensión inmediata - **Mantenibilidad** a largo plazo - **Evitar colisiones** de nombres - **Facilitar búsquedas** y navegación de código --- ## 📁 NOMENCLATURA DE ARCHIVOS Y CARPETAS ### 1. Archivos de Base de Datos (.sql) ```yaml Convención: {NN}-{nombre-descriptivo}.sql Reglas: - Prefijo numérico secuencial (01, 02, 03...) - Nombres en snake_case - Descriptivo y claro - Extensión .sql ✅ Correcto: - 01-user_points.sql - 02-developments.sql - 03-phases.sql - 10-functions-geo.sql ❌ Incorrecto: - projects.sql (sin prefijo) - 1-projects.sql (prefijo de 1 dígito) - Projects.sql (PascalCase) - 01_projects.sql (guión bajo en lugar de guión) ``` ### 2. Archivos de Backend TypeScript #### Entities (.entity.ts) ```yaml Convención: {nombre}.entity.ts Reglas: - Nombre en kebab-case - Sufijo .entity.ts - Singular (project, no projects) ✅ Correcto: - project.entity.ts - development.entity.ts - housing-unit.entity.ts - budget-item.entity.ts ❌ Incorrecto: - Project.entity.ts (PascalCase) - projects.entity.ts (plural) - projectEntity.ts (sin guión) - project.ts (sin sufijo) ``` #### Services (.service.ts) ```yaml Convención: {nombre}.service.ts ✅ Correcto: - project.service.ts - development.service.ts - auth.service.ts ❌ Incorrecto: - ProjectService.ts - projects.service.ts - project-service.ts ``` #### Controllers (.controller.ts) ```yaml Convención: {nombre}.controller.ts ✅ Correcto: - project.controller.ts - development.controller.ts - auth.controller.ts ❌ Incorrecto: - ProjectController.ts - projects.controller.ts ``` #### DTOs (.dto.ts) ```yaml Convención: {acción}-{entidad}.dto.ts ✅ Correcto: - create-project.dto.ts - update-project.dto.ts - filter-project.dto.ts ❌ Incorrecto: - CreateProject.dto.ts - project.dto.ts (sin acción) - projectDto.ts ``` #### Módulos (.module.ts) ```yaml Convención: {nombre}.module.ts ✅ Correcto: - project.module.ts - auth.module.ts - budget.module.ts ❌ Incorrecto: - ProjectModule.ts - projects.module.ts ``` ### 3. Archivos de Frontend #### Componentes React (.tsx) ```yaml Convención: {Nombre}{Tipo}.tsx Reglas: - PascalCase - Sufijo con tipo si aplica (Button, Card, Modal) - Singular ✅ Correcto: - ProjectCard.tsx - ProjectListItem.tsx - CreateProjectModal.tsx - ProjectFilters.tsx ❌ Incorrecto: - projectCard.tsx (camelCase) - project-card.tsx (kebab-case) - ProjectsCard.tsx (plural sin razón) - Card.tsx (muy genérico) ``` #### Páginas React (.tsx) ```yaml Convención: {Nombre}Page.tsx Reglas: - PascalCase - Sufijo Page obligatorio - Plural si lista, singular si detalle ✅ Correcto: - ProjectsPage.tsx (lista) - ProjectDetailPage.tsx (detalle) - CreateProjectPage.tsx (crear) - DashboardPage.tsx ❌ Incorrecto: - Projects.tsx (sin Page) - projectsPage.tsx (camelCase) - project-page.tsx (kebab-case) ``` #### Stores Zustand (.ts) ```yaml Convención: {nombre}.store.ts o use{Nombre}Store.ts Reglas: - camelCase para archivo - Sufijo .store.ts ✅ Correcto: - project.store.ts - auth.store.ts - useProjectStore.ts ❌ Incorrecto: - ProjectStore.ts (PascalCase en archivo) - projectStore.ts (sin .store) ``` #### Hooks Personalizados (.ts) ```yaml Convención: use{Nombre}.ts Reglas: - Prefijo use obligatorio - PascalCase después de use ✅ Correcto: - useProjects.ts - useAuth.ts - useProjectFilters.ts ❌ Incorrecto: - projects.ts (sin use) - useprojects.ts (sin PascalCase) - use-projects.ts (kebab-case) ``` #### Servicios API (.api.ts) ```yaml Convención: {nombre}.api.ts ✅ Correcto: - project.api.ts - auth.api.ts - budget.api.ts ❌ Incorrecto: - ProjectApi.ts - projectAPI.ts - project-api.ts ``` #### Types (.types.ts) ```yaml Convención: {nombre}.types.ts ✅ Correcto: - project.types.ts - common.types.ts - api.types.ts ❌ Incorrecto: - ProjectTypes.ts - project.type.ts (singular) ``` ### 4. Archivos de Configuración ```yaml ✅ Correcto: - tsconfig.json - package.json - .env.example - .gitignore - README.md - vite.config.ts - jest.config.js Reglas: - Seguir convenciones estándar de cada herramienta - lowercase para config files - UPPERCASE para archivos especiales (README, LICENSE) ``` ### 5. Carpetas #### Carpetas de Código ```yaml Convención General: kebab-case o snake_case según contexto Database: - snake_case para schemas: gamification_system - kebab-case para carpetas de código: schemas/project-management Backend: - kebab-case: src/modules/project-management - camelCase para subcarpetas: entities, services, controllers Frontend: - kebab-case: src/components/project-cards - PascalCase para componentes específicos: ProjectCard/ ✅ Correcto (Database): - apps/database/ddl/schemas/gamification_system/ - apps/database/ddl/schemas/financial_management/ ✅ Correcto (Backend): - apps/backend/src/modules/project-management/ - apps/backend/src/modules/auth/ - apps/backend/src/shared/config/ ✅ Correcto (Frontend): - apps/frontend/web/src/shared/components/ - apps/frontend/web/src/apps/admin/ - apps/frontend/mobile/src/screens/ ❌ Incorrecto: - project-Management/ (mixto) - ProjectManagement/ (PascalCase en carpeta) - gamification_system/ en frontend (contexto incorrecto) ``` #### Carpetas de Orchestration ```yaml Convención: kebab-case o UPPERCASE para archivos especiales ✅ Correcto: - orchestration/agentes/database/ - orchestration/directivas/ - orchestration/inventarios/ - orchestration/templates/ - orchestration/estados/ Archivos: - UPPERCASE-CON-GUIONES.md para documentos principales - kebab-case.md para templates Ejemplos: - DIRECTIVA-DOCUMENTACION-OBLIGATORIA.md - TEMPLATE-PLAN.md - MASTER_INVENTORY.yml ``` --- ## 🏷️ NOMENCLATURA DE IDENTIFICADORES EN CÓDIGO ### 1. Database (PostgreSQL + SQL) #### Schemas ```yaml Convención: {contexto}_management Reglas: - snake_case - Sufijo _management para contextos de negocio - Singular o plural según convención del dominio ✅ Correcto: - auth_management - gamification_system - financial_management - purchasing_management ❌ Incorrecto: - authManagement (camelCase) - auth-management (kebab-case) - AUTH_MANAGEMENT (uppercase) - projects (sin contexto claro) ``` #### Tablas ```yaml Convención: {nombre}_en_plural Reglas: - snake_case - Plural (projects, users, budgets) - Descriptivo y claro ✅ Correcto: - projects - developments - housing_units - budget_items - project_status_history ❌ Incorrecto: - project (singular) - Projects (PascalCase) - project-developments (kebab-case) - tbl_projects (prefijo innecesario) ``` #### Columnas ```yaml Convención: {nombre}_descriptivo Reglas: - snake_case - Singular - Evitar abreviaciones - Sufijos estándar: _id, _at, _by_id ✅ Correcto: - id - code - name - description - created_at - updated_at - created_by_id - parent_project_id - total_budget_amount ❌ Incorrecto: - createdAt (camelCase) - created_date (ambiguo, usar created_at) - desc (abreviación) - proj_id (abreviación) ``` #### Primary Keys ```yaml Convención: id Reglas: - SIEMPRE se llama "id" - Tipo UUID - DEFAULT gen_random_uuid() ✅ Correcto: CREATE TABLE projects ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), ... ); ❌ Incorrecto: - project_id como PK (usar id) - pk_projects (nombre complejo) - uuid (genérico) ``` #### Foreign Keys ```yaml Convención: - Columna: {tabla_referenciada_singular}_id - Constraint: fk_{tabla_origen}_to_{tabla_destino} ✅ Correcto: - Columna: project_id, user_id, created_by_id - Constraint: fk_developments_to_projects - Constraint: fk_projects_to_users ❌ Incorrecto: - Columna: project (sin _id) - Columna: projectId (camelCase) - Constraint: fk_project (incompleto) - Constraint: projects_developments_fk (orden invertido) ``` #### Índices ```yaml Convención: idx_{tabla}_{columnas}_{tipo_opcional} Reglas: - Prefijo idx_ - snake_case - Incluir tipo si no es BTREE: _gist, _gin, _hash ✅ Correcto: - idx_projects_code - idx_projects_status - idx_projects_created_at - idx_projects_coordinates_gist - idx_projects_metadata_gin - idx_projects_status_created_at (compuesto) ❌ Incorrecto: - index_projects_code (prefijo largo) - projects_code_idx (orden invertido) - idx_code (sin tabla) - idx_ProjectsCode (PascalCase) ``` #### Unique Constraints ```yaml Convención: uq_{tabla}_{columna(s)} ✅ Correcto: - uq_projects_code - uq_users_email - uq_project_budgets_project_version ❌ Incorrecto: - unique_projects_code (prefijo largo) - projects_code_uq (orden invertido) - uq_code (sin tabla) ``` #### Check Constraints ```yaml Convención: chk_{tabla}_{columna}_{descripción} ✅ Correcto: - chk_projects_status_valid - chk_projects_progress_range - chk_budgets_amount_positive ❌ Incorrecto: - check_projects_status (prefijo largo) - projects_status_chk (orden invertido) - chk_status (sin tabla) ``` #### Funciones ```yaml Convención: {verbo}_{nombre_descriptivo} Reglas: - snake_case - Verbo al inicio (get, update, calculate, validate) ✅ Correcto: - update_updated_at_column() - calculate_project_progress() - validate_budget_amount() - get_active_projects() ❌ Incorrecto: - UpdatedAtUpdate() (PascalCase) - updated_at() (sin verbo) - fn_update_updated_at (prefijo innecesario) ``` #### Triggers ```yaml Convención: trg_{tabla}_{acción} ✅ Correcto: - trg_projects_updated_at - trg_budgets_validate_amount - trg_developments_sync_count ❌ Incorrecto: - trigger_projects_updated_at (prefijo largo) - projects_updated_at_trg (orden invertido) - trg_updated_at (sin tabla) ``` --- ### 2. Backend (TypeScript + Node.js) #### Classes ```yaml Convención: {Nombre}{Sufijo} Reglas: - PascalCase - Sufijo según tipo: Entity, Service, Controller, Dto, Module ✅ Correcto: - ProjectEntity - ProjectService - ProjectController - CreateProjectDto - ProjectModule ❌ Incorrecto: - projectEntity (camelCase) - Project_Entity (snake_case) - ProjectEnt (abreviación) - Entity (sin nombre) ``` #### Interfaces ```yaml Convención: I{Nombre} o {Nombre} (sin I según preferencia) Reglas: - PascalCase - Descriptivo y claro - Prefijo I opcional (proyecto por proyecto) ✅ Correcto (con I): - IProjectService - IUserRepository - IAuthProvider ✅ Correcto (sin I): - ProjectService - UserRepository - AuthProvider ❌ Incorrecto: - iProjectService (lowercase i) - project_service (snake_case) - ProjectServiceInterface (sufijo redundante) ``` #### Types ```yaml Convención: {Nombre}Type o {Nombre} Reglas: - PascalCase - Descriptivo ✅ Correcto: - ProjectStatus - UserRole - ApiResponse - ProjectWithDevelopments ❌ Incorrecto: - projectStatus (camelCase) - project_status (snake_case) - TProjectStatus (prefijo T redundante si ya está en .types.ts) ``` #### Enums ```yaml Convención: {Nombre}Enum o {Nombre} Reglas: - PascalCase para nombre - UPPER_SNAKE_CASE para valores ✅ Correcto: enum ProjectStatus { DRAFT = 'draft', ACTIVE = 'active', PAUSED = 'paused', COMPLETED = 'completed', } enum UserRole { ADMIN = 'admin', SUPERVISOR = 'supervisor', WORKER = 'worker', } ❌ Incorrecto: enum projectStatus { ... } (camelCase) enum ProjectStatus { draft = 'draft', (lowercase) Active = 'active', (PascalCase) } ``` #### Variables ```yaml Convención: camelCase Reglas: - camelCase - Descriptivo - Evitar abreviaciones - Booleanos con prefijo is/has/can ✅ Correcto: - project - projectList - totalBudgetAmount - isActive - hasPermission - canDelete ❌ Incorrecto: - Project (PascalCase) - project_list (snake_case) - prj (abreviación) - active (booleano sin is/has) - temp (no descriptivo) ``` #### Constantes ```yaml Convención: UPPER_SNAKE_CASE Reglas: - UPPERCASE - Snake_case con guiones bajos - Agrupadas en objetos/archivos ✅ Correcto: const MAX_UPLOAD_SIZE = 5242880; // 5MB const API_BASE_URL = 'https://api.example.com'; const DEFAULT_PAGE_SIZE = 20; const DB_TABLES = { PROJECTS: 'user_points', DEVELOPMENTS: 'developments', USERS: 'users', }; ❌ Incorrecto: const maxUploadSize = 5242880; (camelCase) const Max_Upload_Size = 5242880; (mixto) const MAX_UPLOAD (sin valor) ``` #### Funciones/Métodos ```yaml Convención: {verbo}{Complemento} Reglas: - camelCase - Verbo al inicio (get, set, create, update, delete, fetch, calculate) - Descriptivo ✅ Correcto: - getProjects() - createProject() - updateProject() - deleteProject() - fetchProjectById() - calculateTotalBudget() - validateProjectCode() - isProjectActive() ❌ Incorrecto: - GetProjects() (PascalCase) - get_projects() (snake_case) - projects() (sin verbo) - get() (no descriptivo) - getProjectsFromDatabaseAndFormatThem() (demasiado largo) ``` #### Decoradores ```yaml Convención: @{Nombre} Reglas: - PascalCase después de @ - Sin prefijo especial ✅ Correcto: @Entity() @Column() @Injectable() @Controller() @Get() @Post() ❌ Incorrecto: @entity() (lowercase) @Entity_Decorator() (sufijo redundante) ``` --- ### 3. Frontend (React + TypeScript) #### Componentes React ```yaml Convención: {Nombre}{Tipo_opcional} Reglas: - PascalCase - Descriptivo - Sufijo con tipo si ayuda claridad ✅ Correcto: - ProjectCard - ProjectListItem - CreateProjectModal - ProjectFilters - Button - Input ❌ Incorrecto: - projectCard (camelCase) - project-card (kebab-case) - Card (muy genérico sin contexto) - PC (abreviación) ``` #### Props de Componentes ```yaml Convención: {Componente}Props ✅ Correcto: interface ProjectCardProps { project: Project; onClick: () => void; } interface ButtonProps { label: string; variant: 'primary' | 'secondary'; } ❌ Incorrecto: interface IProjectCardProps { ... } (prefijo I redundante) interface ProjectCard_Props { ... } (snake_case) interface Props { ... } (muy genérico) ``` #### Hooks Personalizados ```yaml Convención: use{Nombre} Reglas: - Prefijo use obligatorio - PascalCase después de use - Retorna objeto o array ✅ Correcto: const useProjects = () => { ... } const useAuth = () => { ... } const useProjectFilters = () => { ... } ❌ Incorrecto: const projects = () => { ... } (sin use) const useprojects = () => { ... } (sin PascalCase) const getProjects = () => { ... } (no es hook) ``` #### Estados (useState) ```yaml Convención: {nombre} y set{Nombre} ✅ Correcto: const [project, setProject] = useState(null); const [projects, setProjects] = useState([]); const [isLoading, setIsLoading] = useState(false); const [hasError, setHasError] = useState(false); ❌ Incorrecto: const [Project, SetProject] = useState(); (PascalCase) const [project, updateProject] = useState(); (no usa set) const [prj, setPrj] = useState(); (abreviación) ``` #### Stores (Zustand) ```yaml Convención: use{Nombre}Store ✅ Correcto: const useProjectStore = create(() => ({ ... })); const useAuthStore = create(() => ({ ... })); Uso: const { projects, fetchProjects } = useProjectStore(); ❌ Incorrecto: const projectStore = create(); (sin use) const useProjects = create(); (sin Store) const useProjectsStore = create(); (plural incorrecto) ``` #### Acciones de Stores ```yaml Convención: {verbo}{Complemento} ✅ Correcto (en store): { fetchProjects: async () => { ... }, createProject: async (data) => { ... }, updateProject: async (id, data) => { ... }, deleteProject: async (id) => { ... }, setSelectedProject: (project) => { ... }, } ❌ Incorrecto: { FetchProjects: () => { ... }, (PascalCase) fetch_projects: () => { ... }, (snake_case) get: () => { ... }, (no descriptivo) } ``` #### Event Handlers ```yaml Convención: handle{Evento} o on{Evento} ✅ Correcto: const handleClick = () => { ... }; const handleSubmit = (e: FormEvent) => { ... }; const handleProjectSelect = (project: Project) => { ... }; const onProjectCreate = (project: Project) => { ... }; ❌ Incorrecto: const click = () => { ... }; (sin handle/on) const HandleClick = () => { ... }; (PascalCase) const handle_click = () => { ... }; (snake_case) const clickHandler = () => { ... }; (sufijo en lugar de prefijo) ``` #### CSS Classes (si usan CSS Modules) ```yaml Convención: kebab-case ✅ Correcto: .project-card { ... } .project-list-item { ... } .button-primary { ... } .is-active { ... } ❌ Incorrecto: .ProjectCard { ... } (PascalCase) .project_card { ... } (snake_case) .projectCard { ... } (camelCase) ``` --- ## 📦 NOMENCLATURA DE MÓDULOS Y PAQUETES ### 1. Módulos de Backend ```yaml Convención: kebab-case ✅ Correcto: - project-management - auth - budget-management - user-management ❌ Incorrecto: - projectManagement (camelCase) - gamification_system (snake_case en backend) - ProjectManagement (PascalCase) ``` ### 2. Paquetes npm ```yaml Convención: kebab-case con scope opcional ✅ Correcto: - @myapp/shared - @myapp/components - myapp-utils ❌ Incorrecto: - @myApp/shared (camelCase) - @myapp/Shared (PascalCase) ``` --- ## 🗂️ NOMENCLATURA DE TAREAS Y DOCUMENTACIÓN ### 1. IDs de Tareas de Agentes ```yaml Convención: {AGENTE}-{NNN} Reglas: - AGENTE en mayúsculas: DB, BE, FE - Número de 3 dígitos con ceros leading ✅ Correcto: - DB-001 - DB-042 - BE-015 - FE-008 ❌ Incorrecto: - db-001 (lowercase) - DB-1 (sin ceros) - DATABASE-001 (nombre completo) - DB001 (sin guión) ``` ### 2. IDs de Subtareas de Subagentes ```yaml Convención: {TAREA-PRINCIPAL}-SUB-{NN} ✅ Correcto: - DB-042-SUB-01 - DB-042-SUB-02 - BE-015-SUB-01 ❌ Incorrecto: - DB-042-01 (sin SUB) - DB-042-SUBAGENT-01 (nombre largo) - DB-042-sub-01 (lowercase) ``` ### 3. Tipos de Tareas ```yaml Nomenclatura para carpetas de tareas: Historia de Usuario: US-{NNN}-{nombre-corto} Ejemplo: US-001-gestion-proyectos Feature: FEAT-{NNN}-{nombre-corto} Ejemplo: FEAT-042-dashboard-proyectos Bugfix: FIX-{NNN}-{nombre-corto} Ejemplo: FIX-015-validacion-presupuesto Tarea Extra: TASK-{NNN}-{nombre-corto} Ejemplo: TASK-008-migracion-datos Refactor: REFACTOR-{NNN}-{nombre-corto} Ejemplo: REFACTOR-023-services-layer ``` ### 4. Archivos de Documentación ```yaml Convención: UPPERCASE-CON-GUIONES.md o {numero}-{nombre}.md ✅ Correcto (documentos principales): - README.md - CHANGELOG.md - CONTRIBUTING.md - DIRECTIVA-CONTROL-VERSIONES.md - PROMPT-AGENTES-PRINCIPALES.md ✅ Correcto (documentos secuenciales): - 01-ANALISIS.md - 02-PLAN.md - 03-EJECUCION.md - 04-VALIDACION.md - 05-DOCUMENTACION.md ✅ Correcto (templates): - TEMPLATE-PLAN.md - TEMPLATE-CONTEXTO-SUBAGENTE.md ❌ Incorrecto: - readme.md (lowercase) - Readme.md (mixto) - ANALISIS.md (sin número si es secuencial) ``` --- ## 🌐 NOMENCLATURA DE ENDPOINTS API ### Convención REST ```yaml Formato: /{version}/{recurso}/{id}/{sub-recurso} Reglas: - lowercase - kebab-case para recursos compuestos - Plural para colecciones - Singular para detalle ✅ Correcto: GET /api/v1/projects GET /api/v1/projects/:id POST /api/v1/projects PUT /api/v1/projects/:id DELETE /api/v1/projects/:id GET /api/v1/projects/:id/developments GET /api/v1/projects/:id/budget-items ❌ Incorrecto: GET /api/v1/Projects (PascalCase) GET /api/v1/project (singular para colección) GET /api/v1/projects_list (snake_case) GET /api/v1/getProjects (verbo en URL) GET /api/v1/projects/:id/getDevelopments (verbo) ``` --- ## 🔤 NOMENCLATURA DE VARIABLES DE ENTORNO ```yaml Convención: UPPER_SNAKE_CASE con prefijo Reglas: - UPPERCASE - Snake_case - Prefijo por categoría: DB_, API_, APP_, AUTH_ ✅ Correcto: - DATABASE_URL - DB_HOST - DB_PORT - API_BASE_URL - APP_PORT - AUTH_JWT_SECRET - NODE_ENV ❌ Incorrecto: - databaseUrl (camelCase) - database-url (kebab-case) - DATABASEURL (sin separador) - url (no descriptivo) ``` --- ## ✅ TABLA DE REFERENCIA RÁPIDA | Contexto | Convención | Ejemplo | |----------|-----------|---------| | **Database** | | Schema | snake_case + _management | `gamification_system` | | Tabla | snake_case plural | `projects` | | Columna | snake_case singular | `created_at` | | FK columna | {tabla}_id | `project_id` | | FK constraint | fk_{origen}_to_{destino} | `fk_developments_to_projects` | | Índice | idx_{tabla}_{columnas} | `idx_projects_status` | | Función | {verbo}_{nombre} | `update_updated_at_column` | | **Backend** | | Clase | PascalCase + Sufijo | `ProjectEntity` | | Interface | PascalCase (I opcional) | `IProjectService` | | Variable | camelCase | `projectList` | | Constante | UPPER_SNAKE_CASE | `MAX_UPLOAD_SIZE` | | Método | camelCase con verbo | `getProjects()` | | Archivo | kebab-case.sufijo.ts | `project.service.ts` | | **Frontend** | | Componente | PascalCase | `ProjectCard` | | Hook | use + PascalCase | `useProjects` | | Store | use + PascalCase + Store | `useProjectStore` | | Props | PascalCase + Props | `ProjectCardProps` | | Handler | handle + PascalCase | `handleClick` | | Archivo | PascalCase.tsx | `ProjectCard.tsx` | | **Otros** | | Endpoint | /lowercase/kebab-case | `/api/v1/projects` | | Env var | UPPER_SNAKE_CASE | `DATABASE_URL` | | Tarea | {AGENTE}-{NNN} | `DB-042` | | Carpeta | kebab-case | `project-management` | --- ## 📖 CASOS ESPECIALES ### 1. Acrónimos ```yaml Regla: Tratar acrónimos como palabras ✅ Correcto: - ApiService (no APIService) - HttpClient (no HTTPClient) - UrlParser (no URLParser) Excepción en constantes: - API_BASE_URL (OK en UPPER_CASE) - HTTP_TIMEOUT (OK en UPPER_CASE) ``` ### 2. Números en Nombres ```yaml Evitar números excepto en: - Archivos secuenciales: 01-user_points.sql - Versiones: v1, v2 - IDs de tareas: DB-042 ❌ Evitar: - project2Service - user1Repository ``` ### 3. Booleanos ```yaml Prefijos obligatorios: is, has, can, should ✅ Correcto: - isActive - hasPermission - canDelete - shouldValidate ❌ Incorrecto: - active (sin prefijo) - permission (sin has) - deleted (ambiguo) ``` --- ## 🔍 VALIDACIÓN DE NOMENCLATURA ### Checklist Pre-Commit ```markdown - [ ] Nombres de archivos siguen convenciones - [ ] Nombres de clases/interfaces en PascalCase - [ ] Variables en camelCase - [ ] Constantes en UPPER_SNAKE_CASE - [ ] Database objects en snake_case - [ ] Sin abreviaciones ambiguas - [ ] Nombres descriptivos (no temp, data, item) - [ ] Booleanos con prefijo is/has/can - [ ] Métodos con verbo al inicio ``` --- ## 📚 REFERENCIAS - ESTANDARES-NOMENCLATURA.md (estándares por capa) - DIRECTIVA-CALIDAD-CODIGO.md (principios SOLID) - DIRECTIVA-DISENO-BASE-DATOS.md (normalización) --- **Versión:** 1.0.0 **Fecha:** 2025-11-20 **Próxima revisión:** Mensual **Responsable:** Todos los agentes y desarrolladores