# Reporte Técnico: Estado de la Plataforma y Guía de GitHub

Este documento resume las actualizaciones y estabilizaciones recientes en la plataforma JoinTrust. Sirve como bitácora de migración de equipo y sincronización para el repositorio de GitHub.

## 1. Resumen de Actualizaciones y Estabilización (Mayo 2026)

Se han consolidado y estabilizado funcionalidades críticas del Dashboard administrativo y la vista del Domiciliario, resolviendo errores en tiempo de ejecución, de consistencia de base de datos y de UX.

### 📊 Estabilización del Dashboard Administrativo
- **Corrección de Scope en Alpine.js**: Se corrigieron errores en consola de tipo `ReferenceError` (`openAccordion is not defined`, `tab is not defined`, `ventas is not defined`). El fallo era provocado por el anidamiento inválido de etiquetas HTML (botones dentro de botones/enlaces), lo que causaba que el navegador cerrara prematuramente el árbol del DOM y rompiera el ámbito de inicialización de AlpineJS (`x-data="biAnalytics()"`). Se reemplazaron las cabeceras por contenedores `div` clickeables.
- **Sección de Cartera Prioritaria**: Se reestructuró la maquetación del Dashboard para colocar la sección de **Cartera** en primera posición y se envolvieron las secciones principales en acordeones replegables para mejorar la navegación vertical del usuario.
- **Corrección de Rutas SVG**: Se corrigieron errores tipográficos vectoriales en la sección de Cartera (ej. `d="... 1.1/0 ..."` corregido a `1.11 0`), eliminando los errores de dibujado en la consola del navegador.

### 📦 Gestión y Trazabilidad de Pedidos
- **Eliminación Lógica vs Física**: Se refactorizó la lógica en `PedidoController` para evitar la pérdida de trazabilidad en cobros, rutas e inventario. Ahora, al "eliminar" un pedido desde el Dashboard, el sistema realiza una **cancelación lógica** resguardando el historial contable y de stock en lugar de borrarlo físicamente de la base de datos.
- **Protección de Edición de Pedidos**: 
  - Se deshabilitó el botón de edición para cualquier pedido que se encuentre en estado `en_empaque`, `en_ruta`, `entregado` o `cancelado` en las vistas de **Tabla** (`table-view.blade.php`) y de **Kanban** (`kanban-board.blade.php`).
  - Se implementó un *tooltip* descriptivo en la interfaz: *"No se puede modificar (el pedido ya está en empaque o despachado)"*.
  - Se agregó una validación preventiva en JS (`scripts.blade.php`) para impedir la llamada o apertura del modal de edición si el estado no es apto (anterior a `en_empaque`).

### 🛵 Optimización del Rol de Domiciliario
- **Restricción de Entrega Prematura**: En la vista móvil del domiciliario (`mobile-delivery-actions.blade.php`), se restringió el botón **"Completar Entrega"** para que solo se muestre si el pedido está en estado `en_ruta`. Si el pedido está en empaque (`en_empaque`), se muestra un indicador deshabilitado de color gris con la leyenda *"Esperando Despacho"*.
- **Corrección de BadMethodCallException**: Se corrigió el error del servidor al intentar reportar novedades o subir evidencias de entrega. El fallo ocurría porque el modelo `RutaDetalle` carecía de las relaciones Eloquent `ruta()` y `pedido()`. Se definieron correctamente estas relaciones en `app/Models/RutaDetalle.php`.
- **Estandarización de Colores**: Se revisaron y homogeneizaron los colores en la visual del Domiciliario, alineándolos con la paleta de identidad general de la plataforma.

### 📅 Estandarización de Zona Horaria
- Se estableció `'America/Bogota'` como el estándar absoluto para operaciones de fecha y hora, previniendo desfases logísticos y errores de asignación nocturna.

---

## 2. Inventario de Componentes para GitHub

Para asegurar una sincronización limpia sin archivos de desarrollo o configuración local:

### Directorios que DEBEN ir al Repositorio
- `app/`: Lógica (Controladores, Modelos, Mails, Requests).
- `config/`: Archivos de configuración de Laravel.
- `database/`: Migraciones, Seeders y Factories.
- `public/`: Activos compilados (CSS, JS, imágenes base).
- `resources/`: Vistas (Blade), JS/CSS fuente, traducciones (`lang/`).
- `routes/`: Rutas de la aplicación (`web.php`, `api.php`).
- `tests/`: Pruebas automatizadas.

### Archivos de Configuración Requeridos
- `artisan`, `composer.json`, `composer.lock`.
- `package.json`, `package-lock.json`, `vite.config.js`.
- `.env.example` (Plantilla de configuración sin credenciales reales).
- `.gitignore` (Mantiene fuera temporales y dependencias).
- `README.md` (Instrucciones generales).

---

## 3. Archivos Modificados Recientemente (Para subir vía FTP / Git)

Los archivos modificados y estabilizados se encuentran listos para migración o subida FTP dentro de la carpeta `export_ftp/`:
- `export_ftp/app/Models/RutaDetalle.php` (Relaciones `ruta()`, `pedido()` y campo `pago_domiciliario`)
- `export_ftp/resources/views/dashboard.blade.php` (Refactor de acordeones y SVG del dashboard)
- `export_ftp/resources/views/rutas/despacho.blade.php` (Corrección de bucle de finalización manual de ruta)
- `export_ftp/resources/views/rutas/partials/mobile-delivery-actions.blade.php` (Restricción de botón de entrega móvil)
- `export_ftp/resources/views/pedidos/partials/table-view.blade.php` (Deshabilitado de edición en tabla de pedidos + tooltip)
- `export_ftp/resources/views/pedidos/partials/kanban-board.blade.php` (Deshabilitado de edición en Kanban + tooltip)
- `export_ftp/resources/views/pedidos/partials/scripts.blade.php` (Validación y bloqueo JS para edición de pedidos en empaque o más avanzados)

### Módulo de Liquidación de Planillas (Mayo 2026)
- `export_ftp/database/migrations/2026_05_20_000000_add_payroll_settlement_to_delivery_system.php` (Migración de BD)
- `export_ftp/app/Models/Zona.php` (Campo `pago_domiciliario` para tarifas por zona)
- `export_ftp/app/Http/Controllers/ZonaController.php` (Validación, guardado de tarifa y ordenamiento dinámico por nombre, clientes o prioridad)
- `export_ftp/app/Models/Ruta.php` (Campos de nómina, ajustes y liquidación)
- `export_ftp/app/Http/Controllers/RutaController.php` (Auto-guardado de tarifa zona en pivote al crear ruta)
- `export_ftp/app/Http/Controllers/PlanillaLiquidacionController.php` (Controlador de liquidación: index, show, save, toggle)
- `export_ftp/routes/web.php` (Rutas web del módulo)
- `export_ftp/resources/views/layouts/app.blade.php` (Enlaces de menú desktop y móvil)
- `export_ftp/resources/views/zonas/modals/zona-form.blade.php` (Campo de entrada de tarifa en zona)
- `export_ftp/resources/views/zonas/index.blade.php` (Instanciación de tarifa, dropdown de ordenación y botón de dirección en Alpine)
- `export_ftp/resources/views/zonas/table.blade.php` (Visualización del precio del domicilio y pago del domiciliario en la tabla)
- `export_ftp/resources/views/planillas/index.blade.php` (Vista de liquidaciones: tabla y modal interactivo de nómina y conciliación)

---

## 4. Instrucciones para la IA en el Cambio de PC

Si se requiere reanudar el desarrollo en otra máquina, el nuevo agente de IA debe leer:
1. **Este archivo (`REPORTE_TECNICO.md`)** para entender el estado general actual y qué se modificó de último.
2. **`documentations/PROJECT_LOG.md`** para revisar el historial completo de cambios detallado.
3. **El archivo `.cursorrules`** para conocer el estándar de diseño ("Glass Premium", HSL, Hojas de estilo y no Swal externo).
4. Configurar el archivo `.env` local usando `.env.example`, ajustar la conexión de base de datos a `bd_join` e importar la base de datos de prueba si es necesario.
