Science Hub

Base de Datos

La base de datos de AidRUTS está diseñada para almacenar y gestionar de forma eficiente la información relacionada con los trámites y servicios públicos del Estado de Hidalgo, sus dependencias, usuarios, plataformas tecnológicas, apoyos, solicitudes, y simplificaciones asociadas. Está implementada sobre un modelo relacional con MariaDB y se integra con Django ORM para facilitar el desarrollo, mantenimiento y escalabilidad.

A continuación se describen las principales entidades (tablas) del modelo y sus relaciones clave.

Entidad Descripción
Secretaria Representa las secretarías del estado, principales organismos de gobierno responsables de sectores específicos.
Dependencia Unidades administrativas o dependencias adscritas a una Secretaría o cabeza de sector, con datos de contacto.
Municipio Municipios del Estado de Hidalgo donde pueden gestionarse trámites o apoyos.
Subsecretaria Subsecretarías adscritas dentro de las dependencias o secretarías.
DireccionGeneral Direcciones generales responsables de áreas específicas dentro de las dependencias.
Usuario Usuarios del sistema con roles definidos y relación a dependencia o municipio.
Categoria Categorías para clasificar los trámites y servicios.
Tramite Información detallada de trámites o servicios públicos, incluyendo requisitos, responsables y modalidad.
Etapa Etapas o fases de un trámite, para su seguimiento y documentación.
Documento Documentos relacionados a cada etapa del trámite.
Solicitud Registro de solicitudes hechas por usuarios para trámites específicos.
HistorialSolicitud Historial de cambios de estado de una solicitud.
Apoyo Programas de apoyo disponibles, con descripción, requisitos y beneficiarios.
TramiteSimplificacion Registro de acciones de simplificación y digitalización aplicadas a los trámites.
Plataforma Información sobre plataformas tecnológicas utilizadas para gestión de trámites.
InfraestructuraRecursos Requerimientos y estructura orgánica para TICs de dependencias.
PerfilTecnico Perfiles individuales técnicos dentro de la infraestructura de TICs.
AccionSimplificacion Catálogo de acciones para simplificación de trámites.
ShortenedURL URLs acortadas creadas en el sistema para enlaces internos o externos.

Tabla: secretaria

Campo Tipo Descripción
id SERIAL PK Identificador único
nombre VARCHAR(255) Nombre oficial de la Secretaría
descripcion TEXT NULL Descripción detallada o adicional

Tabla: dependencia

Campo Tipo Descripción
id SERIAL PK Identificador único
nombre VARCHAR(100) Nombre oficial de la dependencia
descripcion TEXT NULL Descripción
direccion VARCHAR(255) NULL Dirección física de la dependencia
telefono VARCHAR(20) NULL Teléfono de contacto
correo_electronico VARCHAR(254) NULL Email
sitio_web VARCHAR(2048) NULL URL del sitio web
url_googlw_reviews VARCHAR(2048) NULL URL a Google Reviews
fecha_creacion TIMESTAMP Fecha de creación (auto)
secretaria_id INTEGER NULL FK Clave foránea a secretaria.id
cabeza_de_sector_id INTEGER NULL FK Clave foránea a secretaria.id como cabeza de sector
tipo VARCHAR(50) Tipo de dependencia, valores posibles: 'central', 'descentralizado' (por defecto 'central')
pamr_2024 INTEGER NULL Indicador PAMR para 2024
pamr_2025 INTEGER NULL Indicador PAMR para 2025

Tabla: municipio

Campo Tipo Descripción
id serial PK Identificador único
nombre varchar(100) Nombre del municipio
descripcion text Descripción opcional

Tabla: usuario

Campo Tipo Descripción
id serial PK Identificador único
username varchar Nombre de usuario (heredado AbstractUser)
rol varchar(50) Rol del usuario (Admin, COEMERE, etc.)
dependencia_id int FK FK a dependencia (nullable)
municipio_id int FK FK a municipio (nullable)
... ... Otros campos propios y heredados

Tabla: categoria

Campo Tipo Descripción
id SERIAL PK Identificador único
nombre VARCHAR(100) Nombre de la categoría
descripcion TEXT Descripción de la categoría

Tabla: requisito

Campo Tipo Descripción
id SERIAL PK Identificador único
nombre VARCHAR(255) Nombre único del requisito

Tabla: sector

Campo Tipo Descripción
id SERIAL PK Identificador único
nombre VARCHAR(255) Nombre único del sector

Tabla: niveldigitalizacion

Campo Tipo Descripción
id SERIAL PK Identificador único
clave VARCHAR(20) Código o clave del nivel de digitalización
descripcion VARCHAR(255) Descripción del nivel

Tabla: tramite

Campo Tipo Descripción
id SERIAL / Integer PK Identificador único autoincremental
nombre VARCHAR(300) Nombre del trámite o servicio
descripcion TEXT Descripción detallada del trámite o servicio
requisitos TEXT (nullable) Requisitos en texto libre (campo opcional)
dependencia_id INTEGER FK (nullable) FK a Dependencia (Secretaría o cabeza de sector)
municipio_id INTEGER FK (nullable) FK a Municipio (opcional)
categoria_id INTEGER FK (nullable) FK a Categoría del trámite
subsecretaria_id INTEGER FK (nullable) FK a Subsecretaría adscrita (opcional)
direccion_general_id INTEGER FK (nullable) FK a Dirección General responsable (opcional)
nombre_responsable VARCHAR(255) (nullable) Nombre del responsable del trámite
telefono_responsable VARCHAR(20) (nullable) Teléfono fijo del responsable
celular_responsable VARCHAR(20) (nullable) Teléfono celular del responsable
canales_atencion TEXT (nullable) Canales de atención al público
horario_atencion VARCHAR(255) (nullable) Horario de atención
ubicacion VARCHAR(255) (nullable) Ubicación física o dirección
contacto VARCHAR(254) (nullable) Email de contacto
marco_legal TEXT (nullable) Marco legal que regula el trámite
tiempo_respuesta VARCHAR(100) (nullable) Tiempo estimado de respuesta
frecuencia VARCHAR(100) (nullable) Frecuencia del trámite o servicio
enlace_portal VARCHAR(2048) (nullable) Enlace a portal en línea (si aplica)
enlace_ruts VARCHAR(2048) Enlace obligatorio a portal en línea RUTS
consideraciones_especiales TEXT (nullable) Observaciones o consideraciones especiales
tiempo_vigencia VARCHAR(100) (nullable) Tiempo de vigencia del trámite o servicio
tramites_relacionados M2M Self-referenciada Trámites relacionados (autorreferencia)
duracion_estimada INTEGER (nullable) Duración estimada en días
costo DECIMAL(10,2) (nullable) Costo del trámite o servicio
fecha_creacion DATETIME (auto_now_add) (nullable) Fecha de creación automática
es_servicio BOOLEAN (default=False) Indica si es un servicio
tiempo_estimado_por_persona INTEGER (nullable) Tiempo estimado que tarda una persona en el trámite
unidad_tiempo VARCHAR(10) Unidad de tiempo (min, hrs, días, semanas, meses). Default: 'dias'
cantidad_atenciones_2022 INTEGER (nullable) Cantidad de solicitudes recibidas en 2022
cantidad_atenciones_2023 INTEGER (nullable) Cantidad de solicitudes recibidas en 2023
cantidad_atenciones_2024 INTEGER (nullable) Cantidad de solicitudes recibidas en 2024
cantidad_atenciones_2025 INTEGER (nullable) Cantidad de solicitudes recibidas en 2025
perfiles TEXT (nullable) Perfil o público al que va dirigido
ambito VARCHAR(20) (nullable) Ámbito del trámite: 'Municipal', 'Estatal' o 'Federal'
casos_tramite TEXT (nullable) Casos específicos donde debe realizarse el trámite
numero_copias INTEGER (nullable) Número de copias requeridas
resultado_documento TEXT (nullable) Documento que se obtiene al finalizar
requiere_requisitos BOOLEAN (default=True) Si el trámite requiere cumplir requisitos para resolución favorable
plazo_prevencion_sujeto VARCHAR(100) (nullable) Plazo de prevención para el sujeto
plazo_prevencion_interesado VARCHAR(100) (nullable) Plazo de prevención para el interesado
plazo_resolucion VARCHAR(100) (nullable) Plazo para la resolución del trámite
homoclave_ruts VARCHAR(50) (nullable) Código homoclave en RUTS
modalidad VARCHAR(20) (nullable) Modalidad: 'presencial', 'linea', 'semipresencial', 'Presencial y Línea'
canal_atencion VARCHAR(30) (nullable) Canal de atención: 'presencial', 'medios_electronicos', 'medios_alternativos'
niveles_digitalizacion M2M a NivelDigitalizacion Niveles de digitalización asociados
requisitos_catalogo M2M a Requisito (through TramiteRequisito) Requisitos catálogo con detalles
sector_id INTEGER FK (nullable) FK a Sector o tema
manual_procedimientos FileField (nullable) Archivo PDF del manual de procedimientos
fecha_ultima_actualizacion_manual_procedimientos Date (nullable) Fecha de última actualización manual procedimientos
necesidad_mejora_manual_procedimientos BOOLEAN (default=False) Indica si hacen falta procesos en manual
documento_modelado FileField (nullable) Documento de modelado del trámite
fecha_ultima_actualizacion_documento_modelado Date (nullable) Fecha última actualización documento modelado
necesidad_mejora_documento_modelado BOOLEAN (default=False) Indica si hacen falta procesos en documento modelado
ingresos_2025 INTEGER (nullable) Ingresos estimados para 2025
plataformas M2M a Plataforma Plataformas donde se gestiona el trámite
tiene_costo BOOLEAN (default=False) Indica si tiene costo
tipo_monto VARCHAR(20) (nullable) Tipo de monto: 'fijo' o 'calculado'
monto_fijo DECIMAL(10,2) (nullable) Monto fijo en caso que aplique
monto_minimo DECIMAL(10,2) (nullable) Monto mínimo (si es intervalo)
monto_maximo DECIMAL(10,2) (nullable) Monto máximo (si es intervalo)

