# Fix Register

Registro maestro de correcciones. Actualizar incrementalmente; no crear registros duplicados.

## FIX-0030

- Fecha: 2026-06-26
- Estado: Implementada Fase 2
- Descripcion: Ampliar `Prospector` a motor multi-fuente con Google Maps / Places, Website oficial y OpenAI Web Search, manteniendo importacion segura a Accounts, deduplicacion y sincronizacion de informacion nueva.
- Archivos: `admin/config.prospector.php`, `admin/modules/Prospector/actions/Search.php`, `admin/modules/Prospector/actions/ImportSelected.php`, `admin/modules/Prospector/actions/SyncSelected.php`, `admin/modules/Prospector/services/ProspectorUtils.php`, `admin/modules/Prospector/services/ProspectorGooglePlacesConnector.php`, `admin/modules/Prospector/services/ProspectorWebsiteConnector.php`, `admin/modules/Prospector/services/ProspectorOpenAIConnector.php`, `admin/modules/Prospector/services/ProspectorResultMerger.php`, `admin/modules/Prospector/services/ProspectorDuplicateDetector.php`, `admin/modules/Prospector/services/ProspectorImportService.php`, `admin/modules/Prospector/views/Index.php`, `admin/layouts/v7/modules/Prospector/Index.tpl`, `admin/layouts/v7/modules/Prospector/resources/Prospector.js`, `techdocs/modules/Prospector/README.md`, `techdocs/modules/Prospector/change_log.md`, `techdocs/fixes/FIX_REGISTER.md`, `techdocs/index.html`.
- Tablas/metadata: columnas agregadas en `vtiger_prospector_searches` para fuentes/limites/costo/estado final; columnas agregadas en `vtiger_prospector_results` para place id, website, source URLs, JSON fusionado, duplicate/sync status, confidence score, costo, coordenadas, rating, categoria, horario y fuentes por campo.
- Rollback: restaurar backups puntuales en `techdocs/backups/`, desactivar botones de sincronizacion en UI y conservar columnas nuevas para no perder resultados historicos.
- Validacion: PHP sin errores; conectores Google Places/Website/OpenAI probados con `concreteras` en `Queretaro`; action `Search` con usuario admin guardo `search_id=8`, 5 consolidados, 1 nuevo y 4 existentes con informacion nueva; importacion creo Account `143`; sincronizacion actualizo Account `3`; URL sin sesion redirige a login.
- Reporte asociado: Prospector - Multi Source Search Engine Fase 2.

## FIX-0029

- Fecha: 2026-06-26
- Estado: Completada
- Descripcion: Personalizar footer global de Vtiger para eliminar el bloque visual estandar `Powered by vtiger CRM`, `Vtiger` y `Privacy Policy`, dejando `© 2026`.
- Archivos: `admin/layouts/v7/modules/Vtiger/Footer.tpl`, `techdocs/modules/Layout/change_log.md`, `techdocs/fixes/FIX_REGISTER.md`.
- Rollback: restaurar `techdocs/backups/admin_layouts_v7_modules_Vtiger_Footer.tpl.bak` y documentacion desde backups.
- Validacion: plantilla conserva contenedores funcionales y carga de `JSResources.tpl`; busqueda en `Footer.tpl` confirma que ya no contiene `Powered by vtiger CRM` ni `Privacy Policy`.
- Reporte asociado: Vtiger - Personalizar footer de Gravimex.

## FIX-0028

- Fecha: 2026-06-26
- Estado: Implementada Fase 1
- Descripcion: Extender `AI Buscar datos` en Accounts para detectar logo/favicon/imagen de marca desde fuentes publicas, mostrar preview en modal y guardar URL aprobada por el usuario.
- Archivos: `admin/modules/Accounts/actions/AIEnrichAccount.php`, `admin/modules/Accounts/actions/SaveAIEnrichment.php`, `admin/layouts/v7/modules/Accounts/resources/Detail.js`, `admin/layouts/v7/modules/Accounts/DetailViewHeaderTitle.tpl`, `techdocs/modules/Accounts/change_log.md`, `techdocs/fixes/FIX_REGISTER.md`.
- Tablas/metadata: campo Accounts `account_logo_url` (`Logo URL`) en `vtiger_accountscf`.
- Rollback: restaurar backups de `AIEnrichAccount.php`, `SaveAIEnrichment.php`, `Detail.js`, `DetailViewHeaderTitle.tpl` y docs; deshabilitar campo `account_logo_url` solo si se decide revertir la funcionalidad.
- Validacion: prueba con Account `record=5` encontro sugerencia `Logo de cuenta`, mostro `preview_type=image`, guardo `account_logo_url`, la URL responde `Content-Type: image/jpeg`, no se descargaron imagenes y no se expuso API Key.
- Reporte asociado: Accounts - AI Buscar datos: incluir busqueda automatica de logo de empresa.

