Política de Privacidad — No Panic
Fecha de entrada en vigor: Se establecerá antes del envío a las tiendas
Última actualización: 2026-06-27
Editor: No Panic Labs (nombre de trabajo temporal hasta que se finalice la entidad legal), Ucrania.
Contacto de soporte: denysdubov88@gmail.com (también el único canal para solicitudes de privacidad / RGPD).
URL canónica: https://denid88.github.io/nopanic-app/privacy-policy.es.html
Esta Política de Privacidad explica cómo No Panic Labs («nosotros», «nuestro») gestiona la información en relación con la aplicación móvil No Panic (la «App»). Al usar la App reconoces que has leído esta Política.
Diseñamos No Panic para que respete la privacidad por defecto:
- Sin cuenta, sin registro, sin inicio de sesión. La App es totalmente anónima.
- Sin publicidad y sin SDK de informes de fallos. La App no lee tu ID publicitario (IDFA / GAID) directamente. En iOS, si — y solo si — aceptas la analítica, la App presenta el aviso de App Tracking Transparency (ATT) de Apple para que Firebase Analytics y Facebook App Events puedan incluir el IDFA en su medición; rechazar el aviso ATT se respeta plenamente y la App sigue funcionando igual.
- La analítica es estrictamente opcional. La App usa Firebase Analytics y Facebook App Events para entender el uso agregado, pero la recopilación está desactivada por defecto y solo se activa después de que aceptes explícitamente — durante el onboarding o más tarde en Ajustes → Privacidad. Puedes desactivarla de nuevo en cualquier momento y se instruye a ambos SDK para que dejen de recopilar inmediatamente.
- Las entradas del diario y los favoritos permanecen en tu dispositivo. Nunca se suben a nosotros.
- Directorio de Médicos opcional. La sección Ejercicios incluye un directorio opcional de especialistas que puedes consultar de forma anónima. Si decides incluirte a ti mismo como especialista, la información que escribes en el formulario de envío se envía a nuestro backend de Supabase y, tras una aprobación manual, se muestra públicamente en la App. Consultar el directorio no requiere cuenta ni envía ninguna información personal sobre ti.
- Los servicios externos con los que habla la App son: el proveedor de suscripción (RevenueCat + Apple / Google) cuando interactúas con el paywall, Google Fonts al cargar la tipografía, el backend de Supabase que impulsa el Directorio de Médicos opcional, y — solo si consentiste — Firebase Analytics y Facebook App Events.
Lee a continuación los detalles.
1. Quién es el responsable
El responsable del tratamiento es No Panic Labs, establecido en Ucrania. Contacto: denysdubov88@gmail.com. No hemos designado un Delegado de Protección de Datos formal — todas las solicitudes de privacidad van al mismo correo.
2. Qué almacena la App en tu dispositivo
La App guarda la siguiente información solo localmente en tu dispositivo. No recibimos ni leemos estos datos.
| Almacenamiento | Qué contiene | Por qué |
|---|---|---|
SharedPreferences (iOS NSUserDefaults / Android SharedPreferences) — sin cifrar |
Flag onboarding_completed |
Saltar onboarding después del primer arranque. |
SharedPreferences |
pro_entitlement_cache — instantánea JSON de tu derecho Pro más reciente (flag activo, fecha de expiración, flag de renovación, ID de producto, flag de prueba) |
Mostrar el estado de bloqueo correcto al inicio en frío, incluso sin conexión. |
SharedPreferences |
affirmation_favorites — IDs de afirmaciones que marcaste |
Permitirte revisar tus favoritas. |
SharedPreferences |
affirmation_of_day_id + affirmation_of_day_date |
Mostrar una «afirmación del día» estable. |
SharedPreferences |
analytics_consent — booleano; false por defecto, se pone a true solo tras tu aceptación explícita |
Controla la recopilación de Firebase Analytics (ver §3.4). |
Base de datos local SQLite nopanic_journal.db, tabla journal_entries |
Cuerpo del texto del diario, emoji de ánimo opcional, marcas de tiempo de creación/actualización, ID local autoincrementada | Potencia la función Diario. |
Base de datos local SQLite nopanic_medication.db |
Nombres de medicamentos, dosis, horarios e historial de dosis que introduces en el Rastreador de Medicación | Potencia la función Rastreador de Medicación. Almacenado solo en tu dispositivo; nunca transmitido a nuestros servidores, servicios de terceros o proveedores de analítica. |
| Caché de audio gestionada por el SO | Estado de reproducción en caché de los archivos de audio incluidos | Reproducción fluida de los ejercicios. |
| Caché local de Firebase Analytics (solo si se ha concedido consentimiento) | Un Firebase Instance ID pseudónimo limitado a la app y una cola de eventos esperando subida | Buffer de analítica entre subidas de red. Borrado cuando revocas el consentimiento o desinstalas. |
Todo lo anterior se elimina al desinstalar la App o usar la acción «Borrar datos» / «Descargar app» del sistema operativo.
La App no recopila ni almacena:
- tu nombre, dirección de correo, teléfono o ubicación precisa — salvo la información que introduces voluntariamente en el formulario de envío del Directorio de Médicos opcional (por ejemplo tu nombre, número de teléfono, una foto opcional y una imagen de certificado de cualificación obligatoria), que se envía a nuestro backend de Supabase para que tu ficha pueda mostrarse públicamente (ver §3.6). Esta excepción solo aplica si decides incluirte a ti mismo como especialista; el mero hecho de consultar el directorio no envía nada sobre ti;
- ID publicitario (IDFA / GAID) — la App no lee el IDFA o GAID por sí misma. En iOS, cuando aceptas en la pantalla de Consentimiento de Analítica, la App presenta el aviso de App Tracking Transparency (ATT) de Apple para que Firebase Analytics pueda acceder al IDFA con fines de medición; si rechazas el aviso ATT, o rechazas la analítica por completo, el IDFA no se comparte con Firebase. En Android, la App no solicita ni lee el Google Advertising ID (GAID);
- contactos, calendarios o entrada de micrófono. Solo se accede a las fotos (y, si lo eliges, a la cámara) si adjuntas una foto de perfil opcional o la imagen de certificado obligatoria a un envío del Directorio de Médicos (ver §3.6 y §4); por lo demás, la App nunca lee tu galería de fotos ni usa la cámara;
- historial de navegación o cualquier uso fuera de la App;
- tokens push (la App no tiene notificaciones push).
Datos de medicación — Los nombres, dosis, horarios e historial de dosis que introduces en el Rastreador de Medicación se almacenan solo en tu dispositivo usando la base de datos local (SQLite). Nunca se transmiten a nuestros servidores, servicios de terceros o proveedores de analítica. Los conteos de eventos anonimizados (por ejemplo, que una dosis fue registrada) pueden enviarse si aceptaste la analítica, pero nunca el nombre del medicamento ni ningún detalle identificativo.
3. Terceros que pueden procesar datos sobre ti
El uso de la App activa un conjunto mínimo y específico de interacciones con terceros. Los enumeramos exhaustivamente.
3.1 Apple (App Store) y Google (Google Play)
- Qué procesan: tus transacciones de compra y suscripción, recibos de transacciones, tu cuenta de tienda (Apple ID / cuenta de Google) y la telemetría que recoge tu plataforma a nivel de SO.
- Por qué: facturación, gestión de suscripciones, reembolsos.
- Dónde: regido por las políticas de privacidad propias de Apple y Google.
- Nuestra visibilidad: podemos ver resultados de compra anónimos a través de RevenueCat (ver abajo). No vemos tu nombre, correo o datos de pago.
3.2 RevenueCat
- Qué procesan: un RevenueCat App User ID pseudónimo que el SDK genera en tu dispositivo, tus eventos de compra, estado de suscripción, plataforma y país, y la clave API de RevenueCat en uso. Consulta la política de privacidad de RevenueCat para el panorama completo.
- Por qué: usamos RevenueCat para configurar productos de suscripción, comprobar si actualmente tienes el derecho
proy manejar los flujos de compra / restauración, sin construir nuestro propio backend de validación de recibos. - Cuándo la App contacta a RevenueCat: al arrancar la app (para obtener el derecho actual y cachearlo), al abrir el paywall (para cargar ofertas de productos) y al pulsar Suscribirse o Restaurar.
- Dónde: servidores de RevenueCat. La infraestructura de RevenueCat está principalmente en Estados Unidos; las transferencias están cubiertas por sus términos estándar de protección de datos.
3.3 Google Fonts (carga de fuente en tiempo de ejecución)
- Qué procesan: una solicitud HTTP estándar al CDN de fuentes de Google para la tipografía «Quicksand», incluyendo tu dirección IP y metadatos básicos de solicitud.
- Por qué: la App usa el paquete
google_fonts, que descarga el archivo de fuente en su primer uso. Una vez obtenido, lo cachea localmente el paquete. - Nota: si lo desactivas, parte del texto recurrirá a fuentes del sistema. Podríamos incluir la fuente como recurso empaquetado en una versión futura para eliminar esta llamada externa.
3.4 Firebase Analytics (solo con consentimiento)
- Qué es: el SDK Firebase Analytics de Google (
firebase_core+firebase_analytics), integrado para ayudarnos a entender el uso agregado — qué funciones usa la gente, dónde abandonan los flujos, qué ejercicios ayudan más. Ningún contenido bruto (texto del diario, favoritos, mensajes) sale jamás del dispositivo. - Modelo de consentimiento: desactivado por defecto. El SDK se inicializa con la recopilación apagada. Mostramos una pantalla de Consentimiento de Analítica durante el onboarding y ponemos el mismo interruptor en Ajustes → Privacidad. Solo después de que aceptes / actives el interruptor llamamos a
setAnalyticsCollectionEnabled(true). Revocar el consentimiento llama asetAnalyticsCollectionEnabled(false)inmediatamente y suprime todas las llamadas de eventos y propiedades de usuario en el proceso. - App Tracking Transparency (solo iOS): cuando aceptas en la pantalla de Consentimiento de Analítica en iOS, la App llama a la API ATT de Apple (vía el paquete
app_tracking_transparency) para mostrar el aviso del sistema. Tu elección determina si Firebase Analytics puede asociar el identificador publicitario (IDFA) con eventos de analítica. Si pulsas «Pedir a la App que no rastree» (o tenías el tracking desactivado globalmente), el IDFA nunca se comparte con Firebase — la analítica sigue funcionando usando solo el Firebase Instance ID pseudónimo. Nunca leemos el IDFA nosotros mismos. Para nuestra propia medición de tasas de opt-in, adjuntamos el resultado (authorized/denied/restricted/not_determined/not_supported) como parámetroatt_statusen el eventoanalytics_consent_set. Puedes cambiar tu elección de tracking en cualquier momento en Ajustes de iOS → Privacidad y Seguridad → Tracking. - Qué se recopila (solo mientras está habilitado):
- Vistas de pantalla (a través del
FirebaseAnalyticsObserverde Firebase conectado a GoRouter). - Eventos de producto que registramos explícitamente — p. ej.
emergency_tapped,panic_flow_started/panic_flow_tip_viewed/panic_flow_completed/panic_flow_exited,exercise_opened/exercise_session_started/exercise_session_completed,games_opened/game_started/game_completed/game_exited,journal_entry_saved(con un conteo de palabras agrupado como1-25, nunca el conteo bruto ni el texto),affirmation_favorited,paywall_shown/paywall_subscribe_tapped/purchase/restore_completed,settings_opened,legal_opened,support_opened,language_changed,onboarding_*,analytics_consent_shown/analytics_consent_set. La lista completa está enlib/core/services/analytics_event.dart. - Parámetros de evento limitados a metadatos no identificativos: IDs de escenario, índices de tips, IDs de preset, nombres de ejercicio, nombres de juego (p. ej.
snake,tetris,bubble_pop,mandala,memory_pairs), puntuaciones numéricas de juego (p. ej. longitud de snake, líneas eliminadas en tetris, % de precisión en bubble-pop, movimientos en memory-pairs), IDs de producto, moneda, valor del plan, duración en segundos, porcentaje de progreso, grupo de conteo de palabras, fuente de apertura de pantalla, código de idioma origen/destino, resultado de ATT (att_status:authorized/denied/restricted/not_determined/not_supported). - Propiedades de usuario:
has_pro(true / false — si actualmente tienes el derecho Pro),app_language(tu código de idioma de UI),onboarding_completed(true / false). - Identificadores recogidos automáticamente por Firebase: un Firebase Instance ID pseudónimo (limitado a la app, se reinicia al desinstalar o al revocar el consentimiento), dirección IP (usada para geolocalización aproximada y luego descartada según la política de retención de Google), modelo de dispositivo, versión de SO, versión de app.
- Vistas de pantalla (a través del
- Qué nunca se envía: texto del diario, títulos del diario, texto de afirmación, contenido de tips, notas, audio reproducido, listas de favoritos, ubicación precisa, ID publicitario, correo, teléfono o cualquier identificador vinculado a tu nombre.
- Dónde: servidores Firebase de Google (Estados Unidos y otras regiones de Google), regido por la política de privacidad de Google y los términos de procesamiento de datos de Firebase.
- Retención: configuramos el proyecto Firebase para usar la ventana predeterminada de retención de datos de usuario de Google (actualmente 14 meses para datos a nivel de usuario); los datos agregados de informes se retienen indefinidamente.
- Cómo desactivarlo: Ajustes → Privacidad → interruptor Analítica. Esto pone
analytics_consentafalse, llama asetAnalyticsCollectionEnabled(false)y el SDK deja de recopilar en este dispositivo.
3.5 Facebook App Events (solo con consentimiento)
- Qué es: el SDK Facebook App Events de Meta Platforms (
facebook_app_events), utilizado para la medición agregada del uso de funciones y campañas de adquisición. Ningún contenido bruto (texto del diario, favoritos, mensajes) sale jamás del dispositivo. - Modelo de consentimiento: desactivado por defecto. El SDK se inicializa con el auto-registro desactivado y la recopilación de ID publicitario desactivada (
FacebookAutoLogAppEventsEnabled = false,FacebookAdvertiserIDCollectionEnabled = falseenInfo.plisty los correspondientes flagsmeta-dataenAndroidManifest.xml). El mismo interruptor de consentimiento en la app que regula Firebase Analytics (pantalla de Consentimiento de Analítica durante el onboarding; después Ajustes → Privacidad) también controla Facebook App Events. Solo después de que aceptes / actives el interruptor llamamos asetAutoLogAppEventsEnabled(true). Revocar el consentimiento llama asetAutoLogAppEventsEnabled(false)y suprime todas las llamadas de eventos en el proceso. - App Tracking Transparency (solo iOS): incluso con el consentimiento en la app concedido, Facebook App Events permanece en silencio a menos que el resultado de ATT de Apple sea
authorized. Si pulsas «Pedir a la App que no rastree», o tenías el tracking desactivado globalmente, la App llama asetAdvertiserTracking(enabled: false)en el SDK, mantiene el flag de auto-registro desactivado y nunca envía eventos a Meta. En Android no hay aviso ATT; el SDK se habilita cuando se concede el consentimiento en la app. - Qué se envía (solo mientras está habilitado): los mismos nombres de evento y parámetros no identificativos descritos en §3.4 replicados a Meta — p. ej.
emergency_tapped,panic_flow_started/panic_flow_completed,exercise_session_started/exercise_session_completed,paywall_subscribe_tapped,purchase,restore_completed,language_changed,analytics_consent_set. Las compras incluyen además el ID de producto, el importe y la moneda en el esquema de compra estándar de Meta. - Qué nunca se envía: texto del diario, títulos del diario, texto de afirmación, contenido de tips, notas, audio reproducido, listas de favoritos, ubicación precisa, correo, teléfono o cualquier identificador vinculado a tu nombre. Nunca llamamos a
setUserDataosetUserIDen el SDK, por lo que Meta nunca recibe de nosotros un correo, teléfono o ID de cliente con hash. - Dónde: servidores de Meta Platforms, Inc. (principalmente Estados Unidos e Irlanda), regidos por la política de privacidad de Meta y sus términos de procesamiento de datos.
- Retención: regida por la política predeterminada de retención de eventos de app de Meta (ver la política de privacidad de Meta). Revocar el consentimiento o desinstalar detiene la recopilación adicional.
- Cómo desactivarlo: Ajustes → Privacidad → interruptor Analítica. Esto pone
analytics_consentafalse, llama asetAutoLogAppEventsEnabled(false)en el SDK de Facebook y el SDK deja de enviar eventos en este dispositivo.
3.6 Supabase (backend del Directorio de Médicos)
- Qué es: Supabase es una base de datos Postgres alojada y un servicio de almacenamiento (Storage) de archivos operado por Supabase, Inc. en nombre del Editor. Impulsa el Directorio de Médicos opcional («Запис до лікаря») de la sección Ejercicios — una lista pública de especialistas. Este es el primer y único backend operado por el Editor con el que habla la App. Ninguno de tus datos en el dispositivo (entradas del diario, medicación, hábitos, favoritos, analítica) se envía jamás a Supabase — solo los datos del directorio descritos a continuación.
- Cuando consultas el directorio (anónimo): al abrir el Directorio de Médicos se obtiene de Supabase la lista de especialistas aprobados, filtrada por el idioma de la App. La solicitud lleva tu dirección IP y la clave API pública (anon) de la App, pero ninguna cuenta ni información personal sobre ti. La consulta permanece anónima.
- Cuando te incluyes a ti mismo como especialista (totalmente opcional, iniciado por el usuario): usando el botón «?» → formulario «Añádete como médico», la información que escribes se envía a Supabase y se almacena para poder mostrarse públicamente en el directorio tras una aprobación manual. Los campos son: nombre completo, especialización(es), años de experiencia, una descripción de servicios, país y ciudad (o un indicador «en línea»), un número de teléfono de contacto opcional, el precio por consulta y su moneda, la duración de una consulta (en minutos), un horario de atención opcional, identificadores opcionales de Viber / Telegram / WhatsApp / Instagram / Threads / TikTok, y una foto de perfil opcional subida a un bucket de Supabase Storage (
doctor-photos), y una imagen de certificado de cualificación obligatoria subida a un bucket de Supabase Storage independiente (doctor-certificates). Como el propósito del directorio es una lista pública, esta información se vuelve visible públicamente una vez aprobada — no envíes nada que no quieras que se muestre públicamente. - Aprobación y eliminación: los envíos se almacenan sin aprobar (
approved = false) y solo se muestran después de que el Editor los apruebe manualmente. Escribir en el directorio requiere un secreto de aplicación compartido verificado en el servidor; en cualquier caso, cada envío se almacena sin aprobar hasta su revisión. Puedes solicitar la corrección o eliminación en cualquier momento escribiendo a denysdubov88@gmail.com — el Editor elimina entonces el registro y cualquier foto o certificado subido. - Dónde: la infraestructura en la nube de Supabase (la región seleccionada para el proyecto). Cualquier transferencia internacional está cubierta por el acuerdo de procesamiento de datos (DPA) de Supabase y las Cláusulas Contractuales Tipo.
3.7 Servicios que no se ejecutan
Por transparencia, la App no incluye:
- Amplitude, Mixpanel, PostHog o cualquier SDK de analítica distinto del Firebase Analytics descrito en §3.4 y de los Facebook App Events descritos en §3.5;
- Sentry, Crashlytics, Bugsnag o cualquier otro SDK de informes de fallos;
- SDK publicitarios;
- SDK de inicio de sesión social (el SDK Facebook App Events descrito en §3.5 no incluye Facebook Login ni ninguna funcionalidad de social graph — solo el subconjunto de eventos de app / medición);
- SDK de TikTok, AppsFlyer, Adjust, Branch u otros SDK de atribución;
- servicios de notificaciones push (no se integra mensajería FCM/APNs, aunque Firebase Core esté presente).
4. Permisos que solicita la App
La App no solicita el micrófono, la ubicación, contactos, calendario ni Bluetooth. En iOS, la App solicita acceso a la galería de fotos (NSPhotoLibraryUsageDescription) solo cuando decides adjuntar una foto de perfil opcional o el certificado de cualificación obligatorio al incluirte a ti mismo en el Directorio de Médicos (ver §3.6), y solicita acceso a la cámara (NSCameraUsageDescription) solo cuando decides fotografiar tu certificado durante ese mismo envío — nunca en otro caso; la foto de perfil es opcional, puedes enviar el formulario sin ella, y la App nunca lee tu galería de fotos ni usa la cámara en ningún otro momento. La App también solicita el permiso de App Tracking Transparency (ATT) de Apple — solo cuando aceptas afirmativamente la analítica en la pantalla de Consentimiento de Analítica, nunca al primer arranque y nunca si rechazas la analítica. El propósito se describe en §3.4 y §3.5.
La App reproduce audio empaquetado usando APIs estándar del SO. Para habilitar la reproducción en segundo plano del ejercicio Dormir — para que la música siga sonando cuando bloqueas la pantalla y los controles de pantalla de bloqueo / Centro de Control / Notificaciones permanezcan disponibles — la App declara las siguientes capacidades del SO sin aviso: en Android, los permisos WAKE_LOCK, FOREGROUND_SERVICE y FOREGROUND_SERVICE_MEDIA_PLAYBACK y un servicio en primer plano para reproducción multimedia (proporcionado por el paquete audio_service); en iOS, el valor audio en el array UIBackgroundModes de Info.plist. Ninguna de estas capacidades muestra un aviso de permiso interactivo ni concede acceso de la App a tus datos — solo permiten que el propio motor de audio de la App siga reproduciendo mientras la App está en segundo plano o la pantalla está apagada.
5. Niños
La App no está dirigida a niños menores de 13 años y no recopila a sabiendas datos personales de ellos. Si crees que un niño por debajo de la edad mínima ha usado la App, contáctanos para que podamos ayudar.
6. Tus derechos legales (RGPD, UA, UK GDPR, CCPA)
Como la App no asocia ningún dato con tu identidad, muchos derechos tradicionales (acceso, exportación, supresión de «tus datos personales») no se aplican en el sentido habitual — no hay registro del lado del servidor vinculado a ti. No obstante, tienes derecho a:
- Acceso / portabilidad: exporta tus entradas del Diario manualmente copiándolas desde la App. Aún no hay función de exportación incorporada; contáctanos si necesitas ayuda.
- Supresión: elimina entradas individuales del Diario dentro de la App; elimina todos los datos de la App desinstalando, usando la acción «Borrar datos» / «Descargar app» / «Restablecer» de tu SO, o restableciendo el dispositivo. La única excepción a «no hay registro del lado del servidor vinculado a ti» es una ficha del Directorio de Médicos que hayas enviado voluntariamente (ver §3.6); puedes hacer que se elimine en cualquier momento escribiendo a denysdubov88@gmail.com (ver también el Apéndice B).
- Datos de suscripción: para registros de compra y suscripción que tengan Apple, Google o RevenueCat, ejerce tus derechos directamente con esos proveedores — ellos pueden identificarte por cuenta de tienda. Te asistiremos si nos contactas.
- Oponerse / restringir / reclamar: puedes oponerte al tratamiento o restringirlo. Si estás en la UE/EEE, Reino Unido o Suiza, también puedes presentar una reclamación ante tu autoridad nacional de protección de datos. En España, la autoridad es la Agencia Española de Protección de Datos (AEPD). Los residentes en California pueden ejercer derechos CCPA; no «vendemos» ni «compartimos» información personal para publicidad conductual entre contextos.
Para ejercer cualquier derecho, escribe a denysdubov88@gmail.com.
7. Base legal (UE/EEE, Reino Unido, Suiza)
Donde se aplique el RGPD o una ley equivalente, las bases legales para el tratamiento mínimo descrito arriba son:
- Contrato (Art. 6(1)(b) RGPD) — proporcionar la App y, cuando proceda, procesar tu suscripción.
- Interés legítimo (Art. 6(1)(f) RGPD) — cachear el estado del derecho para que la App funcione sin conexión, obtener la fuente usada por la UI y mantener la integridad del paywall.
- Consentimiento (Art. 6(1)(a) RGPD) — la única base legal para Firebase Analytics y Facebook App Events. La recopilación por parte de ambos SDK está desactivada por defecto y solo se activa después de que aceptes afirmativamente en la pantalla de Consentimiento de Analítica (o en Ajustes → Privacidad). Puedes retirar el consentimiento en cualquier momento con el mismo interruptor, sin efecto en tu capacidad de usar la App. La retirada no afecta a la licitud del tratamiento realizado antes de la retirada.
8. Transferencias internacionales
La App misma almacena datos en tu dispositivo en tu país de residencia. Cuando interactúas con el paywall, RevenueCat y App Store / Google Play pueden transferir datos internacionalmente (principalmente a Estados Unidos) bajo sus propias salvaguardas (Cláusulas Contractuales Tipo y mecanismos equivalentes). Si has habilitado la analítica, Firebase Analytics también transfiere datos de eventos a la infraestructura de Google (principalmente a Estados Unidos) bajo las Cláusulas Contractuales Tipo de Google y mecanismos equivalentes, y Facebook App Events transfiere datos de eventos a la infraestructura de Meta Platforms (principalmente Estados Unidos e Irlanda) bajo las Cláusulas Contractuales Tipo de Meta y mecanismos equivalentes. Cuando consultas o envías información al Directorio de Médicos, Supabase procesa la solicitud en su infraestructura en la nube (la región seleccionada para el proyecto) y puede transferir datos internacionalmente bajo el acuerdo de procesamiento de datos de Supabase y las Cláusulas Contractuales Tipo.
9. Retención
- Datos en el dispositivo: conservados hasta que los elimines o desinstales la App.
- RevenueCat: conservados según la política de retención de RevenueCat para datos de suscripción.
- Apple / Google: conservados según sus respectivas políticas.
- Firebase Analytics (solo si aceptaste): datos a nivel de usuario retenidos durante la ventana predeterminada de 14 meses configurada en nuestro proyecto Firebase; datos agregados de informes retenidos indefinidamente. Revocar el consentimiento o desinstalar detiene la recopilación adicional; los eventos ya subidos pueden eliminarse a petición (ver §6).
- Facebook App Events (solo si aceptaste): retenido según la política predeterminada de retención de eventos de app de Meta. Revocar el consentimiento o desinstalar detiene la recopilación adicional; los datos existentes pueden eliminarse a petición (ver §6).
- Envíos al Directorio de Médicos (solo si te incluiste a ti mismo como especialista): conservados en el backend de Supabase hasta que solicites su eliminación o el Editor elimine la ficha.
- Correspondencia de soporte: si nos escribes a denysdubov88@gmail.com, guardamos el hilo de correo hasta 24 meses y luego lo eliminamos.
10. Seguridad
Mantenemos el procesamiento del lado del servidor al mínimo y nos apoyamos en el sandboxing de Apple y Google para proteger los datos almacenados en tu dispositivo. La App no cifra las entradas del Diario más allá de lo que proporciona el sistema operativo en reposo; si tu dispositivo admite cifrado completo del disco y has habilitado un código de acceso, tus datos se benefician de ello. Recomendamos mantener tu SO actualizado y usar un código de acceso o bloqueo biométrico.
11. Cambios en esta Política
Podemos actualizar esta Política a medida que la App evolucione. Los cambios se reflejarán en la fecha de «Última actualización» arriba y, si son materiales, destacados en la App o en la ficha de tienda. El uso continuado tras la entrada en vigor de la Política actualizada constituye aceptación.
12. Contacto
Preguntas, solicitudes o quejas sobre esta Política: denysdubov88@gmail.com.
Apéndice A — Inventario técnico (para completitud)
Esta sección refleja lo que vería un desarrollador o auditor en el código, para que nada en la App quede sin revelar.
- Plataforma: Flutter (Dart
^3.11.3), distribuido globalmente en Apple App Store y Google Play; nombre de paquete / identificador de bundleapp.nopanic. - Paquetes de terceros usados que pueden tocar la red o el almacenamiento del SO:
purchases_flutter(RevenueCat),firebase_core+firebase_analytics(Firebase Analytics — sujeto al consentimiento opt-in),facebook_app_events(Meta Facebook App Events — sujeto al consentimiento opt-in y, en iOS, a que ATT estéauthorized, como se describe en §3.5),app_tracking_transparency(solo iOS — muestra el aviso ATT del sistema cuando se acepta la analítica, como se describe en §3.4 y §3.5),google_fonts(carga de fuente en tiempo de ejecución),supabase_flutter(cliente de Supabase — llamadas de red al backend del Directorio de Médicos, como se describe en §3.6),image_picker(selección opcional de foto para un envío del Directorio de Médicos; en iOS usa la galería del sistema vía PHPicker y, cuando fotografías tu certificado, la cámara),flutter_image_compress(compresión en el cliente de la foto enviada y la imagen del certificado antes de subirla),country_state_city(lista offline empaquetada de países/ciudades para el filtro del Directorio de Médicos — sin llamada de red),just_audio+audio_service+audio_session(reproducción local de audio, incluida reproducción en segundo plano y controles de pantalla de bloqueo / Centro de Control / Notificaciones para el ejercicio Dormir vía unAudioHandlerpersonalizado; otros ejercicios usan solojust_audiosimple),shared_preferences(almacenamiento clave-valor local, incluido el flaganalytics_consent),sqflite(SQLite local),url_launcher(abre URLs externas en el navegador del sistema cuando pulsas Términos, Privacidad o Soporte),package_info_plus(lee la versión/número de build local de la app). - URLs externas abiertas (solo cuando las pulsas): la URL de los Términos, la URL de la Privacidad y el enlace
mailto:del correo de Soporte. - Claves API: una clave SDK pública de RevenueCat se compila en el build vía
--dart-define. La configuración de Firebase (GoogleService-Info.plist/google-services.json) se empaqueta en tiempo de build. Estas claves identifican la app, no a ti. - Un backend de Supabase (una base de datos Postgres alojada más almacenamiento Storage de archivos) operado por Supabase, Inc. en nombre del Editor impulsa ahora el Directorio de Médicos opcional: sirve la lista de especialistas aprobados (lecturas), almacena los perfiles de especialista enviados por usuarios mediante una RPC
submit_doctorprotegida por secreto (siempre almacenados conapproved = falsehasta su aprobación manual), guarda las fotos de perfil opcionales en el bucket de Storagedoctor-photosy guarda la imagen de certificado de cualificación obligatoria en el bucket de Storagedoctor-certificates. Ningún otro backend operado por el Editor procesa datos de usuario. Los datos de analítica son procesados por Google y Meta en nuestro nombre solo tras consentimiento explícito.
Apéndice B — Resumen de eliminación de datos (para revisión de tienda)
Si un revisor de tienda pregunta «¿cómo elimina un usuario sus datos?»:
- Dentro de la App: abrir Diario, eliminar entradas individualmente. En el Rastreador de Medicación, eliminar medicamentos y entradas del historial de dosis individualmente.
- Desinstalar la App, o usar la acción «Borrar datos» (Android) / «Descargar app + Eliminar» (iOS) de tu dispositivo. Esto elimina todos los datos de la App en el dispositivo, incluidas entradas del Diario, favoritos de afirmación, flag de onboarding, caché de derecho Pro, flag
analytics_consenty el Firebase Instance ID. - Para detener la recopilación de analítica en curso, abrir Ajustes → Privacidad y desactivar el interruptor de Analítica. Para eliminar también los eventos de analítica previamente subidos, escribir a denysdubov88@gmail.com y se iniciará una solicitud de eliminación contra el proyecto Firebase y el conjunto de datos de eventos de app de Meta.
- Para eliminar un envío que hayas hecho al Directorio de Médicos, escribe a denysdubov88@gmail.com indicando el nombre enviado; el Editor elimina el registro y cualquier foto o certificado subido del backend de Supabase.
- Para cancelar o eliminar datos de suscripción que tengan Apple, Google o RevenueCat, usa las herramientas de gestión de suscripción en tu cuenta de App Store o Google Play, o escribe a denysdubov88@gmail.com para asistencia.