# Code style — reglas mínimas Subset siempre cargado. Para detalle completo (ejemplos, casos borde, justificaciones) ver [`.agents/skills/sf-backend-architecture/references/CODE-STYLE.md`](../../.agents/skills/sf-backend-architecture/references/CODE-STYLE.md) — invoca la skill `sf-backend-architecture` para cargarlo bajo demanda. ## Reglas que aplican siempre - **Comentarios en español.** Inline, JSDoc, TODO. Sin excepciones. - **Identificadores:** español para dominio (`iccid`, `activarLinea`), inglés para infraestructura técnica (`httpClient`, `eventBus`). - **Funciones y métodos:** `camelCase`, verbo en infinitivo (`getUsuario`, `activarLinea`, `publishEvent`). - **Variables locales y parámetros:** `camelCase` (`activationDate`, `msgData`). - **Constantes literales de módulo:** `UPPER_SNAKE_CASE` (`DEFAULT_LIMIT = 1000`). Instancias configuradas (aunque sean `const`) van en `camelCase` (`const eventBus = new RabbitMQEventBus(...)`). - **Clases, interfaces y tipos:** `PascalCase`. - **Sin prefijo `I`** en interfaces (`EventBus`, no `IEventBus`). - **`type` por defecto, `interface` solo para ports** (contratos implementados por adapters). - **Sin `enum`** — usar uniones de strings literales (`type X = 'a' | 'b'`). - **Sin `any` en código nuevo** salvo en boundaries de I/O externo con comentario justificando. Preferencia: `unknown` + type guard. - **`async/await` siempre.** Nada de `.then().catch()` salvo fire-and-forget consciente con comentario. - **Tests en español:** `describe` e `it` ambos (`it('debería ...')`). - **Política de tests (TDD por defecto):** todo código nuevo se escribe con TDD y el repo mantiene ≥70% de cobertura. Tests del nivel apropiado (domain puro / application con mocks de ports / infrastructure cuando añade adapter). Bugs corregidos requieren test de regresión que reproduzca el fallo. Estrategia detallada en `HOUSE-STYLE.md` § Tests. - **Errores:** `Result` para fallos esperables, `throw` solo para invariantes rotas. - **Aplicación:** estricto en código nuevo, oportunista al tocar código existente. No PRs masivos de retrofit. ## Excepciones de este repo > Estas excepciones son específicas de **sf-sim**. Al copiar este fichero a un repo nuevo, sustituye esta sección (o bórrala) — los defaults de arriba aplican sin estas relajaciones. - **Política de tests:** sf-sim es legacy con cobertura ~12%. La regla TDD + 70% es **aspiracional, no bloqueante**. Estricta para código nuevo; al tocar legacy retrofittear tests es opcional pero valorado; nada de retrofits masivos. La excepción decae cuando alcancemos el 70% global. - `sim-objenious-cron/` no sigue las convenciones arquitectónicas: sus desvíos son intencionales por la API que consume. No auditar contra este documento salvo petición explícita. - Carpeta `aplication/` (con typo) se mantiene tal cual hasta refactor coordinado de los path aliases del monorepo.