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

MetCotizadores

DOCUMENTACIÓN TÉCNICA - MetCotizadores

1. INFORMACIÓN GENERAL DEL PROYECTO

  • Nombre del proyecto: MetCotizadores
  • Descripción y propósito: Librería de clase .NET Framework especializada en cálculos actuariales y cotización de seguros de vida. Proporciona funcionalidades para cotizar diferentes productos de seguros incluyendo MetaLife, Met99/Vida360, EducaLife, PerfectLife y Vida Inversión.
  • Versión del framework .NET utilizado: .NET Framework 4.8
  • Tipo de aplicación: Class Library (DLL)
  • Fecha de última modificación del proyecto: 2025-09-05
  • GUID del Proyecto: {ACEEC137-488F-49BB-A8F1-1CF3D5B12333}
  • Versión del ensamblado: 1.0.0.0

2. MAPA DE SITIO / ESTRUCTURA DEL PROYECTO

2.1 Árbol Jerárquico

📁 MetCotizadores/
├── 📄 MetCotizadores.sln                          (Solución Visual Studio)
├── 📄 MetCotizadores.csproj                       (Archivo de proyecto)
├── 📄 app.config                                  (Configuración de ensamblado)
├── 📄 README.md                                   (Documentación)
├── 📄 site-description.md                         (Guía de documentación)
│
├── 📁 Properties/
│   └── 📄 AssemblyInfo.cs                         (Metadatos del ensamblado)
│
├── 📁 Módulo MetaLife/ (Productos MetaLife)
│   ├── 📄 MetaLifeCotiza.cs                       (1,324 líneas - Cotización principal)
│   ├── 📄 MetaLifeDatos.cs                        (448 líneas - Patrón Singleton)
│   ├── 📄 MetaLifeCalculos.cs                     (2,403 líneas - Cálculos actuariales)
│   ├── 📄 MetaLifeTablas.cs                       (2,327 líneas - Gestión de tablas)
│   └── 📄 MetaLifeGenSubs.cs                      (439 líneas - Generador subsidios)
│
├── 📁 Módulo Met99/ (Productos Met99/Vida360)
│   ├── 📄 Met99Cotiza.cs                          (370 líneas - Cotización principal)
│   ├── 📄 Met99Datos.cs                           (896 líneas - Patrón Singleton)
│   └── 📄 Met99Calcula.cs                         (2,887 líneas - ARCHIVO MAYOR)
│
├── 📁 Módulo Vida Inversión/
│   ├── 📄 MetCalculosVI.cs                        (1,641 líneas - Cálculos VI)
│   └── 📄 MetDatosVI.cs                           (898 líneas - Datos VI)
│
├── 📁 Módulo EducaLife/
│   └── 📄 EducaLifeCotiza.cs                      (791 líneas - Cotización EducaLife)
│
├── 📁 Módulo PerfectLife/
│   └── 📄 PerfectLifeCotiza.cs                    (980 líneas - Cotización PerfectLife)
│
├── 📁 Utilidades/
│   ├── 📄 Tablas.cs                               (1,168 líneas - Acceso a BD SQL)
│   ├── 📄 GenSubs.cs                              (561 líneas - Generador subsidios)
│   ├── 📄 MetGenSubs.cs                           (440 líneas - Generador subsidios)
│   └── 📄 Helpers.cs                              (54 líneas - Métodos de extensión)
│
├── 📁 bin/
│   ├── 📁 Debug/
│   │   ├── MetCotizadores.dll
│   │   └── MetCotizadores.pdb
│   └── 📁 Release/
│
├── 📁 obj/
│   └── 📁 Debug/
│
└── 📁 packages/                                   (NuGet packages - 20 paquetes)

2.2 Organización de Namespaces

Namespace raíz: MetCotizadores

Todos los archivos comparten el mismo namespace raíz. La organización lógica se realiza mediante:

  • Convención de nombres de archivos (prefijos por producto: MetaLife, Met99, etc.)
  • Separación funcional por responsabilidades (Cotiza, Datos, Calculos, Tablas)

