Auditoría Legal para Revisión de Abogado

Fecha de auditoría13 de julio de 2026 Elaborado porRevisión técnica automatizada del código fuente Estado del documentoBorrador — para revisión legal externa ClasificaciónConfidencial

Este documento provee al abogado revisor toda la información necesaria para validar y corregir los textos legales, los flujos de datos y los mecanismos de consentimiento de la aplicación FinGuard.

Documento confidencial — uso exclusivo para asesoría legal

Contenido

  1. Descripción general de la aplicación
  2. Textos legales actuales — para validar y modificar3 textos
  3. Inventario de datos personales y financieros§ 3.1 – 3.3
  4. Flujos de datos a terceros§ 4.1 – 4.4
  5. Mecanismos de consentimiento actuales§ 5.1 – 5.3
  6. Análisis de brechas legales14 brechas
  7. Documentos legales faltantes6 documentos
  8. Datos técnicos relevantes
  9. Preguntas para el abogado7 preguntas
Sección 1

Descripción General de la Aplicación

FinGuard es una aplicación móvil de finanzas personales (iOS y Android, Capacitor 6). Permite registrar transacciones —por voz, texto, SMS o entrada manual—, organizarlas en categorías, establecer presupuestos, crear grupos de gasto compartido y obtener análisis mediante inteligencia artificial.

AtributoValor
Nombre / App IDFinGuard · com.finguard.app
Marco legal aplicableLey 1581 de 2012 (Habeas Data), Decreto 1377 de 2013
Email de soportesoporte@finguard.app
BackendRender (región US) — PostgreSQL
Estado de textos legalesBorrador — todos pendientes de revisión legal
Sección 2

Textos Legales Actuales — Para Validar y Modificar

A continuación se transcriben exactamente los tres textos legales que hoy existen en la app. Cada uno indica para qué sirve, dónde aparece y qué puntos requieren corrección o validación.

Resumen — textos existentes Existen 3 textos legales en la app. Los 3 están marcados internamente como "borrador pendiente de revisión". Ninguno tiene versión, fecha de vigencia ni nombre del responsable del tratamiento. El abogado debe revisar, corregir y aprobar los 3 antes de publicación en tiendas.
Sección 3

Inventario de Datos Personales y Financieros

3.1 Almacenados en servidor (PostgreSQL — Render, US)

Campo / TablaDescripciónRetención
users.emailCorreo electrónico (identificador único)Hasta eliminación de cuenta
users.password_hashHash bcrypt (salt 12) — nunca texto planoHasta eliminación de cuenta
users.nameNombre del usuarioHasta eliminación de cuenta
users.tierPlan (free / premium)Hasta eliminación de cuenta
users.terms_accepted_atTimestamp de aceptación de política de datosHasta eliminación de cuenta
users.totp_secretSecreto 2FA cifrado (si el usuario activa 2FA)Hasta desactivación
users.backup_consent_atTimestamp de aceptación de términos de backupHasta revocación
refresh_tokensToken de sesión (hash SHA-256), expira en 30 días30 días o hasta logout
user_backupsDatos financieros del usuario (solo si activó Cloud Backup)Máx. 3 copias; la más antigua se elimina
groups / group_membersNombre del grupo, UUID de usuario, rol, estadoHasta eliminar grupo / salir
group_email_invitationsEmail de invitado, nombre del invitador7 días
sync_messagesBlob cifrado de transacciones grupales7 días
app_logsLogs técnicos: nivel, categoría, mensaje, stack traceNo definido — brecha B-06
app_logs — punto crítico Sin período de retención definido. El stack trace y mensaje pueden contener datos personales indirectos. Establecer retención máxima (recomendado: 90 días).

3.2 Almacenados localmente en el dispositivo (SQLite cifrado — SQLCipher)

TablaContenido
settingsNombre, moneda, tema, día de corte, listas blancas de SMS/notificaciones
transactionsMonto, moneda, tipo, categoría, concepto, fecha, fuente, texto original (raw_input)
categories / budgetsCategorías personalizadas y presupuestos por categoría
recurring_transactionsGastos recurrentes configurados
merchant_aliasesPatrones texto → categoría (reglas de automatización)
user_groups / group_sync_queueGrupos sincronizados y cola de sincronización pendiente
ai_insight_cacheInsights de IA cacheados localmente (hash + texto)
Campo sensible — transactions.raw_input Almacena el texto crudo dictado por voz o tecleado. Puede contener información personal más allá del dato financiero. La política no lo menciona (brecha B-09).

