Reporte de Auditoría y Control de Calidad (QC)
Proyecto: NPN Explorer Colombia (Plugin para QGIS)
Autor: Albert Gaviria
Fecha: Junio 2026
Este documento registra los hallazgos de la auditoría de código interna y las correcciones aplicadas para asegurar el cumplimiento de las políticas de publicación de la tienda oficial de complementos de QGIS (QGIS Python Plugins Repository).
📋 Resumen de Acciones Aplicadas
Con el fin de garantizar la transparencia, seguridad y estabilidad requerida para la revisión oficial de QGIS, se han resuelto los siguientes aspectos del código:
1. 🚨 Seguridad y Privacidad (Remediación de Riesgos)
- Sanitización de Consultas (SQLi/Filtro): En
plugin.py, se añadió un proceso de escape (.replace("'", "''")) en las búsquedas manuales de NPN sobre capas vectoriales usando QgsFeatureRequest().setFilterExpression. Esto mitiga errores o comportamientos maliciosos con entradas que contengan comillas simples.
- Privacidad de Logs: Se modificó la llamada de inicio de sesión de la Ventanilla Única de Registro (VUR) en
plugin.py para omitir el parámetro username en el registro de logs locales. Las credenciales de usuarios no se guardan en texto plano en la máquina.
2. 🔧 Compatibilidad Futura (QGIS 3.30+ y QGIS 4.x)
- Tipos de Capa Vectorial: Se reemplazó el uso de la clase deprecada
QgsMapLayerType.VectorLayer en plugin.py por una importación adaptativa que utiliza el estándar Qgis.LayerType.Vector en versiones modernas de QGIS, manteniendo un fallback automático para versiones LTR previas.
3. 💾 Resiliencia del Sistema de Archivos
- Ruta de Logs Dinámica: En
logger.py, se removió la escritura estática en el directorio raíz del plugin (que fallaba en instalaciones de solo lectura de QGIS). El archivo npn_explorer.log se almacena dinámicamente en el directorio de configuración del perfil del usuario (QgsApplication.qgisSettingsDirPath()), que siempre garantiza permisos de escritura.
4. 🧹 Mantenibilidad de Código y Limpieza
- Eliminación de Redundancias: Se centralizó el diccionario de códigos registrales
ORIPS en la cabecera de vur_client.py y se removieron 5 declaraciones de importaciones inline duplicadas.
- Corrección de Variables: Se previnieron NameErrors potenciales en
parser.py inicializando las variables de control al inicio de la función de parsing.
- Documentación: Se corrigieron los separadores de directorios para entornos Linux en el
README.md y se documentaron los archivos colombia_en_mapas_client.py y logger.py en la estructura del proyecto.
⚙️ Integración Continua (CI/CD)
Se ha implementado un flujo de trabajo de GitHub Actions en .github/workflows/qgis-plugin-ci.yml para garantizar que cada cambio pase por:
- Linter Estático (
flake8): Validación automática de sintaxis y errores fatales de código Python.
- Construcción Automática: Validación del script
build_zip.py.
- Despliegue de Releases: Generación automática de empaquetados ZIP oficiales al empujar tags de versión (
v*).
Este reporte certifica que el complemento se encuentra estabilizado, optimizado y libre de vulnerabilidades de seguridad comunes para su uso en entornos corporativos y públicos de QGIS.
Reporte de Auditoría y Control de Calidad (QC)
Proyecto: NPN Explorer Colombia (Plugin para QGIS)
Autor: Albert Gaviria
Fecha: Junio 2026
Este documento registra los hallazgos de la auditoría de código interna y las correcciones aplicadas para asegurar el cumplimiento de las políticas de publicación de la tienda oficial de complementos de QGIS (QGIS Python Plugins Repository).
📋 Resumen de Acciones Aplicadas
Con el fin de garantizar la transparencia, seguridad y estabilidad requerida para la revisión oficial de QGIS, se han resuelto los siguientes aspectos del código:
1. 🚨 Seguridad y Privacidad (Remediación de Riesgos)
plugin.py, se añadió un proceso de escape (.replace("'", "''")) en las búsquedas manuales de NPN sobre capas vectoriales usandoQgsFeatureRequest().setFilterExpression. Esto mitiga errores o comportamientos maliciosos con entradas que contengan comillas simples.plugin.pypara omitir el parámetrousernameen el registro de logs locales. Las credenciales de usuarios no se guardan en texto plano en la máquina.2. 🔧 Compatibilidad Futura (QGIS 3.30+ y QGIS 4.x)
QgsMapLayerType.VectorLayerenplugin.pypor una importación adaptativa que utiliza el estándarQgis.LayerType.Vectoren versiones modernas de QGIS, manteniendo un fallback automático para versiones LTR previas.3. 💾 Resiliencia del Sistema de Archivos
logger.py, se removió la escritura estática en el directorio raíz del plugin (que fallaba en instalaciones de solo lectura de QGIS). El archivonpn_explorer.logse almacena dinámicamente en el directorio de configuración del perfil del usuario (QgsApplication.qgisSettingsDirPath()), que siempre garantiza permisos de escritura.4. 🧹 Mantenibilidad de Código y Limpieza
ORIPSen la cabecera devur_client.pyy se removieron 5 declaraciones de importaciones inline duplicadas.parser.pyinicializando las variables de control al inicio de la función de parsing.README.mdy se documentaron los archivoscolombia_en_mapas_client.pyylogger.pyen la estructura del proyecto.⚙️ Integración Continua (CI/CD)
Se ha implementado un flujo de trabajo de GitHub Actions en
.github/workflows/qgis-plugin-ci.ymlpara garantizar que cada cambio pase por:flake8): Validación automática de sintaxis y errores fatales de código Python.build_zip.py.v*).Este reporte certifica que el complemento se encuentra estabilizado, optimizado y libre de vulnerabilidades de seguridad comunes para su uso en entornos corporativos y públicos de QGIS.