2.3 Proyectos dentro de la Solución

  1. MetCotizadores (Proyecto principal)

    • GUID: {ACEEC137-488F-49BB-A8F1-1CF3D5B12333}
    • Tipo: Class Library
    • Output: MetCotizadores.dll
  2. NF.ClassLibrary (Dependencia externa)

    • GUID: {3C0AC671-CF96-4894-AEFC-EB1663292E4C}
    • Ruta: ..\..\Comun_UAT\Nf.ClassLibrary\NF.ClassLibrary\
    • Relación: MetCotizadores depende de NF.ClassLibrary

2.4 Métricas del Proyecto

  • Total de archivos .cs: 16 archivos + 1 AssemblyInfo
  • Total de líneas de código: ~17,627 líneas
  • Archivo más grande: Met99Calcula.cs (2,887 líneas)
  • Promedio por archivo: ~1,102 líneas

3. INVENTARIO DE LIBRERÍAS Y DEPENDENCIAS

3.1 Referencias del Sistema (.NET Framework)

LibreríaVersiónPropósito
System4.8Tipos fundamentales
System.Configuration4.8Gestión de configuración
System.Core4.8LINQ, expresiones lambda
System.Data4.8ADO.NET para acceso a datos
System.Net.Http4.8Cliente HTTP
System.Xml4.8Procesamiento XML
System.Xml.Linq4.8LINQ to XML
Microsoft.CSharp4.8Runtime dynamic

3.2 NuGet Packages

LibreríaVersión ActualPropósitoCategoría
BouncyCastle1.8.9Criptografía, certificados SSL/TLS, firmas digitalesSeguridad
Newtonsoft.Json12.0.3Serialización/deserialización JSONSerialización
EPPlus5.5.1Generación y manipulación de archivos Excel (.xlsx)Reporting
iTextSharp5.5.13.2Generación y manipulación de archivos PDFReporting
itextsharp.xmlworker5.5.13.2Conversión HTML a PDFReporting
DotNetZip1.15.0Compresión y descompresión de archivos ZIPUtilidad
Microsoft.AspNet.Mvc5.2.7Framework MVC (referencia consumidor)Web Framework
Microsoft.AspNet.Razor3.2.7Motor de vistas RazorWeb Framework
Microsoft.AspNet.WebPages3.2.7Páginas Web ASP.NETWeb Framework
Microsoft.AspNet.WebApi.Client5.2.7Cliente WebAPIWeb Framework
Microsoft.IO.RecyclableMemoryStream1.4.0Optimización de memoria para streamsRendimiento
Microsoft.Net.Http2.2.29Cliente HTTP (legacy)Red
Microsoft.Bcl1.1.10Base Class Library (portabilidad)Framework
Microsoft.Bcl.Build1.0.21Herramientas de buildBuild Tools
Microsoft.Web.Infrastructure1.0.0.0Infraestructura web ASP.NETFramework
System.Collections4.3.0Colecciones genéricasFramework
System.Collections.NonGeneric4.3.0Colecciones no genéricasFramework
System.ComponentModel.Annotations5.0.0Atributos de validaciónValidación
System.Net.Http4.3.4Cliente HTTP modernoRed
System.Runtime.Serialization.Json4.3.0Serialización JSON (System)Serialización
NuGet.VisualStudio5.8.1Herramientas NuGetDesarrollo

3.3 Dependencias Externas

LibreríaUbicaciónPropósito
NF.ClassLibrary..\..\Comun_UAT\Nf.ClassLibrary\NF.ClassLibrary\bin\Debug\Librería compartida de funcionalidades comunes (UAT)

4. ARQUITECTURA DEL PROYECTO

4.1 Patrón Arquitectónico

Patrón Principal: N-Layer Architecture (Arquitectura en Capas) con Business Logic Layer

El proyecto implementa una arquitectura en capas especializada para lógica de negocio:

  • Capa de Negocio: Clases *Cotiza (orquestadores de cotización)
  • Capa de Cálculos: Clases *Calculos (lógica actuarial compleja)
  • Capa de Datos: Clases *Datos (DTOs y state holders)
  • Capa de Acceso a Datos: Clase Tablas (acceso a SQL Server)
  • Capa de Utilidades: Helpers, GenSubs (funciones auxiliares)

