Skip to content

Ajustes

Ruta: /teacher/settings · Atajo: g j · Sidebar: Ajustes

Configuracion del profesor organizada en tabs: General, Integraciones, Notificaciones, Privacidad, Disponibilidad, Politicas de cancelacion, Documentos legales y Contratos.

Settings page
  • Desktop: Sidebar izquierdo sticky (w-40) con tabs verticales + indicador de borde derecho
  • Movil: Dropdown select para cambiar entre tabs

Configuracion basica de la cuenta:

Moneda predeterminada:

  • Selector dropdown con 19 monedas comunes (EUR, USD, GBP, BRL, MXN, COP, ARS, CLP, PEN, etc.)
  • Default: EUR
  • Se guarda en teachers.defaultCurrency via PATCH /teacher/settings/scheduling
  • Usado por el dashboard para formatear ingresos y precios

KPIs del dashboard:

  • Grid de 8 botones toggle (2 columnas) con icono + label para cada metrica disponible
  • El profesor selecciona exactamente 4. Los no seleccionados se deshabilitan cuando hay 4 activos
  • Metricas disponibles: month_revenue, month_lessons, active_students, attendance_rate, pending_revenue, teaching_streak, new_students, completed_sessions
  • Default: las primeras 4 (ingresos, clases, alumnos activos, asistencia)
  • Boton “Guardar” aparece solo cuando la seleccion difiere de la guardada y hay exactamente 4
  • Se guarda en teachers.dashboardConfig (JSONB) via PATCH /teacher/settings/dashboard
  • Invalida queries ['teacher', 'settings'] y ['teacher-dashboard-summary']

Grid de 3 tarjetas de integracion:

Google Calendar:

  • Emoji calendario + punto de estado (verde si conectado)
  • Estado de conexion + conteo de calendarios sincronizados
  • Boton “Conectar” → redirect OAuth Google

Stripe:

  • Emoji tarjeta + punto de estado
  • Estado de conexion
  • Boton “Conectar” → redirect Stripe Connect OAuth
  • Boton “Refrescar” estado

Google Drive:

  • Emoji carpeta + punto de estado
  • Estado de conexion
  • Si habilitado: estado de carpeta, stats de copias (copiados/pendientes), link directo a Drive
  • Botones habilitar/deshabilitar auto-copy

Coming Soon: Zoom, WhatsApp (tarjetas deshabilitadas con borde discontinuo)

Selector de calendarios Google:

  • Componente GoogleCalendarSelector dentro de la tarjeta de Google Calendar
  • Lista de calendarios de lectura con checkboxes (cuales se sincronizan para disponibilidad)
  • Selector de calendario de escritura con radio buttons (donde se crean los eventos)
  • Boton “Guardar” llama a PATCH /teacher/settings/google/calendars
  • Solo visible cuando Google Calendar esta conectado

7 toggles de notificacion con persistencia real:

ToggleDefault
Nueva reservatrue
Reserva confirmadatrue
Reserva canceladatrue
Recordatorio antes de sesiontrue
Pago recibidotrue
Creditos por expirartrue
Reporte semanalfalse
  • Estado inicial cargado via GET /teacher/settings (campo notificationPreferences JSONB)
  • Deteccion de cambios (hasChanges) — el boton “Guardar” solo aparece cuando hay cambios pendientes
  • Boton “Guardar” llama a PATCH /teacher/settings/notifications
  • Preferencias almacenadas en teachers.notificationPreferences (JSONB, migration 0057)

Exportar datos:

  • Boton “Descargar datos” → genera JSON con todos los datos del profesor
  • Archivo: pinteach-data-export-YYYY-MM-DD.json

Eliminar cuenta:

  • Seccion con borde rojo y fondo destructive
  • Flujo de 2 pasos: click → confirmacion
  • DELETE /api/teacher/privacy/delete-account
  • Redirect a /login despues de eliminar

UI completa para gestionar schedules de disponibilidad directamente desde Ajustes:

  • Lista de schedules con toggle activar/desactivar
  • Crear, renombrar, duplicar y eliminar schedules
  • Editor de reglas por dia de la semana (hora inicio/fin, multiple reglas por dia)
  • Activaciones por rango de fechas con calendar picker
  • Equivalente funcional al selector de schedules en el Calendario