3.3 Procesados pero no almacenados

DatoProcesamientoDestino
Notificaciones de apps bancariasLeídas en Android, parseadas localmente con IASolo el resultado (monto, categoría) se guarda en SQLite local
SMS bancariosLeídos por plugin SmsPlugin o vía deep linkSolo el resultado parseado se guarda en SQLite
Audio de vozTranscrito localmente (Web Speech API)El texto transcrito se envía al servidor solo para parseo de IA
Sección 4

Flujos de Datos a Terceros

4.1 Groq AI (groq.com)

EndpointDatos enviados
POST /ai/parseTexto libre del usuario (puede contener conceptos de gastos) + lista de categorías
POST /ai/classifyTexto máx. 500 caracteres para clasificar si es financiero
POST /ai/analyzeDatos agregados y anonimizados: período, totales, categorías con montos, promedios

Modelo: llama-3.1-8b-instant. No se envía identificador de usuario. Análisis limitado a 1 llamada/6h por usuario.

Para el abogado Groq es empresa estadounidense. Verificar si sus términos permiten procesar texto con conceptos financieros personales y si aplica como subencargado bajo Ley 1581.

4.2 Resend (resend.com) — Email transaccional

Email enviadoDatos del usuario
Verificación de email / recuperación de contraseñaDirección de email
Invitación a grupoEmail del destinatario, nombre del grupo, nombre del invitador
Acción requerida Resend actúa como encargado del tratamiento. Se requiere DPA (Data Processing Agreement) firmado.

4.3 Render (render.com) — Infraestructura

Aloja toda la base de datos PostgreSQL (ver §3.1). Región: US.

Transferencia internacional de datos Datos de usuarios colombianos en servidores en EE.UU. El Art. 26 de la Ley 1581 exige garantías adecuadas o autorización expresa del titular. La política actual no menciona este punto (brecha B-02).

4.4 Capacitor / Ionic

Framework de código abierto. No envía datos a servidores de Ionic/Capacitor. No requiere DPA.

Sección 5

Mecanismos de Consentimiento Actuales

5.1 Consentimiento en registro (obligatorio)

AspectoDetalle
ImplementaciónCheckbox requerido + botón de envío deshabilitado hasta marcar
Registro en servidorterms_accepted_at (timestamp) en tabla users
Versión de la políticaNo se registra — solo el timestamp de aceptación
BrechaSi el texto cambia, no hay forma de saber qué versión aceptó cada usuario

5.2 Consentimiento de Cloud Backup (voluntario, solo Premium)

AspectoDetalle
ImplementaciónCheckbox requerido + aceptación de términos específicos del servicio
Registrobackup_consent_at en users; al revocar se pone en NULL
EliminaciónAl desactivar, las copias se eliminan del servidor. Verificar eliminación física.

5.3 Permisos de sistema (Android/iOS)

PermisoUsoDeclarado
RECEIVE_SMS / READ_SMSLeer SMS bancarios para auto-registrar transaccionesSí — capacitor.config.ts
Acceso a notificaciones (Android)Leer notificaciones de apps bancariasSí — NotificationListenerPlugin
Reconocimiento de voz / micrófonoEntrada por vozSí — useSpeechRecognition
Notificaciones localesAlertas de gastos recurrentes y movimientos detectadosSí — LocalNotifications
Permiso de alto riesgo RECEIVE_SMS en Android requiere justificación especial en Play Store y declaración explícita en el formulario de permisos. Actualmente no existe un aviso in-app previo a la solicitud que explique el uso (brecha B-10).
Sección 6

Análisis de Brechas Legales

