DTIKC
Git
  1. Sistemas
DTIKC
  • Inicio
  • Modelo de Gestión
    • ITIL 4
    • Gestión por Procesos
    • LEAN, BPM & RAD
    • OKR
    • El Nuevo Paradigma de TI
  • Personas
    • Organigrama Funcional
    • Roles y Matriz RACI
      • Matriz RACI - Mesa de Ayuda (N1)
      • Matriz RACI - Soporte Técnico (N2)
      • Matriz RACI - Infraestructura (N3)
      • Matriz RACI Consolidada de la Dirección de Tecnología e Innovación
    • Descriptivos de Puestos
      • Indice
      • Developer RPA & IA con Python
      • Analista de Operaciones y Mesa de Ayuda N1
      • Especialista de Soporte Técnico Nivel 2
      • Senior de Infraestructura
        • Especialista Senior en Infraestructura N3
        • Especialista Junior en Infraestructura N3
    • Medición y Mejora Continua
      • OKRs Generales
      • OKRs Analista de Operaciones y Mesa de Ayuda N1
      • OKR Especialista de Soporte Técnico N2
  • Procesos de Sistemas
    • Indice
    • Proceso de Control de Versiones con Git
    • Proceso de Ejecución de Proyectos para Desarrolladores de Software
    • Procesos de Mesa de Ayuda N1
    • Procesos de Soporte Técnico N2
    • Procesos de Junior de Infraestructura
    • Procesos de Senior de Infraestructura
  • Especificaciones
    • Devs
      • Patrones de Nombrado (Naming Conventions) en Programación
  • Sistemas
    • Indice
    • Prometeo
    • Pegasus
    • Olympus
    • Andromeda
    • FrontBack
    • OServerLogic
    • CServer
    • FbCotizador
    • Oserver
    • MetCotizadores
    • ClassLibrary
    • APIs
      • Chatbase
      • ApiMetPro_Pendientes_Emitir_Get
    • App Services
      • Documento sin título
  • Manuales Usuarios
    • Procedimiento para Recuperar Contraseña de Acceso a Titan
    • Procedimiento de Alta de Agente IP en Keysi
    • Checklist Mantenimiento Soporte N2
    • Manual de Sistema de Gestión
  • Lineamientos y Politicas
    • Acta de Protocolo Home Office
    • Acta de Compromiso: Excelencia Operativa en la Dirección de Tecnologías e Innovación
    • Modelo de Atención Universal de Soporte Técnico Nivel 2
Git
  1. Sistemas

CServer

Documentación Técnica del Proyecto CServer#

1. INFORMACIÓN GENERAL DEL PROYECTO#

Nombre del proyecto: CServer
Descripción y propósito: Servicio de Windows para procesamiento asíncrono de reportes de cobranza mediante un sistema de cola de trabajos (job queue). El servicio mantiene un pool de threads que procesa reportes generados dinámicamente desde una base de datos SQL Server.
Versión del framework .NET utilizado: .NET Framework 4.0
Lenguaje: Visual Basic .NET
Tipo de aplicación: Windows Service (Servicio de Windows)
Versión del proyecto: 1.0.0.0
Compañía: Grupo KC Agente de Seguros SAPI de CV
Fecha de última modificación: 17 de junio de 2024
Versión del servicio: 3.0.1

2. MAPA DE SITIO / ESTRUCTURA DEL PROYECTO#

📁 CServer/
├── 📁 My Project/
│   ├── 📄 AssemblyInfo.vb (Información del ensamblado)
│   ├── 📄 Application.Designer.vb
│   ├── 📄 Application.myapp
│   ├── 📄 Resources.Designer.vb
│   ├── 📄 Resources.resx
│   ├── 📄 Settings.Designer.vb
│   └── 📄 Settings.settings
├── 📁 bin/
│   ├── 📁 Debug/ (Binarios de desarrollo)
│   └── 📁 Release/ (Binarios de producción)
├── 📁 obj/ (Archivos intermedios de compilación)
├── 📄 Service1.vb ⭐ (Lógica principal del servicio)
├── 📄 Service1.Designer.vb
├── 📄 Service1.resx
├── 📄 Persistencia.vb ⭐ (Capa de acceso a datos)
├── 📄 ProjectInstaller.vb (Instalador del servicio)
├── 📄 ProjectInstaller.Designer.vb
├── 📄 ProjectInstaller.resx
├── 📄 Settings.vb
├── 📄 app.config ⭐ (Configuración del servicio)
├── 📄 CServer.vbproj (Archivo de proyecto)
└── 📄 CServer_*_TemporaryKey.pfx (Claves de firma)