Patrones Secundarios:

  • Singleton Pattern: Para gestión de estado (MetaLifeDatos, Met99Datos, GenSubs)
  • Data Transfer Object (DTO): Clases *Datos
  • Template Method: Métodos comunes de cotización

4.2 Diagrama de Arquitectura

graph TB
    A[Aplicación Consumidora<br/>ASP.NET MVC/WebAPI] --> B{MetCotizadores.dll}

    B --> C[Capa de Cotización]
    C --> C1[MetaLifeCotiza]
    C --> C2[Met99Cotiza]
    C --> C3[EducaLifeCotiza]
    C --> C4[PerfectLifeCotiza]

    C1 --> D[Capa de Cálculos]
    C2 --> D
    D --> D1[MetaLifeCalculos]
    D --> D2[Met99Calcula]
    D --> D3[MetCalculosVI]

    C1 --> E[Capa de Datos/DTO]
    C2 --> E
    E --> E1[MetaLifeDatos<br/>Singleton]
    E --> E2[Met99Datos<br/>Singleton]
    E --> E3[MetDatosVI<br/>Singleton]

    D --> F[Capa de Tablas]
    F --> F1[MetaLifeTablas]
    F --> F2[Tablas]

    F2 --> G[(SQL Server<br/>Base de Datos)]

    C --> H[Utilidades]
    H --> H1[GenSubs<br/>Singleton]
    H --> H2[Helpers<br/>Extensiones]

    B --> I[NF.ClassLibrary<br/>Librería Externa]

    style B fill:#4A90E2,color:#fff
    style C fill:#50C878,color:#fff
    style D fill:#FFB347,color:#fff
    style E fill:#E574BC,color:#fff
    style F fill:#9B59B6,color:#fff
    style G fill:#E74C3C,color:#fff

4.3 Componentes Principales

1. Capa de Cotización (Orquestadores)

  • Responsabilidad: Coordinar el proceso completo de cotización
  • Archivos: *Cotiza.cs (MetaLifeCotiza, Met99Cotiza, etc.)
  • Funcionalidad:
    • Recibir parámetros de cotización vía Dictionary<string, object>
    • Validar datos de entrada
    • Orquestar llamadas a cálculos y tablas
    • Generar reportes (Excel/PDF)
    • Retornar resultados

2. Capa de Cálculos Actuariales

  • Responsabilidad: Ejecutar lógica actuarial compleja
  • Archivos: *Calculos.cs, *Calcula.cs
  • Funcionalidad:
    • Cálculos de primas
    • Proyecciones financieras
    • Tablas de mortalidad
    • Cálculos de subsidios
    • Simulaciones de escenarios

3. Capa de Datos (DTOs y State Holders)

  • Responsabilidad: Almacenar estado y datos de cotización
  • Patrón: Singleton (para compartir estado)
  • Archivos: *Datos.cs
  • Funcionalidad:
    • Propiedades públicas para datos de cotización
    • Listas de configuración
    • Estado de cálculos
    • Validaciones de negocio

4. Capa de Acceso a Datos

  • Responsabilidad: Interacción con base de datos SQL Server
  • Archivos: Tablas.cs, *Tablas.cs
  • Funcionalidad:
    • Carga de ocupaciones
    • Carga de reglas de negocio
    • Carga de tablas maestras
    • Consultas SQL directas (ADO.NET)

5. Servicios Externos

  • NF.ClassLibrary: Librería compartida con funcionalidades comunes
  • SQL Server: Base de datos con tablas maestras y configuraciones

4.4 Flujo de Datos

