# Manifiesto de cambios SmartPlus

Este archivo sirve para preparar la revisión y el commit por alcance. No autoriza
un despliegue ni sustituye la revisión manual del diff.

En la revision actual el worktree contiene 161 entradas modificadas o nuevas.
Este manifiesto no autoriza incluirlas todas: deben separarse por alcance
funcional, infraestructura, artefactos compilados y cambios no relacionados.

## Incluidos en el alcance funcional

- Presentaciones, precios y puntos:
  - `app/Models/Tenant/ItemUnitType.php`
  - `app/Models/Tenant/ItemUnitTypePriceRule.php`
  - `app/Models/Tenant/ItemUnitTypePointRule.php`
  - `app/Models/Tenant/PriceList.php`
  - `app/Models/Tenant/LoyaltyCampaign.php`
  - `app/Services/Tenant/PresentationPriceResolver.php`
  - `app/Services/Tenant/PresentationPointIntegrationService.php`
  - `modules/Item/Http/Controllers/PresentationConfigurationController.php`
  - `modules/Item/Routes/api.php`
  - `modules/Item/Routes/web.php`
  - `modules/Item/Resources/assets/js/views/presentation-config/`
  - `modules/Item/Resources/views/presentation-config/`
  - `database/migrations/tenant/2026_10_19_000001*` a `000004*`
  - `database/migrations/tenant/2026_10_19_000015*` a `000018*`

- Pedido, entrega, pagos, rutas, GPS, FCM y bidones:
  - `modules/Order/`
  - `app/Jobs/SendDeliveryAssignedNotification.php`
  - `app/Services/Tenant/Container*`
  - `app/Services/Tenant/Delivery*`
  - `app/Services/Tenant/RouteContainerSettlementService.php`
  - `app/Services/Tenant/DeliveryRouteCashSettlementService.php`
  - `app/Services/Tenant/DeliveryAdjustmentApprovalService.php`
  - `app/Services/Tenant/DeliveryContainerQrService.php`
  - `app/Models/Tenant/Container*`
  - `app/Models/Tenant/CustomerContainerBalance.php`
  - `app/Models/Tenant/DeliveryOrderItemLine.php`
  - `app/Models/Tenant/OrderContainerLine.php`
  - `app/Models/Tenant/RouteContainerLoad.php`
  - `database/migrations/tenant/2026_10_19_000005*` a `000014*`
  - `database/migrations/tenant/2026_10_20_000002*`
  - `database/migrations/tenant/2026_10_20_000003*`
  - `database/migrations/tenant/2026_10_20_000004*`
  - `database/migrations/tenant/2026_10_20_000005*`
  - `database/migrations/tenant/2026_10_20_000006*`
  - `database/migrations/tenant/2026_10_20_000007*`
  - `mobile/delivery_app/`
  - La entrega conserva `prepared_quantity`, cantidades entregadas, rechazadas,
    devueltas y sustituciones sin reescribir el pedido original.
  - El APK consulta opciones de sustitucion y calcula el cobro con su precio/presentacion.
  - La carga inicial de ruta admite QR fisicos y conserva movimientos individuales idempotentes.
  - Las diferencias de entrega requieren aprobacion de caja/vendedor antes del cobro.

- POS:
  - `app/Http/Controllers/Tenant/PosController.php`
  - `app/Http/Resources/Tenant/ItemCollection.php`
  - `app/Models/Tenant/Item.php`
  - `resources/js/views/tenant/pos/`

## Requieren revisión independiente antes de incluir

- `.gitignore`
- `public/css/app.css`
- `public/js/app.js`
- `public/mix-manifest.json`
- `tests/Feature/ExampleTest.php`
- `tests/Unit/DeliveryRouteResourceTest.php`
- `docs/REPORTE_ROLLBACK_SERVIDOR_20260522.md`
- `docs/BIDONES_DEPOSITOS_IMPLEMENTACION_20261020.md`

Estos archivos ya tenían cambios locales o son artefactos/configuración de
infraestructura. No deben agregarse por comodín.

## Evidencia local