## FIX-0027

- Fecha: 2026-06-26
- Estado: Implementada Fase 1
- Descripcion: Agregar herramienta `AI Contact Intelligence` en Detail View de Accounts para buscar personas publicas relacionadas con la cuenta actual, revisar sugerencias y crear Contacts seleccionados sin sobrescribir datos existentes.
- Archivos: `admin/layouts/v7/modules/Accounts/DetailViewHeaderTitle.tpl`, `admin/layouts/v7/modules/Accounts/resources/Detail.js`, `admin/modules/Accounts/actions/AIContactIntelligence.php`, `admin/modules/Accounts/actions/CreateAIContacts.php`, `techdocs/modules/Accounts/change_log.md`, `techdocs/modules/Contacts/change_log.md`, `techdocs/fixes/FIX_REGISTER.md`.
- Tablas/metadata: campos Contacts `confidence_score`, `linkedin_url`, `public_source`; picklist `leadsource=AI Contact Intelligence`.
- Rollback: restaurar backups de TPL/JS/docs; retirar actions `AIContactIntelligence.php` y `CreateAIContacts.php`; deshabilitar campos custom solo si se decide revertir la funcionalidad.
- Validacion: usuario `admin` id `1`; permisos `Accounts Detail/Edit=yes`, `Contacts CreateView=yes`; prueba `record=2` encontro 6 personas, creo Contact `142`, relaciono `accountid=2`, guardo fuente publica y bloqueo re-creacion como duplicado; action publica sin CSRF responde `Invalid request`.
- Reporte asociado: Accounts - AI Contact Intelligence Fase 1.

## FIX-0026

- Fecha: 2026-06-26
- Estado: Completada
- Descripcion: Completar integracion visible y permisos del modulo `Prospector` segun regla permanente de accesos Vtiger.
- Archivos: `admin/languages/es_es/Prospector.php`, `admin/languages/en_us/Prospector.php`, `admin/layouts/v7/skins/images/Prospector.png`, `admin/tabdata.php`, `admin/parent_tabdata.php`, `admin/user_privileges/user_privileges_1.php`, `admin/user_privileges/sharing_privileges_1.php`, `techdocs/modules/Prospector/change_log.md`, `techdocs/fixes/FIX_REGISTER.md`.
- Tablas/metadata: `vtiger_parenttabrel`, `vtiger_profile2tab`, `vtiger_profile2standardpermissions`, `vtiger_profile2utility`, `vtiger_app2tab`, `vtiger_tab`.
- Rollback: retirar traducciones/icono si se desinstala Prospector y regenerar caches Vtiger despues de revertir metadata.
- Validacion: usuario `admin` id `1`; permisos `Prospector index=yes`, `Prospector DetailView=yes`, `Accounts EditView=yes`; menu `Marketing` contiene tabid `52`; URL sin sesion redirige a login; reimportacion de resultado existente bloquea duplicado.
- Reporte asociado: Regla permanente - Registro automatico de permisos, menus y accesos.

## FIX-0025

