SALC (Sistema de Análisis de Laboratorio Clínico) es una aplicación de escritorio desarrollada en Windows Forms (.NET Framework 4.7.2) diseñada para gestionar de manera integral las operaciones de un laboratorio clínico.
El sistema permite la administración completa del flujo de trabajo de un laboratorio, desde el registro de pacientes hasta la generación de informes médicos, pasando por la carga de resultados y la firma digital de análisis. Está diseñado para tres roles principales:
-
Administradores: Gestión de usuarios, catálogos y configuración del sistema
-
Médicos: Creación de análisis, carga de resultados y firma digital
-
Asistentes de Laboratorio: Gestión de pacientes y generación de informes
El proyecto fue desarrollado siguiendo el patrón arquitectónico MVP (Model-View-Presenter), con una clara separación de responsabilidades en capas, lo que garantiza un código mantenible, escalable y testeable.
-
Autenticación segura con BCrypt
-
Tres roles diferenciados (Administrador, Médico, Asistente)
-
Gestión completa de usuarios (CRUD)
-
Baja lógica de usuarios manteniendo integridad referencial
-
Registro completo de pacientes con validaciones
-
Alta: Realizada por Asistentes (pestaña "Gestión de Pacientes" en panel Asistente)
-
Modificación: Realizada por Médicos y Asistentes
-
Baja lógica: Realizada SOLO por Médicos (cambio de estado a "Inactivo" desde pestaña "Gestión de Pacientes")
-
Asociación con obras sociales
-
Búsqueda y filtrado avanzado
-
Filtro por estado: "Todos", "Activo", "Inactivo"
-
Preservación del historial en bajas lógicas
-
Creación de análisis vinculados a tipos predefinidos (solo Médicos)
-
Carga de resultados de métricas específicas (solo Médicos)
-
Validación y firma digital de análisis (solo Médicos)
-
Estados de análisis: "Sin verificar" y "Verificado"
-
Los resultados se vuelven inmutables tras la firma
-
Trazabilidad completa:
dni_cargaydni_firma
-
Gestión de obras sociales (Administrador)
-
Tipos de análisis personalizables (Administrador)
-
Métricas con valores de referencia (Administrador)
-
Relaciones dinámicas tipo análisis-métricas (tabla
tipo_analisis_metrica) -
El Administrador puede crear, modificar y eliminar las asociaciones entre tipos de análisis y métricas
-
Baja lógica en todos los catálogos
-
Estados: "Activo" e "Inactivo"
-
Productividad de Médicos: Análisis creados y verificados por cada médico
-
Distribución por Obra Social: Análisis agrupados por cobertura médica (gráfico de torta)
-
Análisis Más Solicitados: Top 10 de tipos de análisis con mayor demanda (gráfico de barras)
-
Visualización mediante gráficos (
System.Windows.Forms.DataVisualization.Charting.Chart) -
Filtros por rango de fechas personalizables
-
Datos globales de todo el sistema
-
Reporte de Alertas: Valores fuera de rango crítico que requieren atención médica
-
Mi Carga de Trabajo: Análisis pendientes de verificar y análisis verificados del mes actual
-
Visualización mediante tarjetas visuales con indicadores numéricos
-
Datos filtrados por el DNI del médico logueado
-
Filtros por rango de fechas para alertas
-
Generación automática de informes PDF con iTextSharp (solo Asistentes)
-
Solo se pueden generar informes de análisis en estado "Verificado"
-
Envío de informes por correo electrónico
-
Plantillas profesionales con información del laboratorio
-
Incluye firma digital del médico que validó el análisis
-
Sistema de logging integrado
-
Manejo centralizado de excepciones
-
Validaciones en todas las capas
-
Trazabilidad de operaciones
-
Backups manuales de base de datos
-
Conexión a SQL Server con health checks
-
Sistema de excepciones personalizadas
-
Manejo de errores user-friendly
-
Arquitectura en capas desacopladas
-
Sistema Operativo: Windows 10 o superior
-
Visual Studio: 2019 o superior (Community, Professional o Enterprise)
-
SQL Server: 2016 o superior (Express, Standard o Enterprise)
-
.NET Framework: 4.7.2 o superior
-
SQL Server Management Studio (SSMS): Recomendado para administración de BD
-
Git: Para clonar el repositorio
-
BCrypt.Net-Next v4.0.3 - Hashing de contraseñas
-
iTextSharp v5.5.13.3 - Generación de PDFs
-
System.Configuration.ConfigurationManager v6.0.0
-
System.Data.SqlClient (incluido en .NET Framework)
-
Procesador: Intel Core i3 o equivalente
-
Memoria RAM: 4 GB
-
Espacio en Disco: 500 MB para la aplicación + espacio para base de datos
-
Resolución de Pantalla: 1366x768 o superior
git clone https://github.com/aka-titesen/SALC.git
cd SALC-
Abre SSMS y conéctate a tu instancia de SQL Server
-
Navega a la carpeta
Databasedel proyecto -
Ejecuta el script
estructura_salc_crear-tablas.sqlpara crear la base de datos -
Ejecuta el script
lote_salc_datos-ejemplos.sqlpara cargar datos de pruebas
# Navega a la carpeta de scripts
cd Database
# Ejecuta los scripts en orden
# Nota: Primero crear la base de datos manualmente o desde SSMS
sqlcmd -S localhost -d SALC -E -i estructura_salc_crear-tablas.sql
sqlcmd -S localhost -d SALC -E -i lote_salc_datos-ejemplos.sqlAbre la solución en Visual Studio:
# Navega a la carpeta de la solución
cd SALC
# Abre la solución (esto abrirá Visual Studio)
start SALC.slnEn Visual Studio:
-
Click derecho en la solución →
Restore NuGet Packages -
O desde el menú:
Tools→NuGet Package Manager→Manage NuGet Packages for Solution
Edita el archivo App.config:
<connectionStrings>
<add name="SALC"
connectionString="Server=localhost;Database=SALC;Integrated Security=true;"
providerName="System.Data.SqlClient"/>
</connectionStrings>Ajusta los valores según tu configuración:
-
Server: Nombre o IP de tu servidor SQL Server -
Database: Nombre de la base de datos (por defecto: SALC) -
Integrated Security=true: Para autenticación de Windows -
O usa
User Id=usuario;Password=contraseña;para autenticación SQL
El archivo App.config contiene las siguientes configuraciones principales:
<configuration>
<connectionStrings>
<!-- Cadena de conexión a la base de datos -->
<add name="SALC"
connectionString="Server=localhost;Database=SALC;Integrated Security=true;"
providerName="System.Data.SqlClient"/>
</connectionStrings>
<appSettings>
<!-- Configuración de logging -->
<add key="LogLevel" value="Info"/>
<add key="LogPath" value="Logs\salc.log"/>
<!-- Configuración de email (opcional) -->
<add key="SmtpHost" value="smtp.gmail.com"/>
<add key="SmtpPort" value="587"/>
<add key="SmtpEnableSSL" value="true"/>
<add key="SmtpUser" value="tu-email@gmail.com"/>
<add key="SmtpPassword" value="tu-contraseña-de-aplicacion"/>
</appSettings>
</configuration>Para habilitar el envío de informes por email:
-
Edita las claves
SmtpHost,SmtpPort,SmtpUserySmtpPasswordenApp.config -
Para Gmail, necesitas crear una "Contraseña de aplicación":
-
Ve a tu cuenta de Google → Seguridad
-
Activa "Verificación en 2 pasos"
-
Genera una "Contraseña de aplicación"
-
Usa esa contraseña en
SmtpPassword
-
El script de datos iniciales crea los siguientes usuarios de prueba:
| DNI | Rol | Contraseña | |
|---|---|---|---|
| 25111111 | Administrador | admin@salc.com | salc123 |
| 25111112 | Administrador | laura.campos@salc.com | salc123 |
| 30100101 | Médico | carlos.bianchi@salc.com | salc123 |
| 30100102 | Médico | ana.fernandez@salc.com | salc123 |
| 40100201 | Asistente | maria.becerra@salc.com | salc123 |
| 40100206 | Asistente | wos.valentin@salc.com | salc123 |
IMPORTANTE: Cambia estas contraseñas en un entorno de producción.
-
Instalar Workloads Necesarios:
-
.NET desktop development -
Data storage and processing(para herramientas de SQL Server)
-
-
Extensiones Recomendadas:
-
ReSharper (opcional, mejora la productividad)
-
CodeMaid (para limpieza de código)
-
GhostDoc (para generación de documentación XML)
-
-
Configurar EditorConfig (ya incluido en el proyecto):
El archivo .editorconfig define el estilo de código del proyecto
-
Abre la solución
SALC.slnen Visual Studio -
Visual Studio restaurará automáticamente los paquetes NuGet
-
Si no lo hace automáticamente:
-
Click derecho en la solución →
Restore NuGet Packages -
O presiona
Ctrl+Shift+Bpara compilar (restaura automáticamente)
-
En Visual Studio:
# Desde Tools → NuGet Package Manager → Package Manager Console
Update-Package -reinstall# Navega a la carpeta del proyecto
cd SALC/SALC
# Restaura los paquetes
nuget restore
# O usando dotnet CLI
dotnet restore# Navega a la carpeta de la solución
cd SALC
# Restaura con MSBuild
msbuild /t:restoreDespués de restaurar, verifica que todas las dependencias estén instaladas:
# Lista todos los paquetes instalados
nuget list -Source "C:\Users\[TuUsuario]\source\repos\SALC\packages"Deberías ver:
-
BCrypt.Net-Next.4.0.3
-
iTextSharp.5.5.13.3
-
System.Configuration.ConfigurationManager.6.0.0
Build → Build Solution (F7)
O
Build → Rebuild Solution (Ctrl+Shift+B)
# Compilación en modo Debug
msbuild SALC.sln /p:Configuration=Debug
# Compilación en modo Release
msbuild SALC.sln /p:Configuration=Release-
En Visual Studio:
-
Presiona
F5para ejecutar con depuración -
O presiona
Ctrl+F5para ejecutar sin depuración
-
-
Establecer Puntos de Interrupción:
-
Click en el margen izquierdo del editor de código
-
O presiona
F9en la línea deseada
-
-
Variables de Entorno de Debug (opcional):
-
Click derecho en el proyecto → Properties
-
Tab Debug → Environment variables
-
SALC/
├── .vs/ # Configuración de Visual Studio
├── bin/ # Ejecutables compilados
├── obj/ # Archivos de compilación
├── packages/ # Paquetes NuGet
├── Database/ # Scripts de base de datos
├── Docs/ # Documentación del proyecto
├── BLL/ # Capa de lógica de negocio
├── DAL/ # Capa de acceso a datos
├── Domain/ # Entidades del dominio
├── Infraestructura/ # Utilidades y servicios transversales
├── Presenters/ # Presentadores (patrón MVP)
├── Views/ # Formularios de Windows Forms
├── Properties/ # Propiedades del proyecto
├── App.config # Configuración de la aplicación
├── Program.cs # Punto de entrada
└── SALC.csproj # Archivo del proyecto
# Verifica que SQL Server esté ejecutándose
sc query MSSQLSERVER
# Verifica la cadena de conexión en App.config
# Prueba la conexión desde SSMS# Limpia la caché de NuGet
nuget locals all -clear
# Restaura nuevamente
nuget restore# Reinstala los paquetes
Update-Package -reinstall# Verifica que .NET Framework 4.7.2 esté instalado
# Reinstala las referencias del proyecto-
Ejecuta la aplicación
-
Ingresa tu DNI (solo números, sin puntos ni guiones)
-
Ingresa tu contraseña
-
Click en "Acceder"
Como administrador puedes:
-
Gestionar Usuarios:
-
Crear nuevos usuarios (Administrador, Médico, Asistente)
-
Editar información de usuarios existentes
-
Dar de baja usuarios (baja lógica)
-
Ver detalles completos de usuarios
-
-
Gestionar Catálogos:
-
Obras Sociales: Crear, editar y desactivar obras sociales
-
Tipos de Análisis: Definir tipos de análisis disponibles
-
Métricas: Configurar métricas con valores de referencia
-
Relaciones Tipo-Métrica: Asociar métricas a tipos de análisis (crear, modificar y eliminar asociaciones en
tipo_analisis_metrica)
-
-
Backups:
-
Ejecutar backups manuales de la base de datos
-
Seleccionar ubicación de almacenamiento
-
Ver historial de backups
-
-
Reportes Estadísticos Globales:
-
Productividad de Personal Médico: Análisis creados vs. verificados por cada profesional
-
Facturación por Obra Social: Distribución porcentual de análisis por cobertura
-
Demanda de Análisis: Top 10 de tipos de análisis más solicitados
-
Visualización mediante gráficos (columnas, torta, barras)
-
Filtros de período ajustables
-
Salud del Sistema:
-
Probar conexión a la base de datos
-
Ver estado del sistema
-
IMPORTANTE: El Administrador NO puede gestionar pacientes (ABM de pacientes es exclusivo de Médico y Asistente).
Como médico puedes:
-
Gestión de Pacientes:
-
Ver listado de todos los pacientes
-
Editar información de pacientes
-
Dar de baja lógica de pacientes (cambio de estado a "Inactivo")
-
Buscar y filtrar pacientes
-
-
Crear Análisis (Pestaña "Crear Análisis Clínico"):
-
Paso 1: Buscar y seleccionar paciente
-
Paso 2: Elegir tipo de análisis del catálogo
-
Paso 3: Agregar observaciones iniciales (opcional)
-
Crear el análisis (queda en estado "Sin verificar")
-
El DNI del médico se registra automáticamente en
dni_carga
-
-
Cargar Resultados (Pestaña "Cargar Resultados"):
-
Buscar análisis pendiente (estado "Sin verificar")
-
Cargar métricas específicas del tipo de análisis seleccionado
-
Ingresar resultados numéricos en la grilla editable
-
Agregar observaciones por métrica (opcional)
-
Guardar resultados en
analisis_metrica -
Importante: Solo se muestran las métricas configuradas para ese tipo de análisis
-
-
Validar y Firmar (Pestaña "Validar y Firmar"):
-
Buscar análisis con resultados cargados
-
Revisar todos los resultados en grilla de solo lectura
-
Confirmar la firma digital del análisis
-
El análisis cambia a estado "Verificado"
-
El DNI del médico se registra en
dni_firmay se establecefecha_firma -
Los resultados se vuelven inmutables (no se pueden modificar después de firmados)
-
-
Historial de Pacientes:
-
Ver listado completo de pacientes
-
Solo puede ver el historial detallado de análisis de pacientes asociados a análisis que él mismo cargó (
analisis.dni_carga)
-
-
Reportes de Calidad y Desempeño Personal:
-
Reporte de Alertas: Identificación de valores críticos (fuera de rango) que requieren seguimiento
-
Mi Carga de Trabajo: Análisis pendientes de verificar y análisis verificados en el mes actual
-
Visualización mediante tarjetas con indicadores numéricos grandes
-
Alertas mostradas en DataGridView con código de colores
-
Filtros de período para análisis temporal
Como asistente puedes:
-
Gestión de Pacientes:
-
Alta de pacientes: Registrar nuevos pacientes con todos sus datos
-
Modificación de pacientes: Editar información de pacientes existentes
-
Buscar pacientes
-
Ver listado de pacientes activos
-
Ver información completa de pacientes
-
-
Historial de Pacientes:
-
Seleccionar cualquier paciente
-
Ver el historial detallado de análisis de CUALQUIER paciente (sin restricciones)
-
Consultar resultados de análisis verificados
-
-
Generar y Enviar Informes:
-
Seleccionar análisis en estado "Verificado"
-
Generar PDF del informe médico
-
Guardar PDF en ubicación deseada
-
Enviar informe por email o teléfono al paciente
-
IMPORTANTE: El Asistente NO puede dar de baja pacientes. Solo puede dar de alta y modificar.
1. Asistente registra un nuevo paciente (Alta)
↓
2. Médico crea un análisis para ese paciente
↓
3. Médico carga los resultados de las métricas
↓
4. Médico valida y firma el análisis digitalmente (estado: "Verificado")
↓
5. Asistente busca el análisis verificado
↓
6. Asistente genera el informe PDF
↓
7. Asistente envía el informe por email al paciente
SALC/
│
├── BLL/ # Capa de Lógica de Negocio
│ ├── AnalisisService.cs # Servicio de análisis
│ ├── AutenticacionService.cs # Servicio de autenticación
│ ├── BackupService.cs # Servicio de backups
│ ├── CatalogoService.cs # Servicio de catálogos
│ ├── DefaultPasswordHasher.cs # Implementación de hashing BCrypt
│ ├── EmailService.cs # Servicio de envío de emails
│ ├── InformeService.cs # Servicio de generación de PDFs
│ ├── PacienteService.cs # Servicio de pacientes
│ ├── ReportesService.cs # Servicio de reportes
│ ├── UsuarioService.cs # Servicio de usuarios
│ ├── IAnalisisService.cs # Interfaces de servicios
│ ├── IAutenticacionService.cs
│ ├── IBackupService.cs
│ ├── ICatalogoService.cs
│ ├── IEmailService.cs
│ ├── IInformeService.cs
│ ├── IPasswordHasher.cs
│ ├── IPacienteService.cs
│ ├── IReportesService.cs
│ └── IUsuarioService.cs
│
├── DAL/ # Capa de Acceso a Datos
│ ├── AnalisisRepositorio.cs # Repositorio de análisis
│ ├── AnalisisMetricaRepositorio.cs # Repositorio de resultados
│ ├── AsistenteRepositorio.cs # Repositorio de asistentes
│ ├── BackupRepositorio.cs # Repositorio de backups
│ ├── CatalogoRepositorio.cs # Repositorio de catálogos
│ ├── MedicoRepositorio.cs # Repositorio de médicos
│ ├── ObraSocialRepositorio.cs # Repositorio de obras sociales
│ ├── PacienteRepositorio.cs # Repositorio de pacientes
│ ├── ReportesRepositorio.cs # Repositorio de reportes
│ ├── TipoAnalisisMetricaRepositorio.cs # Repositorio de relaciones
│ ├── UsuarioRepositorio.cs # Repositorio de usuarios
│ └── IRepositorioBase.cs # Interfaz base de repositorios
│
├── Domain/ # Capa de Dominio
│ ├── Analisis.cs # Entidad Análisis
│ ├── AnalisisMetrica.cs # Entidad Resultado
│ ├── Asistente.cs # Entidad Asistente
│ ├── Backup.cs # Entidad Backup
│ ├── EstadoAnalisis.cs # Entidad Estado
│ ├── EstadosConstantes.cs # Constantes de estados
│ ├── Medico.cs # Entidad Médico
│ ├── Metrica.cs # Entidad Métrica
│ ├── MetricaConResultado.cs # DTO para resultados
│ ├── ObraSocial.cs # Entidad Obra Social
│ ├── Paciente.cs # Entidad Paciente
│ ├── Rol.cs # Entidad Rol
│ ├── TipoAnalisis.cs # Entidad Tipo de Análisis
│ ├── TipoAnalisisMetrica.cs # Entidad Relación
│ └── Usuario.cs # Entidad Usuario
│
├── Infraestructura/ # Capa de Infraestructura
│ ├── DbConexion.cs # Conexión a base de datos
│ ├── DbHealth.cs # Health check de BD
│ ├── ExceptionHandler.cs # Manejador de excepciones
│ ├── Logger.cs # Sistema de logging
│ ├── SalcException.cs # Excepciones base
│ ├── SalcAuthorizationException.cs # Excepciones de autorización
│ ├── SalcBusinessException.cs # Excepciones de negocio
│ ├── SalcDatabaseException.cs # Excepciones de BD
│ └── SalcValidacionException.cs # Excepciones de validación
│
├── Presenters/ # Presentadores (MVP)
│ ├── GestionPacientesAsistentePresenter.cs
│ ├── LoginPresenter.cs
│ ├── PanelAdministradorPresenter.cs
│ ├── PanelAsistentePresenter.cs
│ ├── PanelMedicoPresenter.cs
│ ├── ReportesAdminPresenter.cs
│ ├── ReportesMedicoPresenter.cs
│ └── ViewsContracts/ # Interfaces de vistas
│ ├── IGestionPacientesAsistenteView.cs
│ ├── ILoginView.cs
│ ├── IPanelAdministradorView.cs
│ ├── IPanelAsistenteView.cs
│ ├── IPanelMedicoView.cs
│ ├── IReportesAdminView.cs
│ └── IReportesMedicoView.cs
│
├── Views/ # Vistas (Windows Forms)
│ ├── FrmLogin.cs # Formulario de login
│ ├── FrmPrincipalConTabs.cs # Ventana principal con pestañas
│ ├── FrmInicio.cs # Pantalla de inicio
│ ├── Compartidos/ # Controles compartidos
│ │ ├── SeleccionAnalisisControl.cs
│ │ └── SeleccionPacienteControl.cs
│ ├── PanelAdministrador/ # Vistas del administrador
│ │ ├── FrmPanelAdministrador.cs # Panel principal con 4 tabs
│ │ ├── FrmReportesAdmin.cs # Módulo de reportes BI
│ │ ├── FrmUsuarioEdit.cs
│ │ ├── FrmUsuarioDetalle.cs
│ │ ├── FrmObraSocialEdit.cs
│ │ ├── FrmTipoAnalisisEdit.cs
│ │ ├── FrmMetricaEdit.cs
│ │ └── FrmGestionRelacionesTipoAnalisisMetricas.cs
│ ├── PanelMedico/ # Vistas del médico
│ │ ├── FrmPanelMedico.cs # Panel principal con 4 tabs
│ │ ├── FrmReportesMedico.cs # Módulo de reportes personales
│ │ ├── FrmSeleccionPaciente.cs
│ │ ├── FrmSeleccionAnalisisResultados.cs
│ │ ├── FrmSeleccionAnalisisFirma.cs
│ │ ├── FrmDetalleAnalisis.cs
│ │ └── FrmGestionPacientes.cs # Gestión de pacientes por médico
│ └── PanelAsistente/ # Vistas del asistente
│ ├── FrmPanelAsistente.cs # Panel de consultas
│ ├── FrmGestionPacientes.cs # ABM de pacientes por asistente
│ ├── FrmPacienteEdit.cs
│ ├── FrmPacienteEditAsistente.cs
│ ├── FrmPacienteDetalle.cs
│ └── FrmHistorialPaciente.cs
│
├── Database/ # Scripts de base de datos
│ ├── estructura_salc_crear-tablas.sql # Script de creación de tablas
│ └── lote_salc_datos-ejemplos.sql # Script de datos de ejemplo
│
├── Docs/ # Documentación
│ ├── ERS/ # Especificación de Requisitos
│ │ └── ers-salc_ieee830v2.9.md # ERS versión 2.9
│ └── UserManual/ # Manual de Usuario
│ └── manual_de_usuario.md # Manual completo
│
├── Properties/ # Propiedades del proyecto
│ └── AssemblyInfo.cs
│
├── App.config # Configuración de la aplicación
├── Program.cs # Punto de entrada
├── BCryptTest.cs # Utilidad de prueba
└── SALC.csproj # Archivo del proyecto
El proyecto incluye una utilidad para verificar el funcionamiento correcto del algoritmo BCrypt:
// Desde el código
BCryptTest.TestBCrypt();Esta prueba verifica que las contraseñas de los usuarios de prueba puedan ser validadas correctamente.
-
Login:
-
Probar con credenciales válidas
-
Probar con credenciales inválidas
-
Verificar redirección según rol
-
-
Gestión de Pacientes:
-
Crear un paciente nuevo
-
Editar información de un paciente
-
Dar de baja un paciente
-
Buscar pacientes
-
-
Flujo de Análisis:
-
Crear un análisis
-
Cargar resultados
-
Firmar análisis
-
Generar informe PDF
-
-
Catálogos:
-
Crear obra social
-
Crear tipo de análisis
-
Crear métrica
-
Asociar métricas a tipos
-
// Desde el panel de administrador
// Click en "Probar Conexión BD"
var resultado = DbHealth.ProbarConexion();-
Validaciones:
-
Formato de DNI correcto
-
Email válido
-
Fechas coherentes
-
Valores numéricos en métricas
-
Campos requeridos completos
-
-
Seguridad:
-
Contraseñas hasheadas en BD
-
Sesión por usuario
-
Validación de permisos por rol
-
Manejo de errores sin exponer información sensible
-
-
Integridad Referencial:
-
No se puede eliminar usuario con análisis
-
No se puede eliminar paciente con análisis
-
No se puede eliminar tipo de análisis en uso
-
Baja lógica preserva relaciones
-
Si deseas contribuir a este proyecto, por favor sigue estos pasos:
Haz un fork del repositorio en GitHub.
git checkout -b feature/nueva-caracteristica
# o
git checkout -b fix/correccion-bug-
Seguir el patrón MVP existente
-
Documentar todo el código con comentarios XML
-
Usar PascalCase para clases y métodos
-
Usar camelCase para variables privadas con prefijo
_
Usa mensajes de commit descriptivos siguiendo Conventional Commits:
git commit -m "feat: agregar funcionalidad de exportación Excel"
git commit -m "fix: corregir validación de email"
git commit -m "docs: actualizar README con instrucciones"Tipos de commits:
-
feat: Nueva funcionalidad -
fix: Corrección de bug -
docs: Documentación -
style: Formato de código -
refactor: Refactorización -
test: Pruebas -
chore: Tareas de mantenimiento
git push origin feature/nueva-caracteristicaLuego abre un Pull Request en GitHub con:
-
Descripción clara de los cambios
-
Screenshots si aplica
-
Referencia a issues relacionados
-
Responde a comentarios del code review
-
Realiza los cambios solicitados
-
Mantén la conversación profesional
-
Mejoras en la UI/UX
-
Optimización de consultas SQL
-
Nuevos tipos de reportes
-
Exportación a otros formatos
-
Tests unitarios
-
Documentación adicional
-
Traducciones
-
Windows Forms: Framework de UI para .NET
-
DevExpress (opcional): Controles avanzados de UI
-
.NET Framework: 4.7.2
-
C#: Lenguaje de programación principal
-
ADO.NET: Acceso a datos
-
System.Data.SqlClient: Provider de SQL Server
-
SQL Server: 2016 o superior
-
T-SQL: Lenguaje de consultas
-
BCrypt.Net-Next: v4.0.3 - Hashing de contraseñas
-
Autenticación: Windows Authentication o SQL Authentication
- iTextSharp: v5.5.13.3 - Generación de PDFs
-
System.Net.Mail: Envío de emails
-
SMTP: Protocolo de correo
-
MVP: Model-View-Presenter
-
Repository Pattern: Para acceso a datos
-
Service Layer: Para lógica de negocio
-
Dependency Injection: Manual para desacoplamiento
-
Visual Studio: IDE principal
-
SQL Server Management Studio: Administración de BD
-
Git: Control de versiones
-
NuGet: Gestor de paquetes
- System.Configuration.ConfigurationManager: v6.0.0
El proyecto sigue el patrón arquitectónico MVP (Model-View-Presenter) que separa:
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ View │ ◄─────► │ Presenter │ ◄─────► │ Model │
│ (UI Forms) │ │ (Lógica de │ │ (BLL + DAL) │
│ │ │ Presenta- │ │ │
│ │ │ ción) │ │ │
└─────────────┘ └─────────────┘ └─────────────┘
Ventajas:
-
Testabilidad: La lógica está separada de la UI
-
Mantenibilidad: Cambios en UI no afectan la lógica
-
Reutilización: Los presentadores pueden usar diferentes vistas
┌──────────────────────────────────────┐
│ Presentation Layer │ ← Views (Windows Forms)
├──────────────────────────────────────┤
│ Presenter Layer │ ← Presenters (MVP)
├──────────────────────────────────────┤
│ Business Logic Layer (BLL) │ ← Services, Business Rules
├──────────────────────────────────────┤
│ Data Access Layer (DAL) │ ← Repositories, SQL
├──────────────────────────────────────┤
│ Domain Layer │ ← Entities, DTOs
├──────────────────────────────────────┤
│ Infrastructure Layer │ ← Logger, Exceptions, DB
└──────────────────────────────────────┘
Usuario interactúa con View
↓
View dispara evento
↓
Presenter maneja evento
↓
Presenter llama a Service (BLL)
↓
Service aplica lógica de negocio
↓
Service llama a Repository (DAL)
↓
Repository ejecuta query SQL
↓
Repository retorna entidades (Domain)
↓
Service procesa y retorna a Presenter
↓
Presenter actualiza View
↓
View muestra resultados al Usuario
-
Single Responsibility: Cada clase tiene una única responsabilidad
-
Open/Closed: Abierto a extensión, cerrado a modificación
-
Liskov Substitution: Las interfaces definen contratos claros
-
Interface Segregation: Interfaces específicas por funcionalidad
-
Dependency Inversion: Dependencia de abstracciones, no de implementaciones
El proyecto cuenta con documentación XML completa (100% de cobertura) en todos los archivos principales:
-
Comentarios XML: Todos los métodos, clases y propiedades públicas
-
IntelliSense: Ayuda contextual completa en Visual Studio
-
Especificación de Requisitos de Software: Ver ers-salc_ieee830v2.9.md
-
Manual de Usuario: Ver manual_de_usuario.md
Puedes generar documentación HTML usando herramientas como:
# Instalar DocFX
choco install docfx
# Generar documentación
docfx metadata
docfx build# Descargar Sandcastle Help File Builder
# Configurar proyecto y generar-
✅ Descripciones claras y concisas
-
✅ Parámetros y retornos documentados
-
✅ Excepciones documentadas
Este proyecto está bajo la Licencia MIT. Ver el archivo LICENSE para más detalles.
MIT License
Copyright (c) 2025 SALC - Sistema de Análisis de Laboratorio Clínico
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
-
GitHub: @aka-titesen
-
Repositorio: https://github.com/aka-titesen/SALC
Si encuentras un bug, por favor:
-
Verifica que no haya sido reportado previamente en Issues
-
Crea un nuevo issue con:
-
Título descriptivo
-
Pasos para reproducir
-
Comportamiento esperado vs actual
-
Screenshots si aplica
-
Versión del sistema operativo y SQL Server
-
Para solicitar nuevas funcionalidades:
-
Abre un issue con el tag
enhancement -
Describe la funcionalidad deseada
-
Explica el caso de uso
-
Adjunta mockups si tienes (opcional)
Gracias a todos los que han contribuido a este proyecto.
-
Microsoft por .NET Framework y SQL Server
-
BCrypt.Net por la librería de hashing seguro
-
iTextSharp por la generación de PDFs
-
Stack Overflow por la comunidad de desarrolladores
-
GitHub por la plataforma de colaboración
-
Metodología de desarrollo guiada por el patrón MVP
-
Mejores prácticas de arquitectura en capas
-
Estándares de la industria de software médico
Estado: ✅ Producción Ready Última Actualización: 2025 Versión: 1.0.0 Documentación: 100% Completa
Desarrollado con ❤️ para la gestión eficiente de laboratorios clínicos