Skip to content

Cierre de farmacia · stock por producto, «Motivo» en el teléfono y evidencia de FAR-04/05/06 - #1691

Merged
PabloArauzCaballero merged 3 commits into
devfrom
itzan/far-cierre-farmacia-dev
Oct 30, 2026
Merged

PabloArauzCaballero merged 3 commits into
devfrom
itzan/far-cierre-farmacia-dev

Conversation

@Jsaldias39

Copy link
Copy Markdown
Collaborator

Qué cambia

Cierre de FAR-04, FAR-05 y FAR-06 en el front: dos ajustes de pantalla que pedía la evidencia, el uso de lo que la API suma en mdavila-2001/mantra-core-health-api#1147 y la evidencia de navegador que faltaba.

Stock por sucursal, por producto (FAR-06, D-06-3). La API decide ahora la disponibilidad por producto: un producto sin posición en una sucursal sigue lo declarado en el catálogo aunque la sucursal lleve stock propio de otros.

  • site-stock-rows.ts: desaparece el tipo de fila UNTRACKED («Sin registrar en esta sucursal» con su botón «Lo tengo»). Sin posición, la fila es CATALOG: lo del catálogo, con el interruptor de siempre.
  • site-stock-panel.html: en una sucursal con stock propio, las filas que siguen el catálogo dicen «Como en el catálogo». Los avisos explican que lo propio es por producto, también el de «Todas» (pharmacy-inventory.ts) y la descripción del selector («Con stock propio»).
  • La marca «sin stock en catálogo» sale de outOfStockDeclared (PharmacyProduct, lectura de gestión), en vez de deducirse de inStock: false con conteo distinto de cero.
  • Ajuste por la evidencia: el rótulo vacío de la cantidad salía cortado a 1440 y a 390. Ahora dice «Del catálogo» y el campo tiene ancho fijo (9,5rem, nunca más que la celda) para que la tabla le reserve el lugar.

«Motivo» en el teléfono (FAR-05). En la vista previa de importación de categorías, precios y sucursales, «Motivo» quedaba detrás del detalle plegado a 390. Pasa a columna primaria y la tabla se apila (stackedOnMobile), como la del stock por sucursal. Spec nueva en entity-import.spec.ts.

Evidencia que faltaba: docs/frontend/evidence/far-04-catalogo-por-pestanas/ (nueva), y los casos pendientes de far-05-importacion-masiva/ (R2) y far-06-stock-por-sucursal/ (6 a 11).

La rama trae origin/dev fusionada (con FAR-07 y FAR-01 a 03): el diff es solo de este cambio y su evidencia.

Evidencia de navegador

Build de producción contra la API de mdavila-2001/mantra-core-health-api#1147 en local, cuentas sintéticas @alovida.test, después de fusionar origin/dev. Cada carpeta tiene su README.md por caso y consola.txt con hechos, escrituras y errores (los únicos errores de consola son el 422 provocado a propósito).

Lane · caso Resultado
FAR-04 · menú PASS: Resumen, Catálogo, Horario y turnos, Solicitudes de retiro, Promociones, Sucursales (claro y oscuro, 1440 y 390)
FAR-04 · pantalla PASS: un membrete, una tarjeta, seis pestañas; 390, 768, 1024, 1440 y 1920 sin desborde; a 390 la tira se desplaza y la primera no queda cortada
FAR-04 · pestañas PASS: cada clic escribe su ?tab=, ninguna pantalla dibuja membrete propio, «Atrás» después de las seis vuelve a /administration/pharmacy
FAR-04 · rutas viejas y atajos PASS: pharmacy-inventory?alerts=true → pharmacy-catalog?alerts=true&tab=inventory con «solo alertas» marcado; categorías, precios e importación a su pestaña; «Revisar inventario» y «Actualizar en lote» abren Inventario e Importación
FAR-04 · paciente PASS: /administration/pharmacy-catalog termina en /dashboard y «Catálogo» no está en su menú
FAR-04 · «Ver productos» tras una carga no se ejecutó (la carga de punta a punta está en la evidencia de FAR-05; el cambio de pestaña por query lo cubre pharmacy-catalog-hub.spec.ts)
FAR-05 · categoría PASS: crear (201), renombrar (200) y eliminar con confirmación (200), cada paso con recarga
FAR-05 · producto desde el modal edición PASS (precio 13,75, PATCH 200, recarga); alta BLOCKED (catálogo oficial vacío en la base de verificación)
FAR-05 · «Motivo» a 390 PASS: en la ficha de cada fila, claro y oscuro (solo vista previa, no se aplicó)
FAR-06 · producto publicado después PASS: en Casa central (con stock propio) sale «Lo tengo · Como en el catálogo»
FAR-06 · «Lo tengo» con cantidad PASS: Sur 2 → A con 3 → PUT 200 {available:true, quantity:3} → recarga → A en «Lo tengo»; el paciente vuelve a ver A en Sur 2 (1440 y 390)
FAR-06 · 422 en su fila PASS: C se marca «no tengo» por la API con la pantalla abierta; «Lo tengo» → PUT 422 → el motivo y el código de soporte bajo la fila de C, el aviso dice «el motivo está en su fila»; la marca se deshizo después
FAR-06 · 390 PASS: la fila entra completa y «Del catálogo» se lee entero (también a 1440)
FAR-06 · radio PASS: Precios, Productos y «Subir CSV» abren como antes