- Fecha: 2026-06-26
- Estado: Implementada Fase 1 MVP
- Descripcion: Crear modulo `Prospector` para buscar prospectos con AI Web Search, revisar resultados, detectar duplicados e importar seleccionados a Accounts.
- Archivos: `admin/modules/Prospector/Prospector.php`, `admin/modules/Prospector/models/Module.php`, `admin/modules/Prospector/views/Index.php`, `admin/modules/Prospector/actions/Search.php`, `admin/modules/Prospector/actions/ImportSelected.php`, `admin/layouts/v7/modules/Prospector/Index.tpl`, `admin/layouts/v7/modules/Prospector/resources/Prospector.js`, `techdocs/modules/Prospector/README.md`, `techdocs/modules/Prospector/change_log.md`, `techdocs/fixes/FIX_REGISTER.md`.
- Tablas: `vtiger_prospector_searches`, `vtiger_prospector_results`.
- Rollback: retirar registro `Prospector` de `vtiger_tab`/`vtiger_app2tab`/permisos, respaldar y eliminar tablas si se decide desinstalar, retirar archivos `admin/modules/Prospector` y `layouts/v7/modules/Prospector`, restaurar `techdocs/fixes/FIX_REGISTER.md` desde backup.
- Validacion: PHP sin errores; vista sin sesion redirige a login; action publica sin CSRF no ejecuta; busqueda `concreteras` en `Queretaro` encontro 10 prospectos; importacion de prueba creo Account `140`; no se expone API Key.
- Reporte asociado: Vtiger - Prospector Fase 1 MVP.

## FIX-0024

- Fecha: 2026-06-26
- Estado: Implementada y probada con una cuenta
- Descripcion: Agregar accion masiva `Geocodificar seleccionadas` para llenar `account_geo_latitude` y `account_geo_longitude` desde direccion fiscal de Accounts.
- Archivos: `admin/modules/Accounts/models/ListView.php`, `admin/modules/Accounts/actions/GeocodeSelected.php`, `admin/layouts/v7/modules/Accounts/resources/List.js`, `techdocs/modules/Accounts/README.md`, `techdocs/modules/Accounts/change_log.md`, `techdocs/fixes/FIX_REGISTER.md`.
- Rollback: restaurar `techdocs/backups/admin_modules_Accounts_models_ListView.php.bak`, `techdocs/backups/admin_layouts_v7_modules_Accounts_resources_List.js.bak`, docs desde backups y retirar `admin/modules/Accounts/actions/GeocodeSelected.php` si se desactiva la funcion.
- Validacion: PHP sin errores; acceso sin sesion no ejecuta por CSRF/sesion; limite server-side 25; prueba `record=2` guardo coordenadas y estado `Geolocalizado`; conteo actual 1 con coordenadas y 137 sin coordenadas.
- Reporte asociado: Accounts - Geocodificar cuentas seleccionadas para Mapa de clientes.

## FIX-0023

- Fecha: 2026-06-26
- Estado: Implementada, pendiente de cuentas geolocalizadas
- Descripcion: Agregar vista interna `Mapa de clientes` en Accounts con filtros por proceso comercial, vendedor y busqueda.
- Archivos: `admin/modules/Accounts/models/Module.php`, `admin/modules/Accounts/views/ClientMap.php`, `admin/modules/Accounts/actions/ClientMapData.php`, `admin/layouts/v7/modules/Accounts/ClientMap.tpl`, `admin/layouts/v7/modules/Accounts/resources/ClientMap.js`, `techdocs/modules/Accounts/README.md`, `techdocs/modules/Accounts/change_log.md`, `techdocs/fixes/FIX_REGISTER.md`.
- Rollback: restaurar `techdocs/backups/admin_modules_Accounts_models_Module.php.bak`, docs desde backups y retirar los archivos nuevos `ClientMap.php`, `ClientMapData.php`, `ClientMap.tpl`, `ClientMap.js` si se desactiva la funcion.
- Validacion: PHP sin errores; endpoint y vista sin sesion responden `Login is required`; datos originales mostraban 138 cuentas activas, 0 con coordenadas y 138 sin coordenadas; no se hicieron llamadas masivas a Google.
- Reporte asociado: Accounts - Widget de mapa de clientes con filtros por proceso.

## FIX-0022