Tabla: etapa

Campo Tipo Descripción
id SERIAL PK Identificador único
tramite_id INTEGER FK FK a tramite.id
nombre VARCHAR(100) Nombre de la etapa
descripcion TEXT Descripción detallada
orden INTEGER Orden o secuencia
fecha_creacion TIMESTAMP Fecha de creación automática

Tabla: documento

Campo Tipo Descripción
id SERIAL PK Identificador único
etapa_id INTEGER FK FK a etapa.id
nombre VARCHAR(100) Nombre del documento
descripcion TEXT Descripción del documento
archivo VARCHAR Ruta del archivo cargado
fecha_subida TIMESTAMP Fecha de carga automática

Tabla: solicitud

Campo Tipo Descripción
id SERIAL PK Identificador único
tramite_id INTEGER FK FK a tramite.id
usuario_id INTEGER FK FK a usuario.id
estado VARCHAR(50) Estado (Pendiente, En Proceso, Completado)
fecha_solicitud TIMESTAMP Fecha de solicitud (auto)
fecha_resolucion TIMESTAMP NULL Fecha de resolución (opcional)
observaciones TEXT Observaciones adicionales

Tabla: historialsolicitud

Campo Tipo Descripción
id SERIAL PK Identificador único
solicitud_id INTEGER FK FK a solicitud.id
estado_anterior VARCHAR(50) Estado anterior
estado_nuevo VARCHAR(50) Estado nuevo
fecha_cambio TIMESTAMP Fecha del cambio automático
usuario_id INTEGER FK Usuario que realizó el cambio
observaciones TEXT Comentarios del cambio

Tabla: apoyo

Campo Tipo Descripción
id SERIAL PK Identificador único
municipio_id INTEGER NULL FK FK a municipio.id
dependencia_id INTEGER FK FK a dependencia.id
subsecretaria_id INTEGER NULL FK FK a subsecretaria.id
direccion_general_id INTEGER NULL FK FK a direcciongeneral.id
nombre_responsable VARCHAR(255) Nombre del responsable
telefono_oficina_responsable VARCHAR(20) Teléfono oficina responsable
telefono_celular_responsable VARCHAR(20) Teléfono celular responsable
nombre_apoyo VARCHAR(255) Nombre del programa o apoyo
descripcion TEXT Descripción del apoyo
beneficiarios TEXT Beneficiarios
requisitos TEXT Requisitos
plazos VARCHAR(100) Plazos
monto_beneficio VARCHAR(100) Monto del beneficio
canales_atencion TEXT Canales de atención
horario_atencion VARCHAR(255) Horario de atención
ubicacion_fisica VARCHAR(255) Ubicación física
contacto VARCHAR(254) Correo de contacto
enlace_portal VARCHAR(2048) URL al portal
frecuencia VARCHAR(100) Frecuencia
tiempo_respuesta VARCHAR(100) Tiempo estimado de respuesta
consideraciones_especiales TEXT NULL Consideraciones especiales
vigencia VARCHAR(100) Vigencia
estado VARCHAR(50) Estado (Abierto, Cerrado)
mecanismos_entrega TEXT Mecanismos para entregar el apoyo
mecanismos_comprobacion TEXT Mecanismos de comprobación
mecanismos_seguimiento TEXT NULL Mecanismos de seguimiento (opcional)

Tabla: apoyo

Campo Tipo Descripción
id SERIAL PK Identificador único
municipio_id INTEGER NULL FK FK a municipio.id
dependencia_id INTEGER FK FK a dependencia.id
subsecretaria_id INTEGER NULL FK FK a subsecretaria.id
direccion_general_id INTEGER NULL FK FK a direcciongeneral.id
nombre_responsable VARCHAR(255) Nombre del responsable
telefono_oficina_responsable VARCHAR(20) Teléfono oficina responsable
telefono_celular_responsable VARCHAR(20) Teléfono celular responsable
nombre_apoyo VARCHAR(255) Nombre del programa o apoyo
descripcion TEXT Descripción del apoyo
beneficiarios TEXT Beneficiarios
requisitos TEXT Requisitos
plazos VARCHAR(100) Plazos
monto_beneficio VARCHAR(100) Monto del beneficio
canales_atencion TEXT Canales de atención
horario_atencion VARCHAR(255) Horario de atención
ubicacion_fisica VARCHAR(255) Ubicación física
contacto VARCHAR(254) Correo de contacto
enlace_portal VARCHAR(2048) URL al portal
frecuencia VARCHAR(100) Frecuencia
tiempo_respuesta VARCHAR(100) Tiempo estimado de respuesta
consideraciones_especiales TEXT NULL Consideraciones especiales
vigencia VARCHAR(100) Vigencia
estado VARCHAR(50) Estado (Abierto, Cerrado)
mecanismos_entrega TEXT Mecanismos para entregar el apoyo
mecanismos_comprobacion TEXT Mecanismos de comprobación
mecanismos_seguimiento TEXT NULL Mecanismos de seguimiento (opcional)

Tabla: preguntafrecuenteapoyo

Campo Tipo Descripción
id SERIAL PK Identificador único
apoyo_faqs_id INTEGER FK FK a apoyo.id
pregunta VARCHAR(255) Texto de la pregunta
respuesta TEXT Texto de la respuesta

Tabla: tramitesimplificacion

Campo Tipo Descripción
id SERIAL PK Identificador único
dependencia_id INTEGER FK FK a dependencia.id
tramite_id INTEGER FK FK a tramite.id
solicitudes_por_mes INTEGER Número de solicitudes mensuales
nivel_digitalizacion VARCHAR(50) Nivel de digitalización (según catálogo definido)
cuenta_manual_procedimientos BOOLEAN Indica si cuenta con manual de procedimientos
manual_procedimientos VARCHAR Ruta archivo manual procedimientos (opcional)
modelado BOOLEAN Indica si cuenta con modelado
documento_modelado VARCHAR Ruta archivo documento modelado (opcional)
cuenta_encuesta_satisfaccion BOOLEAN Indica si se realizan encuestas de satisfacción
accion_simplificacion VARCHAR(50) Acción de simplificación aplicada
objetivo_accion TEXT Objetivos específicos (una línea por objetivo)

Tabla: actividadsimplificacion

Campo Tipo Descripción
id SERIAL PK Identificador único
tramite_simplificacion_id INTEGER FK FK a tramitesimplificacion.id
descripcion TEXT Descripción de la actividad
fecha_inicio DATE Fecha de inicio
fecha_fin DATE Fecha de fin

Tabla: cierreactualizacion2024

Campo Tipo Descripción
id SERIAL PK Identificador único
tramite_id INTEGER FK FK a tramite.id
acciones_cierre_2024 VARCHAR(50) Acción de simplificación para cierre 2024
porcentaje_avance_cierre_2024 INTEGER Porcentaje de avance
justificacion_porcentajes TEXT NULL Justificación de porcentajes
oficio_justificacion VARCHAR Archivo oficio de justificación (opcional)
numero_solcitudes_anuales INTEGER Número total anual de solicitudes

