Saltar a contenido

🔒 Consideraciones de Seguridad - GDI Framework

Introducción

La seguridad en el módulo de Documentos de GDI se basa en el control estricto de estados, permisos organizacionales y trazabilidad. El sistema garantiza integridad y autenticidad a través de transiciones controladas y validaciones automáticas basadas en la estructura municipal implementada.


📊 Seguridad por Estado del Documento

Estado draft (En Edición)

Control de Acceso: - ✅ Solo creador y usuarios de su department pueden acceder - ✅ Validación automática por pertenencia organizacional - 🚧 Sistema ACL en audit_data (estructura preparada, lógica pendiente)

Protecciones Implementadas: - Eliminación lógica: is_deleted = true preserva integridad referencial - Validación de contenido: Campo content JSONB no puede estar vacío - Validación de referencia: Campo reference obligatorio (máx. 254 caracteres)

Estado sent_to_sign (En Circuito de Firmas)

Inmutabilidad Automática: - ✅ Contenido bloqueado tras transición draftsent_to_sign - ✅ Campo sent_to_sign_at registra momento exacto de bloqueo - ✅ Solo firmantes asignados pueden interactuar con el documento

Control de Firmantes: - ✅ Lista cerrada en tabla document_signers - ✅ Validación secuencial por signing_order - ✅ Estados individuales: pendingsigned o rejected

Estado signed (Documento Oficial)

Proteccion Permanente: - ✅ Documento completamente inmutable - ✅ Entrada automatica en tabla official_documents - ✅ Numero oficial unico con constraint UNIQUE - ✅ PDF firmado digitalmente por GDI-Notary (:8001) con pyHanko (PAdES/CAdES) - ✅ Firma visual en el PDF: logo institucional, fecha, numero oficial y nombre del firmante - ✅ PDF almacenado en bucket oficial de Cloudflare R2, accesible via URLs firmadas


🏛️ Seguridad Organizacional

Control por Department

Reglas Implementadas:

-- Acceso basado en estructura organizacional
users.sector_id  sectors.department_id  departments

Validaciones Automáticas: - ✅ enabled_document_types_by_department: Controla qué tipos puede usar cada repartición - ✅ document_types_allowed_by_rank: Controla qué jerarquías pueden firmar - ✅ Solo usuarios autorizados pueden ser numeradores

Sistema RBAC

Roles Implementados: - Tablas: roles, permissions, role_permissions, user_roles - Validación por tipo de documento y repartición - Control granular de operaciones (crear, editar, firmar, numerar)


🔢 Seguridad en Numeración Oficial

Prevención de Duplicados

Constraints de Base de Datos:

-- Implementados en Supabase
CONSTRAINT unique_official_number UNIQUE (official_number)
CONSTRAINT unique_reserved_number UNIQUE (reserved_number)

Proceso Atómico: - ✅ Reserva secuencial en tabla numeration_requests - ✅ Validación de formato: <TIPO>-<AAAA>-<NNNNNN>-<SIGLA_ECO>-<SIGLA_DEPT> - ✅ Confirmación solo tras firma exitosa del numerador

Control de Concurrencia

Solucion Implementada: - ✅ Advisory lock (888888): Serializa las operaciones de numeracion para prevenir race conditions - ✅ global_sequence compartida: Secuencia unica entre todos los tipos de documento - ✅ Constraint de unicidad en base de datos - ✅ Estados de validacion: pending, valid, invalid


📋 Auditoría y Trazabilidad

Campo audit_data (JSONB)

Información Registrada:

{
  "created_by": "user_id",
  "created_at": "timestamp",
  "modified_by": "user_id",
  "last_modified_at": "timestamp",
  "state_transitions": [
    {
      "from": "draft",
      "to": "sent_to_sign", 
      "timestamp": "...",
      "user": "..."
    }
  ]
}

Trazabilidad por Tabla

document_draft: Historial completo del documento document_signers: Estado individual de cada firmante
document_rejections: Motivos y usuarios que rechazaron official_documents: Documento final con validez legal


🔐 Control de Permisos en Tiempo Real

Validaciones Durante el Proceso

Al Momento de Firma: - ✅ Verificación de que el usuario sigue activo - ✅ Validación de pertenencia a repartición autorizada - ✅ Confirmación de que es su turno en signing_order

Gestión de Cambios Organizacionales: - ❌ Sistema actual no maneja cambios durante proceso activo - ❌ No hay delegación temporal de firmas - ❌ Procesos se detienen si firmante no está disponible


🛡️ Medidas de Protección Implementadas

Integridad de Datos

Estados Válidos:

CREATE TYPE document_status AS ENUM (
    'draft', 'sent_to_sign', 'signed', 
    'rejected', 'cancelled', 'archived'
);

Transiciones Controladas: - ✅ Solo transiciones válidas permitidas por lógica de negocio - ✅ Timestamps automáticos en cada cambio de estado - ✅ Preservación de historial completo

Validaciones de Negocio

Campos Obligatorios: - reference no puede estar vacío - content debe tener información válida - Al menos un firmante y un numerador requeridos

Reglas de Consistencia: - Solo un numerador por documento (is_numerator = true) - Orden de firma secuencial válido - Numeración solo tras proceso completo


📞 Gestión de Incidentes

Problemas Comunes y Resoluciones

Documento Rechazado: - ✅ Automático: Estado cambia a rejected - ✅ Registro en tabla document_rejections - ✅ Posibilidad de corrección y reenvío

Proceso Estancado: - ❌ Detección manual requerida - ❌ Resolución por cancelación y reasignación - ❌ Sin alertas automáticas implementadas

Error en Numeración: - ✅ Constraint de BD previene duplicados - ✅ Estados de validación para control - 🚧 Procedimientos de corrección manuales


🔗 Integración con Normativa Argentina

Ley 25.506 - Firma Digital: - ✅ Firma digital implementada via GDI-Notary (:8001) con pyHanko - ✅ Soporte PAdES (PDF) y CAdES - ✅ Firma visual: logo institucional, fecha, numero oficial, nombre del firmante - ✅ Multi-firmante secuencial (cada firmante firma en orden) - ✅ Campo required_signature en tipos de documento para configurar nivel de firma requerido

Ley 27.275 - Acceso a la Información Pública: - ✅ Documentos en estado signed son públicamente consultables - ✅ Control de acceso diferencial por estado - ✅ Trazabilidad completa para auditorías


📋 Checklist de Estado Actual

Implementado y Funcional:

  • [x] Control de estados con transiciones validas
  • [x] Sistema RBAC con roles organizacionales
  • [x] Control de acceso por reparticion/department
  • [x] Numeracion secuencial con advisory lock (888888) y global_sequence compartida
  • [x] Auditoria en campo audit_data
  • [x] Validacion de tipos de documento por reparticion
  • [x] Eliminacion logica que preserva integridad
  • [x] Firma digital via GDI-Notary con pyHanko (PAdES/CAdES)
  • [x] Generacion de PDF via GDI-PDFComposer con Gotenberg
  • [x] Almacenamiento en Cloudflare R2 (buckets tosign/oficial)
  • [x] URLs firmadas para descarga segura

🚧 Estructura Preparada, Logica Pendiente:

  • [ ] Sistema ACL completo en audit_data
  • [ ] Funciones SQL de validacion automatica

No Implementado:

  • [ ] Delegacion temporal de firmas
  • [ ] Escalacion automatica por inactividad
  • [ ] Alertas por procesos estancados

Este documento refleja el estado real del sistema GDI según la documentación técnica vigente. Las mejoras de seguridad adicionales requieren desarrollo específico según las necesidades operativas identificadas.