sequenceDiagram
    participant App as Aplicación Web<br/>(MVC/API)
    participant Cot as *Cotiza<br/>(Orquestador)
    participant Dat as *Datos<br/>(Singleton DTO)
    participant Tab as Tablas<br/>(Data Access)
    participant Calc as *Calculos<br/>(Actuarial)
    participant DB as SQL Server
    participant Rep as Generador<br/>Reportes

    App->>Cot: Cotizar(Dictionary params)
    activate Cot

    Cot->>Dat: getInstance()
    Dat-->>Cot: instancia singleton

    Cot->>Tab: CargaOcupaciones()
    Tab->>DB: SELECT * FROM met99_tblOcupaciones
    DB-->>Tab: DataTable
    Tab->>Dat: Poblar listas
    Tab-->>Cot: void

    Cot->>Tab: CargaReglas()
    Tab->>DB: SELECT * FROM met99_tblReglas
    DB-->>Tab: DataTable
    Tab->>Dat: Poblar reglas
    Tab-->>Cot: void

    Cot->>Calc: CalcularPrimas()
    Calc->>Dat: Leer datos entrada
    Calc->>Calc: Aplicar fórmulas actuariales
    Calc->>Dat: Guardar resultados
    Calc-->>Cot: void

    Cot->>Calc: GenerarProyecciones()
    Calc->>Dat: Leer configuración
    Calc->>Calc: Calcular proyecciones
    Calc->>Dat: Guardar proyecciones
    Calc-->>Cot: void

    Cot->>Rep: GenerarExcel(datos)
    Rep-->>Cot: archivo Excel (EPPlus)

    Cot->>Rep: GenerarPDF(datos)
    Rep-->>Cot: archivo PDF (iTextSharp)

    Cot-->>App: string (resultado JSON o ruta archivo)
    deactivate Cot

5. ASPECTOS MÁS RELEVANTES

5.1 Funcionalidades Principales

  1. Cotización de Seguros de Vida MetaLife

    • Cálculo de primas con múltiples coberturas (EP, PASI, MA, DI, TI, GE)
    • Simulación de escenarios de inversión (fijo y variable)
    • Proyecciones a largo plazo
  2. Cotización de Seguros Met99/Vida360

    • Cálculo actuarial basado en ocupaciones
    • Gestión de extras prima (EP) por riesgo ocupacional
    • Límites de suma asegurada por ocupación
  3. Cotización de Seguros EducaLife

    • Productos orientados a financiamiento educativo
    • Metas programadas
    • Aportaciones periódicas
  4. Cotización de Seguros PerfectLife

    • Productos de vida con coberturas especiales
  5. Cotización de Vida Inversión (VI)

    • Seguros con componente de inversión
    • Fondos de inversión variables
  6. Generación de Subsidios

    • Cálculo automático de subsidios aplicables
    • Reglas de negocio complejas
  7. Generación de Reportes

    • Excel detallados con proyecciones (EPPlus)
    • PDFs profesionales con ilustraciones (iTextSharp)
  8. Gestión de Tablas Maestras

    • Ocupaciones y clasificación de riesgos
    • Reglas de aceptación
    • Límites por edad y suma asegurada
  9. Cálculos Actuariales Complejos

    • Tablas de mortalidad
    • Tasas de interés técnico
    • Reservas matemáticas
  10. Simulación de Escenarios

    • Escenarios optimistas/pesimistas/reales
    • Rendimientos variables

5.2 Configuraciones Críticas

Connection Strings

// Configuradas en NF.ClassLibrary o en app.config del consumidor
// Acceso vía System.Configuration.ConfigurationManager

Ubicación esperada: La aplicación consumidora debe proporcionar:

  • Connection string a SQL Server con tablas:
    • met99_tblOcupaciones
    • met99_tblLogos
    • met99_tblReglas
    • Otras tablas específicas por producto

Configuraciones de Seguridad

<!-- app.config -->
<configuration>
  <runtime>
    <assemblyBinding>
      <!-- Redirección BouncyCastle para criptografía -->
      <dependentAssembly>
        <assemblyIdentity name="BouncyCastle.Crypto" />
        <bindingRedirect oldVersion="0.0.0.0-1.8.9.0" newVersion="1.8.9.0"/>
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

Variables de Entorno

  • No se utilizan variables de entorno directamente
  • Configuración vía archivos .config en aplicación consumidora

5.3 Patrones de Diseño Implementados

1. Singleton Pattern

