Commit Graph

62 Commits

Author SHA1 Message Date
7b54e40104 Agenda: colores de estado mas fuertes y boton de En curso
- Badge y bloques de la cuadricula: cada estado con su color propio y
  fuerte (pendiente=ambar, confirmada=esmeralda, llego/en cabina=cielo,
  en curso=violeta, completada=gris, cancelo/no show=rosa). Antes varios
  compartian tonos pastel casi iguales. La leyenda del grid usa los
  mismos colores.
- badgeForAppointmentState: llego e en_curso tenian variant de pendiente
  (se veian igual); ahora arrived y progress, y no_show/waitlist tienen
  las suyas.
- Boton 'Marcar en curso' (accion start del backend) en las acciones
  rapidas de la vista de lista y tarjetas moviles, entre Llegada y
  Completar.
- Mini-checklist del flujo en el tooltip de la cuadricula (solo lectura;
  click abre el detalle con el checklist completo interactivo).
2026-09-29 23:11:58 +00:00
5385fc3a53 Auditoria de plataforma: rutas rotas y errores por rol
Recorrido dinamico de las 26 rutas con los 10 roles (260 visitas con
navegador real) mas revision estatica de endpoints FE vs BE. Hallazgos
y correcciones:

- frontend.py: expedientes_recientes no tenia @http.route (el endpoint
  /expedientes-recientes respondia 404). Se expone con GET + lectura.
- auth.py: MEDICO_BLOCKED_PREFIXES hacia match por startswith, asi que
  /sales_goal quedaba bloqueado para medicos (403 en consola en todas
  las pantallas por el widget de meta del mes). Ahora el match exige
  frontera de path (/sales bloquea /sales/x pero no /sales_goal).
- Reportes: getCommissions (endpoint admin-only) iba dentro de un
  Promise.all; el 403 tumbaba todo el tab General para recepcion,
  gerencia, enfermeria, psicologa, farmacia y lectura. Ahora va en
  peticion aislada y solo se llama para admin; la seccion de comisiones
  del tab General solo se renderiza para admin.
- Matriz de menus guardada: medico habia quedado fuera de /pacientes
  y /visitas (los defaults del codigo lo incluyen y los medicos lo
  necesitan para ver clientes e historial). Restaurado via PUT
  /roles/permissions (queda en skeen_config_audit).