Namespace Principal#

CServer: Namespace raíz del proyecto

Referencias de Proyectos#

CLogic (Project Reference): Biblioteca de lógica de negocio externa que contiene la implementación de procesamiento de trabajos

3. INVENTARIO DE LIBRERÍAS Y DEPENDENCIAS#

Librerías Externas (NuGet/DLL)#

LibreríaVersión ActualPropósitoCategoría
Ionic.Utils.Zip1.3.0.0Compresión y manejo de archivos ZIPUtilidades

Referencias del Framework .NET#

LibreríaPropósitoCategoría
SystemFuncionalidades base del frameworkCore
System.ConfigurationLectura de archivos de configuraciónConfiguración
System.Configuration.InstallInstalación del servicio de WindowsDeployment
System.DataAcceso a datos ADO.NETDatos
System.DeploymentPublicación ClickOnceDeployment
System.ServiceProcessFuncionalidad de servicios de WindowsServicios
System.Web.ExtensionsJSON serialization y extensiones webUtilidades
System.Windows.FormsInterfaces de usuario básicasUI
System.XmlProcesamiento de XMLDatos

Referencias de Proyectos#

ProyectoGUIDPropósito
CLogic{505750e8-cb22-4452-8fa0-8f1fab3cd11a}Lógica de negocio para procesamiento de trabajos y reportes

4. ARQUITECTURA DEL PROYECTO#

4.1 Patrón Arquitectónico#

El proyecto implementa un patrón de Arquitectura Orientada a Servicios con Pool de Threads y Job Queue Pattern:
Service-Oriented Architecture (SOA): Servicio de Windows independiente
Thread Pool Pattern: Gestión eficiente de concurrencia con .NET ThreadPool
Job Queue Pattern: Cola de trabajos procesados asíncronamente
Repository Pattern: Abstracción de acceso a datos en la clase Persistencia
Timer-Based Polling: Sondeo periódico de nuevos trabajos cada 2 segundos

4.2 Diagrama de Arquitectura (Mermaid)#

4.3 Componentes Principales#

Servicio Principal (Service1.vb)#

Responsabilidad: Gestión del ciclo de vida del servicio y coordinación de threads
Funcionalidades:
Timer que verifica nuevos trabajos cada 2 segundos
Encola trabajos en el ThreadPool (.NET)
Gestión de 100 threads concurrentes máximo
Logging sincronizado con locks
Tarea programada diaria a medianoche
Métodos clave:
OnStart(): Inicialización del servicio
OnTimedEvent(): Sondeo de nuevos trabajos
Corre(): Ejecución de un trabajo específico
Task(): Tarea programada diaria
WriteLog(): Escritura thread-safe al log

Capa de Persistencia (Persistencia.vb)#

Responsabilidad: Abstracción del acceso a datos SQL Server
Patrón implementado: Static Repository Pattern
Funcionalidades:
Ejecución de Stored Procedures
Ejecución de queries ad-hoc
Manejo de parámetros dinámicos con Hashtable
Obtención de valores Identity
Manejo de transacciones
Métodos disponibles:
EjecutaDataTableSP(): Ejecuta SP y retorna DataTable
EjecutaDataTableQry(): Ejecuta query y retorna DataTable
EjecutaSP(): Ejecuta SP sin retorno de datos
EjecutaQuery(): Ejecuta query de modificación
EjecutaQueryIdentity(): Ejecuta INSERT y retorna ID generado
EjecutaSPint32(): Ejecuta SP y retorna valor escalar

Lógica de Negocio (CLogic - Proyecto Externo)#

Responsabilidad: Implementación de tipos de trabajos y procesamiento de reportes
Funcionalidades:
Definición de tipos de trabajo (enum Tipo)
Estados de trabajo (Status)
Procesamiento de reportes Crystal Reports
Generación de PDFs
Compresión de archivos