- En el corte inicial del manifiesto: `php artisan test --no-coverage`: 96 pruebas aprobadas.
- `flutter analyze`: sin incidencias.
- En ese corte inicial, `flutter test` reportaba 15 pruebas; la ejecución vigente está bloqueada por espacio temporal insuficiente y debe repetirse.
- `flutter build apk --release`: APK generado (65.4 MB), instalado en el
  dispositivo ADB `R5CX1069ZWD`; cámara, notificaciones y ubicación aparecen
  concedidas.
- `git diff --check` y PHP lint: correctos; solo hay avisos de conversión
  LF/CRLF.
- `npm run prod -- --no-progress`: compilación correcta.
- Playwright en demo: `/pos` carga con sesión autenticada y sin errores de
  consola; esto no valida cambios locales porque demo aún no fue desplegado.
- El único objetivo E2E autorizado es `https://demo.sistemax.net.pe`; staging fue retirado.

## Playwright de demo

- Se agregó `playwright.config.js` con `baseURL` restringida únicamente a `demo.sistemax.net.pe`.
- Se agregó `npm run test:e2e` y smoke reproducible de `/login`.
- Se agregó `tests/e2e/demo-delivery-security.spec.js`, que valida que el
  listado de reparto no exponga credenciales ni objetos `user` dentro de
  `sale_notes`.
- La ejecución actual produce evidencia HTML y JSON; la prueba de login y el
  acceso protegido a `/pos` pasan contra `https://demo.sistemax.net.pe`.
- El archivo de prueba se llama `tests/e2e/demo-smoke.spec.js`; no debe
  interpretarse como una prueba de staging.

## Regla de preparación

Antes del commit, revisar cada archivo con `git diff -- <archivo>` y agregar

## Estado vigente de pruebas y correcciones

- `php artisan test --no-coverage`: 105 pruebas aprobadas.
- `flutter analyze`: aprobado.
- `flutter test`: no finaliza por espacio temporal insuficiente en C:.
- La migracion de reglas de puntos se llama
  `2026_10_18_000002_tenant_create_item_unit_type_point_rules.php` y no
  colisiona con `tenant_settings`.
- El APK detiene el rastreo ante `403` por giro de agua desactivado; las fallas
  temporales de red se reintentan.
- No se hizo commit ni deploy por este cambio.

## Clasificacion revisada posteriormente

## Corte vigente de pruebas e infraestructura

Las notas historicas de este manifiesto no sustituyen este corte actual:

- `php artisan test --no-coverage`: 105 pruebas aprobadas.
- `flutter test --no-pub` en `mobile/delivery_app`: 17 pruebas aprobadas.
- `flutter analyze`: aprobado.
- `bash -n ops/smartplus-docker/deploy-smartplus.sh`: aprobado con Git Bash.
- Compose monta el symlink del release activo mediante
  `SMARTPLUS_RELEASE_PATH`; el preflight bloquea montajes directos a
  `smart-release-*`.
- No se hizo commit ni deploy.
- `tests/e2e/demo-delivery-readonly.spec.js` agrega una prueba Playwright
  autenticada de solo lectura para contexto, pedidos y liquidaciones; no crea,
  asigna, cobra ni cambia estados.

- `.gitignore`: relacionado con pruebas locales y la excepcion del Compose de
  SmartPlus; requiere inclusion manual.
- `package.json` y `package-lock.json`: relacionados con Playwright E2E;
  requieren inclusion manual junto con las pruebas E2E.
- `public/js/app.js`, `public/css/app.css` y `public/mix-manifest.json`: son
  artefactos generados por el bundle POS; no deben editarse manualmente.
- `tests/Unit/DeliveryRouteResourceTest.php`: pertenece al contrato de pagos
  de reparto y puede incluirse con la funcionalidad.
- `tests/Feature/ExampleTest.php`: solo adapta la expectativa de la raiz

## Correccion de vigencia

La carpeta local `ops/smartplus-staging/` fue eliminada porque correspondia al
subdominio staging retirado. No debe aparecer como cambio pendiente ni incluirse
en commits. La evidencia actualizada de implementacion y pruebas esta en
`docs/SMARTPLUS_PLAN_AUDIT_20261020.md`.
  protegida; debe revisarse por separado.
- `ops/smartplus-docker/*`: infraestructura del despliegue aislado y debe
  revisarse separada del commit funcional.
únicamente rutas aprobadas explícitamente. No usar `git add -A` ni `git add ..`.