// MetaLifeDatos.cs
public class MetaLifeDatos
{
    private static MetaLifeDatos ipDatos = new MetaLifeDatos();
    public static MetaLifeDatos getInstance() { return ipDatos; }
}
  • Uso: Compartir estado entre múltiples componentes
  • Implementado en: MetaLifeDatos, Met99Datos, GenSubs, MetDatosVI

2. Data Transfer Object (DTO)

// Clases *Datos.cs contienen propiedades públicas
public String nombre;
public int edad;
public Double sumaAsegurada;
  • Uso: Transferir datos entre capas
  • Implementado en: Todas las clases *Datos.cs

3. Template Method (implícito)

  • Métodos comunes de cotización con estructura similar:
    1. Validar datos de entrada
    2. Cargar tablas
    3. Ejecutar cálculos
    4. Generar reportes
    5. Retornar resultados

4. Facade (implícito)

  • Clases *Cotiza actúan como fachada para procesos complejos
  • Simplifican la interfaz para aplicaciones consumidoras

5. Extension Methods (Decorator)

// Helpers.cs
public static class Helpers
{
    public static void AddRange<T>(this List<T> list, ...)
}

5.4 Seguridad

Autenticación

  • No implementada en la librería
  • Responsabilidad de la aplicación consumidora

Autorización

  • No implementada en la librería
  • Responsabilidad de la aplicación consumidora

Protecciones Implementadas

  1. Inyección SQL

    • ⚠️ RIESGO CRÍTICO IDENTIFICADO
    • Uso de consultas SQL concatenadas sin parámetros
    • Ejemplo en Tablas.cs:
      this.txtQuery = "SELECT * FROM met99_tblOcupaciones;";
      
    • Recomendación: Migrar a consultas parametrizadas
  2. Validación de Datos

    • Validaciones básicas en métodos de cotización
    • Conversiones con Convert.ToInt32(), Convert.ToDouble()
    • ⚠️ Falta manejo robusto de excepciones
  3. Criptografía

    • BouncyCastle disponible pero no se evidencia uso directo
    • Probablemente usado por dependencias (PDF, Excel)

6. ANÁLISIS DE VERSIONES Y COMPATIBILIDAD

6.1 Framework .NET

  • Versión actual: .NET Framework 4.8
  • Fecha de lanzamiento: Abril 2019
  • Fecha de fin de soporte: ⚠️ Soporte vinculado a Windows (LTS mientras SO esté soportado)
  • Estado: ✅ Soportado (última versión de .NET Framework)

Notas:

  • .NET Framework 4.8 es la última versión de .NET Framework
  • Microsoft recomienda migrar a .NET (Core) para nuevos proyectos
  • .NET Framework continuará recibiendo actualizaciones de seguridad

6.2 Compatibilidad C#

  • Versión del lenguaje: C# 7.3 (por defecto con .NET Framework 4.8)
  • Características modernas utilizadas:
    • ✅ Expresiones lambda
    • ✅ LINQ
    • ✅ Métodos de extensión
    • ✅ Tipos anónimos
    • ✅ var para inferencia de tipos
    • ❌ NO usa: async/await, pattern matching, nullable reference types

6.3 Compatibilidad de Librerías

LibreríaVersión ActualÚltima EstableEstado
BouncyCastle1.8.92.5.0⚠️ Desactualizada
Newtonsoft.Json12.0.313.0.3⚠️ Desactualizada
EPPlus5.5.17.5.4⚠️ Desactualizada
iTextSharp5.5.13.25.5.13.3✅ Actualizada
DotNetZip1.15.01.16.0✅ Actualizada

7. RECOMENDACIONES DE ACTUALIZACIÓN

7.1 Prioridad Alta 🔴

LibreríaVersión ActualVersión RecomendadaMotivoEsfuerzo
BouncyCastle.Crypto1.8.92.5.0Vulnerabilidades de seguridad conocidas en versiones antiguasMedio
Newtonsoft.Json12.0.313.0.3Correcciones de seguridad, mejor rendimientoBajo
Código SQLN/AParametrizadoCRÍTICO: Prevenir inyección SQLAlto

