⚠️ DRAFT — pendiente revisión por abogado/a especializado/a y por un/a profesional de seguridad de la información. NO publicar sin esas revisiones.
Tratamiento de Datos — Detalle técnico y organizativo
Versión: 0.1 (draft) Última actualización: <<fecha de publicación>> Documento complementario de: Política de Privacidad
Este documento describe cómo trata TasaPyme la información sensible que el usuario carga (balances, contratos, nómina, F931, deudas). Se publica como parte del compromiso de transparencia exigido por la Resolución AAIP 47/2018.
1. Tipos de datos y nivel de sensibilidad
| Categoría | Ejemplos | Sensibilidad | |---|---|---| | Identificación del usuario | Email, nombre | Media | | Datos financieros de la empresa | Balances, deudas, ingresos | Alta | | Contratos comerciales | Clientes, montos, vigencia | Alta (secreto comercial) | | Nómina | Nombre, CUIL, sueldos, antigüedad | Alta (datos personales de terceros) | | Datos tributarios | F931, otras DDJJ | Alta |
Conforme a la Res. AAIP 47/2018, este combinado corresponde a un nivel de medidas de seguridad alto.
2. Flujo de datos paso a paso
[Usuario] —HTTPS/TLS 1.3→ [Vercel/Next.js] —server action→ [Vercel Blob (cifrado)]
↓
[Anthropic Claude API (TLS, no entrena con inputs)]
↓
[Datos estructurados extraídos]
↓
[Neon Postgres (cifrado en reposo)]
↓
[Usuario revisa, corrige y valida]
↓
[Motor de cálculo: EBITDA, múltiplos, DCF]
↓
[Informe web + PDF]
Cada paso se detalla a continuación.
2.1 Subida del documento
- Conexión cifrada TLS 1.3 obligatoria. Sin TLS, el endpoint rechaza la conexión.
- Validación del lado servidor: tipo MIME (
application/pdf,image/png,image/jpeg, hojas de cálculo), tamaño máximo (por defecto 25 MB), límite de archivos por hora (rate limit). - Escaneo antivirus del archivo antes de persistirlo.
- Persistencia en Vercel Blob con cifrado en reposo (AES-256, gestionado por el proveedor).
- Cada archivo se asocia al
userIdyorganizationIddel usuario autenticado.
2.2 Extracción por IA
- El archivo (o su versión convertida a texto) se envía a la API comercial de Anthropic Claude (modelo
claude-sonnet-4-20250514). - La conexión usa TLS y autenticación por API key almacenada como variable de entorno (no en repositorio).
- Anthropic no utiliza inputs ni outputs de la API comercial para entrenar modelos, conforme a sus términos vigentes (https://www.anthropic.com/legal/commercial-terms).
- La extracción devuelve un JSON con campos estructurados (ingresos, egresos, EBITDA, lista de contratos, etc.).
- No se envía a Anthropic más información que la estrictamente necesaria para extraer ese documento (por ejemplo, no se envían balances de años anteriores cuando se está procesando una nómina).
2.3 Persistencia estructurada
- Los datos extraídos se guardan en Neon Postgres.
- Neon aplica cifrado en reposo por defecto (AES-256).
- Cada fila incluye
organizationId. Todas las consultas filtran por elorganizationIddel usuario autenticado (row-level isolation enforced en la capa de query — Drizzle ORM). - Los archivos originales subidos se eliminan automáticamente 90 días después de finalizada la valuación.
2.4 Revisión humana
- El usuario siempre revisa, edita y valida los datos extraídos antes de generar el informe.
- No existen decisiones automatizadas con efectos sobre el usuario sin esta revisión.
2.5 Generación del informe
- El motor de cálculo aplica las fórmulas (EBITDA × múltiplo, cartera de contratos, activos netos, DCF según corresponda).
- El informe se genera del lado servidor (no expone fórmulas internas al cliente).
- El PDF se renderiza con
puppeteer-core+@sparticuz/chromiumen una función serverless aislada.
3. Control de acceso
3.1 Acceso del usuario a sus datos
El usuario es el único con acceso a sus datos, vía:
- Sesión autenticada por magic link de un solo uso con expiración de 10 minutos (Auth.js v5 + Resend).
- O bien, OAuth de Google (opcional).
- 2FA opcional disponible.
- Cierre de sesión inmediato disponible en
/cuenta.
3.2 Acceso del equipo de TasaPyme
El equipo de TasaPyme no accede a los datos del usuario por defecto. Excepciones, todas registradas en auditoría:
- Soporte técnico: sólo con autorización explícita por escrito del usuario (ticket de soporte) y por tiempo limitado.
- Investigación de incidentes de seguridad: con accesos restringidos al subconjunto mínimo necesario.
- Requerimientos judiciales vinculantes y formales emitidos por autoridad competente argentina.
Cada acceso queda registrado en un log de auditoría inmutable, con: operador, motivo, alcance, fecha y hora.
3.3 Acceso de sub-encargados
- Cada sub-encargado tiene acceso únicamente al subconjunto necesario para prestar su función (principio de mínimo privilegio).
- Listado completo en la Política de Privacidad, sección 6.
4. Logs y observabilidad
- Usamos
pinoconredactconfigurado para nunca loguear payloads sensibles (balances, nómina, contratos). - Los logs incluyen: timestamp,
userId/organizationIdhasheado, ruta, código de respuesta, latencia. No incluyen contenido del request body. - Logs operativos: retención 12 meses.
- Logs de seguridad y auditoría: retención 24 meses.
5. Backups
- Backups automáticos cifrados (gestionados por Neon).
- Retención 30 días.
- Restauración probada periódicamente (frecuencia objetivo: trimestral).
- Los backups heredan el cifrado en reposo de Neon.
6. Headers y configuración de seguridad de la app
Configurado en next.config.ts:
- HSTS (
Strict-Transport-Security) conmax-age=31536000; includeSubDomains; preload. - CSP (
Content-Security-Policy) restrictiva: sólo orígenes propios + sub-encargados explícitos. - X-Frame-Options:
DENY. - X-Content-Type-Options:
nosniff. - Referrer-Policy:
strict-origin-when-cross-origin. - Permissions-Policy: restricciones por defecto.
7. Rate limiting
- Login (envío de magic link): máximo 5 intentos por email cada 15 minutos.
- Uploads: máximo 20 archivos por hora por usuario.
- API de generación de informe: máximo 10 informes por día por organización.
Los límites pueden ajustarse según patrones reales de uso.
8. Manejo de incidentes
8.1 Detección
- Alertas automáticas sobre tasas anómalas de error, accesos sospechosos y uso anómalo de la API de IA.
- Canal interno de reporte de incidentes para el equipo.
8.2 Respuesta
Ante un incidente que involucre datos personales:
- Contención inmediata.
- Evaluación del alcance (qué datos, cuántos usuarios afectados).
- Notificación a los usuarios afectados en plazo razonable (objetivo: 72 hs).
- Notificación a la AAIP cuando corresponda según la sensibilidad del incidente.
- Postmortem interno con medidas correctivas documentadas.
9. Borrado de datos
9.1 Borrado automático
- Documentos originales subidos: 90 días después de finalizada la valuación.
- Sesiones expiradas: purgadas diariamente.
- Magic links no usados: invalidados a los 10 minutos.
9.2 Borrado por solicitud del usuario
Desde /cuenta/datos:
- Borrar valuación específica: borrado inmediato de esa valuación y sus archivos.
- Borrar mi cuenta completa: confirmación → borrado real en máximo 30 días corridos → confirmación por email.
El borrado es real, no soft-delete. Se conservan únicamente registros exigidos por ley (facturación AFIP, registros de aceptación de Términos por 5 años con datos anonimizados).
10. Auditoría y mejora continua
- Revisión interna de la postura de seguridad: trimestral.
- Revisión de sub-encargados (¿siguen cumpliendo?): anual.
- Plan de evolución hacia auditorías externas (objetivo: ISO 27001 o equivalente) en fase de roadmap.
11. Preguntas
Cualquier consulta sobre el tratamiento de sus datos: privacidad@tasapyme.com.ar.
