hbox-docs: Compras y flujo del 28-oct

This commit is contained in:
Leopoldo Rodríguez 2026-10-28 13:01:15 -06:00
parent fed9f3260c
commit dbdde5a3da
4 changed files with 194 additions and 3 deletions

View File

@ -0,0 +1,157 @@
---
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.

Binary file not shown.

After

Width:  |  Height:  |  Size: 271 KiB

File diff suppressed because one or more lines are too long

@ -1 +1 @@
Subproject commit 4f08640b31897905506cc75cdc7974c0f0e0be1e Subproject commit e62a7dec23c1db5f5784c1f76292c347f51f78ff