Skip to content
GitHub

Convenciones de Código

  1. Claridad sobre brevedad — Código legible > código corto
  2. Consistencia — Seguir patrones existentes
  3. Explícito > Implícito — Nombrar claramente, evitar magia
  4. Fail fast — Validar temprano, fallar con mensajes claros

ElementoConvenciónEjemplo
ArchivosPascalCase para clases, camelCase para utilsPayrollService.ts, dateUtils.ts
ClasesPascalCaseContractRepository
InterfacesPascalCase con prefijo I opcionalServiceContext o IServiceContext
FuncionescamelCasecalculateGrossPay()
ConstantesUPPER_SNAKE_CASEMAX_RETRIES
VariablescamelCasetotalAmount
// Patrón estándar de servicio
export 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
}
}
// Orden de imports:
// 1. Node.js built-ins
import { Pool } from "pg";
// 2. Dependencias externas
import express from "express";
// 3. Alias internos (@/)
import { getTenantPool } from "@/lib/db";
// 4. Imports relativos
import { ExampleRepository } from "./ExampleRepository";

ElementoConvenciónEjemplo
Tablassnake_case, pluralcontratos, empleados
Columnassnake_casefecha_inicio, monto_bruto
Schemassnake_case con prefijotenant_empresa, parametros
Índicesidx_tabla_columnaidx_contratos_empleado_id
Foreign Keysfk_tabla_referenciafk_contratos_empleados
-- Usar aliases descriptivos
SELECT
c.id,
c.fecha_inicio,
e.nombres
FROM contratos c
INNER JOIN empleados e ON e.id = c.empleado_id
WHERE c.activo = true;

TipoUbicaciónNaming
Layoutssrc/layouts/BaseLayout.astro
Pagessrc/pages/index.astro, [slug].astro
Islandssrc/islands/PayrollIsland.tsx
UI Componentssrc/components/ui/Button.tsx, Modal.tsx
// Patrón de ViewIsland
export 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>
);
}

<tipo>(<scope>): <descripción corta>
[cuerpo opcional]
[footer opcional]
TipoUso
featNueva funcionalidad
fixCorrección de bug
docsDocumentación
refactorRefactorización sin cambio funcional
testTests
choreMantenimiento, deps, config

Ejemplo:

feat(payroll): add vacation calculation to gross pay
- Implements vacation proportional calculation
- Adds unit tests for edge cases
Closes #123
PatrónUso
mainProducción
developIntegración
feature/<nombre>Nueva funcionalidad
fix/<nombre>Corrección
docs/<nombre>Documentación

---
title: Título de la Página
description: Descripción breve para SEO
sidebar:
label: Label en sidebar
order: 1
updated: 2026-01-18
---
  • Usar ## como heading principal (nunca #)
  • Jerarquía: #########

Usar componentes Starlight cuando sea apropiado:

  • <Aside> para notas, tips, warnings
  • <Tabs> para alternativas
  • <Steps> para procedimientos
  • <CardGrid> para navegación