#BrechaRiesgoPrioridad
B-01La política dice "datos financieros almacenados exclusivamente en el dispositivo". Falso si se activa Cloud Backup.Información engañosaAlta
B-02No se menciona la transferencia internacional a Render (US). Art. 26 Ley 1581 requiere autorización expresa.Incumplimiento Art. 26Alta
B-03No se menciona el uso de Groq AI para procesar texto de transacciones.Falta de transparenciaAlta
B-04No se menciona Resend como encargado del tratamiento de emails.Subencargado no declaradoMedia
B-05La política no tiene versión ni fecha. Imposible saber qué versión aceptó cada usuario.TrazabilidadAlta
B-06app_logs en servidor sin período de retención definido.Retención indefinidaMedia
B-07No existe política de privacidad en URL pública. Obligatoria para Play Store y App Store.Requisito de tiendasAlta
B-08No hay mecanismo in-app para eliminación de cuenta. Google Play lo exige desde agosto 2023.Incumplimiento Play StoreAlta
B-09transactions.raw_input almacena texto crudo del usuario. La política no lo menciona.Falta de transparenciaMedia
B-10No hay aviso in-app previo a la solicitud de permisos SMS/notificaciones que explique el uso.Buenas prácticas / tiendasMedia
B-11No hay Responsable del Tratamiento nombrado con razón social o NIT.Requisito Ley 1581Alta
B-12No hay plazos de respuesta para derechos ARCO. Ley 1581 exige respuesta en 15 días hábiles.Procedimiento incompletoAlta
B-13Los términos de Cloud Backup no mencionan si los datos están cifrados en reposo en el servidor.Falta de transparencia técnicaMedia
B-14No hay política de cookies/rastreo (siendo app móvil puede no aplicar, pero conviene declararlo).Bajo impactoBaja
Resumen 8 brechas de prioridad Alta (B-01, B-02, B-03, B-05, B-07, B-08, B-11, B-12) · 5 Media · 1 Baja
Sección 7

Documentos Legales Faltantes

DocumentoNecesidad
Política de Privacidad pública (URL accesible)Obligatoria para Play Store y App Store
Aviso in-app previo a permisos SMS/notificacionesBuenas prácticas y requisito de tiendas
Política de eliminación de cuenta in-appObligatoria para Google Play (desde agosto 2023)
DPA con ResendObligatorio — actúa como subencargado del tratamiento
DPA con RenderObligatorio — encargado de infraestructura con datos en US
Registro de actividades de tratamientoBuenas prácticas Ley 1581
Sección 8

Datos Técnicos Relevantes

Cifrado y seguridad implementados

CapaMecanismo
Contraseñasbcrypt, factor de coste 12
Base de datos local (dispositivo)SQLCipher (AES) con clave en Keychain (iOS) / EncryptedSharedPreferences (Android)
Comunicación cliente-servidorHTTPS/TLS (certificado provisto por Render)
Tokens de sesiónSHA-256 hash; JWT firmado con JWT_SECRET
2FA (opcional)TOTP (compatible con Google Authenticator)
Backup en servidorTexto almacenado; cifrado en reposo en Render no confirmado en código

Períodos de retención técnicos implementados

DatoRetención
Token de verificación de email24 horas
Refresh token de sesión30 días
Invitación por código (grupos)48 horas (configurable)
Invitación por email (grupos)7 días
Mensajes de sincronización grupal7 días
Backup (copias)Máximo 3; la más antigua se elimina al crear nueva
Logs de aplicación (servidor)No definido — brecha B-06
Sección 9

Preguntas para el Abogado

  1. ¿Es necesario registrar la base de datos ante la SIC antes de publicar la app?
  2. ¿Cómo debe redactarse la cláusula de transferencia internacional dado que el servidor está en US (Render)?
  3. ¿El procesamiento de texto enviado a Groq (empresa estadounidense) requiere autorización expresa del titular aunque los datos no incluyan identificador personal?
  4. ¿Qué plazos y mecanismos exactos deben implementarse para el ejercicio de derechos ARCO?
  5. ¿Se requiere DPO (Delegado de Protección de Datos) dado el volumen y tipo de datos procesados?
  6. ¿La interceptación de SMS bancarios (con permiso del usuario vía SO) requiere alguna declaración adicional más allá del permiso del sistema operativo?
  7. ¿Qué versión/número debe llevar la política y qué pasa con los usuarios que aceptaron versiones anteriores?
Contacto para seguimiento Email técnico: soporte@finguard.app · Desarrollador: sergio.robles@mercadolibre.com.co
FinGuard — Auditoría Legal — 13 de julio de 2026 — Documento confidencial para uso exclusivo en asesoría legal