Instalador del Servicio (ProjectInstaller.vb)#

Responsabilidad: Configuración de instalación del servicio de Windows
Configuración: Nombre del servicio, descripción, modo de inicio

4.4 Flujo de Datos#

5. ASPECTOS MÁS RELEVANTES#

5.1 Funcionalidades Principales#

1.
Procesamiento Asíncrono de Reportes
Cola de trabajos basada en base de datos
Procesamiento concurrente con ThreadPool
Máximo 100 trabajos simultáneos
2.
Generación de Reportes Dinámicos
Integración con Crystal Reports
Generación de PDFs
Tipos de reportes parametrizados
3.
Gestión de Estados de Trabajos
Estado 1: Pendiente
Estado En_Proceso: En ejecución
Estado Procesado: Completado exitosamente
Estado Falla: Error en procesamiento
4.
Sistema de Logging Thread-Safe
Escritura sincronizada con locks
Log con timestamp en cada entrada
Registro de inicio/fin de trabajos y errores
5.
Compresión de Archivos
Generación de archivos ZIP con Ionic.Utils.Zip
Soporte para reportes con múltiples archivos
6.
Tarea Programada Diaria
Ejecución automática a medianoche
Configurada para mantenimiento o procesos batch
7.
Monitoreo Continuo
Polling cada 2 segundos de nuevos trabajos
Auto-recuperación ante errores
8.
Manejo de Rutas Configurables
Rutas de salida de PDFs configurables
Rutas de reportes RPT configurables
Rutas de archivos ZIP configurables

5.2 Configuraciones Críticas#

Connection Strings#

<connectionStrings>
  <add name="cobranzaConnectionString"
       providerName="System.Data.SqlClient"
       connectionString="Data Source=sql.prod;Initial Catalog=AndromedaDB;User ID=olympus_cserver;Password=***" />
</connectionStrings>

AppSettings - Producción#

<appSettings>
  <!-- Rutas de archivos -->
  <add key="output" value="G:\Prod\Andromeda\Web\Reportes\pdfs\" />
  <add key="zip" value="G:\Prod\Andromeda\Web\Reportes\pdfs\" />
  <add key="reportes" value="G:\Prod\Andromeda\CLogic\Reportes\" />
  <add key="PdfOutputPath" value="G:\Prod\Andromeda\Web\Reportes\pdfs\" />

  <!-- Log -->
  <add key="log" value="cserver.log" />
  <add key="RutaLog" value="C:\" />

  <!-- Bases de datos vinculadas -->
  <add key="OlympusDBVinculada" value="[olympus_op_pr]." />
  <add key="OlympusDB" value="[olympus_op_pr]" />
  <add key="CobranzaDBVinculada" value="OlympuscobranzaTest.dbo." />
  <add key="CobranzaDB" value="OlympuscobranzaTest" />
</appSettings>

Configuración del ThreadPool#

ThreadPool.SetMaxThreads(100, 100)

Intervalo del Timer#

Tic_Tok.Interval = 2000  ' 2 segundos

5.3 Patrones de Diseño Implementados#

1.
Thread Pool Pattern
Implementación: System.Threading.ThreadPool
Propósito: Gestión eficiente de recursos y concurrencia
Ubicación: Service1.vb líneas 43-80
2.
Repository Pattern (Static)
Implementación: Clase Persistencia con métodos estáticos
Propósito: Abstracción de acceso a datos
Ubicación: Persistencia.vb
3.
Timer Pattern
Implementación: System.Timers.Timer
Propósito: Polling periódico de trabajos
Ubicación: Service1.vb líneas 50-54
4.
Lock Pattern (Monitor)
Implementación: SyncLock en VB.NET
Propósito: Sincronización de escritura al log
Ubicación: Service1.vb líneas 185-190
5.
Factory Pattern (Implícito)
Implementación: CLogic.Trabajo(tipo) con enum de tipos
Propósito: Creación dinámica de procesadores de trabajo
Ubicación: Service1.vb línea 129
6.
Template Method Pattern
Implementación: EjecutaEnLinea() en CLogic
Propósito: Definir esqueleto de procesamiento de reportes
Ubicación: Referenciado en Service1.vb línea 136