7.2 Prioridad Media 🟡

LibreríaVersión ActualVersión RecomendadaBeneficioEsfuerzo
EPPlus5.5.17.5.4Nuevas características Excel, mejor rendimientoMedio
iTextSharp5.5.13.27.x (iText7) o AlternativaiText7 tiene arquitectura mejorada, licencia comercialAlto
Manejo de ExcepcionesBásicoTry-Catch robusto + LoggingMejor diagnóstico de erroresMedio
Async/AwaitNo implementadoImplementar en I/OMejor escalabilidadAlto

7.3 Prioridad Baja 🟢

AcciónVersión ActualRecomendaciónBeneficioEsfuerzo
Migración a .NET.NET Framework 4.8.NET 8+Cross-platform, mejor rendimiento, LTSMuy Alto
XML CommentsEscasoDocumentar APIs públicasIntelliSense, documentación generadaMedio
Unit TestsNo evidenciadosImplementar suite de testsMayor confiabilidadAlto
Inyección de Dependenciasnew manualDI ContainerMejor testabilidadAlto

7.4 Roadmap de Actualización

gantt
    title Roadmap de Actualización Recomendado
    dateFormat YYYY-MM
    section Seguridad Crítica
    Parametrizar queries SQL           :crit, 2025-12, 60d
    Actualizar BouncyCastle            :crit, 2025-12, 15d
    section Librerías
    Actualizar Newtonsoft.Json         :2026-01, 7d
    Actualizar EPPlus                  :2026-02, 21d
    section Calidad de Código
    Implementar logging robusto        :2026-02, 30d
    Agregar XML documentation          :2026-03, 45d
    section Testing
    Crear suite de unit tests          :2026-04, 90d
    section Modernización (Opcional)
    Evaluar migración a .NET 8         :2026-06, 30d
    Implementar async/await            :2026-07, 60d

8. MÉTRICAS DEL PROYECTO

8.1 Distribución por Tipo de Archivo

pie title "Distribución por Tipo de Archivo"
    "C# (.cs)" : 95
    "Config (.config, .csproj)" : 3
    "Markdown (.md)" : 2

8.2 Distribución de Código por Módulo

pie title "Líneas de Código por Módulo"
    "Met99" : 4153
    "MetaLife" : 6941
    "Vida Inversión" : 2539
    "EducaLife" : 791
    "PerfectLife" : 980
    "Utilidades" : 2223

8.3 Estado de Dependencias

pie title "Estado de NuGet Packages"
    "Actualizadas (<=1 versión)" : 2
    "Desactualizadas (2-5 versiones)" : 3
    "Muy desactualizadas (>5 versiones)" : 3
    "Framework (estables)" : 12

8.4 Complejidad por Archivo

ArchivoLíneasComplejidadMantenibilidad
Met99Calcula.cs2,887⚠️ Muy Alta🔴 Baja
MetaLifeCalculos.cs2,403⚠️ Muy Alta🔴 Baja
MetaLifeTablas.cs2,327⚠️ Alta🟡 Media
MetCalculosVI.cs1,641⚠️ Alta🟡 Media
MetaLifeCotiza.cs1,324🟢 Media🟢 Buena
Otros<1,000🟢 Baja-Media🟢 Buena

Observaciones:

  • Archivos con >2,000 líneas deberían refactorizarse
  • Complejidad ciclomática probablemente alta en *Calcula.cs

9. DEUDA TÉCNICA IDENTIFICADA

9.1 Issues Críticos 🔴

  • SQL Injection: Migrar de consultas concatenadas a consultas parametrizadas con SqlParameter

    • Archivos afectados: Tablas.cs, MetaLifeTablas.cs
    • Riesgo: CRÍTICO
    • Estimación: 20-30 horas
  • Falta de manejo de excepciones: Muchos catch blocks vacíos o con solo asignación a string

    • Archivos afectados: Todos
    • Riesgo: ALTO
    • Estimación: 40 horas
  • Ausencia de logging: No se evidencia uso de framework de logging (NLog, Serilog, log4net)

    • Impacto: Dificulta diagnóstico en producción
    • Estimación: 15 horas
  • Librerías desactualizadas con vulnerabilidades conocidas

    • BouncyCastle 1.8.9 (CVEs conocidos)
    • Estimación: 8 horas

