LAFT360 v1.03

Versión Actual

Última actualización: 06 May, 2026

Nuevas Funciones

4

Mejoras

3

Correcciones

2

Historial de Versiones
LAFT360 v1.03 Actual
06 May, 2026
Trazabilidad ISO 27001 en changelog Vista de sesiones activas por usuario Tabla de onboarding con ordenamiento dinámico

  • Página de versiones conectada con el Fix Log técnico (ISO 27001).
  • Vista de actividad por usuario desde el panel de sesiones activas.
  • Ruta /admin/auth-log/user/{id}/activity con selector de últimos N registros.
  • Columnas ordenables (ID, Empresa, Estado, Fecha) en /admin/onboarding.

  • Sesiones activas ahora solo muestra usuarios autenticados (INNER JOIN).
  • Paginación compacta en /admin/onboarding y /admin/auth-log/sessions.
  • Historial de actividad sin paginación clásica — selector de límite (25/50/100/200).

  • Sesiones mostraban 90% de visitantes no autenticados (corrección: leftJoin → INNER JOIN).
  • Botones de paginación excesivamente grandes en vistas de admin.
LAFT360 v1.02
27 Mar, 2026
Certificación conectada por cédula Sincronización Backbone reforzada Dashboard y batch queries estabilizados

  • Verificación de Oficiales de Cumplimiento por número de cédula, incluso cuando el correo no coincide con eCertify.
  • Estados explícitos de certificación en dashboard: certificado, sin cédula registrada, sin certificación activa o verificación no disponible.
  • Fallback automático de persistencia a BACKBONE (`regtech_queries`) cuando el proceso Python no deja traza completa.
  • Política de autorización para consultas batch por equipo, evitando accesos negados erróneos.
  • Migración de `users.document_number` para soportar validación de certificaciones y trazabilidad de onboarding.

  • Sincronización de estado entre `business_flow_executions`, `runs` y dashboard para mostrar el progreso real de consultas QCI.
  • Resiliencia del webhook del orquestador frente a eventos tardíos de `RUN_PROGRESS` que antes podían reabrir ejecuciones ya finalizadas.
  • Degradación controlada en módulos opcionales de Transparencia y Public KYC cuando sus tablas no están disponibles en producción.
  • Persistencia de metadatos Backbone con `service_code`, `service_name`, timestamps y duración para auditoría más completa.

  • Consulta QCI que quedaba en estado `En Proceso` aun cuando el RUN ya había terminado correctamente.
  • Error 403 en `/batch-queries/{id}` por ausencia de política de autorización para batches del mismo equipo.
  • Errores de producción por tablas faltantes como `transparency_accounts`, `public_kyc_links` y `public_kyc_submissions`.
  • Fallo del fallback Backbone causado por un join legado a `service_type_id`; ahora usa el esquema real con `available_service_id`.
LAFT360 v1.01
15 Feb, 2026
Sistema de Soporte integrado Portal de Transparencia Mejoras en la matriz de riesgo

  • Sistema de mensajes de soporte con seguimiento de tickets
  • Portal de Transparencia para consulta de huella de datos
  • Video tutoriales integrados
  • Página de changelog del sistema
  • Verificación de Oficiales de Cumplimiento certificados

  • Interfaz de usuario más intuitiva
  • Rendimiento en consultas de RUNs
  • Exportación de reportes en múltiples formatos
  • Sistema de notificaciones en tiempo real

  • Corrección en cálculo de matriz de riesgo
  • Mejora en validación de formularios
  • Optimización de carga de dashboard
LAFT360 v1.00 beta
15 Nov, 2025
Lanzamiento inicial de LAFT360 Módulos core completos Integración con fuentes oficiales

  • Módulo de Contrapartes (personas naturales y jurídicas)
  • Sistema de RUNs (Registro Único Nacional)
  • Matriz de Riesgo SARLAFT
  • Gestión de equipos y usuarios
  • Sistema de facturación y créditos
  • Integración con RUNT, Policía Nacional, OFAC
  • Reportes en PDF y Excel
  • Autenticación de dos factores (2FA)