- Fecha: 2026-06-26
- Estado: Implementada con prueba controlada parcial
- Descripcion: Agregar procesamiento masivo `AI -> Enriquecer seleccionadas` en Accounts List View.
- Archivos: `admin/modules/Accounts/models/ListView.php`, `admin/layouts/v7/modules/Accounts/resources/List.js`, `admin/modules/Accounts/actions/AIEnrichmentBatchHelper.php`, `admin/modules/Accounts/actions/StartAIEnrichmentBatch.php`, `admin/modules/Accounts/actions/ProcessAIEnrichmentBatch.php`, `admin/modules/Accounts/actions/CancelAIEnrichmentBatch.php`, `admin/modules/Accounts/actions/DownloadAIEnrichmentBatchReport.php`, `techdocs/modules/Accounts/README.md`, `techdocs/modules/Accounts/change_log.md`, `techdocs/fixes/FIX_REGISTER.md`.
- Rollback: restaurar `techdocs/backups/admin_modules_Accounts_models_ListView.php.bak`, docs desde backups y retirar los archivos nuevos de `layouts/v7/modules/Accounts/resources/List.js` y actions batch si se desactiva la funcion.
- Validacion: PHP sin errores; accion publica sin sesion bloqueada por CSRF/sesion; lote de 10 cuentas creado por CLI con admin, 1 cuenta procesada y job cancelado preventivamente.
- Reporte asociado: Accounts - AI Enriquecer cuentas seleccionadas.

## FIX-0021

- Fecha: 2026-06-26
- Estado: Implementada
- Descripcion: Corregir recoleccion de checkboxes seleccionados en `AI Buscar datos` de Accounts.
- Archivos: `admin/layouts/v7/modules/Accounts/resources/Detail.js`, `admin/modules/Accounts/actions/SaveAIEnrichment.php`, `techdocs/modules/Accounts/change_log.md`, `techdocs/fixes/FIX_REGISTER.md`.
- Rollback: restaurar respaldos puntuales `techdocs/backups/admin_layouts_v7_modules_Accounts_resources_Detail.js.bak`, `techdocs/backups/admin_modules_Accounts_actions_SaveAIEnrichment.php.bak`, `techdocs/backups/techdocs_modules_Accounts_change_log.md.bak`, `techdocs/backups/techdocs_fixes_FIX_REGISTER.md.bak`.
- Validacion: selector corregido a `input[type="checkbox"][data-ai-field]:checked`; payload conserva solo campos marcados; backend acepta JSON string o array.
- Reporte asociado: Fix AI Buscar datos: checkboxes seleccionados no se envian.

## FIX-0020

- Fecha: 2026-06-26
- Estado: Implementada con API Key pendiente/configurable
- Descripcion: Agregar `AI Buscar datos` en Accounts para sugerir datos publicos y guardar solo campos aprobados por el usuario.
- Archivos: `admin/config.accounts_ai_enrichment.php`, `admin/modules/Accounts/actions/AIEnrichAccount.php`, `admin/modules/Accounts/actions/SaveAIEnrichment.php`, `admin/layouts/v7/modules/Accounts/DetailViewHeaderTitle.tpl`, `admin/layouts/v7/modules/Accounts/resources/Detail.js`, `techdocs/modules/Accounts/change_log.md`, `techdocs/fixes/FIX_REGISTER.md`.
- Rollback: restaurar respaldos puntuales desde `techdocs/backups/` para TPL/JS/docs y retirar `admin/config.accounts_ai_enrichment.php`, `admin/modules/Accounts/actions/AIEnrichAccount.php`, `admin/modules/Accounts/actions/SaveAIEnrichment.php` si se desactiva la funcion.
- Validacion: endpoints exigen sesion, CSRF/write access y permiso `EditView`; API Key solo server-side; sin API Key configurada devuelve mensaje claro; no guarda datos sin seleccion explicita.
- Reporte asociado: Accounts - AI Web Enrichment para completar datos de cuenta.

## FIX-0019

- Fecha: 2026-06-26
- Estado: Implementada, pendiente de prueba con click autenticado del usuario autorizado
- Descripcion: Agregar boton privado `Limpiar cache` en Vtiger para limpiar cache segura desde el topbar.
- Archivos: `admin/layouts/v7/modules/Vtiger/partials/Topbar.tpl`, `admin/layouts/v7/modules/Vtiger/resources/Vtiger.js`, `admin/modules/Users/actions/ClearVtigerCache.php`, `techdocs/modules/Users/change_log.md`, `techdocs/fixes/FIX_REGISTER.md`.
- Rollback: restaurar respaldos `techdocs/backups/admin_layouts_v7_modules_Vtiger_partials_Topbar.tpl.bak`, `techdocs/backups/admin_layouts_v7_modules_Vtiger_resources_Vtiger.js.bak`, `techdocs/backups/techdocs_modules_Users_change_log.md.bak`, `techdocs/backups/techdocs_fixes_FIX_REGISTER.md.bak` y retirar `admin/modules/Users/actions/ClearVtigerCache.php`.
- Validacion: boton renderizado solo para `id=1`, `user_name=admin`; accion valida sesion, CSRF/write access y usuario exacto; lista blanca de cache excluye uploads, storage, documents, user_privileges, config, logs y `.htaccess`.
- Reporte asociado: Boton privado para limpiar cache Vtiger con un click.