Tabla: accionsimplificacion

Campo Tipo Descripción
id SERIAL PK Identificador único
name VARCHAR(100) Nombre de la acción
description TEXT Descripción detallada

Tabla: shortenedurl

Campo Tipo Descripción
id SERIAL PK Identificador único
original_url VARCHAR(2048) URL original
short_code VARCHAR(10) Código corto único
created_at TIMESTAMP Fecha de creación
created_by_id INTEGER FK FK a usuario.id creador

Tabla: plataforma

Campo Tipo Descripción
id SERIAL PK Identificador único
dependencia_id INTEGER FK FK a dependencia.id
nombre VARCHAR(255) Nombre oficial de la plataforma
descripcion_breve TEXT Breve descripción
tecnologias_frontend TEXT Tecnologías usadas en frontend
tecnologias_backend TEXT Tecnologías usadas en backend
tipo_base_datos VARCHAR(50) Tipo de base de datos (Relacional, No Relacional, Tiempo Real)
motor_base_datos VARCHAR(50) Motor de base de datos (PostgreSQL, MongoDB, etc.)
informacion_almacenada TEXT Información que se almacena del usuario
gestion_permisos_acceso TEXT Cómo se gestionan los permisos
soporte_autenticacion_externa VARCHAR(255) NULL Sistema de autenticación externa soportado
desarrollador VARCHAR(50) Quién desarrolló la plataforma
mantenimiento VARCHAR(50) Quién mantiene la plataforma
usuario_objetivo VARCHAR(255) Usuario objetivo (ciudadanos, empresas, etc.)
usuario_operativo VARCHAR(255) Usuario operativo interno
link_plataforma VARCHAR(2048) NULL Enlace directo a la plataforma
problemas_experimentados TEXT NULL Problemas enfrentados
resultados_obtenidos TEXT Beneficios observados
acciones_mejora_pendientes TEXT NULL Mejoras pendientes
responsable_tecnico_nombre VARCHAR(255) Nombre del responsable técnico
responsable_tecnico_puesto VARCHAR(255) Puesto del responsable técnico
responsable_tecnico_telefono VARCHAR(20) Teléfono del responsable técnico
responsable_tecnico_correo VARCHAR(254) Email del responsable técnico
num_desarrolladores INTEGER Número de desarrolladores TIC
num_admin_bd INTEGER Número de administradores de BD
num_telecomunicaciones INTEGER Número de responsables de telecomunicaciones
num_soporte_tecnico INTEGER Número de personas en soporte técnico
estructura_organica TEXT Resumen de la estructura organizacional
requerimientos_infraestructura TEXT NULL Requerimientos de infraestructura
requerimientos_recursos_humanos TEXT NULL Requerimientos de recursos humanos
requerimientos_capacitacion TEXT NULL Requerimientos de capacitación
estandar_web VARCHAR(255) Estándar web usado (SOAP, REST, N/A)
capacidad_implementar_api_o_ws BOOLEAN Capacidad para implementar API o Web Services

Tabla: infraestructurarecursos

Campo Tipo Descripción
id SERIAL PK Identificador único
dependencia_id INTEGER FK FK a dependencia.id
requerimientos_capacitacion TEXT NULL Requerimientos de capacitación TIC
requerimientos_recursos_humanos TEXT NULL Requerimientos de recursos humanos
requerimientos_infraestructura TEXT NULL Requerimientos de infraestructura
estructura_organica TEXT Resumen de estructura orgánica

Tabla: perfiltecnico

Campo Tipo Descripción
id SERIAL PK Identificador único
infraestructura_id INTEGER FK FK a infraestructurarecursos.id
nombre VARCHAR(255) Nombre completo del perfil
correo VARCHAR(254) Correo electrónico
perfil VARCHAR(255) Perfil o rol técnico (Desarrollador, Admin BD, etc.)
cargo VARCHAR(255) Cargo desempeñado
grado_academico VARCHAR(255) Grado académico
especializacion VARCHAR(255) Especialización
tiene_certificaciones BOOLEAN Indica si tiene certificaciones
certificaciones TEXT NULL Detalle de certificaciones

Tabla: tramiterequisito

Campo Tipo Descripción
id SERIAL PK Identificador único
tramite_id INTEGER FK FK a tramite.id
requisito_id INTEGER FK FK a requisito.id
tipo VARCHAR(20) Tipo de requisito (original, copia, archivo digital, etc.)
cantidad INTEGER Cantidad requerida
observaciones TEXT NULL Observaciones o notas adicionales

Tabla: enlace

Campo Tipo Descripción
id SERIAL PK Identificador único
dependencia_id INTEGER FK FK a dependencia.id
tipo_enlace_id INTEGER FK NULL FK a tipo de enlace
usuario_designado_id INTEGER FK NULL FK a usuario designado
oficio_designacion VARCHAR Ruta al archivo PDF del oficio
validacion_oficio BOOLEAN NULL Validación del oficio
comentarios_validacion TEXT NULL Comentarios sobre la validación
usuario_externo VARCHAR(150) NULL Usuario en sistema externo
contrasena_externa VARCHAR(150) NULL Contraseña en sistema externo
url_acceso VARCHAR(2048) NULL URL de acceso
fecha_creacion TIMESTAMP Fecha creación automática
fecha_actualizacion TIMESTAMP Fecha última actualización

Código MySQL para recrear la base

