# Deploys y validaciones de producción

Un registro único, mas nuevo arriba. No crear un archivo por deploy: agregar
una seccion nueva acá.

## 2026-09-19 — `48128e2d` — fix(pos): prioritize relevant product search results

- Resultado: `DEPLOY_OK`, servidor alineado con `origin/main`, arbol limpio.
- Backend (`PosController.php`, busqueda de items del POS):
  - Prioriza coincidencias por inicio de nombre o de palabra (`LIKE 'X%'` /
    `LIKE '% X%'`) sobre coincidencias internas sueltas.
  - Cuando existen coincidencias fuertes (inicio de nombre/palabra, codigo de
    barras, id interno), ya NO mezcla coincidencias debiles de substring en
    esa misma pagina de resultados — antes "amo" traia productos por tener
    esas letras en cualquier parte de la descripcion (ej. dentro de
    "paracetamol"), tapando los resultados relevantes.
  - Si no hay coincidencias directas, sigue cayendo a la busqueda indirecta
    existente por principio activo, marca, categoria o codigo/nombre ATC —
    ese fallback no se toco.
  - Orden de resultados explicito por relevancia (`ORDER BY CASE ...`):
    match exacto de nombre, luego codigo de barras exacto, luego id interno
    exacto, luego inicio de nombre, luego inicio de palabra, luego
    substring de nombre, luego principio activo, el resto al final.
- Frontend (`pos/index.vue`, `searchItems()`):
  - Se agrega un numero de secuencia por busqueda ademas del `CancelToken`
    ya existente: si la respuesta que llega ya no corresponde a la ultima
    busqueda disparada (o el texto visible cambio mientras la request
    estaba en vuelo), se descarta en vez de pintarse — evita que una
    respuesta vieja sobrescriba la consulta actual en una carrera que el
    cancelToken solo no cubria del todo.
- Validacion:
  - `amo` muestra productos de Amoxicilina/Amoxidal.
  - `parace` muestra productos de Paracetamol.
  - Probado con Playwright sin crear ventas ni modificar stock.
- Verificacion de despliegue: bundle de produccion sin source maps publicos;
  servidor y `origin/main` alineados; arbol remoto limpio.

## 2026-09-19 — `b26d60ae` — fix(pos): simplify stock status colors

- Destino: `5.161.118.178` | Resultado: `DEPLOY_OK` | Migraciones: ninguna.
- POS (`table.vue`, `index.vue`): la leyenda de estados de stock se simplifico
  de 5 a 4 grupos visuales: **critico**, **por vencer**, **optima** y
  **sin fecha de vencimiento**.
- "Vencido" y "sin stock" pasan a compartir el mismo color critico (antes
  cada uno tenia su propio color, agregados un commit antes en `f5801691`).
  Conservan su causa exacta en el texto/tooltip, solo se unifico el color
  de fondo del badge. El badge "sin fecha de vencimiento" paso de teal
  (`--mn-primary`) a gris (`--mn-muted`).
- La leyenda superior del listado de productos (`.pos-top-legend` en
  `index.vue`) se actualizo en paralelo para no quedar desincronizada.
- Verificacion: bundle de produccion sin source maps publicos, healthcheck
  HTTP 200, 10/10 tests POS (`tests/jest/components/PosTable.spec.js`).
- Nota: revierte parcialmente el criterio de `f5801691` (que habia mantenido
  "vencido" y "sin stock" como colores separados a pedido explicito en esa
  sesion). La unificacion se decidio despues, directamente por el dueño del
  repo.

## 2026-09-18 — `bfb6d83a` — fix(purchases,sale-notes): validate suppliers and CPE guide links

- Destino: `5.161.118.178`, repo `/var/www/html/farmacia` | Resultado:
  `DEPLOY_OK` a las `2026-09-18T21:48:54Z` | Migraciones: ninguna (rango sin
  cambios de esquema).
- Compras: busqueda remota de proveedores y seleccion automatica del
  proveedor recien creado cuando es compatible con el tipo de comprobante.
- Compras: para Factura, un proveedor DNI muestra
  `Factura requiere proveedor con RUC.` y bloquea Guardar; al cambiar a
  Boleta se limpia el aviso.
- Notas de venta: con CPE asociado, el menu permite generar una guia desde
  cada comprobante asociado usando su ID correspondiente. Sin CPE, la opcion
  no aparece.
- Verificacion: HEAD del servidor y marcador `current-commit` coinciden con
  el commit publicado; arbol Git limpio. Healthcheck
  `https://demo.sysfarma.pe/login`: HTTP 200. Bundle versionado servido con
  el texto de validacion de RUC, el endpoint `search-suppliers` y la opcion
  `Generar guia desde CPE`.
- Validacion visual: busqueda de proveedor por nombre/RUC correcta; alta QA
  de proveedor con RUC se selecciono automaticamente; alta QA con DNI y
  Factura mostro el aviso y bloqueo Guardar, y al cambiar a Boleta se
  habilito; los dos proveedores QA se eliminaron al terminar. Nota sin CPE
  no muestra la opcion de generar guia.
- Limitacion: produccion no tenia una nota con CPE real disponible; el caso
  positivo y el de multiples CPE se verificaron con interceptacion/mock de
  red, sin escribir en BD ni generar guias. El flujo real con un CPE
  productivo queda pendiente de validar cuando exista un caso adecuado.