## FIX-0018

- Fecha: 2026-06-26
- Estado: Completada
- Descripcion: Presentar el tiempo estimado en formato legible de horas y minutos sin cambiar el almacenamiento numerico en minutos.
- Archivos: `admin/modules/Accounts/actions/CalculateDistance.php`, `admin/modules/Accounts/actions/SaveDistanceGeo.php`, `admin/layouts/v7/modules/Accounts/resources/Detail.js`, `techdocs/modules/Accounts/change_log.md`, `techdocs/fixes/FIX_REGISTER.md`.
- Rollback: restaurar respaldos puntuales desde `techdocs/backups/admin_modules_Accounts_actions_CalculateDistance.php.bak`, `techdocs/backups/admin_modules_Accounts_actions_SaveDistanceGeo.php.bak`, `techdocs/backups/admin_layouts_v7_modules_Accounts_resources_Detail.js.bak`, `techdocs/backups/techdocs_modules_Accounts_change_log.md.bak`, `techdocs/backups/techdocs_fixes_FIX_REGISTER.md.bak`.
- Validacion: `formatDurationMinutes(98)=1 h 38 min`, `60=1 h`, `45=45 min`, `121=2 h 1 min`; `account_geo_duration_min` conserva minutos.
- Reporte asociado: Mejorar presentacion del tiempo estimado.

## FIX-0017

- Fecha: 2026-06-26
- Estado: Completada
- Descripcion: Cambiar solo etiquetas visibles del origen en Accounts a `Mina` y `Patio`.
- Archivos: `admin/config.accounts_distance.php`, `admin/layouts/v7/modules/Accounts/resources/Detail.js`, `techdocs/modules/Accounts/change_log.md`, `techdocs/fixes/FIX_REGISTER.md`.
- Rollback: restaurar respaldos puntuales desde `techdocs/backups/admin_config_accounts_distance.php.bak`, `techdocs/backups/admin_layouts_v7_modules_Accounts_resources_Detail.js.bak`, `techdocs/backups/techdocs_modules_Accounts_change_log.md.bak`, `techdocs/backups/techdocs_fixes_FIX_REGISTER.md.bak`.
- Validacion: claves internas `mina` y `patio` se mantienen; direcciones/coordenadas no se modificaron; Distance Matrix sigue respondiendo correctamente.
- Reporte asociado: Selector de origen Accounts.

## FIX-0016

- Fecha: 2026-06-26
- Estado: Completada
- Descripcion: Guardar el resultado actual de `Calcular distancia` en campos de geolocalizacion de Accounts.
- Archivos: `admin/modules/Accounts/actions/SaveDistanceGeo.php`, `admin/layouts/v7/modules/Accounts/resources/Detail.js`, `techdocs/modules/Accounts/change_log.md`, `techdocs/fixes/FIX_REGISTER.md`.
- Rollback: restaurar respaldos puntuales desde `techdocs/backups/admin_layouts_v7_modules_Accounts_resources_Detail.js.bak`, `techdocs/backups/techdocs_modules_Accounts_change_log.md.bak`, `techdocs/backups/techdocs_fixes_FIX_REGISTER.md.bak` y retirar `admin/modules/Accounts/actions/SaveDistanceGeo.php` si se desactiva la funcion.
- Validacion: campos reales identificados en `vtiger_accountscf`; action exige sesion, POST con CSRF y permiso `EditView`; no permite GET publico; `record=2` quedo guardado con distancia, duracion, estado y resumen de ruta.
- Formato: `account_geo_normalized_address` guarda texto multilinea con origen, destino, distancia, tiempo, fecha/hora y URL de ruta; `account_geo_distance_km` guarda km; `account_geo_duration_min` guarda minutos; `account_geo_route_status` guarda `Calculada`.
- Seguridad: no se guarda API Key; no se expone en JS/action/docs.
- Reporte asociado: Guardar resultado de distancia en campo de geolocalizacion.