5.4 Seguridad#

Autenticación#

SQL Server Authentication: Usuario/contraseña en connection string
Usuario de servicio: olympus_cserver
Base de datos: AndromedaDB en servidor sql.prod

Autorización#

No implementa autorización a nivel de aplicación
Seguridad delegada al nivel de SQL Server
Permisos del servicio de Windows según configuración del instalador

Protecciones Implementadas#

SQL Injection: ⚠️ VULNERABILIDAD DETECTADA
Concatenación directa de strings en queries
Ubicación: Service1.vb líneas 71, 118, 127, 160, 175
Recomendación: Usar parámetros SQL
Exception Handling:
Try-Catch implementado en métodos críticos
Logging de excepciones
Thread Safety:
SyncLock para escritura al log
ThreadPool manejado por .NET
Connection String Security: ⚠️ RIESGO
Contraseñas en texto plano en app.config
Recomendación: Usar cifrado de secciones de configuración

6. ANÁLISIS DE VERSIONES Y COMPATIBILIDAD#

Framework .NET#

Versión actual: .NET Framework 4.0
Fecha de lanzamiento: Abril 2010
Fecha de fin de soporte: 12 de enero de 2016
Estado: ❌ OBSOLETO Y SIN SOPORTE
Ciclo de vida: https://docs.microsoft.com/lifecycle

Compatibilidad C#/VB.NET#

Versión del lenguaje: Visual Basic 10.0 (VB 2010)
Características modernas utilizadas:
Genérics (List, Dictionary)
Lambda expressions limitadas
LINQ básico
Nullable types

Compatibilidad de Sistema Operativo#

Mínimo: Windows 7 / Windows Server 2008 R2
Recomendado: Windows 10 / Windows Server 2016+
Soporte actual: Compatible con Windows 11 / Server 2022

Dependencias Obsoletas#

Ionic.Utils.Zip 1.3.0.0: Biblioteca descontinuada
Reemplazo recomendado: DotNetZip 1.16+ o System.IO.Compression

7. RECOMENDACIONES DE ACTUALIZACIÓN#

7.1 Prioridad Alta 🔴#

ComponenteVersión ActualVersión RecomendadaMotivoEsfuerzo
.NET Framework4.0.NET 6.0 / .NET 8.0 (LTS)Fin de soporte (EOL 2016), vulnerabilidades de seguridad, sin actualizacionesAlto
Migración VB.NET a C#VB.NETC# 12.0VB.NET en mantenimiento, mejor ecosistema, más desarrolladoresMuy Alto
SQL Injection FixN/AParametrizaciónVulnerabilidad crítica de seguridad (OWASP Top 10)Medio
Connection StringTexto planoEncrypted Sections / Azure Key VaultSeguridad de credencialesBajo

7.2 Prioridad Media 🟡#

ComponenteVersión ActualVersión RecomendadaBeneficioEsfuerzo
Ionic.Utils.Zip1.3.0.0System.IO.CompressionLibrería nativa, sin dependencias externas, mejor rendimientoBajo
ArquitecturaWindows ServiceWorker Service (.NET)Multiplataforma, mejor debugging, contenedoresMedio
LoggingArchivo textoSerilog / NLogLogging estructurado, niveles, múltiples destinosBajo
Timer Polling2 segundosHangfire / Quartz.NETJob scheduling robusto, retry policies, dashboardMedio
Data AccessADO.NET RawEntity Framework Core / DapperProductividad, mantenibilidad, LINQMedio-Alto

7.3 Prioridad Baja 🟢#

ComponenteVersión ActualVersión RecomendadaBeneficioEsfuerzo
Configuraciónapp.config XMLappsettings.jsonFormato moderno, más legibleBajo
Dependency InjectionManualMicrosoft.Extensions.DependencyInjectionTestabilidad, desacoplamientoMedio
Async/AwaitThreadPoolasync/awaitCódigo más legible, mejor manejo de recursosMedio

7.4 Roadmap de Actualización Recomendado#

8. MÉTRICAS DEL PROYECTO#

Estadísticas del Código#