9.2 Issues Importantes 🟡

  • Archivos monolíticos: Met99Calcula.cs (2,887 líneas) debe refactorizarse

    • Sugerencia: Aplicar patrón Strategy o dividir en clases especializadas
    • Estimación: 60-80 horas
  • Ausencia de pruebas unitarias

    • Crítico para cálculos actuariales
    • Estimación: 120+ horas
  • Acoplamiento fuerte: Uso excesivo de Singleton

    • Dificulta testing
    • Sugerencia: Migrar a inyección de dependencias
    • Estimación: 80 horas
  • Código síncrono: Todo el I/O es síncrono (DB, archivos)

    • Sugerencia: Implementar async/await
    • Estimación: 60 horas
  • Falta documentación XML: Métodos públicos sin documentación

    • Estimación: 30 horas

9.3 Mejoras Recomendadas 🟢

  • Implementar Repository Pattern para acceso a datos

    • Beneficio: Mejor testabilidad y separación de responsabilidades
    • Estimación: 40 horas
  • Migrar a ORM (Entity Framework, Dapper)

    • Beneficio: Reducir SQL manual, prevenir inyección
    • Estimación: 60 horas
  • Agregar validación de entrada con FluentValidation o Data Annotations

    • Estimación: 25 horas
  • Implementar caché para tablas maestras (MemoryCache, Redis)

    • Beneficio: Reducir llamadas a BD
    • Estimación: 20 horas
  • Configuración externa: Mover valores hardcodeados a archivos de configuración

    • Estimación: 15 horas
  • Code analysis: Integrar analizadores de Roslyn (StyleCop, FxCop)

    • Estimación: 10 horas

10. GLOSARIO TÉCNICO

Términos de Dominio (Seguros)

TérminoDescripción
EPExtra Prima - Recargo adicional por riesgo aumentado
PASIPago Adicional por Suma Asegurada por Invalidez
MAMuerte Accidental
DIDoble Indemnización
TITriple Indemnización
GEGastos de Entierro / Gastos Funerarios
VIVida Inversión - Seguro con componente de inversión
PPRPlan Personal de Retiro
CPEACuenta Personal de Ahorro (suposición)
Suma AseguradaCapital que paga la aseguradora en caso de siniestro
PrimaPago periódico del asegurado
SubsidioDescuento o bonificación aplicada a la prima
Plazo de PagoDuración del período de pagos de primas
EscenarioProyección financiera (optimista/pesimista/real)

Términos Técnicos

TérminoDescripción
SingletonPatrón que garantiza una única instancia de una clase
DTOData Transfer Object - Objeto para transferir datos entre capas
ADO.NETTecnología de acceso a datos de .NET
Tabla MaestrasTablas de configuración y catálogos en BD
Memoria de CálculoReporte detallado de cálculos realizados
ProyecciónSimulación de valores futuros

11. DIAGRAMA DE DEPENDENCIAS ENTRE MÓDULOS

graph LR
    App[Aplicación<br/>Consumidora] --> Met[MetCotizadores.dll]

    Met --> ML[Módulo MetaLife]
    Met --> M99[Módulo Met99]
    Met --> EL[Módulo EducaLife]
    Met --> PL[Módulo PerfectLife]
    Met --> VI[Módulo VI]

    ML --> MLCot[MetaLifeCotiza]
    ML --> MLDat[MetaLifeDatos]
    ML --> MLCalc[MetaLifeCalculos]
    ML --> MLTab[MetaLifeTablas]

    M99 --> M99Cot[Met99Cotiza]
    M99 --> M99Dat[Met99Datos]
    M99 --> M99Calc[Met99Calcula]

    MLCot --> Util[Utilidades]
    M99Cot --> Util

    Util --> Tab[Tablas]
    Util --> GS[GenSubs]
    Util --> Help[Helpers]

    Tab --> DB[(SQL Server)]

    Met --> NF[NF.ClassLibrary]

    Met --> EPP[EPPlus<br/>5.5.1]
    Met --> iText[iTextSharp<br/>5.5.13.2]
    Met --> JSON[Newtonsoft.Json<br/>12.0.3]
    Met --> BC[BouncyCastle<br/>1.8.9]

    style Met fill:#4A90E2,color:#fff
    style DB fill:#E74C3C,color:#fff
    style NF fill:#95a5a6,color:#fff