## FIX-0015

- Fecha: 2026-06-26
- Estado: Completada
- Descripcion: Agregar mapa embebido de referencia al resultado de `Calcular distancia` en Accounts.
- Archivos: `admin/modules/Accounts/actions/CalculateDistance.php`, `admin/layouts/v7/modules/Accounts/resources/Detail.js`, `admin/config.accounts_distance.php`, `techdocs/modules/Accounts/README.md`, `techdocs/modules/Accounts/change_log.md`, `techdocs/fixes/FIX_REGISTER.md`.
- Rollback: restaurar respaldos puntuales desde `techdocs/backups/admin_modules_Accounts_actions_CalculateDistance.php.bak`, `techdocs/backups/admin_layouts_v7_modules_Accounts_resources_Detail.js.bak`, `techdocs/backups/admin_config_accounts_distance.php.bak`, `techdocs/backups/techdocs_modules_Accounts_README.md.bak`, `techdocs/backups/techdocs_modules_Accounts_change_log.md.bak`, `techdocs/backups/techdocs_fixes_FIX_REGISTER.md.bak`.
- Validacion: `CalculateDistance.php` devuelve `route_url` y `embed_map_url`; `Detail.js` renderiza boton `Ver ruta en Google Maps` e iframe; Distance Matrix responde OK para `record=2`; Maps Embed API responde HTTP 200 por GET.
- Seguridad: la key no esta en JS/TPL; el iframe de Maps Embed API requiere key en el `src` generado por backend y debe restringirse por HTTP Referrer `gravimex.com` y API Maps Embed API.
- Reporte asociado: Mapa embebido en resultado de Calcular distancia.

## FIX-0014

- Fecha: 2026-06-26
- Estado: Implementada, pendiente de confirmacion visual del usuario
- Descripcion: Hacer robustos los clicks reales de `Ver mapa` y `Calcular distancia` en Accounts mediante clases propias, fallback nativo y delegacion global de eventos.
- Archivos: `admin/layouts/v7/modules/Accounts/DetailViewHeaderTitle.tpl`, `admin/layouts/v7/modules/Accounts/resources/Detail.js`, `techdocs/modules/Accounts/change_log.md`, `techdocs/fixes/FIX_REGISTER.md`.
- Rollback: restaurar respaldos puntuales desde `techdocs/backups/admin_layouts_v7_modules_Accounts_DetailViewHeaderTitle.tpl.bak`, `techdocs/backups/admin_layouts_v7_modules_Accounts_resources_Detail.js.bak`, `techdocs/backups/techdocs_modules_Accounts_change_log.md.bak`, `techdocs/backups/techdocs_fixes_FIX_REGISTER.md.bak`.
- Validacion: HTML fuente contiene `gravimex-view-map`, `gravimex-calculate-distance`, `data-map-url`, `data-map-link`, `data-api-url`; JS contiene delegacion global sobre `document`; backend Distance Matrix sigue OK para `record=2`; no hay API Key en TPL/JS/action/docs.
- Reporte asociado: Debug real navegador botones Ver mapa y Calcular distancia.

## FIX-0013

- Fecha: 2026-06-26
- Estado: Completada
- Descripcion: Restaurar funcionamiento de `Ver mapa` y `Calcular distancia` en Accounts tras detectar que la logica de placeholder vaciaba la API Key real.
- Archivos: `admin/config.accounts_distance.php`, `admin/layouts/v7/modules/Accounts/resources/Detail.js`, `techdocs/modules/Accounts/change_log.md`, `techdocs/fixes/FIX_REGISTER.md`.
- Rollback: restaurar respaldos puntuales desde `techdocs/backups/admin_config_accounts_distance.php.bak`, `techdocs/backups/admin_layouts_v7_modules_Accounts_resources_Detail.js.bak`, `techdocs/backups/techdocs_modules_Accounts_change_log.md.bak`, `techdocs/backups/techdocs_fixes_FIX_REGISTER.md.bak`.
- Validacion: PHP config/action sin errores; clave server-side configurada; Google Distance Matrix devuelve OK para `record=2` desde Mina; `config.accounts_distance.php` responde 403; endpoint sin sesion responde `Login is required`; no se detecto clave en TPL/JS/action.
- Reporte asociado: Fix urgente Accounts Maps/Distance.

