Tareas #17560
Agregar tablas de tramites
| Estado: | Nueva | Fecha de inicio: | 27/12/2025 | |
|---|---|---|---|---|
| Prioridad: | Normal | Fecha 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
*/