LAFT360 v0.90 alpha
01 Oct, 2025
Versión de pruebas internas Funcionalidades básicas

  • Estructura base del sistema
  • Sistema de autenticación
  • Dashboard principal
  • Módulo de configuración
Trazabilidad de Cambios Técnicos
Registro verificado para auditoría — ISO 27001 / SARLAFT
8 registros
Fix ID Fecha Descripción Estado Detalle
FIX-20260509-001 2026-05-09 Changelog desconectado: /changelog era estático, sin trazabilidad ISO 27001
`app/Http/Controllers/ChangelogController.php` (nuevo), `resources/vie…
Producción
Error / Síntoma:

La página `/changelog` y `/actualizaciones` mostraba datos hardcodeados en `@php` dentro del blade, sin conexión con el FIXLOG real del proyecto. No existía trazabilidad verificable de cambios para auditoría ISO 27001.

Root cause:

La ruta era un closure que devolvía una vista con todos los datos estáticos en un bloque `@php`. El FIXLOG existía como documentación interna pero no estaba expuesto en ninguna interfaz.

Fix aplicado:

Creación de `ChangelogController::index()` que (1) contiene el historial semántico de versiones como array estático PHP y (2) parsea `docs/fixes/FIXLOG.md` con regex para extraer cada entrada `FIX-YYYYMMDD-NNN`. La vista muestra ambas secciones: historial de versiones curado + tabla "Trazabilidad de…

Verificación:

`https://laft360.com/changelog` carga con título "LAFT360 v1.03", sección "Trazabilidad de Cambios Técnicos" visible con badge "7 registros", todas las filas del FIXLOG renderizadas con Fix ID, fecha, descripción, archivo y estado correcto.

FIX-20260504-007 2026-05-04 Wizard SARLAFT: campos V2 ausentes en Pasos 1, 2/3 y 5
`resources/views/supertransporte/sarlaft/wizard.blade.php`
Verificado local
Error / Síntoma:

El wizard no capturaba los campos exigidos por la Circular Externa V2: Paso 1 sin datos del sujeto obligado (tipo societario, estado registro mercantil, CIIU, ámbito, RL, RF); Paso 2/3 sin HV OC estructurada ni estado/link ONAC; Paso 5 sin sección de Debida Diligencia (DDI checkboxes) ni campo de mecanismo de comunicación.

Root cause:

Vista creada antes de que se definieran los requisitos V2 completos. **Fix (sin tocar lógica de guardado):** - Paso 1: secciones "Sujeto obligado" (tipo_societario, estado_registro_mercantil), "Actividad económica" (ciiu_principal, ciiu_secundario, descripcion_actividad, modalidad_transporte, ambito_operacion, direccion_principal), "RL" y "RF" con todos sus campos. - Paso 2/3: reestructuró HV OC — nivel_educativo + institucion_educativa, especialidad + tipo_especialidad (select) + institucion_especialidad, experiencia_meses; sección ONAC: cert_onac_estado (select pendiente/si/no) + link_verificacion_onac. - Paso 5: nueva sección "Debida diligencia" con dd_simplificada, dd_intensificada, operaciones_intentadas y criterio_ddi como checkboxes múltiples (5 valores SET); nueva sección "Divulgación y comunicación" con estrategia_divulgacion y mecanismo_comunicacion (textareas).

Verificación:

`php artisan route:list` arranca → Laravel carga sin error de compilación. Error de `view:cache` es de vista ajena (componente `label` de API tokens — preexistente).