## FIX-0012

- Fecha: 2026-06-26
- Estado: Implementado con API Key pendiente
- Descripcion: Agregar en Accounts calculo de distancia en carretera desde origen Gravimex hasta direccion fiscal del cliente.
- Archivos: `admin/config.accounts_distance.php`, `admin/modules/Accounts/actions/CalculateDistance.php`, `admin/layouts/v7/modules/Accounts/DetailViewHeaderTitle.tpl`, `admin/layouts/v7/modules/Accounts/resources/Detail.js`, `techdocs/modules/Accounts/README.md`, `techdocs/modules/Accounts/change_log.md`, `techdocs/fixes/FIX_REGISTER.md`.
- Rollback: restaurar respaldos puntuales desde `techdocs/backups/` para TPL/JS/docs y retirar los dos archivos nuevos de configuracion/action si se decide desactivar la funcion.
- Validacion: boton visible en Accounts, modal con selector de origen, endpoint autenticado por sesion/permisos, API Key solo server-side, sin escrituras en DB. `config.accounts_distance.php` lee `GRAVIMEX_GOOGLE_MAPS_API_KEY` desde entorno o constante PHP con placeholder. Calculo real requiere API Key Google y direccion final del Patio.
- Reporte asociado: Technical Intelligence Center / Accounts.

## FIX-0001

- Fecha: 2026-06-26
- Estado: Completada
- Descripcion: Eliminacion autorizada de `admin/gravimex.zip` por exposicion publica P0.
- Archivos: `admin/gravimex.zip`
- Rollback: Restaurar desde backup solo si negocio lo justifica, preferiblemente fuera de webroot.
- Validacion: URL `/admin/gravimex.zip` responde HTTP 404.
- Reporte asociado: Fase 3 Public Surface Audit.

## FIX-0002

- Fecha: 2026-06-26
- Estado: Completada
- Descripcion: Bloquear acceso publico a `admin/composer.json` y `admin/composer.lock`.
- Archivos: `admin/.htaccess`, `admin/composer.json`, `admin/composer.lock`.
- Rollback: Restaurar `admin/.htaccess` desde `techdocs/backups/admin_htaccess.bak` o retirar reglas especificas.
- Validacion: HTTP 403 para ambos; `/admin/` e `/admin/index.php` responden HTTP 200.
- Reporte asociado: Master Remediation Plan.

## FIX-0003

- Fecha: 2026-06-26
- Estado: Completada
- Descripcion: Bloquear ZIP/TAR/GZ publicos bajo `admin/packages`, `admin/cache` y `admin/libraries/jquery/pdfjs/web`.
- Archivos: `admin/.htaccess`.
- Rollback: Revertir regla.
- Validacion: muestras HTTP 403 para `Mobile.zip`, `Project.zip`, `web.tar`, `web.tar.gz`; CRM operativo.
- Reporte asociado: Master Remediation Plan.

## FIX-0004

- Fecha: 2026-06-26
- Estado: Completada
- Descripcion: Restringir `/admin/migrate/`.
- Archivos: `admin/.htaccess`, `admin/migrate/`.
- Rollback: Revertir regla `RewriteRule ^migrate`.
- Validacion: HTTP 403 para `/admin/migrate/`; CRM operativo.
- Reporte asociado: Master Remediation Plan.

## FIX-0005

- Fecha: 2026-06-26
- Estado: Completada
- Descripcion: Restringir KCFinder y corregir estrategia de uploads.
- Archivos: `admin/.htaccess`, `admin/kcfinder/`, `admin/test/upload/`.
- Rollback: Revertir regla `RewriteRule ^kcfinder/.*\.php$`.
- Validacion: `/admin/kcfinder/browse.php` y `/admin/kcfinder/upload.php` responden HTTP 403 para acceso publico. Flujo autorizado queda pendiente de validacion con usuario real si se usa KCFinder.
- Reporte asociado: Architecture Deep Audit / Public Surface Audit.

## FIX-0006