Verificado con navegador: medico entra a /pacientes y /visitas sin
403; recepcion y gerencia cargan /reportes sin error; admin sigue
viendo la seccion de comisiones. Usuarios temporales de auditoria
eliminados.
2026-09-28 21:13:38 +00:00
a4358ada15 Fix: crash (React #310) al abrir informacion de un paciente
useClinicaPrint() quedaba despues de un return condicional en
EstadoCuentaPrint, ReciboPrint, CortePrint y ConteoPrint (migracion de
clinicSettings del punto 11). Al pasar de paciente null a uno real el
numero de hooks cambiaba entre renders y React tumaba la pantalla con
'Minified React error #310'. El hook ahora va antes de cualquier return
condicional en los 4 componentes.
2026-09-28 20:18:58 +00:00
89429aee9b Login: evitar pantalla en blanco al arrancar
- ErrorBoundary global: si un modulo falla al renderizar se muestra un
  mensaje amable con recargar en lugar de pantalla en blanco.
- El bootstrap de auth ya no se queda cargando para siempre: si /auth/me
  no responde en 20 s (red lenta o tunel caido) se muestra una pantalla
  de reintento. Si la red fallo se conserva la sesion; solo se descarta
  el token cuando el servidor contesta (401).
2026-09-28 19:52:23 +00:00
72f12946c3 Punto 11: editor de diseno de tickets en Configuracion > Tickets
- Nuevo modelo skeen.ticket.config (AbstractModel) con layout, datos de clinica
  y logo en ir.config_parameter; _mezclar() hace que layouts viejos hereden las
  secciones nuevas; _validar() rechaza valores imposibles y textos largos.
- Endpoints GET/PUT /ticket_config, PUT /ticket_config/clinica,
  POST /ticket_config/reset (reset solo admin) con auditoria en skeen_config_audit.
- Los datos de la clinica pasan de localStorage (cada caja imprimia distinto)
  a configuracion compartida en el servidor.
- TicketDoc.tsx renderiza segun el diseno: ancho 58/80mm, fuente, tamano de letra,
  separador, mayusculas, orden de bloques y 29 secciones activables.
- TicketDesigner.tsx: editor completo con vista previa en vivo, reorden de bloques,
  textos personalizables y carga de logo.
- TicketPrint.tsx ahora es un wrapper de TicketDoc; ReciboPrint, EstadoCuentaPrint,
  RecetaPrint, CortePrint y ConteoPrint usan useClinicaPrint().
- _sale_to_dict expone telefono del paciente, medico que atendio y datos de paquete;
  pos_checkout devuelve recibido/cambio en MXN y USD para imprimirlos.
2026-09-24 18:19:51 +00:00
e89bcdca3a Punto 7: gerencia puede corregir tickets sin cancelarlos (lineas, precios, descuento y notas) con ajuste automatico de monedero e inventario 2026-09-24 17:53:22 +00:00
dcf2c367f1 Puntos 16 y 10: modulo de paquetes de sesiones (catalogo, saldo por paciente, descuento en agenda, venta en POS) + fix de auditoria silenciosa 2026-09-24 17:17:29 +00:00
Kimi
09b4f25bb8 Punto 13: alta/baja de médicos desde el módulo Médicos
- Columna 'Estado' con switch Activo/Baja (confirmación previa) y checkbox
  'Mostrar dados de baja' para poder reactivar.
- GET /doctors solo devuelve activos; include_inactive=1 para la pantalla de
  Médicos. Cada médico expone su campo 'active'.
- Reglas en modelo: un empleado dado de baja no admite citas nuevas
  (skeen.cita), ni asignación de pacientes (res.partner.primary_doctor_id),
  ni líneas de venta (skeen.venta.line.prescribed_by_id). El historial
  existente no se toca: los constraints solo corren cuando cambia la
  asignación.
- ValidationError se responde 400 con mensaje legible en pacientes y ventas.
- fix: badges de estado de cita en agenda y dashboard usan la etiqueta de la
  clínica en lugar del valor técnico.
2026-09-24 16:03:02 +00:00
Kimi
d0eac00a40 Agenda: cierre rápido de agendas por médico, lista de espera, duraciones 30/45/60, checklist de estados con bitácora y auto-refresh 30s
- BloqueosModal: alta multi-médico, rango repetible por día de la semana,
  motivos predefinidos, edición/borrado y cierre rápido desde la cabecera
  de cada columna (todo el día / resto del día / rango).
- skeen.lista.espera + panel y modal en la agenda: prioridad, franja, rango
  de fechas, agendar precargado, avisar por WhatsApp y aviso cuando se
  libera un hueco compatible.
- duration en skeen.cita (0 = la del servicio): la cita ocupa sus bloques de
  15 min reales en las 4 vistas, con celdas de continuación.
- Checklist de estados (Agendada → Confirmada → En cabina → En consulta →
  Completada) con avance/retroceso, cancelación y no-show con confirmación,
  y bitácora de quién/cuándo en skeen.cita.state.log.
- Etiquetas del sistema legacy alineadas (Canceló / Lista de espera / En
  cabina) en badges de agenda y dashboard.
- Auto refresco silencioso cada 30 s (pausable, se pospone con modales,
  escritura o drag) en citas + bloqueos + lista de espera en un solo request.
2026-09-24 15:46:38 +00:00
e32a79084a Fix IA (max_tokens del modelo de razonamiento + fallback al gateway), sidebar con toggle arriba, busqueda de un solo campo (paciente/global), editar expediente, marketing en visitas, responsive de agenda; doc de diagnostico WhatsApp 2026-09-24 10:01:55 +00:00
d75411f0d9 POS vista lista, modulo Tickets para gerencia con cancelacion auditada, y saldo a favor (recargas de anticipo desde expediente y agenda, canje en POS) 2026-09-18 04:25:33 +00:00
cebf8d663d Permisos: marketing (export completo, agenda/citas, cumpleanos, visitas, WACRM), gerencia gestiona usuarios y roles, recepcion edita expedientes, cosmetologas ven agenda, fix del sidebar que no dejaba seleccionar Leads 2026-09-18 03:23:44 +00:00
c38783eb31 Oleada UX 7: Chat (presencia, busqueda en historial) y WACRM (metricas para gerencia, notas internas y etiquetas que sobreviven al sync) + fixes de concurrencia 2026-09-17 23:46:40 +00:00
31c92ac419 Oleada UX 6: Reportes agrupados en familias con rango global persistente y favoritos; Configuracion con auditoria de cambios y simulador de comisiones 2026-09-17 22:06:11 +00:00
cd945df6a5 Oleada UX 5: Servicios (duplicar, favoritos y orden para POS, mas vendidos) y Medicos (semana tipo con validacion en agenda, meta mensual con progreso) 2026-09-17 21:28:43 +00:00
9ee3343e22 Oleada UX 4: Pagos/Adeudos (cobro en 1 click con recibo, plan de pagos), Monedero (movimientos narrados, ajustes auditados, MXN+USD), Inventario (alta rapida, conteo fisico con ajuste e historial, alertas accionables) + fix de folios de pago y cantidades de movimientos 2026-09-17 20:31:52 +00:00
ac5896b1fc Oleada UX 3: POS (repetir ultima venta, aviso de paquetes, atajos, caja desde POS), Ventas (cancelacion auditada con reversion de monedero y stock, detalle inline, presets de fecha), Cortes (historial comparativo y export) 2026-09-17 19:26:02 +00:00
b4f91527f1 Oleada UX 2: Agenda (mensajes de conflicto humanos, imprimir agenda del dia, confirmacion en lote, prefs persistentes) y Pacientes (acciones en ficha, timeline unificada, aviso de telefono duplicado) + fixes de precarga e impresion 2026-09-17 18:47:35 +00:00
afc208a7b7 UX Dashboard: fila Hoy en la clinica, KPIs clickeables, deltas; Cumpleanos wa.me E.164; Mis ventas con grafica diaria 2026-09-17 07:25:16 +00:00
8ba3d2582b WACRM: historial completo con paginacion desde el origen, sync refleja eliminaciones y trae todo el historial 2026-09-11 10:58:57 +00:00
4f49188deb Oleada B: fusion Expedientes en Pacientes (+chip sin visita 6m), sidebar colapsable SKEEN, edicion completa de citas, autocompletado de paciente, bloqueos excluidos de slots 2026-09-11 10:38:08 +00:00
0b45abc197 Gerencia rango operativo (crear citas), permisos por prefijo para rutas de detalle, matriz alineada (inventario para recepcion) 2026-09-11 09:48:37 +00:00
212f51cf9e Login: mensaje amigable y ojo de password; agenda: click en celda libre para agendar (estilo Google Calendar) 2026-09-09 10:37:15 +00:00
c7dcd171ee Fix pantalla en blanco al entrar: landing por rol cuando el Dashboard no es visible + matrices de menus coherentes 2026-09-08 22:17:21 +00:00
b101468c7a Login: busqueda de usuario insensible a mayusculas/minisculas 2026-09-08 21:55:02 +00:00
4f9a16103f Corte de caja asistido (esperado vs contado, diferencias, PDF) y fotos antes/despues con comparacion en expediente 2026-09-08 07:27:57 +00:00
e8690dd74e Monitoreo de salud del sistema cada 15 min con alertas por WhatsApp (doc tecnica) 2026-09-08 06:11:01 +00:00
b71b730a73 Guia WACRM: capturas corregidas (modal asignar abierto, anotaciones reposicionadas) 2026-09-08 01:35:16 +00:00
6baa8756f2 Guia WACRM ilustrada para usuarios finales: capturas anotadas, letra grande, lenguaje llano 2026-09-08 01:27:17 +00:00
6434c4f86a Guia WACRM version usuario final (sin detalle tecnico, URLs del tunel) + PDF 2026-09-08 01:02:25 +00:00
b825764ed7 Guia WACRM en PDF 2026-09-07 19:48:27 +00:00
1c438c24c5 Guia completa de uso del WACRM (revisado en vivo: webhook, envios, Sofia/Hermes, integracion SKEEN, limitaciones) 2026-09-06 09:06:01 +00:00
42536e9d2a Roles: administracion renombrado a gerencia 2026-09-03 04:16:59 +00:00
bf659bf652 Roles: entrenador renombrado a administracion (administracion de clinica, sin Configuracion) 2026-09-03 00:32:40 +00:00
3f6f1c5f8f delta_import: desactivar _check_bloqueos y dedup de servicios HIST por codigo (reimport robusto) 2026-09-02 23:45:43 +00:00
cfacb23f45 UX: notificaciones de chat con toast y sonido (WebAudio) + skeletons de carga en Agenda y Chat 2026-09-01 22:51:01 +00:00
f0d7ac4c01 POS: boton Cobrar desde cita (precarga paciente/servicio/doctor) y ticket termico imprimible con reimpresion en Ventas 2026-09-01 22:39:26 +00:00
2710d9d92d UX Pacientes: drawer de ficha clicable global, cumpleanos en dashboard/agenda, badges VIP/alergias/adeudo en ficha y POS 2026-09-01 22:26:09 +00:00
7261da3ab1 Agenda UX: nav de fecha con Hoy, linea de hora actual, colores por categoria, tooltips, vista Semana y Reagendar 2026-09-01 21:59:48 +00:00
bf36fb5586 POS: selector Doctor que atendio para asignar la venta completa a un doctor (comisiones) 2026-08-31 06:00:04 +00:00
fea4918494 Staff: campo tipo Doctor/Cosmetologa, filtro por tipo en agenda y selector editable en modulo Medicos 2026-08-31 05:19:13 +00:00
339ba235b1 Configuracion: seccion Comisiones con % global default y % editable por doctor 2026-08-31 04:45:45 +00:00
57efc3d9d3 Rol medico: pagina Mis ventas con KPIs y comision estimada, menu restringido y bloqueo de endpoints de dinero global 2026-08-31 03:56:48 +00:00
009f84ce4a Agenda: seccion Por atender (sala de espera) con pacientes en check-in, tiempo de espera y timestamp arrived_at 2026-08-31 03:08:41 +00:00
1c31eecb8c Citas: doble confirmacion (1ra telefonica con quien/cuando, 2da = llegada/check-in) + filtro rapido Por confirmar 2026-08-31 00:45:05 +00:00
681c0a9173 Chat interno 1-a-1 entre usuarios de la plataforma (addon skeen_chat + pagina Chat con badge de no leidos) 2026-08-28 08:23:56 +00:00
d47c054ffc Citas: solapamiento permitido entre medicos distintos (chequeo por doctor_id) 2026-08-28 07:42:14 +00:00
29225e848a Agenda: horario 8-19h, bloques de 15 min, cita rapida, vista restringida para rol medico y chips de pacientes por doctor 2026-08-28 07:35:46 +00:00
f9fc66b343 Médicos: rediseño del modal (header con stats, KPI cards, contacto compacto) 2026-08-14 09:33:56 +00:00
9aaa927339 Médicos: modal de detalle con tab Info e Historial (citas, visitas, ventas recetadas) 2026-08-14 09:24:34 +00:00