-- Tabla secretaria
CREATE TABLE secretaria (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(255) NOT NULL,
    descripcion TEXT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Tabla dependencia
CREATE TABLE dependencia (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(100) NOT NULL,
    descripcion TEXT NULL,
    direccion VARCHAR(255) NULL,
    telefono VARCHAR(20) NULL,
    correo_electronico VARCHAR(254) NULL,
    sitio_web VARCHAR(2048) NULL,
    url_googlw_reviews VARCHAR(2048) NULL,
    fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    secretaria_id INT NULL,
    cabeza_de_sector_id INT NULL,
    tipo ENUM('central','descentralizado') DEFAULT 'central',
    pamr_2024 INT NULL,
    pamr_2025 INT NULL,
    FOREIGN KEY (secretaria_id) REFERENCES secretaria(id),
    FOREIGN KEY (cabeza_de_sector_id) REFERENCES secretaria(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Tabla municipio
CREATE TABLE municipio (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(100) NOT NULL,
    descripcion TEXT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Tabla subsecretaria
CREATE TABLE subsecretaria (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Tabla direcciongeneral
CREATE TABLE direcciongeneral (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Tabla usuario (simplificada, considerando campos propios y relaciones)
CREATE TABLE usuario (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(150) NOT NULL UNIQUE,
    password VARCHAR(128) NOT NULL,
    email VARCHAR(254) NULL,
    rol ENUM('Admin','COEMERE','Informático','Dependencia','Municipio','Supervisor') NOT NULL,
    dependencia_id INT NULL,
    municipio_id INT NULL,
    CONSTRAINT chk_dependencia_municipio CHECK (
        (dependencia_id IS NULL OR municipio_id IS NULL)
        AND NOT (dependencia_id IS NULL AND municipio_id IS NULL)
    ),
    FOREIGN KEY (dependencia_id) REFERENCES dependencia(id),
    FOREIGN KEY (municipio_id) REFERENCES municipio(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Tabla categoria
CREATE TABLE categoria (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(100) NOT NULL,
    descripcion TEXT NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Tabla requisito
CREATE TABLE requisito (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(255) NOT NULL UNIQUE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Tabla sector
CREATE TABLE sector (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(255) NOT NULL UNIQUE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Tabla niveldigitalizacion
CREATE TABLE niveldigitalizacion (
    id INT AUTO_INCREMENT PRIMARY KEY,
    clave VARCHAR(20) NOT NULL UNIQUE,
    descripcion VARCHAR(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Tabla tramite
CREATE TABLE tramite (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(300) NOT NULL,
    descripcion TEXT NOT NULL,
    requisitos TEXT NULL,
    dependencia_id INT NULL,
    municipio_id INT NULL,
    categoria_id INT NULL,
    subsecretaria_id INT NULL,
    direccion_general_id INT NULL,
    nombre_responsable VARCHAR(255) NULL,
    telefono_responsable VARCHAR(20) NULL,
    celular_responsable VARCHAR(20) NULL,
    canales_atencion TEXT NULL,
    horario_atencion VARCHAR(255) NULL,
    ubicacion VARCHAR(255) NULL,
    contacto VARCHAR(254) NULL,
    marco_legal TEXT NULL,
    tiempo_respuesta VARCHAR(100) NULL,
    frecuencia VARCHAR(100) NULL,
    enlace_portal VARCHAR(2048) NULL,
    enlace_ruts VARCHAR(2048) NOT NULL,
    consideraciones_especiales TEXT NULL,
    tiempo_vigencia VARCHAR(100) NULL,
    duracion_estimada INT NULL,
    costo DECIMAL(10,2) NULL,
    fecha_creacion TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
    es_servicio BOOLEAN NOT NULL DEFAULT FALSE,
    tiempo_estimado_por_persona INT NULL,
    unidad_tiempo ENUM('min','hrs','dias','semanas','meses') DEFAULT 'dias' NULL,
    cantidad_atenciones_2022 INT NULL,
    cantidad_atenciones_2023 INT NULL,
    cantidad_atenciones_2024 INT NULL,
    perfiles TEXT NULL,
    ambito ENUM('Municipal','Estatal','Federal') DEFAULT 'Municipal' NULL,
    casos_tramite TEXT NULL,
    numero_copias INT NULL,
    resultado_documento TEXT NULL,
    requiere_requisitos BOOLEAN DEFAULT TRUE NULL,
    plazo_prevencion_sujeto VARCHAR(100) NULL,
    plazo_prevencion_interesado VARCHAR(100) NULL,
    plazo_resolucion VARCHAR(100) NULL,
    modalidad ENUM('presencial','linea','semipresencial','Presencial y Línea') NULL,
    canal_atencion ENUM('presencial','medios_electronicos','medios_alternativos') NULL,
    ingresos_2025 INT NULL,
    sector_id INT NULL,
    FOREIGN KEY (dependencia_id) REFERENCES dependencia(id),
    FOREIGN KEY (municipio_id) REFERENCES municipio(id),
    FOREIGN KEY (categoria_id) REFERENCES categoria(id),
    FOREIGN KEY (subsecretaria_id) REFERENCES subsecretaria(id),
    FOREIGN KEY (direccion_general_id) REFERENCES direcciongeneral(id),
    FOREIGN KEY (sector_id) REFERENCES sector(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Tabla intermedia para ManyToMany tramites_relacionados (auto referencia)
CREATE TABLE tramite_relacionado (
    id INT AUTO_INCREMENT PRIMARY KEY,
    tramite_id INT NOT NULL,
    tramite_relacionado_id INT NOT NULL,
    FOREIGN KEY (tramite_id) REFERENCES tramite(id),
    FOREIGN KEY (tramite_relacionado_id) REFERENCES tramite(id),
    UNIQUE KEY unique_tramite_relacionado (tramite_id, tramite_relacionado_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Tabla intermedia para relacionar tramite con niveldigitalizacion (ManyToMany)
CREATE TABLE tramite_niveldigitalizacion (
    id INT AUTO_INCREMENT PRIMARY KEY,
    tramite_id INT NOT NULL,
    niveldigitalizacion_id INT NOT NULL,
    FOREIGN KEY (tramite_id) REFERENCES tramite(id),
    FOREIGN KEY (niveldigitalizacion_id) REFERENCES niveldigitalizacion(id),
    UNIQUE KEY unique_tramite_nivel (tramite_id, niveldigitalizacion_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Tabla etapa
CREATE TABLE etapa (
    id INT AUTO_INCREMENT PRIMARY KEY,
    tramite_id INT NOT NULL,
    nombre VARCHAR(100) NOT NULL,
    descripcion TEXT NOT NULL,
    orden INT NOT NULL,
    fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (tramite_id) REFERENCES tramite(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Tabla documento
CREATE TABLE documento (
    id INT AUTO_INCREMENT PRIMARY KEY,
    etapa_id INT NOT NULL,
    nombre VARCHAR(100) NOT NULL,
    descripcion TEXT NOT NULL,
    archivo VARCHAR(255) NULL,
    fecha_subida TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (etapa_id) REFERENCES etapa(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Tabla solicitud
CREATE TABLE solicitud (
    id INT AUTO_INCREMENT PRIMARY KEY,
    tramite_id INT NOT NULL,
    usuario_id INT NOT NULL,
    estado ENUM('Pendiente','En Proceso','Completado') NOT NULL,
    fecha_solicitud TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    fecha_resolucion TIMESTAMP NULL,
    observaciones TEXT NOT NULL,
    FOREIGN KEY (tramite_id) REFERENCES tramite(id),
    FOREIGN KEY (usuario_id) REFERENCES usuario(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Tabla historialsolicitud
CREATE TABLE historialsolicitud (
    id INT AUTO_INCREMENT PRIMARY KEY,
    solicitud_id INT NOT NULL,
    estado_anterior ENUM('Pendiente','En Proceso','Completado') NOT NULL,
    estado_nuevo ENUM('Pendiente','En Proceso','Completado') NOT NULL,
    fecha_cambio TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    usuario_id INT NOT NULL,
    observaciones TEXT NOT NULL,
    FOREIGN KEY (solicitud_id) REFERENCES solicitud(id),
    FOREIGN KEY (usuario_id) REFERENCES usuario(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Tabla apoyo
CREATE TABLE apoyo (
    id INT AUTO_INCREMENT PRIMARY KEY,
    municipio_id INT NULL,
    dependencia_id INT NOT NULL,
    subsecretaria_id INT NULL,
    direccion_general_id INT NULL,
    nombre_responsable VARCHAR(255) NOT NULL,
    telefono_oficina_responsable VARCHAR(20) NOT NULL,
    telefono_celular_responsable VARCHAR(20) NOT NULL,
    nombre_apoyo VARCHAR(255) NOT NULL,
    descripcion TEXT NOT NULL,
    beneficiarios TEXT NOT NULL,
    requisitos TEXT NOT NULL,
    plazos VARCHAR(100) NOT NULL,
    monto_beneficio VARCHAR(100) NOT NULL,
    canales_atencion TEXT NOT NULL,
    horario_atencion VARCHAR(255) NOT NULL,
    ubicacion_fisica VARCHAR(255) NOT NULL,
    contacto VARCHAR(254) NOT NULL,
    enlace_portal VARCHAR(2048) NOT NULL,
    frecuencia VARCHAR(100) NOT NULL,
    tiempo_respuesta VARCHAR(100) NOT NULL,
    consideraciones_especiales TEXT NOT NULL,
    vigencia VARCHAR(100) NOT NULL,
    estado ENUM('Abierto','Cerrado') NOT NULL,
    mecanismos_entrega TEXT NOT NULL,
    mecanismos_comprobacion TEXT NOT NULL,
    mecanismos_seguimiento TEXT NULL,
    FOREIGN KEY (municipio_id) REFERENCES municipio(id),
    FOREIGN KEY (dependencia_id) REFERENCES dependencia(id),
    FOREIGN KEY (subsecretaria_id) REFERENCES subsecretaria(id),
    FOREIGN KEY (direccion_general_id) REFERENCES direcciongeneral(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Tabla intermedia apoyo_relacionado (auto referencia ManyToMany)
CREATE TABLE apoyo_relacionado (
    id INT AUTO_INCREMENT PRIMARY KEY,
    apoyo_id INT NOT NULL,
    apoyo_relacionado_id INT NOT NULL,
    FOREIGN KEY (apoyo_id) REFERENCES apoyo(id),
    FOREIGN KEY (apoyo_relacionado_id) REFERENCES apoyo(id),
    UNIQUE KEY unique_apoyo_relacionado (apoyo_id, apoyo_relacionado_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Tabla procedimientoapoyo
CREATE TABLE procedimientoapoyo (
    id INT AUTO_INCREMENT PRIMARY KEY,
    apoyo_id INT NOT NULL,
    descripcion TEXT NOT NULL,
    FOREIGN KEY (apoyo_id) REFERENCES apoyo(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Tabla preguntafrecuenteapoyo
CREATE TABLE preguntafrecuenteapoyo (
    id INT AUTO_INCREMENT PRIMARY KEY,
    apoyo_faqs_id INT NOT NULL,
    pregunta VARCHAR(255) NOT NULL,
    respuesta TEXT NOT NULL,
    FOREIGN KEY (apoyo_faqs_id) REFERENCES apoyo(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Tabla accionsimplificacion
CREATE TABLE accionsimplificacion (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL UNIQUE,
    description TEXT NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Tabla tramitesimplificacion
CREATE TABLE tramitesimplificacion (
    id INT AUTO_INCREMENT PRIMARY KEY,
    dependencia_id INT NOT NULL,
    tramite_id INT NOT NULL,
    solicitudes_por_mes INT NOT NULL DEFAULT 0,
    nivel_digitalizacion VARCHAR(50) NOT NULL,
    cuenta_manual_procedimientos BOOLEAN NOT NULL DEFAULT FALSE,
    manual_procedimientos VARCHAR(255) NULL,
    modelado BOOLEAN NOT NULL DEFAULT FALSE,
    documento_modelado VARCHAR(255) NULL,
    cuenta_encuesta_satisfaccion BOOLEAN NOT NULL DEFAULT FALSE,
    accion_simplificacion VARCHAR(50) NOT NULL,
    objetivo_accion TEXT NOT NULL,
    FOREIGN KEY (dependencia_id) REFERENCES dependencia(id),
    FOREIGN KEY (tramite_id) REFERENCES tramite(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Tabla intermedia tramitesimplificacion_accionsimplificacion (ManyToMany)
CREATE TABLE tramitesimplificacion_accionsimplificacion (
    id INT AUTO_INCREMENT PRIMARY KEY,
    tramitesimplificacion_id INT NOT NULL,
    accionsimplificacion_id INT NOT NULL,
    FOREIGN KEY (tramitesimplificacion_id) REFERENCES tramitesimplificacion(id),
    FOREIGN KEY (accionsimplificacion_id) REFERENCES accionsimplificacion(id),
    UNIQUE KEY unique_tramite_accion (tramitesimplificacion_id, accionsimplificacion_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Tabla actividadsimplificacion
CREATE TABLE actividadsimplificacion (
    id INT AUTO_INCREMENT PRIMARY KEY,
    tramite_simplificacion_id INT NOT NULL,
    descripcion TEXT NOT NULL,
    fecha_inicio DATE NOT NULL,
    fecha_fin DATE NOT NULL,
    FOREIGN KEY (tramite_simplificacion_id) REFERENCES tramitesimplificacion(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Tabla cierreactualizacion2024
CREATE TABLE cierreactualizacion2024 (
    id INT AUTO_INCREMENT PRIMARY KEY,
    tramite_id INT NOT NULL UNIQUE,
    acciones_cierre_2024 VARCHAR(50) NOT NULL,
    porcentaje_avance_cierre_2024 INT NOT NULL DEFAULT 0,
    justificacion_porcentajes TEXT NULL,
    oficio_justificacion VARCHAR(255) NULL,
    numero_solcitudes_anuales INT NOT NULL DEFAULT 0,
    FOREIGN KEY (tramite_id) REFERENCES tramite(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Tabla shortenedurl
CREATE TABLE shortenedurl (
    id INT AUTO_INCREMENT PRIMARY KEY,
    original_url VARCHAR(2048) NOT NULL,
    short_code VARCHAR(10) NOT NULL UNIQUE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    created_by_id INT NOT NULL,
    FOREIGN KEY (created_by_id) REFERENCES usuario(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Tabla plataforma
CREATE TABLE plataforma (
    id INT AUTO_INCREMENT PRIMARY KEY,
    dependencia_id INT NOT NULL,
    nombre VARCHAR(255) NOT NULL,
    descripcion_breve TEXT NOT NULL,
    tecnologias_frontend TEXT NOT NULL,
    tecnologias_backend TEXT NOT NULL,
    tipo_base_datos ENUM('Relacional','No Relacional','Tiempo Real') NOT NULL,
    motor_base_datos ENUM('MySQL','PostgreSQL','SQL Server','Oracle','MongoDB','Firebase','DynamoDB','Redis','Cassandra','SQLite') NOT NULL,
    informacion_almacenada TEXT NOT NULL,
    gestion_permisos_acceso TEXT NOT NULL,
    soporte_autenticacion_externa VARCHAR(255) NULL,
    desarrollador ENUM('Internamente','Otra Área','Externamente') NOT NULL,
    mantenimiento ENUM('Internamente','Otra Área','Externamente') NOT NULL,
    usuario_objetivo VARCHAR(255) NOT NULL,
    usuario_operativo VARCHAR(255) NOT NULL,
    link_plataforma VARCHAR(2048) NULL,
    problemas_experimentados TEXT NULL,
    resultados_obtenidos TEXT NOT NULL,
    acciones_mejora_pendientes TEXT NULL,
    responsable_tecnico_nombre VARCHAR(255) NOT NULL,
    responsable_tecnico_puesto VARCHAR(255) NOT NULL,
    responsable_tecnico_telefono VARCHAR(20) NOT NULL,
    responsable_tecnico_correo VARCHAR(254) NOT NULL,
    num_desarrolladores INT NOT NULL DEFAULT 0,
    num_admin_bd INT NOT NULL DEFAULT 0,
    num_telecomunicaciones INT NOT NULL DEFAULT 0,
    num_soporte_tecnico INT NOT NULL DEFAULT 0,
    estructura_organica TEXT NOT NULL,
    requerimientos_infraestructura TEXT NULL,
    requerimientos_recursos_humanos TEXT NULL,
    requerimientos_capacitacion TEXT NULL,
    estandar_web ENUM('SOAP','REST','N/A') NOT NULL,
    capacidad_implementar_api_o_ws BOOLEAN NULL DEFAULT FALSE,
    FOREIGN KEY (dependencia_id) REFERENCES dependencia(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Tabla intermedia plataforma_informacion_inicio_sesion (ManyToMany)
CREATE TABLE plataforma_informacion_inicio_sesion (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE plataforma_medida_seguridad (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE plataforma_medida_integracion (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Tabla intermedia ManyToMany plataforma - plataforma_informacion_inicio_sesion
CREATE TABLE plataforma_informacioninicio_sesion_rel (
    id INT AUTO_INCREMENT PRIMARY KEY,
    plataforma_id INT NOT NULL,
    plataforma_informacion_inicio_sesion_id INT NOT NULL,
    FOREIGN KEY (plataforma_id) REFERENCES plataforma(id),
    FOREIGN KEY (plataforma_informacion_inicio_sesion_id) REFERENCES plataforma_informacion_inicio_sesion(id),
    UNIQUE KEY unique_plataforma_info_inicio (plataforma_id, plataforma_informacion_inicio_sesion_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Tabla intermedia ManyToMany plataforma - plataforma_medida_seguridad
CREATE TABLE plataforma_medida_seguridad_rel (
    id INT AUTO_INCREMENT PRIMARY KEY,
    plataforma_id INT NOT NULL,
    plataforma_medida_seguridad_id INT NOT NULL,
    FOREIGN KEY (plataforma_id) REFERENCES plataforma(id),
    FOREIGN KEY (plataforma_medida_seguridad_id) REFERENCES plataforma_medida_seguridad(id),
    UNIQUE KEY unique_plataforma_medida_seguridad (plataforma_id, plataforma_medida_seguridad_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Tabla intermedia ManyToMany plataforma - plataforma_medida_integracion
CREATE TABLE plataforma_medida_integracion_rel (
    id INT AUTO_INCREMENT PRIMARY KEY,
    plataforma_id INT NOT NULL,
    plataforma_medida_integracion_id INT NOT NULL,
    FOREIGN KEY (plataforma_id) REFERENCES plataforma(id),
    FOREIGN KEY (plataforma_medida_integracion_id) REFERENCES plataforma_medida_integracion(id),
    UNIQUE KEY unique_plataforma_medida_integracion (plataforma_id, plataforma_medida_integracion_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Tabla infraestructurarecursos
CREATE TABLE infraestructurarecursos (
    id INT AUTO_INCREMENT PRIMARY KEY,
    dependencia_id INT NOT NULL UNIQUE,
    requerimientos_capacitacion TEXT NULL,
    requerimientos_recursos_humanos TEXT NULL,
    requerimientos_infraestructura TEXT NULL,
    estructura_organica TEXT NOT NULL,
    FOREIGN KEY (dependencia_id) REFERENCES dependencia(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Tabla perfiltecnico
CREATE TABLE perfiltecnico (
    id INT AUTO_INCREMENT PRIMARY KEY,
    infraestructura_id INT NOT NULL,
    nombre VARCHAR(255) NOT NULL,
    correo VARCHAR(254) NOT NULL,
    perfil VARCHAR(255) NOT NULL,
    cargo VARCHAR(255) NOT NULL,
    grado_academico VARCHAR(255) NOT NULL,
    especializacion VARCHAR(255) NOT NULL,
    tiene_certificaciones BOOLEAN NOT NULL DEFAULT FALSE,
    certificaciones TEXT NULL,
    FOREIGN KEY (infraestructura_id) REFERENCES infraestructurarecursos(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Tabla tramiterequisito
CREATE TABLE tramiterequisito (
    id INT AUTO_INCREMENT PRIMARY KEY,
    tramite_id INT NOT NULL,
    requisito_id INT NOT NULL,
    tipo ENUM('original','copia','simple_copia','copia_certificada','archivo_digital') NOT NULL,
    cantidad INT NOT NULL DEFAULT 1,
    observaciones TEXT NULL,
    FOREIGN KEY (tramite_id) REFERENCES tramite(id),
    FOREIGN KEY (requisito_id) REFERENCES requisito(id),
    UNIQUE KEY unique_tramite_requisito (tramite_id, requisito_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Tabla tipoenlace
CREATE TABLE tipoenlace (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(50) NOT NULL UNIQUE,
    descripcion TEXT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Tabla enlace
CREATE TABLE enlace (
    id INT AUTO_INCREMENT PRIMARY KEY,
    dependencia_id INT NOT NULL,
    tipo_enlace_id INT NULL,
    usuario_designado_id INT NULL,
    oficio_designacion VARCHAR(255) NOT NULL,
    validacion_oficio BOOLEAN NULL,
    comentarios_validacion TEXT NULL,
    usuario_externo VARCHAR(150) NULL,
    contrasena_externa VARCHAR(150) NULL,
    url_acceso VARCHAR(2048) NULL,
    fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    fecha_actualizacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (dependencia_id) REFERENCES dependencia(id),
    FOREIGN KEY (tipo_enlace_id) REFERENCES tipoenlace(id),
    FOREIGN KEY (usuario_designado_id) REFERENCES usuario(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

Código PostgreSQL para recrear la base

-- Tabla secretaria
CREATE TABLE secretaria (
    id SERIAL PRIMARY KEY,
    nombre VARCHAR(255) NOT NULL,
    descripcion TEXT
);

-- Tabla dependencia
CREATE TABLE dependencia (
    id SERIAL PRIMARY KEY,
    nombre VARCHAR(100) NOT NULL,
    descripcion TEXT,
    direccion VARCHAR(255),
    telefono VARCHAR(20),
    correo_electronico VARCHAR(254),
    sitio_web VARCHAR(2048),
    url_googlw_reviews VARCHAR(2048),
    fecha_creacion TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
    secretaria_id INTEGER REFERENCES secretaria(id),
    cabeza_de_sector_id INTEGER REFERENCES secretaria(id),
    tipo VARCHAR(50) NOT NULL DEFAULT 'central' CHECK (tipo IN ('central', 'descentralizado')),
    pamr_2024 INTEGER,
    pamr_2025 INTEGER
);

-- Tabla municipio
CREATE TABLE municipio (
    id SERIAL PRIMARY KEY,
    nombre VARCHAR(100) NOT NULL,
    descripcion TEXT
);

-- Tabla subsecretaria
CREATE TABLE subsecretaria (
    id SERIAL PRIMARY KEY,
    nombre VARCHAR(255) NOT NULL
);

-- Tabla direcciongeneral
CREATE TABLE direcciongeneral (
    id SERIAL PRIMARY KEY,
    nombre VARCHAR(255) NOT NULL
);

-- Tabla usuario (simplificada)
CREATE TABLE usuario (
    id SERIAL PRIMARY KEY,
    username VARCHAR(150) NOT NULL UNIQUE,
    password VARCHAR(128) NOT NULL,
    email VARCHAR(254),
    rol VARCHAR(50) NOT NULL CHECK (rol IN ('Admin','COEMERE','Informático','Dependencia','Municipio','Supervisor')),
    dependencia_id INTEGER REFERENCES dependencia(id),
    municipio_id INTEGER REFERENCES municipio(id),
    CONSTRAINT chk_dependencia_municipio CHECK (
        (dependencia_id IS NULL OR municipio_id IS NULL)
        AND NOT (dependencia_id IS NULL AND municipio_id IS NULL)
    )
);

-- Tabla categoria
CREATE TABLE categoria (
    id SERIAL PRIMARY KEY,
    nombre VARCHAR(100) NOT NULL,
    descripcion TEXT NOT NULL
);

-- Tabla requisito
CREATE TABLE requisito (
    id SERIAL PRIMARY KEY,
    nombre VARCHAR(255) NOT NULL UNIQUE
);

-- Tabla sector
CREATE TABLE sector (
    id SERIAL PRIMARY KEY,
    nombre VARCHAR(255) NOT NULL UNIQUE
);

-- Tabla niveldigitalizacion
CREATE TABLE niveldigitalizacion (
    id SERIAL PRIMARY KEY,
    clave VARCHAR(20) NOT NULL UNIQUE,
    descripcion VARCHAR(255) NOT NULL
);

-- Tabla tramite
CREATE TABLE tramite (
    id SERIAL PRIMARY KEY,
    nombre VARCHAR(300) NOT NULL,
    descripcion TEXT NOT NULL,
    requisitos TEXT,
    dependencia_id INTEGER REFERENCES dependencia(id),
    municipio_id INTEGER REFERENCES municipio(id),
    categoria_id INTEGER REFERENCES categoria(id),
    subsecretaria_id INTEGER REFERENCES subsecretaria(id),
    direccion_general_id INTEGER REFERENCES direcciongeneral(id),
    nombre_responsable VARCHAR(255),
    telefono_responsable VARCHAR(20),
    celular_responsable VARCHAR(20),
    canales_atencion TEXT,
    horario_atencion VARCHAR(255),
    ubicacion VARCHAR(255),
    contacto VARCHAR(254),
    marco_legal TEXT,
    tiempo_respuesta VARCHAR(100),
    frecuencia VARCHAR(100),
    enlace_portal VARCHAR(2048),
    enlace_ruts VARCHAR(2048) NOT NULL,
    consideraciones_especiales TEXT,
    tiempo_vigencia VARCHAR(100),
    duracion_estimada INTEGER,
    costo NUMERIC(10,2),
    fecha_creacion TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,
    es_servicio BOOLEAN NOT NULL DEFAULT FALSE,
    tiempo_estimado_por_persona INTEGER,
    unidad_tiempo VARCHAR(10) DEFAULT 'dias',
    cantidad_atenciones_2022 INTEGER,
    cantidad_atenciones_2023 INTEGER,
    cantidad_atenciones_2024 INTEGER,
    perfiles TEXT,
    ambito VARCHAR(20) DEFAULT 'Municipal',
    casos_tramite TEXT,
    numero_copias INTEGER,
    resultado_documento TEXT,
    requiere_requisitos BOOLEAN DEFAULT TRUE,
    plazo_prevencion_sujeto VARCHAR(100),
    plazo_prevencion_interesado VARCHAR(100),
    plazo_resolucion VARCHAR(100),
    modalidad VARCHAR(20),
    canal_atencion VARCHAR(30),
    ingresos_2025 INTEGER,
    sector_id INTEGER REFERENCES sector(id)
);

-- Tabla para tramites_relacionados (ManyToMany auto referencia)
CREATE TABLE tramite_tramites_relacionados (
    tramite_id INTEGER NOT NULL REFERENCES tramite(id) ON DELETE CASCADE,
    tramite_relacionado_id INTEGER NOT NULL REFERENCES tramite(id) ON DELETE CASCADE,
    PRIMARY KEY (tramite_id, tramite_relacionado_id)
);

-- Tabla para tramite - niveldigitalizacion (ManyToMany)
CREATE TABLE tramite_niveldigitalizacion (
    tramite_id INTEGER NOT NULL REFERENCES tramite(id) ON DELETE CASCADE,
    niveldigitalizacion_id INTEGER NOT NULL REFERENCES niveldigitalizacion(id) ON DELETE CASCADE,
    PRIMARY KEY (tramite_id, niveldigitalizacion_id)
);

-- Tabla etapa
CREATE TABLE etapa (
    id SERIAL PRIMARY KEY,
    tramite_id INTEGER NOT NULL REFERENCES tramite(id) ON DELETE CASCADE,
    nombre VARCHAR(100) NOT NULL,
    descripcion TEXT NOT NULL,
    orden INTEGER NOT NULL,
    fecha_creacion TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP
);

-- Tabla documento
CREATE TABLE documento (
    id SERIAL PRIMARY KEY,
    etapa_id INTEGER NOT NULL REFERENCES etapa(id) ON DELETE CASCADE,
    nombre VARCHAR(100) NOT NULL,
    descripcion TEXT NOT NULL,
    archivo VARCHAR(255),
    fecha_subida TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP
);

-- Tabla solicitud
CREATE TABLE solicitud (
    id SERIAL PRIMARY KEY,
    tramite_id INTEGER NOT NULL REFERENCES tramite(id) ON DELETE CASCADE,
    usuario_id INTEGER NOT NULL REFERENCES usuario(id) ON DELETE CASCADE,
    estado VARCHAR(50) NOT NULL CHECK (estado IN ('Pendiente', 'En Proceso', 'Completado')),
    fecha_solicitud TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,
    fecha_resolucion TIMESTAMPTZ,
    observaciones TEXT NOT NULL
);

-- Tabla historialsolicitud
CREATE TABLE historialsolicitud (
    id SERIAL PRIMARY KEY,
    solicitud_id INTEGER NOT NULL REFERENCES solicitud(id) ON DELETE CASCADE,
    estado_anterior VARCHAR(50) NOT NULL CHECK (estado_anterior IN ('Pendiente', 'En Proceso', 'Completado')),
    estado_nuevo VARCHAR(50) NOT NULL CHECK (estado_nuevo IN ('Pendiente', 'En Proceso', 'Completado')),
    fecha_cambio TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,
    usuario_id INTEGER NOT NULL REFERENCES usuario(id) ON DELETE CASCADE,
    observaciones TEXT NOT NULL
);

-- Tabla apoyo
CREATE TABLE apoyo (
    id SERIAL PRIMARY KEY,
    municipio_id INTEGER REFERENCES municipio(id),
    dependencia_id INTEGER NOT NULL REFERENCES dependencia(id),
    subsecretaria_id INTEGER REFERENCES subsecretaria(id),
    direccion_general_id INTEGER REFERENCES direcciongeneral(id),
    nombre_responsable VARCHAR(255) NOT NULL,
    telefono_oficina_responsable VARCHAR(20) NOT NULL,
    telefono_celular_responsable VARCHAR(20) NOT NULL,
    nombre_apoyo VARCHAR(255) NOT NULL,
    descripcion TEXT NOT NULL,
    beneficiarios TEXT NOT NULL,
    requisitos TEXT NOT NULL,
    plazos VARCHAR(100) NOT NULL,
    monto_beneficio VARCHAR(100) NOT NULL,
    canales_atencion TEXT NOT NULL,
    horario_atencion VARCHAR(255) NOT NULL,
    ubicacion_fisica VARCHAR(255) NOT NULL,
    contacto VARCHAR(254) NOT NULL,
    enlace_portal VARCHAR(2048) NOT NULL,
    frecuencia VARCHAR(100) NOT NULL,
    tiempo_respuesta VARCHAR(100) NOT NULL,
    consideraciones_especiales TEXT NOT NULL,
    vigencia VARCHAR(100) NOT NULL,
    estado VARCHAR(50) NOT NULL CHECK (estado IN ('Abierto', 'Cerrado')),
    mecanismos_entrega TEXT NOT NULL,
    mecanismos_comprobacion TEXT NOT NULL,
    mecanismos_seguimiento TEXT
);

-- Tabla apoyo relacion (auto referencia ManyToMany)
CREATE TABLE apoyo_apoyos_relacionados (
    apoyo_id INTEGER NOT NULL REFERENCES apoyo(id) ON DELETE CASCADE,
    apoyo_relacionado_id INTEGER NOT NULL REFERENCES apoyo(id) ON DELETE CASCADE,
    PRIMARY KEY (apoyo_id, apoyo_relacionado_id)
);

-- Tabla procedimientoapoyo
CREATE TABLE procedimientoapoyo (
    id SERIAL PRIMARY KEY,
    apoyo_id INTEGER NOT NULL REFERENCES apoyo(id) ON DELETE CASCADE,
    descripcion TEXT NOT NULL
);

-- Tabla preguntafrecuenteapoyo
CREATE TABLE preguntafrecuenteapoyo (
    id SERIAL PRIMARY KEY,
    apoyo_faqs_id INTEGER NOT NULL REFERENCES apoyo(id) ON DELETE CASCADE,
    pregunta VARCHAR(255) NOT NULL,
    respuesta TEXT NOT NULL
);

-- Tabla accionsimplificacion
CREATE TABLE accionsimplificacion (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100) NOT NULL UNIQUE,
    description TEXT NOT NULL
);

-- Tabla tramitesimplificacion
CREATE TABLE tramitesimplificacion (
    id SERIAL PRIMARY KEY,
    dependencia_id INTEGER NOT NULL REFERENCES dependencia(id),
    tramite_id INTEGER NOT NULL REFERENCES tramite(id),
    solicitudes_por_mes INTEGER NOT NULL DEFAULT 0,
    nivel_digitalizacion VARCHAR(50) NOT NULL,
    cuenta_manual_procedimientos BOOLEAN NOT NULL DEFAULT FALSE,
    manual_procedimientos VARCHAR(255),
    modelado BOOLEAN NOT NULL DEFAULT FALSE,
    documento_modelado VARCHAR(255),
    cuenta_encuesta_satisfaccion BOOLEAN NOT NULL DEFAULT FALSE,
    accion_simplificacion VARCHAR(50) NOT NULL,
    objetivo_accion TEXT NOT NULL
);

-- Tabla tramitesimplificacion_accionsimplificacion (ManyToMany)
CREATE TABLE tramitesimplificacion_accionsimplificacion (
    tramitesimplificacion_id INTEGER NOT NULL REFERENCES tramitesimplificacion(id) ON DELETE CASCADE,
    accionsimplificacion_id INTEGER NOT NULL REFERENCES accionsimplificacion(id) ON DELETE CASCADE,
    PRIMARY KEY (tramitesimplificacion_id, accionsimplificacion_id)
);

-- Tabla actividadsimplificacion
CREATE TABLE actividadsimplificacion (
    id SERIAL PRIMARY KEY,
    tramite_simplificacion_id INTEGER NOT NULL REFERENCES tramitesimplificacion(id) ON DELETE CASCADE,
    descripcion TEXT NOT NULL,
    fecha_inicio DATE NOT NULL,
    fecha_fin DATE NOT NULL
);

-- Tabla cierreactualizacion2024
CREATE TABLE cierreactualizacion2024 (
    id SERIAL PRIMARY KEY,
    tramite_id INTEGER NOT NULL UNIQUE REFERENCES tramite(id) ON DELETE CASCADE,
    acciones_cierre_2024 VARCHAR(50) NOT NULL,
    porcentaje_avance_cierre_2024 INTEGER NOT NULL DEFAULT 0,
    justificacion_porcentajes TEXT,
    oficio_justificacion VARCHAR(255),
    numero_solcitudes_anuales INTEGER NOT NULL DEFAULT 0
);

-- Tabla shortenedurl
CREATE TABLE shortenedurl (
    id SERIAL PRIMARY KEY,
    original_url VARCHAR(2048) NOT NULL,
    short_code VARCHAR(10) NOT NULL UNIQUE,
    created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,
    created_by_id INTEGER NOT NULL REFERENCES usuario(id) ON DELETE CASCADE
);

-- Tabla plataforma
CREATE TABLE plataforma (
    id SERIAL PRIMARY KEY,
    dependencia_id INTEGER NOT NULL REFERENCES dependencia(id),
    nombre VARCHAR(255) NOT NULL,
    descripcion_breve TEXT NOT NULL,
    tecnologias_frontend TEXT NOT NULL,
    tecnologias_backend TEXT NOT NULL,
    tipo_base_datos VARCHAR(50) NOT NULL CHECK (tipo_base_datos IN ('Relacional', 'No Relacional', 'Tiempo Real')),
    motor_base_datos VARCHAR(50) NOT NULL CHECK (motor_base_datos IN ('MySQL', 'PostgreSQL', 'SQL Server', 'Oracle', 'MongoDB', 'Firebase', 'DynamoDB', 'Redis', 'Cassandra', 'SQLite')),
    informacion_almacenada TEXT NOT NULL,
    gestion_permisos_acceso TEXT NOT NULL,
    soporte_autenticacion_externa VARCHAR(255),
    desarrollador VARCHAR(50) NOT NULL CHECK (desarrollador IN ('Internamente', 'Otra Área', 'Externamente')),
    mantenimiento VARCHAR(50) NOT NULL CHECK (mantenimiento IN ('Internamente', 'Otra Área', 'Externamente')),
    usuario_objetivo VARCHAR(255) NOT NULL,
    usuario_operativo VARCHAR(255) NOT NULL,
    link_plataforma VARCHAR(2048),
    problemas_experimentados TEXT,
    resultados_obtenidos TEXT NOT NULL,
    acciones_mejora_pendientes TEXT,
    responsable_tecnico_nombre VARCHAR(255) NOT NULL,
    responsable_tecnico_puesto VARCHAR(255) NOT NULL,
    responsable_tecnico_telefono VARCHAR(20) NOT NULL,
    responsable_tecnico_correo VARCHAR(254) NOT NULL,
    num_desarrolladores INTEGER NOT NULL DEFAULT 0,
    num_admin_bd INTEGER NOT NULL DEFAULT 0,
    num_telecomunicaciones INTEGER NOT NULL DEFAULT 0,
    num_soporte_tecnico INTEGER NOT NULL DEFAULT 0,
    estructura_organica TEXT NOT NULL,
    requerimientos_infraestructura TEXT,
    requerimientos_recursos_humanos TEXT,
    requerimientos_capacitacion TEXT,
    estandar_web VARCHAR(255) NOT NULL CHECK (estandar_web IN ('SOAP', 'REST', 'N/A')),
    capacidad_implementar_api_o_ws BOOLEAN DEFAULT FALSE
);

-- Tablas para plataformas con relaciones ManyToMany (simplificado)
CREATE TABLE plataforma_informacion_inicio_sesion (
    id SERIAL PRIMARY KEY,
    nombre VARCHAR(255) NOT NULL
);

CREATE TABLE plataforma_medida_seguridad (
    id SERIAL PRIMARY KEY,
    nombre VARCHAR(255) NOT NULL
);

CREATE TABLE plataforma_medida_integracion (
    id SERIAL PRIMARY KEY,
    nombre VARCHAR(255) NOT NULL
);

CREATE TABLE plataforma_plataformainformacioniniciosesion (
    plataforma_id INTEGER NOT NULL REFERENCES plataforma(id) ON DELETE CASCADE,
    plataforma_informacion_inicio_sesion_id INTEGER NOT NULL REFERENCES plataforma_informacion_inicio_sesion(id) ON DELETE CASCADE,
    PRIMARY KEY (plataforma_id, plataforma_informacion_inicio_sesion_id)
);

CREATE TABLE plataforma_plataformedidaseguridad (
    plataforma_id INTEGER NOT NULL REFERENCES plataforma(id) ON DELETE CASCADE,
    plataforma_medida_seguridad_id INTEGER NOT NULL REFERENCES plataforma_medida_seguridad(id) ON DELETE CASCADE,
    PRIMARY KEY (plataforma_id, plataforma_medida_seguridad_id)
);

CREATE TABLE plataforma_plataformedidaintegracion (
    plataforma_id INTEGER NOT NULL REFERENCES plataforma(id) ON DELETE CASCADE,
    plataforma_medida_integracion_id INTEGER NOT NULL REFERENCES plataforma_medida_integracion(id) ON DELETE CASCADE,
    PRIMARY KEY (plataforma_id, plataforma_medida_integracion_id)
);

-- Tabla infraestructurarecursos
CREATE TABLE infraestructurarecursos (
    id SERIAL PRIMARY KEY,
    dependencia_id INTEGER NOT NULL UNIQUE REFERENCES dependencia(id),
    requerimientos_capacitacion TEXT,
    requerimientos_recursos_humanos TEXT,
    requerimientos_infraestructura TEXT,
    estructura_organica TEXT NOT NULL
);

-- Tabla perfiltecnico
CREATE TABLE perfiltecnico (
    id SERIAL PRIMARY KEY,
    infraestructura_id INTEGER NOT NULL REFERENCES infraestructurarecursos(id),
    nombre VARCHAR(255) NOT NULL,
    correo VARCHAR(254) NOT NULL,
    perfil VARCHAR(255) NOT NULL,
    cargo VARCHAR(255) NOT NULL,
    grado_academico VARCHAR(255) NOT NULL,
    especializacion VARCHAR(255) NOT NULL,
    tiene_certificaciones BOOLEAN DEFAULT FALSE,
    certificaciones TEXT
);

-- Tabla tramiterequisito
CREATE TABLE tramiterequisito (
    id SERIAL PRIMARY KEY,
    tramite_id INTEGER NOT NULL REFERENCES tramite(id),
    requisito_id INTEGER NOT NULL REFERENCES requisito(id),
    tipo VARCHAR(20) NOT NULL CHECK (tipo IN ('original', 'copia', 'simple_copia', 'copia_certificada', 'archivo_digital')),
    cantidad INTEGER NOT NULL DEFAULT 1,
    observaciones TEXT,
    UNIQUE (tramite_id, requisito_id)
);

-- Tabla tipoenlace
CREATE TABLE tipoenlace (
    id SERIAL PRIMARY KEY,
    nombre VARCHAR(50) NOT NULL UNIQUE,
    descripcion TEXT
);

-- Tabla enlace
CREATE TABLE enlace (
    id SERIAL PRIMARY KEY,
    dependencia_id INTEGER NOT NULL REFERENCES dependencia(id),
    tipo_enlace_id INTEGER REFERENCES tipoenlace(id),
    usuario_designado_id INTEGER REFERENCES usuario(id),
    oficio_designacion VARCHAR(255) NOT NULL,
    validacion_oficio BOOLEAN,
    comentarios_validacion TEXT,
    usuario_externo VARCHAR(150),
    contrasena_externa VARCHAR(150),
    url_acceso VARCHAR(2048),
    fecha_creacion TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,
    fecha_actualizacion TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP
);

Campos de las entidades principales que estan en uso activo dentro de los formularios del sitio.

TramiteSimplificacion

Campo Descripción
nivel_digitalizacion Nivel de digitalización del trámite
cuenta_manual_procedimientos Indica si cuenta con manual de procedimientos
manual_procedimientos Archivo del manual de procedimientos
modelado Indica si cuenta con modelado
documento_modelado Archivo del documento de modelado
cuenta_encuesta_satisfaccion Indica si se realizan encuestas de satisfacción
acciones_simplificacion Acciones de simplificación aplicadas
objetivo_accion Objetivos de las acciones (texto multilinea)

ActividadSimplificacion

Campo Descripción
descripcion Descripción de la actividad
fecha_inicio Fecha de inicio
fecha_fin Fecha de fin

CierreAvance2024

Campo Descripción
acciones_cierre_2024_multiple Acciones múltiples de simplificación cierre 2024
numero_solcitudes_anuales Número de solicitudes anuales
justificacion_porcentajes Justificación de avances y porcentajes
oficio_justificacion Archivo con oficio de justificación

ShortenedURL

Campo Descripción
original_url URL original a acortar

TramiteRequisito

Campo Descripción
requisito Requisito seleccionado
tipo Tipo del requisito (original, copia, digital, etc.)
cantidad Cantidad requerida
observaciones Comentarios u observaciones opcionales

Tramite

Campo Descripción
nombre Nombre del trámite o servicio
es_servicio Indica si es un servicio
descripcion Descripción detallada del trámite
direccion_general Dirección general responsable
tiempo_estimado_por_persona Tiempo estimado que tarda una persona
unidad_tiempo Unidad para el tiempo estimado
cantidad_atenciones_2022 Solicitudes recibidas en 2022
cantidad_atenciones_2023 Solicitudes recibidas en 2023
cantidad_atenciones_2024 Solicitudes recibidas en 2024
cantidad_atenciones_2025 Solicitudes recibidas en 2025
enlace_ruts Enlace a portal RUTS (obligatorio)
ingresos_2025 Ingresos estimados para 2025
tiene_costo Indica si el trámite tiene costo
tipo_monto Tipo de monto (fijo o calculado)
monto_fijo Monto fijo (si aplica)
monto_minimo Monto mínimo (si es calculado)
monto_maximo Monto máximo (si es calculado)
sector Sector o tema asociado
homoclave_ruts Código homoclave RUTS
modalidad Modalidad de atención (presencial, línea, etc.)
canal_atencion Canal de atención
niveles_digitalizacion Niveles de digitalización (multiselección)
manual_procedimientos Archivo manual de procedimientos
fecha_ultima_actualizacion_manual_procedimientos Fecha última actualización manual
necesidad_mejora_manual_procedimientos Indica si se requieren mejoras en manual
documento_modelado Archivo documento de modelado
fecha_ultima_actualizacion_documento_modelado Fecha última actualización documento
necesidad_mejora_documento_modelado Indica si se requieren mejoras en documento
plataformas Plataformas donde se gestiona (multiselección)