- Fecha: 2026-06-26
- Estado: Completada
- Descripcion: Restringir ejecucion HTTP publica de `vtigercron.php`.
- Archivos: `admin/.htaccess`, `admin/vtigercron.php`.
- Rollback: Revertir regla `RewriteRule ^vtigercron\.php$`.
- Validacion: `/admin/vtigercron.php` responde HTTP 403; `/admin/` responde HTTP 200. Ejecucion CLI no fue modificada.
- Reporte asociado: Master Remediation Plan.

## FIX-0007

- Fecha: 2026-06-26
- Estado: Completada
- Descripcion: Agregar headers HTTP basicos de seguridad para `/admin`.
- Archivos: `admin/.htaccess`.
- Rollback: Retirar bloque `mod_headers`.
- Validacion: `/admin/` muestra `X-Content-Type-Options`, `X-Frame-Options`, `Referrer-Policy`, `Permissions-Policy`.
- Reporte asociado: Master Remediation Plan.

## FIX-0008

- Fecha: 2026-06-26
- Estado: Completada
- Descripcion: Bloquear acceso HTTP publico a directorios residuales de alto riesgo sin eliminarlos.
- Archivos: `admin/.htaccess`, directorios `migrate`, `pkg`, `packages`, `test`, `cache`.
- Rollback: Revertir reglas `RewriteRule` correspondientes.
- Validacion: rutas publicas auditadas responden HTTP 403; no se eliminaron directorios.
- Reporte asociado: Master Remediation Plan.

## FIX-0009

- Fecha: 2026-06-26
- Estado: Completada
- Descripcion: Corregir `Ver mapa` en Accounts evitando la dependencia legacy de Google Maps JavaScript API sin configurar.
- Archivos: `admin/layouts/v7/modules/Accounts/DetailViewHeaderTitle.tpl`, `admin/layouts/v7/modules/Accounts/resources/Detail.js`.
- Rollback: Restaurar respaldos `techdocs/backups/admin_layouts_v7_modules_Accounts_DetailViewHeaderTitle.tpl.bak` y `techdocs/backups/admin_layouts_v7_modules_Accounts_resources_Detail.js.bak`.
- Validacion: el enlace de Accounts consulta `Google_MapAjax`, codifica la direccion y abre Google Maps embebido por URL web sin API Key.
- Reporte asociado: Diagnostico y Correccion del Mapa en Accounts.

## FIX-0010

- Fecha: 2026-06-26
- Estado: Completada
- Descripcion: Reimplementar `Ver mapa` en Accounts como enlace HTML directo a Google Maps, sin popup, iframe, API Key ni JavaScript de mapa.
- Archivos: `admin/layouts/v7/modules/Accounts/DetailViewHeaderTitle.tpl`, `admin/layouts/v7/modules/Accounts/resources/Detail.js`.
- Rollback: Restaurar respaldos `techdocs/backups/admin_layouts_v7_modules_Accounts_DetailViewHeaderTitle.tpl.bak` y `techdocs/backups/admin_layouts_v7_modules_Accounts_resources_Detail.js.bak`.
- Validacion: enlace generado con `bill_street`, `bill_city`, `bill_state`, `bill_code`, `bill_country`; URL final `https://www.google.com/maps/search/?api=1&query=<direccion_codificada>` responde HTTP 200.
- Reporte asociado: Reimplementacion completa de Ver mapa en Accounts.

## FIX-0011

- Fecha: 2026-06-26
- Estado: Completada
- Descripcion: Abrir `Ver mapa` en modal interno de Vtiger para Accounts usando Google Maps embebible sin API Key.
- Archivos: `admin/layouts/v7/modules/Accounts/DetailViewHeaderTitle.tpl`, `admin/layouts/v7/modules/Accounts/resources/Detail.js`.
- Rollback: Restaurar respaldos `techdocs/backups/admin_layouts_v7_modules_Accounts_DetailViewHeaderTitle.tpl.bak` y `techdocs/backups/admin_layouts_v7_modules_Accounts_resources_Detail.js.bak`.
- Validacion: iframe con `https://www.google.com/maps?q=<direccion_codificada>&output=embed`, link alternativo a Google Maps Search y sin llamadas a Google Maps JavaScript API.
- Reporte asociado: Abrir Ver mapa en ventana emergente dentro de Accounts.
