resources/views/pages/frontend/docs/gestion-documental-legal.md
Última modificación: 24 Oct, 2026

Compliance LegalTech & Cuarentena

El módulo LegalTech de Mañuti gestiona el consentimiento informado de documentos legales (Términos de Servicio, Políticas de Privacidad, Acuerdos de Confidencialidad), garantizando la inmutabilidad de las versiones y la obligatoriedad del consentimiento por perfil funcional.


1. Modelo Relacional de Versionado Inmutable

El sistema desacopla la entidad conceptual del documento de sus versiones redactadas en Markdown:

flowchart TD
    DOC["[documentos]"]
    VER["[documento_versiones]"]
    ROL["[documento_rol]<br/>(Audiencia/Roles)"]
    ACEPT["[documento_aceptaciones]<br/>(Firma Digital: usuario_id, IP, UA)"]

    VER -->|"N : 1"| DOC
    DOC -->|"N : M"| ROL
    ACEPT -->|"N : 1"| VER

Entidades Core

  • documentos: Contenedor maestro (nombre, slug, cat_tipo_documento, obligatorio).
  • documento_versiones: Cuerpo inmutable en formato Markdown (version, contenido, cat_status, fecha_publicacion).
  • documento_rol: Mapea la audiencia requerida. Un acuerdo de confidencialidad puede asociarse solo al rol Super Admin, mientras los términos generales aplican al rol Operador.
  • documento_aceptaciones: Almacena el consentimiento vinculando al usuario con la versión exacta aceptada (documento_version_id), preservando fecha UTC, dirección IP y User Agent.

2. Máquina de Estados del Ciclo de Vida Documental

flowchart TD
    CREAR["[Crear Documento]"]
    BORRADOR["Genera Versión 1.0 en Borrador (DOC_BORRADOR)"]
    EDICION["[Edición con EasyMDE Markdown]"]
    PUBLICAR["[Publicar esta Versión]"]
    PUB_ACTION["Marca v1.0 como DOC_PUBLICADO<br/>Dispara Cuarentena a Usuarios"]
    OBS_ACTION["Marca versión previa como DOC_OBSOLETO<br/>Preserva firmas históricas intactas"]

    CREAR --> BORRADOR
    BORRADOR --> EDICION
    EDICION --> PUBLICAR
    
    PUBLICAR --> PUB_ACTION
    PUBLICAR --> OBS_ACTION

Forking de Versiones

Para modificar un documento vigente, el sistema prohíbe la sobreescritura directa. Requiere ejecutar una duplicación controlada (nueva-version), generando un borrador derivado (e.g., v1.1) que hereda el contenido previo para su modificación sin alterar la versión que los usuarios continúan viendo en producción.


3. Middleware de Cuarentena Legal (CheckPendingDocuments)

El middleware con alias 'legal.check' intercepta la navegación del usuario tras autenticarse:

// app/Http/Middleware/CheckPendingDocuments.php
public function handle(Request $request, Closure $next)
{
    $user = Auth::user();
    if (!$user) return $next($request);

    // Excepciones: Rutas requeridas para procesar el consentimiento o salir
    if ($request->routeIs('legal.show_pending') || 
        $request->routeIs('legal.accept') || 
        $request->routeIs('logout')) {
        return $next($request);
    }

    if ($this->hasPendingLegalDocuments($user)) {
        return redirect()->route('legal.show_pending');
    }

    return $next($request);
}

Algoritmo de Detección de Pendientes

  1. Obtiene los roles activos asignados al usuario actual.
  2. Consulta si existen documentos obligatorios con versiones en estatus DOC_PUBLICADO dirigidos a dichos roles.
  3. Comprueba si existe un registro de aceptación en documento_aceptaciones para la tupla: $$\text{Existe Firma}(U_{\text{id}}, V_{\text{publicada_id}})$$
  4. Si la firma no existe, el usuario es recluido en la pantalla de consentimiento /legal/pendiente.

4. Re-Consentimiento Automático ante Nuevas Versiones

Si la organización publica la versión v1.1 de un aviso de privacidad:

  • Los usuarios que habían firmado la versión v1.0 pierden inmediatamente el acceso a las funciones operativas en su siguiente interacción HTTP.
  • El sistema no hereda firmas entre versiones. La pantalla de cuarentena despliega el nuevo texto procesado mediante Parsedown y exige una nueva manifestación de voluntad para reactivar la cuenta.

Enlaces Relacionados

Edita este documento en >> gestion-documental-legal.md
← Volver a la Landing Page