Tareas #17560

Agregar tablas de tramites

Añadido por Nicolas Arquiel hace 8 días. Actualizado hace 8 días.

Estado:NuevaFecha de inicio:27/12/2025
Prioridad:NormalFecha fin:
Asignado a:-% Realizado:

0%

Categoría:-Tiempo dedicado:-
Versión prevista:-

Descripción

Requisitos
Agregar tablas de tramites que soporte como minimo la estructura de las actas digitales y la rectificacion

Histórico

#1 Actualizado por Nicolas Arquiel hace 8 días


CREATE TABLE estados_tramites (
    idestadotramite INT AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(100) NOT NULL,
    descripcion TEXT NULL,
    state_handler_clase VARCHAR(100) NULL COMMENT 'Clase handler específica para el estado',
    activo TINYINT(1) DEFAULT 1,
    orden INT UNSIGNED DEFAULT 0,
    created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,

    INDEX idx_state_handler (state_handler_clase),
    INDEX idx_activo (activo)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE acciones_tramites (
    idacciontramite INT AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(100) NOT NULL,
    descripcion TEXT NULL,
    operation_clase VARCHAR(100) NULL COMMENT 'Clase operation específica para la acción',
    activo TINYINT(1) DEFAULT 1,
    orden INT UNSIGNED DEFAULT 0,
    created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,

    INDEX idx_operation_clase (operation_clase),
    INDEX idx_activo (activo)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE tipos_relacion_tramites (
    idtiporelacion INT AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(50) NOT NULL UNIQUE,
    descripcion TEXT NULL,
    created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

/* ==========================================
   TIPOS DE TRÁMITES - SOLO HANDLER
   ========================================== */

CREATE TABLE tipos_tramites (
    idtipotramite INT AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(100) NOT NULL,
    descripcion TEXT NULL,
    handler_clase VARCHAR(100) NOT NULL COMMENT 'Clase handler que maneja todo el tipo de trámite',
    activo TINYINT(1) DEFAULT 1,
    created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    created_by INT NOT NULL DEFAULT 1,
    updated_at TIMESTAMP NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
    updated_by INT NOT NULL DEFAULT 1,
    INDEX idx_handler (handler_clase),
    INDEX idx_activo (activo)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

/* ==========================================
   VINCULACIÓN TIPOS ↔ ESTADOS
   ========================================== */

CREATE TABLE tipos_tramites_estados (
    idtipotramite INT NOT NULL,
    idestadotramite INT NOT NULL,
    es_inicial TINYINT(1) DEFAULT 0,
    es_final TINYINT(1) DEFAULT 0,
    orden_transicion INT UNSIGNED DEFAULT 0,
    created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (idtipotramite, idestadotramite),
    FOREIGN KEY (idtipotramite) REFERENCES tipos_tramites(idtipotramite) ON DELETE CASCADE,
    FOREIGN KEY (idestadotramite) REFERENCES estados_tramites(idestadotramite) ON DELETE CASCADE,
    INDEX idx_tipo (idtipotramite),
    INDEX idx_estado (idestadotramite),
    INDEX idx_inicial (idtipotramite, es_inicial),
    INDEX idx_final (idtipotramite, es_final)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

/* ==========================================
   TRÁMITES PRINCIPALES
   ========================================== */

CREATE TABLE tramites (
    idtramite BIGINT AUTO_INCREMENT PRIMARY KEY,
    idtipotramite INT NOT NULL,
    idestadotramite INT NOT NULL,
    datos_tramite LONGTEXT NOT NULL COMMENT 'JSON con datos específicos del tipo de trámite',
    metadatos TEXT NOT NULL COMMENT 'JSON con metadatos del trámite',
    created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
    created_by INT NOT NULL DEFAULT 1,
    updated_by INT NOT NULL DEFAULT 1,
    FOREIGN KEY (idtipotramite) REFERENCES tipos_tramites(idtipotramite),
    FOREIGN KEY (idestadotramite) REFERENCES estados_tramites(idestadotramite),
    INDEX idx_tipo (idtipotramite),
    INDEX idx_estado (idestadotramite),
    INDEX idx_created_by (created_by),
    INDEX idx_created_at (created_at),
    INDEX idx_tipo_estado (idtipotramite, idestadotramite)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

/* ==========================================
   HISTORIAL GRANULAR
   ========================================== */

CREATE TABLE tipos_registro_historial (
    idtiporegistrohistorial INT AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(50) NOT NULL UNIQUE,
    descripcion TEXT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE tramites_historial (
    idtramitehistorial BIGINT AUTO_INCREMENT PRIMARY KEY,
    idtramite BIGINT NOT NULL,
    idtiporegistrohistorial INT NOT NULL,
    idestadotramite_nuevo INT NULL,
    idacciontramite INT NULL,
    tipo_cambio VARCHAR(100) NULL COMMENT 'Tipo específico de cambio realizado',
    datos_cambio LONGTEXT NULL COMMENT 'JSON con datos específicos del cambio',
    observacion TEXT NULL,
    created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    created_by INT NOT NULL DEFAULT 1,
    FOREIGN KEY (idtramite) REFERENCES tramites(idtramite) ON DELETE CASCADE,
    FOREIGN KEY (idtiporegistrohistorial) REFERENCES tipos_registro_historial(idtiporegistrohistorial),
    FOREIGN KEY (idestadotramite_nuevo) REFERENCES estados_tramites(idestadotramite),
    FOREIGN KEY (idacciontramite) REFERENCES acciones_tramites(idacciontramite),
    INDEX idx_tramite (idtramite),
    INDEX idx_tipo_cambio (tipo_cambio),
    INDEX idx_created_at (created_at),
    INDEX idx_created_by (created_by),
    INDEX idx_tramite_fecha (idtramite, created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

/* ==========================================
   RELACIONES ENTRE TRÁMITES
   ========================================== */

CREATE TABLE tramites_relaciones (
    idtramiterelacion BIGINT AUTO_INCREMENT PRIMARY KEY,
    idtramite_origen BIGINT NOT NULL,
    idtramite_destino BIGINT NOT NULL,
    idtiporelacion INT NOT NULL,
    observaciones TEXT NULL,
    created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    created_by INT NOT NULL DEFAULT 1,
    FOREIGN KEY (idtramite_origen) REFERENCES tramites(idtramite) ON DELETE CASCADE,
    FOREIGN KEY (idtramite_destino) REFERENCES tramites(idtramite) ON DELETE CASCADE,
    FOREIGN KEY (idtiporelacion) REFERENCES tipos_relacion_tramites(idtiporelacion),
    UNIQUE KEY unique_relacion (idtramite_origen, idtramite_destino, idtiporelacion),
    INDEX idx_origen (idtramite_origen),
    INDEX idx_destino (idtramite_destino),
    INDEX idx_tipo (idtiporelacion)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

#2 Actualizado por Nicolas Arquiel hace 8 días


-- Estados según Protocolo Resolución Rectoral N° 16/25 (punto 6)
INSERT INTO estados_tramites (idestadotramite, nombre, descripcion, state_handler_clase, orden) VALUES
(1, 'Abierto', 'Acta asignada al docente, disponible para carga de datos y firma electrónica', 'AbiertoStateHandler', 1),
(2, 'Cerrado', 'Docente concluyó carga y firmó el acta, a disposición de bedelía para control', 'CerradoStateHandler', 2),
(3, 'Controlado', 'Bedelía verificó contenido y asignó libro/folio, pendiente validación de autoridad', 'ControladoStateHandler', 3),
(4, 'Validado', 'Autoridad validó y archivó el acta, calificaciones visibles en autogestión del alumno', 'ValidadoStateHandler', 4),
(5, 'Rectificación Habilitada', 'Acta validada con rectificación habilitada por error material detectado', 'RectificacionHabilitadaStateHandler', 5);

-- Acciones disponibles
INSERT INTO acciones_tramites (idacciontramite, nombre, descripcion, operation_clase, orden) VALUES
(1, 'Agregar alumno', 'Agregar un alumno al acta', 'AgregarAlumnoOperation', 1),
(2, 'Eliminar alumno', 'Eliminar un alumno del acta', 'EliminarAlumnoOperation', 2),
(3, 'Cargar notas', 'Cargar o modificar notas/condiciones', 'CargarNotasOperation', 3),
(4, 'Cambiar fecha mesa', 'Modificar fecha y hora de la mesa', 'CambiarFechaMesaOperation', 4),
(5, 'Actualizar completo', 'Actualización completa con diff automático', 'ActualizarCompletoOperation', 5),
(6, 'Firmar acta', 'Docente firma electrónicamente el acta', 'FirmarActaOperation', 6),
(7, 'Asignar libro/folio', 'Bedelía asigna libro y folio electrónico', 'AsignarLibroFolioOperation', 7),
(8, 'Crear rectificación', 'Crear nuevo trámite de rectificación', 'CrearRectificacionOperation', 8);

-- Tipos de Registro Historial
INSERT INTO tipos_registro_historial (idtiporegistrohistorial, nombre, descripcion) VALUES
(1, 'estado', 'Cambio de estado del trámite'),
(2, 'accion', 'Acción ejecutada sobre el trámite'),
(3, 'cambio_especifico', 'Cambio específico detectado en datos');

-- Tipos de Relación entre Trámites
INSERT INTO tipos_relacion_tramites (idtiporelacion, nombre, descripcion) VALUES
(1, 'duplicado', 'Duplicado de un documento original'),
(2, 'complemento', 'Documento complementario'),
(3, 'subsanacion', 'Subsana o corrige otro trámite'),
(4, 'derivado', 'Deriva de otro trámite'),
(5, 'rectificacion', 'Rectificación de un trámite anterior');

-- Tipos de Trámites
INSERT INTO tipos_tramites (idtipotramite, nombre, descripcion, handler_clase, created_by, updated_by) VALUES 
(1, 'Acta de Examen Final', 'Acta de exámenes finales - aprobación o desaprobación de espacio curricular', 'ActaExamenHandler', 1, 1),
(2, 'Acta de Promoción', 'Acta de promoción para estudiantes que cumplen requisitos promocionales', 'ActaPromocionHandler', 1, 1),
(3, 'Acta de Condiciones', 'Acta de condiciones: regular, libre, libre por nota, regular promocional', 'ActaCondicionesHandler', 1, 1),
(4, 'Rectificación de Acta', 'Rectificación de acta por error material detectado', 'RectificacionHandler', 1, 1);

-- Estados para Acta de Examen Final (tipo 1)
INSERT INTO tipos_tramites_estados (idtipotramite, idestadotramite, es_inicial, es_final, orden_transicion) VALUES
(1, 1, 1, 0, 1),  -- Abierto (inicial)
(1, 2, 0, 0, 2),  -- Cerrado
(1, 3, 0, 0, 3),  -- Controlado
(1, 4, 0, 1, 4),  -- Validado (final)
(1, 5, 0, 0, 5);  -- Rectificación Habilitada

-- Estados para Acta de Promoción (tipo 2)
INSERT INTO tipos_tramites_estados (idtipotramite, idestadotramite, es_inicial, es_final, orden_transicion) VALUES
(2, 1, 1, 0, 1),  -- Abierto (inicial)
(2, 2, 0, 0, 2),  -- Cerrado
(2, 3, 0, 0, 3),  -- Controlado
(2, 4, 0, 1, 4),  -- Validado (final)
(2, 5, 0, 0, 5);  -- Rectificación Habilitada

-- Estados para Acta de Condiciones (tipo 3)
INSERT INTO tipos_tramites_estados (idtipotramite, idestadotramite, es_inicial, es_final, orden_transicion) VALUES
(3, 1, 1, 0, 1),  -- Abierto (inicial)
(3, 2, 0, 0, 2),  -- Cerrado
(3, 3, 0, 0, 3),  -- Controlado
(3, 4, 0, 1, 4),  -- Validado (final)
(3, 5, 0, 0, 5);  -- Rectificación Habilitada

-- Estados para Rectificación de Acta (tipo 4) - SIN Rectificación Habilitada
INSERT INTO tipos_tramites_estados (idtipotramite, idestadotramite, es_inicial, es_final, orden_transicion) VALUES
(4, 1, 1, 0, 1),  -- Abierto (inicial)
(4, 2, 0, 0, 2),  -- Cerrado
(4, 3, 0, 0, 3),  -- Controlado
(4, 4, 0, 1, 4);  -- Validado (final)

#3 Actualizado por Nicolas Arquiel hace 8 días

/* ==========================================
   FLUJO DE ESTADOS SEGÚN PROTOCOLO UCU
   ========================================== */

/*
FLUJO NORMAL (punto 7 del protocolo):

  ┌──────────┐     ┌──────────┐     ┌────────────┐     ┌──────────┐
  │ ABIERTO  │────▶│ CERRADO  │────▶│ CONTROLADO │────▶│ VALIDADO │
  │    (1)   │     │    (2)   │     │     (3)    │     │    (4)   │
  │ Docente  │     │ Docente  │     │  Bedelía   │     │Autoridad │
  │  carga   │     │  firmó   │     │ libro/folio│     │ valida   │
  └──────────┘     └──────────┘     └────────────┘     └──────────┘
       ▲                │                 │                  │
       │                │                 │                  ▼
       │                │                 │         ┌─────────────────┐
       │                │                 │         │ RECTIFICACIÓN   │
       │                │                 │         │ HABILITADA (5)  │
       │                │                 │         └────────┬────────┘
       │                │                 │                  │
       │                ▼                 ▼                  ▼
       └────────────────┴─────────────────┘         ┌─────────────────┐
         (devuelto con observación)                 │  NUEVO TRÁMITE  │
                                                    │ RECTIFICACIÓN   │
                                                    │    (tipo 4)     │
                                                    └─────────────────┘

TRANSICIONES VÁLIDAS:
- Abierto (1) → Cerrado (2): Docente firma
- Cerrado (2) → Controlado (3): Bedelía asigna libro/folio
- Cerrado (2) → Abierto (1): Bedelía detecta error, devuelve con observación
- Controlado (3) → Validado (4): Autoridad valida
- Controlado (3) → Abierto (1): Autoridad detecta error, devuelve con observación
- Validado (4) → Rectificación Habilitada (5): Se detecta error material post-validación
- Rectificación Habilitada (5) → Crea nuevo trámite tipo 4
*/

Exportar a: Atom PDF

Redmine Appliance - Powered by TurnKey Linux