FIX-20260504-006 2026-05-04 criterio_ddi: VARCHAR libre → SET con valores V2 + accessor/mutator
- `app/Models/SupertransporteResultadoObjetivo.php` (accessor + mutato…
Producción
Error / Síntoma:

`supertransporte_resultado_objetivo.criterio_ddi` era `VARCHAR(500)` de texto libre. La Circular Externa V2 define exactamente 5 criterios de DDI intensificada (multi-opción). El campo no garantizaba integridad referencial ni facilitaba reportes por criterio.

Root cause:

Campo sin restricción de dominio. V2 formaliza los 5 criterios: `mayor_riesgo`, `pep`, `paises_no_cooperantes`, `jurisdicciones_alto_riesgo`, `activos_virtuales`.

Fix aplicado:

`MODIFY COLUMN criterio_ddi SET(...)`. MySQL `SET` devuelve string con coma al leer, no JSON — se agregaron `getCriterioDdiAttribute` (explode) y `setCriterioDdiAttribute` (implode) en el modelo. Sin cast `'array'` para evitar conflicto con el formato nativo de MySQL SET.

Verificación:

`INFORMATION_SCHEMA.COLUMNS` confirma `set('mayor_riesgo','pep','paises_no_cooperantes','jurisdicciones_alto_riesgo','activos_virtuales')`.

FIX-20260504-005 2026-05-04 SINST-VIGIA 2: campos Datos Básicos V2 ausentes en supertransporte_reportes
- `app/Models/SupertransporteReporte.php` (fillable + casts) - DB: `s…
Producción
Error / Síntoma:

`supertransporte_reportes` carecía de 21 campos exigidos por la Hoja "Datos Básicos" de la Circular Externa / Res. 2328/2025: tipo societario, estado registro mercantil, CIIU principal/secundario, descripción actividad, modalidad transporte, ámbito operación, dirección, datos RL (nombre, tipo doc, num doc, correo, SIREL, fecha SIREL) y datos RF (nombre, tipo id, num id, SIREL, presentó informe, núm. hallazgos, plan de mejoramiento).

Root cause:

Implementación original del módulo sólo capturaba metadatos del reporte (período, régimen, CSS score) sin los campos de identificación del sujeto obligado exigidos en V2.

Fix aplicado:

`ALTER TABLE supertransporte_reportes ADD COLUMN ...` × 21 columnas. Modelo actualizado con fillable y casts correspondientes.

Verificación:

`COUNT(*) = 21` en `INFORMATION_SCHEMA.COLUMNS` para las columnas nuevas.

FIX-20260504-004 2026-05-04 SINST-VIGIA 2: períodos 2026 incorrectos + esquema OC desactualizado (V2)
- `app/Services/SuperTransporte/SarlaftReporteService.php` (const PERI…
Producción
Error / Síntoma:

`SarlaftReporteService::PERIODOS_2026` usaba día 30/31 como límite en P1/P3/P4 (debía ser día 10). P2 tenía fechas abril-junio en lugar de mayo-julio (primer reporte de transición). La tabla `supertransporte_oc` carecía de campos de HV estructurada y certificación ONAC exigidos por la Circular Externa V2. No existía historial independiente de novedades OC.

Root cause:

Implementación original no reflejaba la Circular Externa Supertransporte + Res. 2328/2025 + Res. 4607/2026. P2 tiene inicio especial de transición (mayo, no abril); el límite de todos los períodos es día 10 (no fin de mes).

Fix aplicado:

- `PERIODOS_2026`: P1 límite → `2026-04-10`; P2 rango → `2026-05-01 / 2026-07-31`; P3 rango → `2026-08-01 / 2026-09-30`, límite → `2026-10-10`; P4 límite → `2027-01-10`. - `supertransporte_oc`: ALTER ADD 6 columnas: `institucion_educativa`, `tipo_especialidad`, `institucion_especialidad`, `experien…

Verificación:

`INFORMATION_SCHEMA.COLUMNS` confirma 6 columnas nuevas en `supertransporte_oc`. `SHOW CREATE TABLE supertransporte_oc_novedades` confirma estructura correcta.

FIX-20260504-003 2026-05-04 Martha no podía ejecutar consultas: plan_code no reconocido por PlanGateService
`subscription_plans` (id=9) → `plan_code` + `app/Services/PlanGateServ…
Producción
Error / Síntoma:

Martha Lucia Cadena Mancera (user_id=57, team_id=53) veía el overlay "Actualiza tu plan" en `/consultas/directa` y no podía ejecutar ninguna consulta.

Root cause:

`subscription_plans.plan_code = 'paquete_10_consultas'` para el plan de Martha. `PlanGateService::getCurrentPlanCode()` aplica `strtoupper()` → `'PAQUETE_10_CONSULTAS'` que NO existe en el array `PLAN_LEVELS`. El método `getCurrentPlanLevel()` resuelve `PLAN_LEVELS['PAQUETE_10_CONSULTAS'] ?? 0` = nivel 0 (`LISTAS_RESTRICTIVAS`). La vista `/consultas/directa` está envuelta en `<x-plan-gate min-plan="BASIC">` que requiere nivel ≥ 1. `0 < 1` → gate bloquea toda la vista con el overlay de upgrade.

Fix aplicado:

`UPDATE subscription_plans SET plan_code = 'basic' WHERE id = 9 AND plan_code = 'paquete_10_consultas'` — alinea el plan_code con el valor reconocido (`BASIC` → nivel 1). Solo el equipo 53 (Martha) tenía activo ese plan_id. Sin cambio de código ni deploy.

Verificación:

`SELECT id, plan_code, plan_type FROM subscription_plans WHERE id = 9` → `plan_code = 'basic'`. La limpieza de caché `team_ready:53` fue aplicada. Al siguiente acceso, `PlanGateService::canAccess(team_53, 'BASIC')` retornará `true` y el formulario será visible.

FIX-20260504-002 2026-05-04 /admin/onboarding no mostraba los 10 teams creados directamente
`app/Http/Controllers/Admin/OnboardingController.php` (method `index`)…
Producción
Error / Síntoma:

`/admin/onboarding` mostraba 20 solicitudes pero `/admin/teams/services` mostraba 25 teams. Todos los super-admins deberían ver el mismo conjunto completo.

Root cause:

`OnboardingController::index()` lista `UserOnboardingRequest` (no `Team`). Los teams 37–46 fueron creados directamente vía importación sin pasar por el flujo de onboarding, por lo que no tenían fila en `user_onboarding_requests` y no aparecían en la vista.

Fix aplicado:

INSERT de 10 registros sintéticos en `user_onboarding_requests` (status=`approved`, referral_source=`direct_import`) para los teams 37–46, enlazando `team_id`, `company_id`, `company_name`, y el usuario owner de cada team. Sin cambio de código.

Verificación:

`SELECT COUNT(*) = 29 active` + LEFT JOIN confirmando que todos los 25 teams tienen `tiene_onboarding = SI`.

FIX-20260504-001 2026-05-04 Tablas public_kyc_links y public_kyc_submissions ausentes en producción
`app/Http/Controllers/PublicKycController.php` (líneas 30, 70, 98) y `…
Producción
Error / Síntoma:

"La recepción pública aún no está habilitada en este entorno." al intentar generar QR en `/recepcion/clientes`

Root cause:

Las tablas `public_kyc_links` y `public_kyc_submissions` no existían en `worlvetting_v360`. Los modelos y controladores estaban completos pero las migraciones nunca fueron creadas ni ejecutadas. El guard `publicKycTablesAvailable()` las detectaba ausentes y redirigía con ese mensaje.

Fix aplicado:

Creación directa de ambas tablas vía SQL en `worlvetting_v360` (script: `create_public_kyc_tables_20260504.sql`). Incluye PK, índices, y FK hacia `teams`, `users`, `business_flows`, `contrapartes`, `business_flow_executions`.

Verificación:

`SHOW TABLES LIKE 'public_kyc%'` + `DESCRIBE` de ambas tablas confirmó estructura completa con todas las columnas, UNIQUEs e índices.

¿Qué viene en las próximas versiones?

Estamos trabajando constantemente en nuevas funcionalidades y mejoras.

IA para análisis de riesgo App móvil Más integraciones oficiales Dashboards avanzados Automatización de compliance