Editor visual de politicas de cancelacion por servicio:

  • Lista de politicas existentes con el servicio asociado
  • Badge “Default” para la politica de cancelacion predeterminada del profesor
  • Formulario CRUD de reglas (JSONB rules): condicion + accion + descripcion
  • 4 plantillas predefinidas: individual_relaxed, group_strict, course_no_refund, subscription_flexible
  • Boton “Crear desde plantilla” carga la configuracion del preset seleccionado
  • Toggle “Establecer como default” (unica default por profesor)

Gestion de documentos legales (contratos, politicas, terminos) enviables a alumnos:

  • Lista de documentos con tipo (contract/policy/terms/privacy), version y estado
  • Crear y editar documentos con editor Markdown
  • Reordenar documentos via drag-and-drop
  • Vista previa del documento antes de publicar
  • Historial de versiones por documento

Gestion de contratos para alumnos:

  • Lista de contratos activos por alumno
  • Estado de aceptacion (firmado/pendiente/expirado)
  • Reasignar contrato a alumno
  • Historial de aceptaciones con timestamp

FeatureDescripcionEstadoImplementado
Configuracion de pagos avanzadaNo hay gestion de metodos de pago ni facturas. La moneda predeterminada ya se puede configurar en la tab General. El resto se maneja via Stripe Dashboard externoAplazado
Integracion Zoom/WhatsAppMarcadas como “Coming Soon” pero sin fecha ni prioridad definidaAplazado

BugDescripcionEstadoCorregido
Slug check no bloquea guardadoLa verificacion de disponibilidad del slug era advisory (hint visual) pero no bloqueaba el submit. Ahora bloquea el submit si retorna available: falseBatch 3

MejoraDescripcionDificultadEstadoImplementado
Stripe Customer PortalLink directo al Stripe Customer Portal para gestion avanzada de pagos, facturas y metodos de pagoMedioImplementado ✅
Unificar sub-rutas de settingsLas tabs de Disponibilidad, Politicas de cancelacion, Documentos legales y Contratos ya son accesibles desde AjustesMedioBatch 3
UI de politicas de cancelacionEditor visual con plantillas predefinidasMedioBatch 3

ArchivoProposito
apps/web/src/routes/teacher/settings.lazy.tsxPagina completa (464 lineas)
apps/api/src/services/teacher/settings-service.tsServicio de settings
apps/api/src/routes/teacher/settings.tsRutas HTTP principales
EndpointMetodoProposito
/teacher/settingsGETSettings completos
/teacher/settings/profilePATCHActualizar perfil (slug, name, bio, tz)
/teacher/settings/schedulingPATCHActualizar scheduling + general (defaultCurrency, buffer, etc.)
/teacher/settings/dashboardPATCHActualizar dashboard KPIs config. Body: { kpis: string[4] }
/teacher/settings/notificationsPATCHActualizar preferencias de notificacion. Body: JSONB de toggles
/teacher/settings/slug-checkGETVerificar disponibilidad de slug
/teacher/settings/stripe/connectPOSTURL de OAuth Stripe
/teacher/settings/stripe/statusGETEstado de conexion Stripe
/teacher/settings/drive/enablePOSTHabilitar auto-copy Drive
/teacher/settings/drive/disablePOSTDeshabilitar auto-copy
/teacher/settings/drive/statusGETEstado Drive + stats
/teacher/privacy/export-dataPOSTExportar datos profesor
/teacher/privacy/delete-accountDELETEEliminar cuenta
PrefijoProposito
/teacher/settings/google/calendarsCalendarios Google (GET + PATCH, UI en tab Integraciones)
/teacher/settings/driveConfiguracion Drive
/teacher/settings/availabilityDisponibilidad
/teacher/settings/stripeStripe Connect
/teacher/settings/policiesPoliticas de cancelacion
/teacher/settings/contractsContratos
/teacher/settings/legal-documentsDocumentos legales