--- title: "Cómo funciona el portal para compras e inventario: el flujo acordado en la junta del 28-oct" date: 2026-10-28 tags: [project-drogheda, hbox, compras, inventario, cotizador, integracion, portal] estado: flujo acordado en la junta del 28-oct; fase 1 del portal construida y probada (58 pruebas) --- # Cómo funciona el portal para compras e inventario **28-oct-2026 · v1.0 · Claude (CTO/CSO), de la junta de dirección del 28-oct (10:17) con Leo y Adriana.** Reemplaza el flujo de [Cotizador ↔ centro de mando](integracion-cotizador.md) del 27-oct en la parte del **proceso**: aquel documento describía una sola puerta de autorización en compras; en la junta quedaron **dos puertas de Adriana** y el orden real de cotización y pago. El contrato técnico entre los dos sistemas (las rutas firmadas, los avisos, la base) **no cambia** y sigue siendo el de ese documento y el de las [instrucciones para el cotizador](integracion-cotizador-instrucciones.md). !!! warning "Arranca mañana" Leo, en la junta: **«a partir de mañana todas las requisiciones relacionadas HBOX se van a hacer por el sistema»**. Alcance: **solo instalaciones de HBOX**; mantenimiento se evalúa en enero. Lo que llegue por WhatsApp se regresa al sistema. ## Por qué Hoy el material se pide por WhatsApp, por teléfono y en tres direcciones a la vez. Leo, en la junta: *«te hablan a ti, le hablan a Tania, me hablan a mí y ya es un cagadero»*. El resultado es que nadie sabe qué se pidió, qué se autorizó, qué viene en camino ni qué llegó — y cuando llega, no entra al inventario de nadie. Un solo hilo, del que pide al que recibe, arregla las dos cosas: la trazabilidad del gasto y las existencias por sitio. ## El flujo, paso por paso | # | Dónde | Quién | Qué pasa | |---|---|---|---| | 1 | **Cotizador** | El responsable del sitio | Levanta la requisición en el proyecto DROGHEDA, con **sitio de entrega** y los renglones de material. Sin precios: solo qué necesita y cuánto. | | 2 | **Cotizador** | **Adriana** | **Autoriza renglón por renglón.** Puede regresar un renglón con comentarios; es ida y vuelta con quien pidió hasta que queda limpio. Leo: *«vamos a autorizar ítem por ítem si es necesario, para que no pidan tampoco de más»*. | | 3 | **Cotizador** | **Tania** (con Efraín y Leo) | Con la requisición autorizada, cotiza: ferreterías (incluido Edwin), Mercado Libre, o Jesús lleva la lista a la ferretería. Marca por renglón si existe el ítem exacto, si el proveedor ofrece otra marca, o si hay que aclararlo. | | 4 | **Cotizador** | **Adriana** | **Visto bueno** de la cotización: que sea el material correcto, las cantidades correctas y **el lugar de entrega correcto**. | | 5 | **Cotizador** | **Tania** | Con el visto bueno sale la orden de pago; paga y empieza el tiempo de entrega. | | 6 | **Cotizador** | Compras o quien pidió | Cuando el proveedor manda el material: **En camino**, con paquetería, guía y fecha estimada. → El centro de mando lo pone **en camino** en la pestaña del sitio en [Inventario](/tableros/inventario/). | | 7 | **Centro de mando** | **El responsable del sitio** | Abre [Compras](/tableros/compras/) y da **Recibir** con lo que llegó **de verdad** (puede ser menos). Eso da de alta el material en el inventario de su sitio. | | 8 | **Cotizador** (solo) | — | Cada 15 min consulta las recepciones: si llegó todo, cierra la requisición solo; si llegó una parte, lo anota. | **Quién recibe en cada sitio:** Alán (VER · ICAVE) · Jesús Honorato (ZLO · TIMSA) · Miguel (ESE · EIT) · Antonio (LZC · LCT) · Jesús Romero (QRO · Querétaro). **Quién puede levantar requisiciones** (lo que Leo nombró en la junta, a confirmar por Adriana): Jesús Romero, Miguel, Antonio, Daniel, **Alán — que entra en lugar de Paola** — y Adriana. ## Lo que decide cada sistema El reparto no cambió y conviene tenerlo claro porque es lo que evita duplicar trabajo: | | Cotizador | Centro de mando | |---|---|---| | Dinero, montos, cotizaciones, pagos, proveedores | **Sí** | nunca | | Autorización de la requisición y de la OC | **Sí** (Adriana, dos puertas) | nunca | | Qué material, cuánto y a qué sitio va | **Sí** | lo recibe y lo refleja | | Existencias por sitio, en camino, kit de instalación | — | **Sí** | | Quién recibió, cuánto llegó y cuándo | lo consulta | **Sí** | | El pendiente de cada OC, con su responsable y su fecha | — | **Sí** | **El centro de mando no recibe montos.** Si un aviso del cotizador los trae, se descartan antes de guardar: esta página la ve todo el equipo (D-27-4, confirmado en la junta). ## Decisiones | # | Decisión | Estado | |---|---|---| | D-28-1 | La autorización de la requisición es de **Adriana, renglón por renglón**, y hay un **segundo visto bueno** suyo sobre la cotización antes del pago. Corrige D-27-4, que dejaba la autorización en compras (Efraín, Tania, Leo). | **Tomada** (junta 28-oct) | | D-28-2 | El sistema arranca **el 29-oct**, solo para **instalaciones de HBOX**. Mantenimiento se evalúa en enero. | **Tomada** (junta 28-oct) | | D-28-3 | **Alán** entra en lugar de **Paola** como autorizado para levantar requisiciones. | **Tomada** (junta 28-oct) | | D-28-4 | El material se recibe en el centro de mando **desde el celular, ítem por ítem**, y eso crea el movimiento de entrada en el inventario del sitio. Es D-27-1, ahora con la pantalla que lo hace. | **Tomada** (junta 28-oct) | | D-28-5 | El **conteo físico de inventario es recurrente**: una vez al mes (Querétaro ya quedó; los puertos, esta semana). | **Tomada** (junta 28-oct) | | D-27-3 | Códigos de sitio **VER · ZLO · ESE · LZC · QRO**. Leo ya agregó el campo de sitio en el cotizador durante la junta. | Falta el «sí» formal (`d-27-3-sitios-oc`) | | D-27-2 | Base **SQLite** en el servidor del sitio. Construida y probada. | **Tomada** (27-oct) · **hecha** | ## Lo que ya está construido (fase 1 del portal) Todo esto está escrito y probado; falta que Leo lo publique. - **`backend/compras.py`** — las órdenes de compra en SQLite (`/srv/projects/drogheda/drogheda.db`, modo WAL), las tres rutas firmadas de integración, los envíos «en camino» por sitio, el pendiente de cada OC y el cierre automático al recibir todo. **58 pruebas** (`backend/tests-1028.sh`), todas pasando. - **Página [Compras](/tableros/compras/)** — una pestaña por sitio, una tarjeta por OC con sus renglones, el botón **Recibir** (completo o en parte) y el botón **Ligar** para los renglones que llegaron sin ítem de inventario. Sin montos. - **Las dos puertas para recibir funcionan:** desde Compras (la OC completa de una vez) o desde el envío «en camino» de [Inventario](/tableros/inventario/). Las dos terminan en lo mismo y Compras se entera de ambas. - **Un pendiente por OC:** «Recibir OC-… en ZLO», pista Compras, el sitio de entrega, el responsable del sitio y vence el día de la entrega. Se cierra solo cuando llega todo; si llega una parte, se queda abierto y dice qué falta. **No se cierra a mano.** - **Las rondas de PRUEBA del cotizador** (`"prueba": true`) se guardan aparte: no tocan el inventario ni el tablero. **Para encenderlo** Leo genera el secreto (`openssl rand -hex 32`) y lo pone en los dos lados: `COTIZADOR_SECRETO` en `actas-hbox.service` y `PORTAL_SECRETO` en las propiedades del script del cotizador. Mientras no esté, las rutas de integración contestan 503 con un mensaje claro, la página lo avisa y **el resto del sitio funciona igual**. ## Lo que falta del lado del cotizador Los pasos 1 a 7 de las [instrucciones del 27-oct](integracion-cotizador-instrucciones.md) siguen vigentes, con dos cosas que salieron en la junta: 1. **El formulario no deja guardar la requisición sin cotización adjunta** y eso está al revés: la requisición la levanta quien necesita el material, la cotización la adjunta compras después. Leo: *«eso se tiene que modificar»*. Es lo primero, porque bloquea el arranque del 29-oct. 2. **El campo de sitio de entrega** ya lo agregó Leo en la junta; falta la regla que lo hace obligatorio en los proyectos ligados (del lado del servidor, no solo de la interfaz). ## Movimientos de inventario: cómo se nombra cada salida Lo que se acordó en la junta, con lo que el inventario ya sabe hacer: | Lo que pasó | Cómo se registra | |---|---| | Llegó material comprado | **Recibir** la OC en Compras (o el envío en Inventario). No se captura a mano. | | Material de un puerto a otro (Manzanillo → Ensenada) | **Envío** desde el sitio que lo manda; el que lo recibe da **Recibir** y revisa que esté completo. | | Se usó en una instalación | **Salida**, con la unidad o el acta como referencia. | | Se dio de baja o se destruyó | **Salida**, con el motivo. | | Contamos y no cuadra | **Conteo físico**: lo que hay en ese sitio queda exactamente en ese número. | Las salidas **no se autorizan**: se supervisan. Lo que las cuadra es el conteo físico mensual (D-28-5). ## Lo que el equipo reportó del sitio en la junta Se levantan como incidencias o pendientes; ninguna es de compras, pero todas estorban el arranque: | Qué | Quién lo vio | Estado | |---|---|---| | **Las horas se ven en UTC** (6 h adelantadas) | todo el equipo | **arreglado**: `TZ=America/Mexico_City` en el servicio. Lo guardado antes del 28-oct sigue en UTC. | | Un acta con fotos **se perdió al salir de la pantalla y volver** | Daniel | pendiente — es pérdida de trabajo, va primero | | El formulario **no deja escoger fotos de la galería** del celular | Jesús Romero | pendiente — mientras tanto, se guardan y se reabre el acta para subirlas | | **Gibran no puede entrar** (su usuario es `gibranlp`) | Gibran | pendiente | | La bandera de «contraseña inicial» **no se apaga** aunque ya la cambiaron | Adriana | pendiente | | **Dos sesiones en el mismo navegador** no funcionan (cookies) | Leo | pendiente | | Se quiere **descargar un acta como documento** | Adriana | pendiente | | La flecha de cambio de estado del tablero no respondía | Leo | se arregló reiniciando el servicio | | **Pendientes sin sentido creados solos** desde la minuta de la junta anterior | Leo | el agente diario los crea; hay que afinarlo | ## Lo que no cuadra con lo escrito - **El agente aduanal de los tres pedimentos es «Tera Mercurio», no Grupo Lorenzo.** El [costeo del 26-oct](/hardware/costeo-jlc-26oct/) supone Grupo Lorenzo (patente 3927) y MX$6,500 por pedimento: esas cifras hay que rehacerlas con la cotización real. - **La cotización de la herrería de las bases de RTG**: Adriana dice que Jesús y Tania ya la mandaron; Leo dice que nunca le llegó. Las medidas y fotos sí están; nada se ha pedido. Sigue bloqueada por el pago. ## Riesgos - **El arranque es mañana y el cotizador todavía no manda avisos.** No es bloqueante: las requisiciones pueden correr en el cotizador desde el día uno y el material entrar al inventario a mano; lo que se pierde mientras tanto es el «en camino» automático y el cierre solo. Se gana en cuanto Leo ponga el secreto. - **Seis personas nuevas usando un sistema nuevo el mismo día.** Por eso la sesión general que va a programar Adriana, y por eso el alcance chico (solo HBOX): Leo lo dijo en la junta, es para *«probar y sacar todos los errores»*. - **Renglones sin ítem de inventario.** Un renglón que el cotizador manda sin ítem no entra solo al inventario. Queda visible como «por ligar» en Compras y se puede recibir igual (se anota sin tocar existencias), pero si nadie lo liga, el material llega y no aparece contado en ningún lado.