12. PUNTOS DE INTEGRACIÓN

12.1 Interfaz Pública de la Librería

Métodos principales para consumidores:

// MetaLifeCotiza
public string Cotizar(Dictionary<string, object> cotizaParams)

// Met99Cotiza
public string Cotiza(Dictionary<string, object> cotizaParams)

// EducaLifeCotiza
public string Cotizar(Dictionary<string, object> cotizaParams)

// PerfectLifeCotiza
public string Cotizar(Dictionary<string, object> cotizaParams)

Parámetros esperados (ejemplo para MetaLife):

  • edad (int)
  • txtPlazoPago (string)
  • plazoPago (int)
  • paqueteSeleccionado (string)
  • nombre (string)
  • fuma (string: "Si"/"No")
  • sexo (string: "M"/"F")
  • moneda (string)
  • cobertura (string)
  • escenario (string)
  • selEP, selPASI, selMA, selDI, selTI, selGE (bool)
  • sumaEP, sumaPASI, sumaMA, etc. (double)
  • Y muchos más...

Retorno: string (probablemente JSON o ruta a archivo generado)

12.2 Base de Datos Requerida

Tablas SQL Server necesarias:

  • met99_tblOcupaciones: Catálogo de ocupaciones y clasificación de riesgos
  • met99_tblLogos: Logotipos de promotorías
  • met99_tblReglas: Reglas de negocio por cobertura
  • Otras tablas específicas por producto

Conexión: La aplicación consumidora debe proporcionar connection string

12.3 Archivos Generados

Salida típica:

  • Archivos Excel (.xlsx) con proyecciones detalladas
  • Archivos PDF con ilustraciones de póliza
  • Ubicación configurada por parámetros de entrada

NOTAS ADICIONALES

Observaciones del Análisis

  1. Código Legacy pero Funcional: El proyecto utiliza tecnologías maduras (.NET Framework 4.8) adecuadas para Windows Server

  2. Alta Especialización: El código es altamente especializado en cálculos actuariales, requiere conocimiento del dominio para mantenimiento

  3. Falta de Separación de Responsabilidades: Algunas clases tienen múltiples responsabilidades (violación de SRP)

  4. Rendimiento: Uso extensivo de listas List<T> y operaciones en memoria - adecuado para volúmenes moderados

  5. Mantenibilidad: Archivos con >2,000 líneas dificultan el mantenimiento

  6. Testing: No se evidencian pruebas unitarias - crítico para lógica actuarial

Recomendaciones Generales

  1. Corto Plazo (1-3 meses):

    • ✅ Corregir vulnerabilidades SQL injection
    • ✅ Actualizar BouncyCastle y Newtonsoft.Json
    • ✅ Implementar logging
  2. Mediano Plazo (3-6 meses):

    • ✅ Crear suite de pruebas unitarias
    • ✅ Refactorizar clases >2,000 líneas
    • ✅ Documentar APIs públicas
  3. Largo Plazo (6-12 meses):

    • ⚠️ Evaluar migración a .NET 8+ (si requiere cross-platform)
    • ⚠️ Implementar arquitectura hexagonal
    • ⚠️ Migrar a async/await

Contacto y Soporte

Para preguntas sobre esta documentación, contactar al equipo de desarrollo.


Documentación generada: 2025-12-13
Analizado por: Claude AI (Sonnet 4.5)
Versión del documento: 1.0
Última actualización del proyecto: 2025-09-05
Commit: ef0fa19 - fix cotizador quialitas

Modificado en 2025-12-14 00:55:05
Anterior
Oserver
Siguiente
ClassLibrary
Built with