🛠️ Servicios (app/Services)
-
ExpedienteService: Gestiona el flujo del movimiento de losExpedientesentre las distintasDependencias. Resuelve lógicas para pases en paralelo y comprueba que dependencias tienen permisos para adjuntar archivos a un expediente específico.
Funciones Activas (Core del Servicio)
-
-
obtenerDependenciasEnPaseParaleloActivo(int $expedienteId)Funcionalidad: Es una consulta de bajo nivel (DB::table) a la tabla pivotedependencia_expedienteque relaciona un expediente con varias oficinas simultáneamente. Qué hace: Retorna en forma de un simple array los IDs numéricos de todas las dependencias con las cuales un expediente comparte el estado de "pase paralelo" en estado "activo". -
sePuedeTransferir(int $expedienteId, int $dependenciaActualId)Funcionalidad: Evalúa lógicamente si el usuario puede "Transferir/Enviar" un expediente. Regla de negocio actual: Busca en la BD si el expediente pertenece a esa dependencia actual (holder_id === $dependenciaActualId) y además comprueba que NO tenga pases paralelos distribuidos (!$relacionesActivas). Por lo tanto, un expediente en medio de un "pase en paralelo" activo hacia varias oficinas no se puede transferir de raíz al próximo paso hasta que se cierre el paralelo. -
dependenciaPuedeAgregarArchivos(int $expedienteId, int $dependenciaId)Funcionalidad: Decide si una dependencia en concreto tiene permitido el alta de nuevos documentos. Regla de negocio actual: Si la dependencia está involucrada dentro del listado de "Pases en paralelo activo", entonces le permite añadir archivos (return true;). Si no está en paralelo, evalúa si es el simple poseedor primario del expediente (holder_id). Dato interesante del código: Antes había un bloque de validación más rígido que impedía subir archivos, pero fue comentado asumiendo el nuevo permiso de que "AHORA PERMITIMOS QUE SE AGREGUE DOCUMENTACION AUNQUE ESTE EN PARALELO". -
yoTengoExpediente(int $expedienteId, int $dependenciaId)Funcionalidad: Simple comprobación binaria para uso rápido en vistas (if/else). Qué hace: Solo evalúa si la dependencia X pedida coincide con el poseedor primario (holder_id) cargado en el Objeto Expediente. -
yoTengoExpedienteEnParalelo(int $expedienteId, int $dependenciaId)Funcionalidad: Complementa la función de arriba. Qué hace: Llama al métodoobtenerDependenciasEnPaseParaleloActivo()y revisa con un simplein_arraysi la dependencia X está contenida en ese listado de oficinas involucradas en un pase conjunto.
-
-
FirmaDigitalService: Responsable de integrar funciones a nivel de sistema operativo para validar firmas digitales en los PDF (usando comandos comopdfsigy basesNSS) y aplica una "firma por sistema" a los documentos.ManifiestoExpedienteService: Maneja la integridad de la documentación aplicando un modelo estilo "blockchain". Sella expedientes (sellar()) adjuntando manifiestos con hash canonicos estado por estado para garantizar que los documentos no hayan sido adulterados leyendo el historial (verificarCadena()).OpenAIService: Centraliza la conexión y peticiones a la API de ChatGPT para sugerir o generar de forma automática respuestas (generateReply()) a correos y comunicaciones simulando asistentes virtuales.