/** * IncidenteService - Servicio para gestión de incidentes HSE * * Gestión de incidentes de seguridad con workflow y relaciones. * Workflow: abierto -> en_investigacion -> cerrado * * @module HSE */ import { Repository } from 'typeorm'; import { Incidente, TipoIncidente, GravedadIncidente, EstadoIncidente } from '../entities/incidente.entity'; import { IncidenteInvolucrado, RolInvolucrado } from '../entities/incidente-involucrado.entity'; import { IncidenteAccion, EstadoAccion } from '../entities/incidente-accion.entity'; import { ServiceContext, PaginatedResult } from '../../../shared/services/base.service'; export interface CreateIncidenteDto { fechaHora: Date; fraccionamientoId: string; ubicacionDescripcion?: string; tipo: TipoIncidente; gravedad: GravedadIncidente; descripcion: string; causaInmediata?: string; causaBasica?: string; } export interface UpdateIncidenteDto { ubicacionDescripcion?: string; tipo?: TipoIncidente; gravedad?: GravedadIncidente; descripcion?: string; causaInmediata?: string; causaBasica?: string; } export interface AddInvolucradoDto { employeeId: string; rol: RolInvolucrado; descripcionLesion?: string; parteCuerpo?: string; diasIncapacidad?: number; } export interface AddAccionDto { descripcion: string; tipo: string; responsableId?: string; fechaCompromiso: Date; } export interface UpdateAccionDto { descripcion?: string; responsableId?: string; fechaCompromiso?: Date; estado?: EstadoAccion; evidenciaUrl?: string; observaciones?: string; } export interface IncidenteFilters { fraccionamientoId?: string; tipo?: TipoIncidente; gravedad?: GravedadIncidente; estado?: EstadoIncidente; dateFrom?: Date; dateTo?: Date; } export interface IncidenteStats { total: number; porTipo: { tipo: string; count: number; }[]; porGravedad: { gravedad: string; count: number; }[]; porEstado: { estado: string; count: number; }[]; diasSinAccidente: number; } export declare class IncidenteService { private readonly incidenteRepository; private readonly involucradoRepository; private readonly accionRepository; constructor(incidenteRepository: Repository, involucradoRepository: Repository, accionRepository: Repository); private generateFolio; findWithFilters(ctx: ServiceContext, filters?: IncidenteFilters, page?: number, limit?: number): Promise>; findById(ctx: ServiceContext, id: string): Promise; findWithDetails(ctx: ServiceContext, id: string): Promise; create(ctx: ServiceContext, dto: CreateIncidenteDto): Promise; update(ctx: ServiceContext, id: string, dto: UpdateIncidenteDto): Promise; startInvestigation(ctx: ServiceContext, id: string): Promise; closeIncident(ctx: ServiceContext, id: string): Promise; addInvolucrado(ctx: ServiceContext, incidenteId: string, dto: AddInvolucradoDto): Promise; removeInvolucrado(ctx: ServiceContext, incidenteId: string, involucradoId: string): Promise; addAccion(ctx: ServiceContext, incidenteId: string, dto: AddAccionDto): Promise; updateAccion(ctx: ServiceContext, incidenteId: string, accionId: string, dto: UpdateAccionDto): Promise; getStats(ctx: ServiceContext, fraccionamientoId?: string): Promise; } //# sourceMappingURL=incidente.service.d.ts.map