erp-construccion-backend-v2/src/modules/hse/dto/create-permiso-trabajo.dto.ts
Adrian Flores Cortes 7f32ee65b6 [ST-P2-001] feat: Add DTOs for Construction, Finance, and HSE modules
- Construction: 6 DTOs (create/update/response proyecto, fraccionamiento)
- Finance: 5 DTOs (create/update/response bank-account, accounting-entry)
- HSE: 7 DTOs (incidente, capacitacion, permiso-trabajo, epp-asignacion)

All DTOs use class-validator for validation.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 07:38:54 -06:00

105 lines
2.3 KiB
TypeScript

/**
* CreatePermisoTrabajoDto - DTO para crear permisos de trabajo
*
* @module HSE
* @rf RF-MAA017-003
*/
import {
IsString,
IsNotEmpty,
IsOptional,
IsUUID,
IsDateString,
IsArray,
MaxLength,
} from 'class-validator';
/**
* DTO para crear un permiso de trabajo
*/
export class CreatePermisoTrabajoDto {
/**
* ID del tipo de permiso de trabajo
*/
@IsUUID('4', { message: 'tipoPermisoId debe ser un UUID valido' })
@IsNotEmpty({ message: 'El tipo de permiso es requerido' })
tipoPermisoId: string;
/**
* ID del fraccionamiento/obra
*/
@IsUUID('4', { message: 'fraccionamientoId debe ser un UUID valido' })
@IsNotEmpty({ message: 'El fraccionamiento es requerido' })
fraccionamientoId: string;
/**
* Descripcion del trabajo a realizar
* @example 'Soldadura de estructura metalica en nivel 3'
*/
@IsString()
@IsNotEmpty({ message: 'La descripcion del trabajo es requerida' })
descripcionTrabajo: string;
/**
* Ubicacion especifica del trabajo
* @example 'Torre A, Nivel 3, Zona Norte'
*/
@IsString()
@IsNotEmpty({ message: 'La ubicacion es requerida' })
@MaxLength(200)
ubicacion: string;
/**
* Fecha y hora de inicio del permiso (ISO 8601)
* @example '2026-02-03T08:00:00Z'
*/
@IsDateString({}, { message: 'Formato de fecha invalido' })
@IsNotEmpty({ message: 'La fecha de inicio es requerida' })
fechaInicio: string;
/**
* Fecha y hora de fin del permiso (ISO 8601)
* @example '2026-02-03T18:00:00Z'
*/
@IsDateString({}, { message: 'Formato de fecha invalido' })
@IsNotEmpty({ message: 'La fecha de fin es requerida' })
fechaFin: string;
/**
* ID del responsable del trabajo
*/
@IsUUID('4', { message: 'responsableId debe ser un UUID valido' })
@IsNotEmpty({ message: 'El responsable es requerido' })
responsableId: string;
/**
* Riesgos identificados
*/
@IsOptional()
@IsString()
riesgosIdentificados?: string;
/**
* Medidas de control a implementar
*/
@IsOptional()
@IsString()
medidasControl?: string;
/**
* EPP requerido para el trabajo
*/
@IsOptional()
@IsString()
eppRequerido?: string;
/**
* IDs del personal autorizado
*/
@IsOptional()
@IsArray()
@IsUUID('4', { each: true, message: 'Cada ID debe ser un UUID valido' })
personalAutorizado?: string[];
}