Verificación

  • Specs de features/pharmacy y core/data-access/pharmacy sobre la rama fusionada: 24 archivos, 349/349.
  • eslint sobre los archivos tocados: exit 0. tsc -p tsconfig.app.json --noEmit: exit 0. Build de producción: exit 0 (además, el del pre-push).
  • En verde: check-api-prefixes, check-route-prefixes, check-tokens, check-css-tokens, check-contrast, check-doc-links y check-english-identifiers (base origin/dev).
  • En rojo con los mismos hallazgos que origin/dev limpio: check-client-prefixes, check-colores-sueltos, check-architecture, check-form-pages, check-max-lines, check-usted, check-correcciones (solo cambian las rutas absolutas y, en check-architecture, los imports a env.generated, que el árbol limpio no tiene generado).
  • La suite completa del front no se corrió en esta rama.

Decisiones tomadas

  • Con la API anterior (sin outOfStockDeclared) la fila marcada no se reconoce y el PUT la rechaza con su motivo en la fila. No se deja la deducción vieja como respaldo: los dos PR van juntos.
  • «Como en el catálogo» se muestra solo en sucursales con stock propio; en una sucursal sin stock propio, todas las filas siguen el catálogo y el aviso ya lo dice.
  • El alta de producto desde el modal queda BLOCKED en navegador: parte del catálogo oficial de medicamentos, que la base de verificación no tiene cargado (cargarlo es escribir en la base fuera de la API). El 500 de esa búsqueda se corrigió en la API.
  • La evidencia se sirvió desde el build de producción con la URL de la API de prueba (el de desarrollo no entra en la memoria de la máquina de verificación).

Generated by Claude Code

…el teléfono

La API decide ahora la disponibilidad por producto: un producto sin
posición en una sucursal sigue lo declarado en el catálogo aunque la
sucursal lleve stock propio de otros. El panel de stock por sucursal deja
la fila «Sin registrar en esta sucursal» con su botón: esas filas son
«Como en el catálogo», con el interruptor de siempre, y los avisos dicen
que lo propio es por producto.

La marca «sin stock en catálogo» sale de `outOfStockDeclared`, que la
lectura de gestión ya sirve, en vez de deducirse de `inStock: false` con
conteo distinto de cero.

La cantidad deja de cortar su rótulo vacío («Del catálogo»): el campo
tiene ancho fijo y la tabla le reserva el lugar.

En la vista previa de importación de categorías, precios y sucursales,
«Motivo» pasa a columna primaria y la tabla se apila en el teléfono: el
motivo de un rechazo se lee en la ficha de cada fila, sin desplegar.
…FAR-05 y FAR-06

FAR-04 (nueva): menú de la farmacia, la pantalla en cinco viewports y dos
temas, cada pestaña con su `?tab=` sin entradas en el historial, las rutas
viejas y los atajos del resumen, el precio guardado y releído, la tira de
pestañas a 390 y el paciente sin acceso.

FAR-05: categoría creada, renombrada y eliminada, y producto editado desde
el modal, cada paso con recarga; «Motivo» en la ficha de cada fila a 390.
El alta desde el modal queda bloqueada: parte del catálogo oficial de
medicamentos, que la base de verificación no tiene cargado.

FAR-06: el producto publicado después sale «Como en el catálogo» en una
sucursal con stock propio, «Lo tengo» con cantidad y el paciente que lo
vuelve a ver, el 422 en su fila, la columna de cantidad a 390 y el radio
(Precios, Productos, «Subir CSV»).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants