Documento técnico oficial — Estructura del proyecto y definición de cada módulo.
/
├── eslint.config.mjs
├── nest-cli.json
├── package.json
├── tsconfig.json
├── tsconfig.build.json
├── test/
└── src/
├── app.controller.ts
├── app.module.ts
├── app.service.ts
├── main.ts
├── common/
├── config/
├── database/
├── infraestructure/
└── modules/
Punto de entrada de la aplicación NestJS. Configura:
- Pipes globales
- Prefijo de rutas
- CORS
- Bootstrap del servidor HTTP
Módulo raíz. Importa todos los módulos de negocio.
Controlador y servicio base para pruebas de salud del sistema.
common/
├── decorators/
├── filters/
├── guards/
├── interceptors/
├── pipes/
└── utils/
Decoradores personalizados para parámetros, rutas, o lógica cross-cutting.
Filtros de excepción para manejo centralizado de errores.
Guardias de autorización/autenticación:
- AuthGuard
- RoleGuard
Transforman o interceptan peticiones/respuestas:
- Logging
- Timeout
- JWT attachment
Validación y transformación de datos.
Funciones utilitarias comunes a toda la app.
config/
├── app.config.ts
├── database.config.ts
└── mail.config.ts
Variables de entorno, configuración global de app, prefijos, puertos.
Configuración del ORM (TypeORM/Prisma).
Configuración del servidor SMTP para envío de notificaciones.
database/
├── entities/
├── migrations/
└── seeds/
Modelos ORM que representan tablas de BD:
- User
- Employee
- Incapacity
- Document
- AuditLog
- NotificationLog
Scripts generados por el ORM para cambiar el esquema.
Datos pre-cargados necesarios para la inicialización.
infraestructure/
├── email/
├── event-bus/
├── external-apis/
└── file-storage/
Adaptadores SMTP o servicios transaccionales:
- Nodemailer
- Resend
- SendGrid
Sistema de eventos internos o externos (EventEmitter, Kafka, RabbitMQ).
Conexiones con servicios externos (EPS, ARL, validadores externos).
Manejo de almacenamiento:
- Local
- AWS S3
- Google Cloud Storage
modules/
├── audit/
├── auth/
├── documents/
├── employees/
├── incapacities/
├── integrations/
├── notifications/
├── reports/
├── statistics/
└── users/
Cada módulo sigue la misma estructura y representa un dominio del sistema.
Cada módulo sigue esta arquitectura:
/modules/<module-name>
├── controllers/
│ └── *.controller.ts
├── services/
│ └── *.service.ts
├── repositories/
│ └── *.repository.ts
├── entities/
│ └── *.entity.ts
├── dtos/
│ └── *.dto.ts
├── mappers/ (opcional)
│ └── *.mapper.ts
└── <module-name>.module.ts
Exponen endpoints HTTP.
Responsabilidades:
- Recibir solicitudes
- Validar DTOs
- Llamar servicios
- Devolver respuestas HTTP
Contienen la lógica de negocio (casos de uso).
Ejemplos:
- Crear incapacidad
- Validar documento
- Enviar notificación
- Cambiar estado de trámite
Aíslan el acceso a la base de datos.
El servicio no debería interactuar directamente con TypeORM/Prisma.
Modelos ORM que representan tablas en la BD.
Definen cómo llegan los datos:
- Validaciones (
class-validator) - Tipificación (
class-transformer)
Transforman:
- Entity → DTO
- DTO → Entity
Archivo de registro del módulo en NestJS:
- Declara controllers
- Declara providers
- Importa otros módulos
- Exporta servicios si es necesario
Gestión de autenticación y autorización:
- Login
- Tokens JWT
- Roles
- Guards
Maneja usuarios del sistema:
- CRUD
- Roles
- Perfil básico
Información del empleado:
- Datos personales
- Datos contractuales
- Portal del colaborador
Núcleo del sistema SIGI:
- Registro y edición de incapacidades
- Flujo de estados:
- Registrada → Aceptada → Rechazada → Pagada
- Asociación con documentos
- Validaciones automáticas
Gestión de documentos:
- Subida de archivos
- Validación
- Almacenamiento
- Asociación a incapacidades
Envío automático de correos:
- Cambio de estado
- Notificaciones a empleados
- Alertas de RRHH
Generación de:
- CSV
- Reportes contables
- Reportes para RRHH y auditoría
Cálculo y entrega de estadísticas:
- Incapacidades por mes
- Tiempos promedio
- Valores acumulados
- Gráficas para dashboard
Trazabilidad del sistema:
- Registro de actividades críticas
- Historial de trámites
- Registro de cambios por usuario
Conexión futura con:
- EPS
- ARL
- Sistemas externos