Inicia sesión con tu cuenta de Google autorizada
Usuarios, dashboard, API y documentación
Se muestran los push de sync (app → backend) en curso y los recientes. La lista se actualiza cada 2 segundos. Los completados se mantienen unos segundos y luego desaparecen.
Lista de grupos (instituciones) ordenada de mayor a menor cantidad de pacientes. Incluye datos del creador y uso de la app.
| Grupo | Correo creador | Pacientes | Registros médicos | Acceso | Último acceso | Aperturas app | Versión app | Plataforma | Auto IA | Acciones |
|---|
| Grupo | Correo creador | Pacientes | Registros médicos | Acceso | Último acceso | Aperturas app | Versión app | Plataforma | Auto IA | Acciones |
|---|
Copia de seguridad de todas las
tablas (excepto tablas de log: institution_logs,
_import_staging_users, hc_change_log). Soporta miles de registros. Útil para
restaurar tras un borrado accidental.
⚠️ Advertencia: La importación trunca las tablas presentes en el ZIP y reemplaza sus datos. Asegúrate de que el ZIP es un backup válido generado por «Exportar todo».
Se listan las tablas que se pueden vaciar por completo. No se muestran users ni subscriptions. Cada acción pide confirmación antes de ejecutar. Usa el botón para refrescar la lista sin recargar la página.
| Tabla | Filas (aprox.) | Acción |
|---|
Si deshabilitas la creación de logs, el backend
dejará de escribir en institution_logs y ai_usage_logs, lo que ayuda a reducir
el espacio en la base de datos del servidor.
Una base de datos recién creada o con pocos datos puede mostrar varios MB por catálogos del sistema y bloques vacíos. Estas acciones optimizan el uso interno y, en su caso, devuelven espacio al sistema.
VACUUM + ANALYZE: recomendado de forma periódica; no bloquea. REINDEX: reconstruye índices; puede tardar. VACUUM FULL: reescribe tablas y devuelve espacio al SO; bloquea escrituras durante la ejecución.
Solo se muestran tablas de log y temporales. Vaciar estas tablas libera espacio y optimiza la base de datos sin afectar usuarios, suscripciones ni datos clínicos. Usa el botón para refrescar la lista.
| Tabla | Descripción | Filas | Acción |
|---|
Revisión de datos que conviene tener en cuenta. No se modifica nada.
Gestiona las colisiones de datos generadas cuando varios usuarios editan el mismo registro al mismo tiempo.
| ID Conflicto | Entidad | Grupo | Usuario (Local) | Fecha | Acción |
|---|
Identifica pacientes duplicados (mismo nombre y nombre de tutor) para unificarlos eliminando el registro extraña. Borrará registros médicos asociados.
| Campo | 📱 Versión Local (dispositivo) | 🖥️ Versión Servidor (actual) | Usar en resultado |
|---|
Navega la estructura de datos como un explorador de archivos: Base de datos → Grupos de trabajo → Pacientes → Registros médicos → Datos asociados (signos vitales, finanzas, citas).
Rutas disponibles en el backend. Al añadir o
cambiar rutas (y su routeDocs en cada router), este listado se actualiza. Usa «Exportar
documentación» para copiar un texto listo para usar como prompt con otra IA.
Base URL del servidor:
Controla versión mínima, enlace de actualización, mantenimiento y disponibilidad del acceso conectado.
Última actualización: —
Planes leídos desde Google Play Console. Solo los planes que guardes y marques como "Mostrar en app" se envían a la app para que el usuario pueda suscribirse. Los que no guardes o marques como "Ocultar" no aparecerán en la app.
Claves compartidas que usa la app cuando el usuario no tiene su propia key. El backend las usa como proxy hacia Groq y Gemini.
| Provider | Etiqueta | Key (masked) | Activa | Acciones |
|---|
| Model ID | Label | Descripción | Acceso | Default | Activo | Acciones |
|---|
| Fecha | Usuario | Provider | Modelo | Prompt preview | Chars | Clave | Status | ms |
|---|
Registra ingresos (pagos de Google Play, Apple, Stripe, clientes) y gastos (suscripciones, servicios, salario, etc.) para administrar tu negocio.
Se usa al hacer clic en «Rellenar con pagos tester» en el formulario de ingresos.
Métodos de pago, categorías de gastos y presets por país. La app consume estos datos vía endpoints públicos con ?lang= para labels traducidos.
| ID | ES | EN | FR | IT | PT | Acciones |
|---|
| ID | ES | EN | FR | IT | PT | Impuesto | Acciones |
|---|
| Código | ES | EN | FR | IT | PT | Impuesto | Impuesto anual | Moneda | Símbolo | Preset anual | Acciones |
|---|
Ingresos y gastos registrados manualmente (Play, Apple, Stripe, clientes, suscripciones, servicios, etc.)
Verifica si RTDN (Real-time developer notifications) está configurado correctamente. Si está bien configurado, Google enviará notificaciones automáticamente cuando haya compras o cambios en suscripciones.
Verifica que el backend tenga credenciales correctas (GOOGLE_APPLICATION_CREDENTIALS o GOOGLE_PLAY_CREDENTIALS_JSON) y que la cuenta de servicio tenga permisos en Play Console.
Verifica si un usuario tiene suscripciones Play registradas en la base de datos. Útil para diagnosticar por qué no aparece una suscripción después de comprar.
Si la app no llamó al backend
automáticamente, necesitas el purchaseToken de tu compra para registrarla
manualmente. Opciones:
purchaseToken. Revisa los logs de la app o añade un
print() para mostrarlo.
purchaseToken.
packageName y subscriptionId, puedes usar la herramienta de prueba de abajo
con un token temporal (si tienes acceso a la API).
Nota: Si RTDN está configurado correctamente, Google debería enviar notificaciones automáticamente y no necesitarías hacer esto manualmente.
Simula una notificación RTDN de Google Play para verificar que el webhook actualiza correctamente el estado de una suscripción. Necesitas el purchaseToken y productId de una compra real.
Pega un JSON con la lista de compras de Google Play. Cada ítem debe tener purchaseToken y productId; opcionalmente packageName y email. No se duplican registros: si el token ya existe, se actualiza.
Cargando...
Opciones: Actualizar desde RevenueCat (consulta RC y actualiza expiry/status), Marcar inactiva (quita estado activo), Eliminar (borra el registro).
Conteo por tabla. Ver detalles muestra quién eliminó cada registro. Limpiar elimina solo esa tabla. Proceder elimina todas.
Se eliminarán todos los pacientes, registros médicos, citas, signos vitales, ingresos y servicios de factura de este grupo. La institución, permisos y miembros se conservan.
El creador del grupo puede sincronizar desde la app para repoblar con datos locales.
Grupo:
Para confirmar, escribe exactamente el nombre del grupo:
Máximo 1 usuario(s). Haz clic en Añadir para agregar un correo.
Modifica los datos del ingreso.
Modifica los datos del gasto.
Crea un usuario manualmente en la base de datos.
Modifica los datos del usuario.
Selecciona un archivo .sql o pega el SQL con los datos. Si usas el schema alternativo (public.users con columnas google_id, access_count, last_access, etc.), marca la casilla y solo se importarán los campos compatibles.
o pega el contenido abajo
(mapeo: email→email, google_id→uid_auth_google, access_count→app_open_count, created_at, last_access→last_login, is_pro→tester, pro_manual_payment_amount→tester_fee_usd)
Si el usuario ya existe (por email) se omitirá, no se duplicará ni se sobrescribirá.
Registros a importar: 0
Pega un array JSON con el schema alternativo. Solo se usan campos compatibles (email, google_id, access_count, created_at, last_access, is_pro→tester, pro_manual_payment_amount→tester_fee_usd). Si el usuario ya existe (por email) se omitirá.
Cantidad de registros que se importarán
Campos que se tendrán en cuenta (origen → destino). Usuarios ya existentes (por email) se omiten:
| Campo origen | Campo destino |
|---|
Importando 0 / 0…