# LexControl — Estado real, limitaciones y pendientes

Última verificación: 16-oct-2026. Este documento dice qué funciona de verdad, qué se probó y qué falta. No es una garantía legal.

## Qué está implementado y probado

| Área | Estado | Cómo se verificó |
|---|---|---|
| Registro, inicio y cierre de sesión, contraseñas (scrypt), sesiones revocables, límite de intentos | Funciona | Pruebas automáticas (servidor) |
| Despachos aislados (org_id en sesión + claves foráneas compuestas) | Funciona | Pruebas: otro despacho recibe 404 al leer, editar, borrar, buscar, descargar y exportar |
| Roles (administrador, abogado, colaborador) con permisos aplicados en el servidor | Funciona | Pruebas por rol en cada módulo |
| Clientes, expedientes (número de proceso opcional), tareas, eventos/audiencias, calendario, panel | Funciona | Pruebas + recorrido en navegador |
| Alertas: recordatorios, aviso en la app, cola de correo con reintentos e idempotencia | Funciona con proveedor `log`; **SMTP real sin probar** | Pruebas con proveedor simulado (envío, fallo, reintento, sin duplicados) |
| Plantillas y generación de .docx con datos del cliente/expediente | Funciona | Pruebas + descarga real en navegador |
| Cotizaciones (totales calculados en el servidor, estados, .docx) | Funciona | Pruebas + navegador |
| Archivos privados (lista blanca de tipos, verificación de contenido, tamaño máx., descarga autenticada) | Funciona | Pruebas |
| Búsqueda global y filtros respetando permisos y despacho | Funciona | Pruebas |
| Exportación CSV por módulo y JSON completo (con protección contra fórmulas en Excel) | Funciona | Pruebas |
| Respaldo (BD + archivos) y restauración | Funciona en modo PGlite; **PostgreSQL con pg_dump sin probar** | Prueba automática de respaldo→restauración→comparación de datos y archivos |
| Interfaz web adaptable PC/móvil, instalable (PWA) | Funciona | Recorrido en Chromium (escritorio y 390 px), sin errores de consola ni desborde horizontal |
| Dependencias | 0 vulnerabilidades conocidas (`npm audit`, 16-oct-2026) | |

## Limitaciones conocidas

- **Correo propio por despacho:** probado con un proveedor simulado y con un host inexistente (falla con mensaje claro); **nunca se probó contra un servidor SMTP real** (Namecheap Private Email, Gmail, etc.). Si falta `APP_SECRET`, no se puede guardar la contraseña. "Enviada" significa solo que el servidor SMTP aceptó el mensaje.
- **Línea de tiempo:** los hitos son registros manuales; no se alimentan solos desde los archivos ni desde la Función Judicial. Un hito solo puede enlazar documentos del mismo expediente.
- **Marca propia:** el nombre y logo se muestran en la app, la pantalla de acceso y los documentos Word; el ícono de la app instalada (PWA) sigue siendo el genérico.
- **Namecheap:** guía en `docs/DESPLIEGUE-NAMECHEAP.md`, sin probar en una cuenta real; el hosting compartido es dudoso para varios usuarios.

1. **No es un calculador de plazos.** Las fechas son datos de organización que escribe el usuario. LexControl no calcula ni certifica términos procesales y no se conecta con la Función Judicial. La interfaz lo advierte.
2. **Correo:** “enviado” significa que el proveedor aceptó el mensaje; no se puede saber si se recibió o leyó. Falta elegir proveedor, dominio remitente (SPF/DKIM) y probar con SMTP real.
3. **Respaldos sin cifrar.** Los respaldos se guardan con permisos 0600 pero no se cifran, no se envían a otro lugar y no hay programación automática (hay que ejecutar `npm run backup -w server` con cron/systemd). Falta definir destino cifrado y fuera del servidor, y prueba periódica de restauración. Con PostgreSQL: usar `pg_dump`/`pg_restore` o las copias gestionadas del proveedor (no probado aquí).
4. **PGlite** (modo por defecto) es un solo proceso, adecuado para pruebas o un usuario. Para despachos con varios usuarios use PostgreSQL (`DATABASE_URL`). **La ejecución contra PostgreSQL real no se ha probado en esta etapa.**
5. **Aislamiento:** hoy se aplica en cada consulta y con claves compuestas. No hay Row Level Security de PostgreSQL como segunda barrera.
6. **Archivos:** guardados en disco local. No hay antivirus, OCR ni búsqueda dentro del contenido. Almacenamiento en objeto privado queda para después. Un servidor con varias instancias necesitaría almacenamiento compartido.
7. **Limitador de intentos de acceso en memoria:** se reinicia con el servidor y no se comparte entre instancias.
8. **Sin recuperación de contraseña por correo** (un administrador debe invitar de nuevo o se debe agregar el flujo). Sin verificación de correo ni doble factor.
9. **Informes PDF:** solo CSV/JSON/Word. No hay PDF.
10. **Sin pruebas automáticas de interfaz:** el recorrido en navegador se hizo con un script puntual, no está en la suite.
11. **Planes y suscripciones, pasarela de pago y límites por plan: no implementados** (el proyecto pide definir antes proveedor, impuestos y confirmaciones de pago). Hoy no hay límite de usuarios por despacho.
12. **Modo sin conexión:** la app instalada abre sin internet pero sin datos (por diseño no se guardan datos del despacho en el navegador).
13. **Plantillas de ejemplo:** son textos genéricos de cartas; no son modelos jurídicos validados. Deben ser revisados por un abogado.
14. **Accesibilidad:** buenas prácticas básicas (etiquetas, teclado, foco, contraste, estados con texto). No se ha auditado con lectores de pantalla.

## Antes de usar con datos reales (obligatorio)

- Revisión jurídica y técnica frente a la LOPDP y su reglamento: finalidades, base de legitimación, contrato de encargo, política de privacidad y términos, conservación y supresión, derechos de los titulares, gestión de incidentes.
- Elegir hosting y región (transferencias internacionales), proveedor de correo y subencargados.
- HTTPS, PostgreSQL gestionado, respaldos cifrados con restauración probada, monitoreo de errores.
- Prueba piloto con 3–5 despachos y validación comercial (entrevistas, uso real, disposición a pagar). **Los precios del proyecto (USD 9/19/29) siguen siendo hipótesis.**
- No declarar que el producto “cumple la LOPDP” ni que está certificado.

## Decisiones pendientes (requieren al responsable del producto)

1. Proveedor de correo y dominio remitente.
2. Hosting y región.
3. IVA por defecto en cotizaciones (hoy configurable por despacho; confirmar con contador).
4. Textos legales (términos, privacidad) revisados por abogado.
5. Pasarela de pago y modelo de planes.
6. Si se mantiene o no el nombre “LexControl” (provisional; verificar disponibilidad de marca y dominio).
