title: "Addendum 19 — WebaScan & WebaDrive: Correcciones y Mejoras" date: "2026-09-01" author: "Équipe Plateforme GoWeBa" tags: ["webascan", "webadrive", "extraction", "webaform", "pdf", "correctifs"]
Addendum 19 — WebaScan & WebaDrive: Correcciones y Mejoras
Descripción general
Tras una auditoría exhaustiva de WebaScan y WebaDrive, se identificaron y corrigieron 8 anomalías a través de 8 Work Packages agrupados en 5 entregas. Estas correcciones mejoran la confiabilidad de la extracción por lote, la asignación de roles en los formularios, la visualización de estadísticas de carpetas y la gestión de datos consolidados.
WP-1 — Extracción por Lote Progresiva ⚡
Problema: La extracción de documentos en lote fallaba sistemáticamente por timeout HTTP (>60s en proyectos de gran volumen).
Solución: Arquitectura "fire-and-forget" con seguimiento asíncrono:
- El POST
/api/storage/projects/aggregated-data/extractdevuelve inmediatamente unjobId - El cliente consulta periódicamente GET
/api/storage/projects/aggregated-data/extract-status?jobId=... - Barra de progreso en tiempo real con % y contador de archivos
- Resumen final: archivos procesados vs. errores
Archivos: extract/route.ts, extract-status/route.ts, extraction-jobs.ts, aggregated-data-export.tsx
WP-2 — Asistente de Llenado con Roles 👥
Problema: El diálogo "Llenar un formulario" no permitía indicar quién desempeña cada rol (comprador, vendedor, notario, etc.), lo que obligaba al usuario a corregir manualmente cada campo.
Solución: Diálogo en 2 pasos:
- Paso 1 — Selección de la plantilla de formulario (biblioteca privada + pública)
- Paso 2 — Asignación de roles (10 roles comunes: comprador, vendedor, notario, prestamista, fiador, testigos 1-2, fiduciario (fideicomisario), beneficiario, representante)
- Etiquetas trilingües (fr/en/es) con íconos emoji
- La IA recibe el contexto de los roles y coloca automáticamente a las personas correctas en los campos correspondientes
- Opción "Ignorar roles" para un llenado sin contexto de partes
Archivos: fill-project-form-dialog.tsx, app/api/forms/fills/route.ts
WP-3 — Contadores de Carpetas 📊
Problema: El panel de completitud mostraba el número de elementos en la checklist en lugar del número real de archivos.
Solución: Doble visualización diferenciada:
- Archivos: número real de archivos en la carpeta
- Subcarpetas: número real de subcarpetas
- Íconos visuales diferenciados (File vs FolderOpen)
Archivos: folder-completion-panel.tsx, webadrive-client.tsx
WP-4 — Datos Consolidados Plegables 📋
Problema: La tabla en línea de datos consolidados ocupaba toda la pantalla, dificultando la navegación.
Solución: Tabla plegable con toggle:
- Botón "Mostrar/Ocultar datos" con contador de campos
- ChevronDown/ChevronUp animado
- Tabla oculta por defecto para una visualización más limpia
Archivos: aggregated-data-export.tsx
WP-5 — PDF Maestro Mejorado 📄
Problema: El PDF maestro mostraba "(No consolidated field)" cuando un campo no tenía valor.
Solución: Mensaje amigable para el usuario:
- Texto explicativo en cursiva indicando que el valor estará disponible tras la próxima extracción
- Adaptado al idioma del proyecto (fr/en/es)
Archivos: pdf-master/route.ts
WP-6 — Kit "Otro / Custom" 🧰
Problema: No había ningún kit genérico disponible para los proyectos que no corresponden a los kits especializados.
Solución: Incorporación del kit custom-generic al catálogo:
- Nombre trilingüe: "Autre / Custom / Otro"
- Categoría "Universal" con campos genéricos (partes, monto, fechas, dirección, descripción, notas)
- Disponible para todas las organizaciones
Archivos: webaject-templates.ts
WP-7 — Botón Re-Analyze Unitario 🔄
Problema: Era imposible relanzar la extracción de un solo archivo que hubiera fallado (estatus "EXtrc ❌").
Solución:
- Botón "Re-Extract" mostrado junto a cada archivo con error
- Llamada POST
/api/storage/projects/aggregated-data/extract-single - Spinner de carga durante el procesamiento
- Toast de confirmación o de error
Archivos: extract-single/route.ts, webadrive-client.tsx
WP-8 — Resolución de Conflictos en Paralelo ⚖️
Problema: Cuando varios documentos contenían valores distintos para el mismo campo, no se ofrecía ningún mecanismo de resolución.
Solución completa:
- Banner de síntesis en la parte superior de la tabla: número de conflictos detectados o confirmación "todos resueltos"
- Badge ⚠ N variantes en cada campo en conflicto — clic para desplegar
- Panel en paralelo (cuadrícula responsive de 2-3 columnas) que muestra cada valor variante con:
- El documento fuente (nombre + número)
- El valor en sí
- Un botón "Elegir" o "Confirmar" (si es el valor actual)
- Guardado inmediato: el valor elegido reemplaza el valor consenso en
projectData.aggregatedData - Badge ✓ Resuelto con ícono verde tras la resolución
- Responsabilidad del usuario: la IA extrae y cruza la información, el humano decide en caso de duda
Endpoint: POST /api/storage/projects/aggregated-data/resolve-conflict
- Body:
{ folderId, fieldKey, chosenValue } - Valida que el valor elegido forme parte de las variantes conocidas
- Registra
resolvedBy(userId) yresolvedAtpara trazabilidad
Archivos: consolidated-data-viewer.tsx, resolve-conflict/route.ts
Resumen técnico
| WP | Descripción | Estatus |
|---|---|---|
| WP-1 | Extracción por lote progresiva | ✅ |
| WP-2 | Wizard Fill Form + roles | ✅ |
| WP-3 | Contadores de carpetas | ✅ |
| WP-4 | Datos plegables | ✅ |
| WP-5 | PDF maestro mejorado | ✅ |
| WP-6 | Kit Custom genérico | ✅ |
| WP-7 | Re-Analyze unitario | ✅ |
| WP-8 | Resolución de conflictos en paralelo | ✅ |
Commits: d6b672d (WP-1/3/4/5/6/7), 28a21d0 (WP-2), c70412e (WP-8)