Skip to content

t24steven/cliniccontrol

Repository files navigation

πŸ₯ Clinic Control

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.


πŸ“‹ Tabla de contenidos


✨ Características

  • 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Γ­as

Backend

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

Frontend

TecnologΓ­a Uso
HTML5 Estructura de vistas
CSS3 Estilos y diseΓ±o responsivo
JavaScript (Vanilla) LΓ³gica del cliente y llamadas a la API

Base de datos

TecnologΓ­a VersiΓ³n
MySQL 8.0+

πŸ— Arquitectura

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.


πŸ“ Estructura del proyecto

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

βœ… Requisitos previos


πŸš€ InstalaciΓ³n y configuraciΓ³n

1. Clonar el repositorio

git clone https://github.com/t24steven/cliniccontrol.git
cd cliniccontrol

2. Configurar la base de datos

Crea 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.

3. Configurar la conexiΓ³n a la base de datos

Copia el archivo de ejemplo y completa tus credenciales:

cp .env.example .env

O edita directamente ClinicControl/appsettings.json:

{
  "ConnectionStrings": {
    "DefaultConnection": "Server=localhost;Database=clinic_control;Uid=root;Pwd=TU_PASSWORD;"
  }
}

4. Restaurar dependencias y ejecutar la API

cd ClinicControl
dotnet restore
dotnet run

La API quedarΓ‘ disponible en http://localhost:5127.

5. Abrir el frontend

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 .

πŸ“‘ API Reference

Base URL: http://localhost:5127

GET /

Verifica que la API estΓ© funcionando.

Response:

API funcionando - Endpoints: /api/register y /api/login

POST /api/register

Registra un nuevo usuario en el sistema.

Request body:

{
  "name": "Juan",
  "lastName": "PΓ©rez",
  "email": "juan@example.com",
  "password": "MiPassword123",
  "role": "patient"
}

role acepta: patient, doctor, admin

Response exitosa 200:

{
  "success": true,
  "message": "Usuario registrado",
  "userId": 1
}

Response de error 400:

{
  "success": false,
  "message": "Email ya registrado"
}

POST /api/login

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"
}

πŸ‘₯ Roles y permisos

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.


πŸ—„ Base de datos

Diagrama de tablas principales

users ──────┬──── patients
            β”œβ”€β”€β”€β”€ doctors ──── doctor_schedules
            └──── notifications

patients ───┬──── appointments ──── medical_history
            └──── invoices          └──── audit_logs

users ──────└──── support_tickets

Tablas

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

πŸ” Variables de entorno

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.


πŸ“„ Licencia

Este proyecto es de uso acadΓ©mico / educativo.

About

πŸ₯ Medical appointment management system β€” HTML + CSS + JS + C# + SQL

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Contributors