NutriTrack Pro ESTÁ OBLIGADO a cumplir CCPA/CPRA
Ingresos anuales $32M superan el umbral de $25M. Con 18.000+ residentes de California y datos de salud sensibles compartidos con Meta Pixel, la exposición a multas es alta. Se requiere acción inmediata en 3 áreas críticas: DSR API, detección GPC y actualización de política de privacidad.
Estado general de cumplimiento
Puntuación compliance
18%
3 de 12 controles activos
Usuarios CA afectados
18K
de 120.000 usuarios totales
Exposición máx. a multas
$45M
$7.500 × violación intencional
Plazo crítico (opt-out)
24h
Implementar GPC middleware
⚖️ Derechos del consumidor CCPA/CPRA
| Derecho | Descripción | Plazo |
|---|---|---|
| Conocimiento | Qué datos recopilamos, con quién los compartimos | 45 días |
| Eliminación | Solicitar borrado de datos personales | 45 días |
| Opt-Out | Salir de la venta/compartición de datos | Inmediato |
| Corrección | Corregir información personal inexacta (CPRA) | 45 días |
| Limitar SPI | Limitar uso de información personal sensible | Inmediato |
| Portabilidad | Recibir datos en formato portable (JSON/CSV) | 45 días |
| No discriminación | Sin penalización por ejercer derechos | Siempre |
✅ Checklist de implementación priorizado
- Inventario de datos mapeadoTablas users, analytics_events, health_data identificadas Hecho
- GPC Signal Middleware activoExpress.js: detectar cabecera Sec-GPC: 1 Alta
- API DSR implementadaEndpoints POST /api/privacy/dsr + verificación de identidad Alta
- Enlace "No vender mis datos" en footerRequerido en todas las páginas desde 2020 Alta
- Política de privacidad actualizadaCon categorías CCPA y derechos explicados Media
- Contratos con Meta, Mixpanel, SegmentCláusulas de restricción de datos (DPA) Media
- Datos sensibles identificados (CPRA)Salud, biométricos, geolocalización marcados Hecho
- Formulario DSR (web + teléfono)Canal por email activo; falta web form y toll-free Media
- Revisión anual de privacidad programadaCon equipo legal y engineering Baja
Inventario de datos personales
🗄️ Mapeo de datos NutriTrack Pro — Clasificación CCPA
| Tabla | Campo | Categoría CCPA | ¿Sensible (CPRA)? | ¿Se vende/comparte? | Terceros | Retención |
|---|---|---|---|---|---|---|
| users | email, nombre | Identificadores | No | No | SendGrid, Stripe | 3 años |
| users | geolocation_precise | Geolocalización | ⚠ Sí | Sí — Meta | Meta Pixel, Segment | 1 año |
| health_data | peso, IMC, dieta | Información de salud | ⚠ Sí | No | — | 5 años |
| health_data | biometrics_hash | Datos biométricos | ⚠ Sí | No | — | 3 años |
| analytics_events | device_id, user_id | Actividad de red | No | Sí — Mixpanel | Mixpanel, Segment | 1 año |
| orders | purchase_history | Info comercial | No | No | Stripe | 7 años |
Código de referencia
🔒 GPC Signal Middleware — Express.js
JavaScript
middleware/gpc.js
// Detecta señal GPC y aplica opt-out automático const gpcMiddleware = (req, res, next) => { const gpcEnabled = req.headers['sec-gpc'] === '1'; if (gpcEnabled) { req.privacyConsent = { optedOutOfSale: true, optedOutOfSharing: true, source: 'gpc_signal', detectedAt: new Date().toISOString() }; if (req.user) { recordOptOut(req.user.id, 'gpc_signal'); } else { res.cookie('ccpa_optout', '1', { maxAge: 365 * 24 * 3600 * 1000, httpOnly: true, secure: true, sameSite: 'Strict' }); } // Propagar a terceros await Promise.all([ mixpanel.optOut(req.user?.id), segment.suppress(req.user?.id), metaPixel.disable() ]); } next(); }; module.exports = { gpcMiddleware };
🔑 DSR API — FastAPI (Python)
Python
api/privacy/dsr.py
@app.post("/api/privacy/dsr", response_model=DSRResponse) async def submit_dsr( request: DSRRequest, background_tasks: BackgroundTasks ): request_id = str(uuid.uuid4()) deadline = 1 if ( request.type == DSRType.OPT_OUT ) else 45 dsr = { "id": request_id, "type": request.request_type, "email": request.email, "status": "pending", "deadline_days": deadline, "submitted_at": datetime.utcnow() } await db.dsr_requests.insert(dsr) background_tasks.add_task( send_verification_email, request.email, request_id ) return DSRResponse( request_id=request_id, status="pending_verification", deadline=f"{deadline} days" )
💰 Exposición a multas y riesgos
Multas CCPA/CPRA — California AG
$2,500
por violación no intencional
$7,500
por violación intencional
Vectores de riesgo críticos
Meta Pixel con datos salud Crítico
Sin opt-out link en footer Crítico
Sin detección GPC Alto
Sin API DSR Alto
Política sin actualizar Medio
DPAs terceros Medio
Flujo señal GPC
Browser envía
Sec-GPC: 1
Sec-GPC: 1
→
Middleware
detecta señal
detecta señal
→
Opt-out
automático
automático
→
Propaga a
Mixpanel/Meta
Mixpanel/Meta
→
Cookie
persistida 1 año
persistida 1 año
📅 Roadmap de implementación
-
CompletadoAuditoría inicial & inventario de datos
Clasificación de campos por categoría CCPA y SPI -
Semana 1 — UrgenteGPC middleware (Express.js)
Detectar Sec-GPC: 1, propagar opt-out a terceros -
Semana 1 — UrgenteFooter link "Do Not Sell or Share"
Visible en todas las páginas, URL /privacy/opt-out -
Semana 2API DSR con FastAPI
6 endpoints: know, delete, correct, opt-out, limit, portability -
Semana 2Formulario DSR web + teléfono
Con verificación de identidad por email token -
Semana 3Actualizar política de privacidad
Disclosures completos, categorías, terceros, contacto -
Semana 3DPAs con Meta, Mixpanel, Segment
Restricciones de uso de datos de CA consumers -
Semana 4Detener compartición de datos salud con Meta
Revisar eventos de Meta Pixel, filtrar SPI -
Mes 2Formación del equipo legal y CS
Protocolo de gestión de solicitudes DSR -
TrimestralRevisión anual de privacidad
Actualización de política y re-auditoría de terceros
Información Personal Sensible (CPRA) — NutriTrack
🔐 Datos sensibles identificados — Protección adicional requerida
⚕️
Información de salud
Peso, IMC, dieta, condiciones médicas
Uso limitado
📍
Geolocalización precisa
GPS <1.852m, compartida con Meta ⚠️
Acción urgente
🧬
Datos biométricos
Hash biométrico para identificación
Monitorizar
💳
Info financiera
Credenciales de pago via Stripe
Controlado