Documentación de ayuda del sistema Odontología

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 datos odontologia.
  • class/class.php: clase Login que 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.php y reporteexcel.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.php o funciones.php para instanciar Login.
  • Muchas páginas realizan acciones POST con proceso o GET con parámetros cifrados usando encrypt()/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=login al mismo archivo.
  • Campos principales: usuario, password, codsucursal, tipo.
  • tipo se envía cifrado y puede ser:
  • 1: Administración (usuarios, secretarias, cajeros)
  • 2: Especialista
  • 3: 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 usando password_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:

  • administradorG
  • administradorS
  • secretaria
  • cajero
  • especialista
  • paciente

Recuperación de contraseña

  • index.php envía proceso=recuperar.
  • La función RecuperarPassword() en class/class.php maneja la recuperación mediante correo.
  • El formulario solicita email y 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, bloqueo y logout.
  • 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 Db a través de Login.
  • Incluye class.phpmailer.php y class.smtp.php para correo.
  • Contiene endpoints GET dinámicos:
  • BuscaProvincias y SeleccionaProvincia: 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 Login como ListarProvinciasXDepartamento(), UsuariosPorId(), BuscarUsuariosxSucursal(), MensajesPorId().

6. Capa de datos y clases principales

class/classconexion.php

  • Clase Db con conexión PDO a mysql:host=localhost;dbname=odontologia.
  • Usuario: root, contraseña: 111081.
  • Ajusta timezone America/La_Paz y SET NAMES utf8.
  • Método SetNames() aplica codificación UTF-8.

class/class.php

  • Clase Login extiende Db.
  • 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 conectorDB extiende Db y ejecuta consultas genéricas.
  • Clase Json provee 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, actualiza productos y escribe en kardex.
  • Crea un nuevo registro en odontologia y luego en detalle_odontologia.
  • Actualiza el estado de referenciasodontograma a 1 y marca citas como VERIFICADA.
  • 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:
  • administradorG puede ver todos.
  • especialista solo ve su sucursal y su especialista.
  • otros roles ven por codsucursal actual.

Login::OdontologiaPorId(), VerDetallesOdontologia(), RecetaPorId()

  • Traen información detallada por cododontologia y codsucursal.
  • Usan decrypt($_GET['cododontologia']) y decrypt($_GET['codsucursal']).

8. Exportación y reportes

reportepdf.php

  • Usa fpdf/pdf.php para generar PDF.
  • Recibe tipo y documento cifrados con decrypt().
  • Mapea tipo a funciones de generación de tabla dentro de Login.
  • 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-EXCEL o application/vnd.ms-DOC.
  • Soporta los mismos tipo de 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, horarios
  • sucursales, documentos, departamentos, provincias, tiposmoneda, tiposcambio
  • especialistas, pacientes, canales, mensajes
  • productos, categorias, marcas, presentaciones, medidas
  • proveedores, compras, detalle_compras, kardex
  • servicios, cotizaciones, ventas, detalle_ventas
  • citas, odontologia, detalle_odontologia, referenciasodontograma, recetas
  • log, arqueocaja, cajas