MétricaValor
Archivos VB.NET11
Clases principales2 (Service1, Persistencia)
Métodos públicos~15
Líneas de código (estimado)~500
Dependencias externas1 (Ionic.Utils.Zip)
Proyectos referenciados1 (CLogic)
Archivos de configuración1 (app.config)

9. DEUDA TÉCNICA IDENTIFICADA#

Issues Críticos 🔴#

SQL Injection Vulnerability - Parametrizar todas las queries SQL (Service1.vb)
.NET Framework 4.0 Obsoleto - Framework sin soporte desde 2016
Credenciales en texto plano - Connection strings sin cifrar
Falta de manejo de errores en ThreadPool - Excepciones no controladas pueden crashear threads
Falta de retry logic - Trabajos que fallan no se reintentan

Issues Importantes 🟡#

Logging rudimentario - Archivo de texto plano sin niveles ni rotación
Hard-coded thread count - 100 threads fijos, no configurable
Polling cada 2 segundos - Ineficiente, considerar event-driven o message queue
No hay tests unitarios - Falta cobertura de pruebas
Código comentado - Líneas 141-158 en Service1.vb deben eliminarse o limpiarse
Falta de monitoreo - No hay métricas ni health checks

Mejoras Recomendadas 🟢#

Implementar async/await - Reemplazar ThreadPool por async/await
Dependency Injection - Facilitar testing y mantenimiento
Configuración tipada - Usar IOptions<T> en lugar de AppSettings
Structured logging - Implementar Serilog con destinos configurables
Telemetría - Agregar Application Insights o similar
Health checks - Endpoint para monitoreo de salud del servicio
Containerización - Dockerizar para deployment moderno
CI/CD Pipeline - Automatizar build, tests y deployment
Documentación de API - Documentar tipos de trabajos soportados
Rate limiting - Control de carga del sistema

10. GLOSARIO TÉCNICO#

TérminoDefinición
CobranzaSistema de gestión de cobros y cartera
AndromedaNombre del sistema/plataforma principal
OlympusSistema relacionado vinculado a la base de datos
TrabajoUnidad de procesamiento (job) en la cola
RPTArchivo de plantilla de Crystal Reports
CLogicBiblioteca de lógica de negocio compartida
ThreadPoolPool de threads administrado por .NET Framework
id_trabajoIdentificador único de cada trabajo en la cola
StatusEstado del trabajo (Pendiente=1, En_Proceso, Procesado, Falla)

NOTAS ADICIONALES#

Comentarios de Desarrollo#

El código incluye comentarios en español
Desarrollado originalmente por ECG BIS Soluciones en 2010
Última actualización significativa en 2024 (configuración de producción)
Sistema en producción con configuración de servidor: G:\Prod\Andromeda\

Entorno de Desarrollo vs. Producción#

El archivo app.config incluye configuraciones comentadas para entorno de prueba:
Test: Rutas en d:\pdfs\, d:\reportes\
Producción: Rutas en G:\Prod\Andromeda\

Dependencias del Sistema#

El servicio depende de:
1.
SQL Server con base de datos AndromedaDB
2.
Crystal Reports Runtime para generación de reportes
3.
Permisos del sistema de archivos para lectura/escritura en rutas configuradas
4.
Proyecto CLogic compilado y accesible

Consideraciones de Deployment#

Requiere instalación como servicio de Windows
Debe ejecutarse con credenciales que tengan:
Acceso al servidor SQL
Permisos de lectura en carpeta de reportes
Permisos de escritura en carpetas de output y logs

Riesgos Operacionales#

1.
Falla de base de datos detiene todo el procesamiento
2.
Llenado de disco en carpetas de output puede causar fallos
3.
Crash del servicio pierde trabajos en proceso (no hay persistencia de estado)
4.
Falta de límites de recursos puede consumir toda la CPU/memoria del servidor

Documentación generada: 13 de diciembre de 2025
Analizado por: Claude AI (Anthropic)
Versión del documento: 1.0
Revisión recomendada: Trimestral o ante cambios arquitectónicos significativos
Modificado en 2025-12-13 23:41:45
Anterior
OServerLogic
Siguiente
FbCotizador
Built with