Convenciones de Código
Principios Generales
Section titled “Principios Generales”- Claridad sobre brevedad — Código legible > código corto
- Consistencia — Seguir patrones existentes
- Explícito > Implícito — Nombrar claramente, evitar magia
- Fail fast — Validar temprano, fallar con mensajes claros
TypeScript (Orchestrator)
Section titled “TypeScript (Orchestrator)”Naming
Section titled “Naming”| Elemento | Convención | Ejemplo |
|---|---|---|
| Archivos | PascalCase para clases, camelCase para utils | PayrollService.ts, dateUtils.ts |
| Clases | PascalCase | ContractRepository |
| Interfaces | PascalCase con prefijo I opcional | ServiceContext o IServiceContext |
| Funciones | camelCase | calculateGrossPay() |
| Constantes | UPPER_SNAKE_CASE | MAX_RETRIES |
| Variables | camelCase | totalAmount |
Estructura de Servicios
Section titled “Estructura de Servicios”// Patrón estándar de servicioexport class ExampleService extends BaseService { constructor( protected readonly repo: ExampleRepository, protected readonly logger: Logger, ) { super(); }
async execute(ctx: ServiceContext): Promise<ServiceResult<T>> { // 1. Validación // 2. Lógica de negocio // 3. Retorno estandarizado }}Imports
Section titled “Imports”// Orden de imports:// 1. Node.js built-insimport { Pool } from "pg";
// 2. Dependencias externasimport express from "express";
// 3. Alias internos (@/)import { getTenantPool } from "@/lib/db";
// 4. Imports relativosimport { ExampleRepository } from "./ExampleRepository";SQL / PostgreSQL
Section titled “SQL / PostgreSQL”Naming
Section titled “Naming”| Elemento | Convención | Ejemplo |
|---|---|---|
| Tablas | snake_case, plural | contratos, empleados |
| Columnas | snake_case | fecha_inicio, monto_bruto |
| Schemas | snake_case con prefijo | tenant_empresa, parametros |
| Índices | idx_tabla_columna | idx_contratos_empleado_id |
| Foreign Keys | fk_tabla_referencia | fk_contratos_empleados |
Queries
Section titled “Queries”-- Usar aliases descriptivosSELECT c.id, c.fecha_inicio, e.nombresFROM contratos cINNER JOIN empleados e ON e.id = c.empleado_idWHERE c.activo = true;Frontend (Sevastopol)
Section titled “Frontend (Sevastopol)”Componentes
Section titled “Componentes”| Tipo | Ubicación | Naming |
|---|---|---|
| Layouts | src/layouts/ | BaseLayout.astro |
| Pages | src/pages/ | index.astro, [slug].astro |
| Islands | src/islands/ | PayrollIsland.tsx |
| UI Components | src/components/ui/ | Button.tsx, Modal.tsx |
Islands (SolidJS)
Section titled “Islands (SolidJS)”// Patrón de ViewIslandexport function ExampleIsland() { const [data, setData] = createSignal<T[]>([]); const [loading, setLoading] = createSignal(true);
onMount(async () => { const result = await fetchData(); setData(result); setLoading(false); });
return ( <Show when={!loading()} fallback={<Spinner />}> <DataTable data={data()} /> </Show> );}Commits
Section titled “Commits”<tipo>(<scope>): <descripción corta>
[cuerpo opcional]
[footer opcional]| Tipo | Uso |
|---|---|
feat | Nueva funcionalidad |
fix | Corrección de bug |
docs | Documentación |
refactor | Refactorización sin cambio funcional |
test | Tests |
chore | Mantenimiento, deps, config |
Ejemplo:
feat(payroll): add vacation calculation to gross pay
- Implements vacation proportional calculation- Adds unit tests for edge cases
Closes #123Branches
Section titled “Branches”| Patrón | Uso |
|---|---|
main | Producción |
develop | Integración |
feature/<nombre> | Nueva funcionalidad |
fix/<nombre> | Corrección |
docs/<nombre> | Documentación |
Documentación (Jean d’Arc)
Section titled “Documentación (Jean d’Arc)”Frontmatter Obligatorio
Section titled “Frontmatter Obligatorio”---title: Título de la Páginadescription: Descripción breve para SEOsidebar: label: Label en sidebar order: 1updated: 2026-01-18---Headings
Section titled “Headings”- Usar
##como heading principal (nunca#) - Jerarquía:
##→###→####
Componentes
Section titled “Componentes”Usar componentes Starlight cuando sea apropiado:
<Aside>para notas, tips, warnings<Tabs>para alternativas<Steps>para procedimientos<CardGrid>para navegación