1. Visión general del sistema
El sistema es una aplicación PHP tradicional basada en páginas procedurales y una capa central de negocio en la carpeta class/.
Componentes principales:
index.php: pantalla de bienvenida y formularios de inicio de sesión, recuperación de contraseña y contacto.menu.php: header, sidebar y navegación basada en sesión y rol.logout.php: cierre de sesión y destrucción de datos de sesión.class/classconexion.php: conexión PDO a MySQL con base de datosodontologia.class/class.php: claseLoginque contiene la mayor parte de la lógica de negocio.class/class.consultas.php: búsqueda / autocomplete JSON para productos, servicios, pacientes, especialistas y otros.funciones.php: endpoints AJAX dinámicos para selects, modales y listas de sucursales/usuarios.reportepdf.phpyreporteexcel.php: exportación de datos en PDF, Excel y Word.data.php: endpoints JSON para gráficos y panel de control.
2. Estructura del proyecto
Carpetas clave
class/: lógica de negocio, conexión a base de datos, utilidades y librerías externas como PHPMailer.template/: temas y estilos CSS/JS para la interfaz.assets/script/: scripts JavaScript de validación, máscaras y funciones UI.fotos/: imágenes de usuario y sucursales.
Patrones comunes
- Las páginas raíz incluyen
class/class.phpofunciones.phppara instanciarLogin. - Muchas páginas realizan acciones POST con
procesoo GET con parámetros cifrados usandoencrypt()/decrypt(). - Los módulos suelen listar datos, mostrar formularios y ofrecer exportes mediante
reportepdf/reporteexcel.
3. Flujo de autenticación
Inicio de sesión
Archivo: index.php
- Envía
proceso=loginal mismo archivo. - Campos principales:
usuario,password,codsucursal,tipo. tipose envía cifrado y puede ser:1: Administración (usuarios, secretarias, cajeros)2: Especialista3: Paciente
Función clave: Login::Logueo() en class/class.php
- Valida campos obligatorios.
- Consulta varias tablas con LEFT JOIN:
usuarios,accesosxsucursales,horarios,sucursales,documentos,departamentos,provincias,tiposmoneda. - Verifica
status, horario de acceso y contraseña usandopassword_verify(). - Crea sesión y almacena datos de usuario, sucursal y acceso.
- Registra el acceso en la tabla
log. - Redirige según el nivel a
panel.
Roles de sesión generados:
administradorGadministradorSsecretariacajeroespecialistapaciente
Recuperación de contraseña
index.phpenvíaproceso=recuperar.- La función
RecuperarPassword()enclass/class.phpmaneja la recuperación mediante correo. - El formulario solicita
emaily un tipo de ingreso cifrado (4,5,6).
Cierre de sesión
Archivo: logout.php
session_start()y limpieza completa de$_SESSION.- Elimina cookie de sesión y redirige a
index.
4. Menú y navegación dependiente de usuario
Archivo: menu.php
- Solo se muestra si existe
$_SESSION['acceso']y es uno de los roles permitidos. - Obtiene un conteo de registros con
Login::ContarRegistros(). - Presenta topbar con información de sucursal en roles de sucursal.
- Muestra perfil de usuario, fallbacks de avatar y acceso a
perfil,password,bloqueoylogout. - Construye la navegación lateral con items según
$_SESSION['acceso']. - Ejemplos de módulos en el menú:
- Usuarios, horarios, logs
- Configuración, departamentos, provincias, documentos, monedas, impuestos
- Sucursales, canales, mensajes
- Productos, categorías, marcas, presentaciones, medidas
- Proveedores, compras, kardex, inventarios
- Pacientes, citas, odontología, facturación, cotizaciones, ventas
5. Funciones de ayuda y endpoints AJAX
Archivo: funciones.php
- Extiende
Dba través deLogin. - Incluye
class.phpmailer.phpyclass.smtp.phppara correo. - Contiene endpoints GET dinámicos:
BuscaProvinciasySeleccionaProvincia: listas dependientes de departamentos.BuscaUsuarioModal: muestra detalles de un usuario en un modal.BuscaUsuariosxSucursal/MuestraUsuario: select de usuarios por sucursal.MuestraSucursalesUsuarios/MuestraSucursalesAsignadasxUsuarios: checkboxes de sucursales.BuscaMensajeModal: detalles de un mensaje de contacto.- Usa métodos de
LogincomoListarProvinciasXDepartamento(),UsuariosPorId(),BuscarUsuariosxSucursal(),MensajesPorId().
6. Capa de datos y clases principales
class/classconexion.php
- Clase
Dbcon conexión PDO amysql:host=localhost;dbname=odontologia. - Usuario:
root, contraseña:111081. - Ajusta timezone
America/La_PazySET NAMES utf8. - Método
SetNames()aplica codificación UTF-8.
class/class.php
- Clase
LoginextiendeDb. - Aquí se concentra la lógica de negocio para:
- Autenticación y sesiones
- Recuperación y actualización de contraseñas
- Configuración general
- CRUD de usuarios, pacientes, especialistas, proveedores, productos, servicios, citas, odontología
- Registro de ventas, kardex, facturas y detalles de factura
- Búsquedas y listados con filtros de sucursal y rol
- Gráficos y estadísticas para dashboard
- Ejemplos de métodos relevantes:
Logueo()RecuperarPassword()ActualizarPassword()ConfiguracionPorId()ActualizarConfiguracion()EnviarMensaje()ListarUsuarios(),UsuariosPorId()RegistrarOdontologia(),RegistrarHojaEvolutiva()BusquedaOdontologia(),ListarOdontologia(),OdontologiaPorId()VerDetallesOdontologia(),RecetaPorId()GraficoxSucursal(),SumaCompras(),SumaCotizaciones(),SumaVentas(),SumaIngresos(),SumaEgresos(),ProductosMasVendidos(),VentasxUsuarios(),ContarRegistros()
class/class.consultas.php
- Clase
conectorDBextiendeDby ejecuta consultas genéricas. - Clase
Jsonprovee búsquedas de autocompletado: BuscaMedida($filtro)BuscaProductoC($filtro)BuscaProductoV($filtro)BuscaServicio($filtro)BuscaCie10($filtro)BuscaPacientes($filtro)BuscaEspecialistas($filtro)
class/funciones_basicas.php
- Funciones utilitarias clave usadas en todo el proyecto:
limpiar($tags)encrypt($string)/decrypt($string)GenerateRandomString()/GenerateRandomStringg()formatear(),fechas(),numtoletras()
7. Flujo de odontología / registro de consultas
Archivo principal: odontologia.php y forodontologia.php.
Login::RegistrarOdontologia()
- Validaciones iniciales de campos obligatorios.
- Verifica duplicados en diagnósticos presuntivos y definitivos.
- Valida existencia de productos en inventario cuando hay
$_SESSION["CarritoDetalles"]. - Controla si ya existe una consulta odontológica hoy para el especialista/paciente en la sucursal.
- Genera código de venta, factura y autorización usando datos de
sucursales. - Inserta en
ventas,detalle_ventas, actualizaproductosy escribe enkardex. - Crea un nuevo registro en
odontologiay luego endetalle_odontologia. - Actualiza el estado de
referenciasodontogramaa1y marcacitascomoVERIFICADA. - Genera apertura de reporte PDF
reportepdf?tipo=FICHAODONTOLOGICA.
Login::RegistrarHojaEvolutiva()
- Similar a
RegistrarOdontologia()pero para sesiones adicionales. - Requiere que exista odontología previa para el paciente.
- Registra nueva sesión en
detalle_odontologia. - Actualiza estado de cita a
VERIFICADA.
Login::BusquedaOdontologia() y Login::ListarOdontologia()
- Usan SQL extensas con múltiples LEFT JOIN para traer datos de sucursal, especialista, paciente, moneda y documentos.
- Filtran resultados según el rol:
administradorGpuede ver todos.especialistasolo ve su sucursal y su especialista.- otros roles ven por
codsucursalactual.
Login::OdontologiaPorId(), VerDetallesOdontologia(), RecetaPorId()
- Traen información detallada por
cododontologiaycodsucursal. - Usan
decrypt($_GET['cododontologia'])ydecrypt($_GET['codsucursal']).
8. Exportación y reportes
reportepdf.php
- Usa
fpdf/pdf.phppara generar PDF. - Recibe
tipoydocumentocifrados condecrypt(). - Mapea
tipoa funciones de generación de tabla dentro deLogin. - Ejemplos de tipos:
USUARIOS,HORARIOSUSUARIOS,HORARIOSESPECIALISTAS,LOGS,DEPARTAMENTOS,PROVINCIAS,DOCUMENTOS,TIPOMONEDA,IMPUESTOS,MENSAJES,SUCURSALES,TRATAMIENTOS,CANALES,CATEGORIAS,MARCAS,PRESENTACIONES,MEDIDAS,ESPECIALISTAS,PACIENTES,PROVEDORES,SERVICIOS, etc.
reporteexcel.php
- Genera salidas HTML con cabeceras
application/vnd.ms-EXCELoapplication/vnd.ms-DOC. - Soporta los mismos
tipode exporte para Excel/Word. - Cada caso imprime una tabla con columnas específicas.
9. Dashboard y datos JSON
Archivo: data.php
- Genera JSON para gráficos y paneles.
- Funciones usadas:
GraficoxSucursal()=> ventas, compras, cotizaciones por sucursal.ProductosMasVendidos()=> top 5 productos.VentasxUsuarios()=> ventas por usuario.SumaCompras(),SumaCotizaciones(),SumaVentas(),SumaIngresos(),SumaEgresos()=> series mensuales.ContarRegistros()=> conteos de sucursales, usuarios, productos, pacientes, proveedores, inventario mínimo, vencidos y créditos vencidos.
10. Relaciones y tablas principales detectadas
Tablas clave en el modelo de datos:
usuarios,accesosxsucursales,horariossucursales,documentos,departamentos,provincias,tiposmoneda,tiposcambioespecialistas,pacientes,canales,mensajesproductos,categorias,marcas,presentaciones,medidasproveedores,compras,detalle_compras,kardexservicios,cotizaciones,ventas,detalle_ventascitas,odontologia,detalle_odontologia,referenciasodontograma,recetaslog,arqueocaja,cajas