MaincipitoApp es una aplicación web empresarial diseñada para la gestión clínica de pacientes ambulatorios en programas de hospitalización en casa, seguimiento de historias clínicas, registro y monitoreo de parámetros fisiológicos (signos vitales) y asignación de personal médico.
Originado como proyecto integrador en el programa Misión TIC 2022 (Universidad de Caldas), este repositorio ha sido completamente refactorizado y modernizado a .NET 8, adoptando Arquitectura N-Capas, el Patrón de Repositorio Genérico 100% Asíncrono (Async/Await), gobernanza de seguridad con Secret Manager (user-secrets) y persistencia en contenedor Microsoft SQL Server 2022 con Docker Compose.
La solución está estructurada bajo principios de separación de responsabilidades y Domain-Driven Design (DDD), dividida formalmente en src/ (código de producción) y tests/ (suite de pruebas automatizadas):
Maincipito/
├── src/
│ ├── Maincipito.Domain/ # Capa de Dominio pura: Entidades, Enums, Contratos de Repositorios (DIP)
│ ├── Maincipito.Persistence/ # Capa de Infraestructura: DbContext EF Core 8, Repositorios Async, Migraciones
│ └── Maincipito.Web/ # Capa de Presentación: ASP.NET Core 8 Razor Pages, Identity UI y Tokens de Diseño
└── tests/
├── Maincipito.Domain.Tests/ # Pruebas unitarias: Invariantes de dominio y validación DataAnnotations
└── Maincipito.Persistence.Tests/# Pruebas de integración: Repositorios aislados con EF Core InMemory DB
- Principio de Inversión de Dependencias (DIP): Las interfaces de persistencia (
IRepository<T>,IPatientRepository, etc.) residen en la capa de Dominio, mientras que las implementaciones de base de datos están aisladas en Persistencia, garantizando desacoplamiento del framework. - C# 12 Moderno: Adopción de File-scoped namespaces, análisis de nulabilidad estricto (
<Nullable>enable</Nullable>), Primary Constructors, Collection Expressions ([]) y Pattern Matching. - Acceso a Datos Asíncrono de Alto Rendimiento: Consultas optimizadas con
Task<T>,CancellationToken,AsNoTracking()para lecturas y mitigación de explosión cartesiana medianteQuerySplittingBehavior.SplitQuery. - Seguridad y Gestión de Secretos: Eliminación total de credenciales en código fuente mediante
dotnet user-secretsen desarrollo y parametrización con.envpara Docker.
| Gestión y Detalles del Paciente | Historia Clínica y Soporte de Decisiones |
|---|---|
![]() |
![]() |
| Acceso y Autenticación Segura | Registro de Pacientes |
|---|---|
![]() |
![]() |
| Componente | Tecnología |
|---|---|
| Lenguaje y Runtime | C# 12 / .NET 8.0 SDK |
| Presentación Web | ASP.NET Core 8 Razor Pages (Minimal Hosting en Program.cs) |
| Autenticación y Seguridad | ASP.NET Core Identity (Autenticación basada en cookies) |
| ORM y Persistencia | Entity Framework Core 8.0 (Microsoft.EntityFrameworkCore.SqlServer) |
| Motor de Base de Datos | Microsoft SQL Server 2022 (Linux Container vía Docker Compose) |
| Suite de Pruebas | xUnit, FluentAssertions, EF Core In-Memory Database Provider |
| Diseño y UI | Bootstrap 5, FontAwesome, Tokens de Diseño CSS con numeración tabular |
- .NET 8.0 SDK
- Docker Engine y Docker Compose
git clone https://github.com/Novav20/MaincipitoApp.git
cd MaincipitoApp# Copiar plantilla de variables de entorno
cp .env.example .env
# Levantar el contenedor de SQL Server 2022 en segundo plano
docker compose up -d# Configurar secretos del proyecto Web
dotnet user-secrets init --project src/Maincipito.Web
dotnet user-secrets set "ConnectionStrings:MyAppContext" "Server=localhost,1433;Database=MaincipitoAppDb;User Id=sa;Password=MaincipitoStrongPass2026!;TrustServerCertificate=True;MultipleActiveResultSets=true" --project src/Maincipito.Web
dotnet user-secrets set "ConnectionStrings:IdentityDataContextConnection" "Server=localhost,1433;Database=MaincipitoIdentityDb;User Id=sa;Password=MaincipitoStrongPass2026!;TrustServerCertificate=True;MultipleActiveResultSets=true" --project src/Maincipito.Web
# Configurar secretos del proyecto Persistence (para migraciones en tiempo de diseño)
dotnet user-secrets init --project src/Maincipito.Persistence
dotnet user-secrets set "ConnectionStrings:MyAppContext" "Server=localhost,1433;Database=MaincipitoAppDb;User Id=sa;Password=MaincipitoStrongPass2026!;TrustServerCertificate=True;MultipleActiveResultSets=true" --project src/Maincipito.Persistence# Aplicar migraciones del Dominio
dotnet ef database update --project src/Maincipito.Persistence --startup-project src/Maincipito.Persistence --context MaincipitoDbContext
# Aplicar migraciones de Seguridad e Identidad
dotnet ef database update --project src/Maincipito.Web --startup-project src/Maincipito.Web --context IdentityDataContextdotnet run --project src/Maincipito.WebAbre en tu navegador: http://localhost:5000 (o https://localhost:5001).
Ejecuta la suite completa de pruebas unitarias y de integración:
dotnet testEste proyecto es de código abierto y está disponible bajo la licencia MIT.



