Sistema web de gestiΓ³n de citas mΓ©dicas con autenticaciΓ³n por roles, diseΓ±ado para clΓnicas y consultorios. Permite a pacientes agendar citas, a doctores gestionar su agenda y a administradores controlar el sistema completo.
- CaracterΓsticas
- TecnologΓas
- Arquitectura
- Estructura del proyecto
- Requisitos previos
- InstalaciΓ³n y configuraciΓ³n
- API Reference
- Roles y permisos
- Base de datos
- Variables de entorno
- AutenticaciΓ³n segura con contraseΓ±as hasheadas usando BCrypt
- Sistema de roles β paciente, doctor y administrador con dashboards independientes
- Agendamiento de citas con selecciΓ³n de doctor, especialidad, fecha y hora
- Historial mΓ©dico por paciente
- GestiΓ³n de facturas y pagos
- Notificaciones del sistema
- Soporte tΓ©cnico mediante tickets
- RecuperaciΓ³n de contraseΓ±a por correo electrΓ³nico
- Registro de auditorΓa para trazabilidad de acciones
| TecnologΓa | VersiΓ³n | Uso |
|---|---|---|
| .NET | 8.0 | Framework principal de la API |
| ASP.NET Core Minimal API | 8.0 | Endpoints REST |
| Entity Framework Core | 9.0 | ORM para acceso a datos |
| Pomelo.EntityFrameworkCore.MySql | 9.0.0 | Conector MySQL para EF Core |
| BCrypt.Net-Next | 4.0.3 | Hash seguro de contraseΓ±as |
| TecnologΓa | Uso |
|---|---|
| HTML5 | Estructura de vistas |
| CSS3 | Estilos y diseΓ±o responsivo |
| JavaScript (Vanilla) | LΓ³gica del cliente y llamadas a la API |
| TecnologΓa | VersiΓ³n |
|---|---|
| MySQL | 8.0+ |
El proyecto sigue una arquitectura cliente-servidor desacoplada:
βββββββββββββββββββββββββββββββββββββββ
β Frontend (Static) β
β HTML + CSS + JS β fetch() API β
ββββββββββββββββ¬βββββββββββββββββββββββ
β HTTP / JSON
βΌ
βββββββββββββββββββββββββββββββββββββββ
β ASP.NET Core Minimal API β
β /api/register /api/login β
ββββββββββββββββ¬βββββββββββββββββββββββ
β Entity Framework Core
βΌ
βββββββββββββββββββββββββββββββββββββββ
β MySQL 8.0+ β
β clinic_control DB β
βββββββββββββββββββββββββββββββββββββββ
El frontend consume la API REST mediante fetch(). Tras el login, el rol del usuario se almacena en localStorage y se redirige al dashboard correspondiente.
cliniccontrol/
β
βββ ClinicControl/ # Proyecto ASP.NET Core (API)
β βββ Program.cs # ConfiguraciΓ³n y endpoints de la API
β βββ appsettings.json # ConfiguraciΓ³n de la aplicaciΓ³n
β βββ appsettings.Development.json
β βββ ClinicControl.csproj # Dependencias NuGet
β
βββ Data/
β βββ AppDbContext.cs # Contexto de Entity Framework
β
βββ Models/
β βββ User.cs # Modelos de dominio (User, RegisterRequest)
β
βββ css/
β βββ style.css # Estilos globales
β
βββ js/
β βββ login.js # LΓ³gica de autenticaciΓ³n
β βββ script.js # LΓ³gica de registro
β
βββ img/
β βββ CCIMG.jpeg # Logo de la aplicaciΓ³n
β βββ profile.jpeg # Imagen de perfil por defecto
β
βββ index.html # PΓ‘gina de bienvenida
βββ login.html # Formulario de inicio de sesiΓ³n
βββ register.html # Formulario de registro
βββ forgot-password.html # RecuperaciΓ³n de contraseΓ±a
βββ dashboard-admin.html # Panel del administrador
βββ dashboard-doctor.html # Panel del doctor
βββ dashboard-patient.html # Panel del paciente (agendar citas)
β
βββ Program.cs # Entrada alternativa de la API (raΓz)
βββ .env.example # Plantilla de variables de entorno
βββ .gitignore
βββ README.md
- .NET 8 SDK
- MySQL 8.0+
- Navegador web moderno
- (Opcional) PHP 8+ si se usa
register.phpcomo alternativa
git clone https://github.com/t24steven/cliniccontrol.git
cd cliniccontrolCrea la base de datos en MySQL ejecutando el script de esquema (disponible localmente como DBCC.txt):
CREATE DATABASE IF NOT EXISTS clinic_control
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;El script crea las siguientes tablas: users, patients, doctors, doctor_schedules, appointments, medical_history, invoices, notifications, audit_logs, support_tickets.
Copia el archivo de ejemplo y completa tus credenciales:
cp .env.example .envO edita directamente ClinicControl/appsettings.json:
{
"ConnectionStrings": {
"DefaultConnection": "Server=localhost;Database=clinic_control;Uid=root;Pwd=TU_PASSWORD;"
}
}cd ClinicControl
dotnet restore
dotnet runLa API quedarΓ‘ disponible en http://localhost:5127.
Abre index.html directamente en el navegador o sΓrvelo con cualquier servidor estΓ‘tico:
# Con Python
python -m http.server 8080
# Con Node.js (npx)
npx serve .Base URL: http://localhost:5127
Verifica que la API estΓ© funcionando.
Response:
API funcionando - Endpoints: /api/register y /api/login
Registra un nuevo usuario en el sistema.
Request body:
{
"name": "Juan",
"lastName": "PΓ©rez",
"email": "juan@example.com",
"password": "MiPassword123",
"role": "patient"
}
roleacepta:patient,doctor,admin
Response exitosa 200:
{
"success": true,
"message": "Usuario registrado",
"userId": 1
}Response de error 400:
{
"success": false,
"message": "Email ya registrado"
}Autentica a un usuario existente.
Request body:
{
"email": "juan@example.com",
"password": "MiPassword123"
}Response exitosa 200:
{
"success": true,
"message": "Login exitoso",
"userId": 1,
"email": "juan@example.com",
"role": "patient"
}Response de error 400:
{
"success": false,
"message": "Email o contraseΓ±a incorrectos"
}| Rol | Dashboard | Acceso |
|---|---|---|
patient |
dashboard-patient.html |
Agendar citas, ver historial, pagos, notificaciones, soporte |
doctor |
dashboard-doctor.html |
Ver citas del dΓa, historial de pacientes, perfil |
admin |
dashboard-admin.html |
GestiΓ³n de usuarios, doctores, citas, reportes y configuraciΓ³n |
Tras el login, el rol se guarda en localStorage y el frontend redirige automΓ‘ticamente al dashboard correspondiente.
users βββββββ¬ββββ patients
βββββ doctors ββββ doctor_schedules
βββββ notifications
patients ββββ¬ββββ appointments ββββ medical_history
βββββ invoices βββββ audit_logs
users βββββββββββ support_tickets
| Tabla | DescripciΓ³n |
|---|---|
users |
AutenticaciΓ³n y roles de todos los usuarios |
patients |
Datos personales y mΓ©dicos de pacientes |
doctors |
Perfil profesional y especialidad de doctores |
doctor_schedules |
Horarios de disponibilidad por dΓa de la semana |
appointments |
Citas mΓ©dicas programadas |
medical_history |
DiagnΓ³sticos, tratamientos y prescripciones |
invoices |
Facturas y estado de pagos |
notifications |
Alertas y recordatorios del sistema |
audit_logs |
Registro de acciones para trazabilidad |
support_tickets |
Tickets de soporte tΓ©cnico |
Copia .env.example como .env y completa los valores. El archivo .env nunca debe subirse al repositorio.
| Variable | DescripciΓ³n | Valor por defecto |
|---|---|---|
DB_SERVER |
Host del servidor MySQL | localhost |
DB_NAME |
Nombre de la base de datos | clinic_control |
DB_USER |
Usuario de MySQL | root |
DB_PASSWORD |
ContraseΓ±a de MySQL | (vacΓo) |
Alternativamente, define la connection string completa en appsettings.json bajo la clave ConnectionStrings:DefaultConnection.
Este proyecto es de uso acadΓ©mico / educativo.