Mikro Farm vende alimento para animales, medicamentos, semillas, pesticidas y fertilizantes — por kilo, por saco, por contenedor. El dueño había probado todos los POS del mercado y ninguno separaba el almacén de la tienda, ninguno actualizaba precios cuando los proveedores se movían, y ninguno le decía al cliente qué había en el estante antes de manejar una hora para averiguarlo. Así que construimos uno que sí lo hacía.
Antes de escribir una sola línea, el dueño nos llevó por el mismo sábado cinco veces. Estos son los golpes que aparecieron una y otra vez.
La tienda queda lejos de donde vive la mayoría de los agricultores. Cuando lo que vinieron a buscar no está en stock, el viaje se pierde — y también la confianza.
Los que llegan sin reserva entran a una tienda ocupada sin plan — se quedan frente al estante tratando de leer etiquetas mientras diez personas más hacen cola. El tiempo del personal es el gran damnificado.
El almacén y la tienda están físicamente separados, pero todos los POS del mercado los mezclan. Entonces la pantalla dice 40 sacos, el estante tiene 3, y el fondo tiene 37 — y nadie lo sabe hasta que un cliente pregunta.
Cada viernes, alguien cuenta. A mano. A ojo. Los errores aparecen dos semanas después cuando llega un pedido con menos de lo que realmente necesitaban.
No es una bolsa a la vez. Un pedido a un solo proveedor es un contenedor de alimento. Pedir de menos — sin stock por un mes. Pedir de más — capital congelado, fecha de vencimiento acechando en medicamentos y semillas.
Lo primero que construimos no es para el personal. Es un catálogo público, orientado a la educación, que el cliente abre antes de subirse al auto. Cada producto tiene stock en tiempo real por ubicación, notas de dosificación para medicamentos y semillas, y un botón de "reservar / pedir" para que el saco esté apartado cuando lleguen.
El problema del estante se resuelve solo: los clientes que ya eligieron en casa no necesitan leer etiquetas en una cola. El problema de manejar una hora se resuelve solo: si está en rojo, no manejan.
Cada artículo tiene un registro maestro pero dos filas de stock — una para el almacén, una para el piso de tienda. El costo promedio ponderado (HPP) se rastrea por ubicación también, así que una transferencia lleva el costo tal cual y los reportes de margen se mantienen honestos.
Las ventas descuentan primero de Toko. Si Toko queda corto, el sistema cae a Gudang sin confirmación — pero registra el movimiento, para que el cálculo de reabastecimiento sepa que el estante necesita llenarse, no solo el fondo.
Las alertas de stock bajo corren por ubicación, no en conjunto. La pestaña "Qué comprar" hace lo mismo que los viernes por la noche se hacía a mano — salvo que nunca se equivoca, y muestra los artículos por urgencia, no por orden alfabético.
Las categorías con seguimiento de vencimiento (medicamentos, semillas, pesticidas) reciben una segunda revisión: cualquier artículo a menos de 60 días de vencimiento aparece en la misma pestaña para que se venda o se mueva antes de que no valga nada.
| Artículo | Ubic. | En mano | Mín. | Acción |
|---|---|---|---|---|
| Pakan Ayam Petelur 50kg | Toko | 3 | 10 | Transferir |
| Pupuk Urea 50kg | Gudang | 82 | 120 | Reabastecer |
| Vit. B-Complex 1L (vence 09/26) | Toko | 2 | 4 | Vender primero |
| Decis 100ml | Gudang | 26 | 50 | Reabastecer |
Para un minorista que vende de a una bolsa, "pedir más cuando baja" alcanza. Para Mikro Farm, la pregunta es cuántos sacos llenan un contenedor de 20 pies sin sobrepasar seis meses de demanda. Así que el reabastecimiento no es un botón — es una calculadora que el dueño puede ajustar.
El sistema toma las últimas 12 semanas de ventas, multiplica por el tiempo de entrega del proveedor, y ajusta el resultado hacia arriba hasta el MOQ del proveedor y la siguiente línea de llenado del contenedor. El dueño ve el cálculo, no solo la respuesta, y puede ajustarlo antes de enviar.
Cada recepción de mercadería recalcula el costo promedio ponderado (HPP) por ubicación. Si el nuevo HPP cruza la banda de margen que define el dueño, el precio de venta se actualiza automáticamente y queda registrado — tanto en el POS como en el catálogo para clientes.
El dueño ve un único registro de cada movimiento: qué cambió, por qué, y cuánto. Se acabó el "espera, ¿por qué bajó el margen este mes?"
No empezamos de cero. El esqueleto del POS vino de nuestra propia plantilla de Floural — ventas, gastos, asistencia, pagos. El trabajo personalizado fue el inventario: dividirlo, costear y visualizarlo.
Modelo de inventario en papel antes de escribir una sola línea de código. Mapeamos cada categoría, cada unidad (kg / saco / litro / unidades), cada MOQ de proveedor, cada SKU con seguimiento de vencimiento.
Construimos inventory_items + unión inventory_stock (un registro maestro, cantidad y HPP por ubicación). Cableamos costo promedio ponderado en cada recepción. El flujo de transferencia ("Pindah ke Toko") salió la misma semana.
Las ventas ahora descuentan primero de Toko, caen a Gudang, y guardan el HPP en la línea del pedido. Las alertas de stock bajo y la pestaña "Qué comprar" funcionan con joins en vivo.
PWA para clientes que lee la misma tabla de stock que escribe el POS. Calculadora de reabastecimiento con ajuste al llenado del contenedor. Registro de precios alimentado por eventos de recepción.
Durante una semana completa, cada conteo se hizo tanto en el sistema como en el portapapeles. Se reconciliaron al final. Discrepancias → errores → corrección → entrega.
Sin números inventados mes a mes — el sistema es nuevo. Estos son los flujos de trabajo que salieron del papel y de la cabeza del dueño.
Gudang y Toko tienen su propia cantidad y HPP. Las ventas caen limpiamente. Las transferencias llevan el costo.
Cada recepción recalcula el HPP y actualiza el precio de venta según la banda de margen del dueño. El catálogo lo refleja al instante.
Una sola pestaña, ordenada por urgencia, incluyendo artículos próximos a vencer. Reemplaza la ronda del viernes con portapapeles.
El catálogo público lee la misma tabla que escribe el POS. Sin capas intermedias, sin demora de caché.
Las sugerencias de reabastecimiento se ajustan al MOQ y al llenado del contenedor. El dueño ve el cálculo, puede ajustarlo y luego envía.
Reemplaza cada intento de POS de Play Store que no encajaba. Propio al 100%. Alojado en un VPS pequeño.
Corre en la tablet Android del personal en el mostrador. Prioridad offline mediante una cola de sincronización — el mostrador sigue registrando ventas cuando el wifi parpadea, y las replica cuando vuelve. Actualizaciones OTA para enviar correcciones solo de JS sin reinstalar.
Un archivo por dominio, enrutamiento por ?action=, PDO sin capas. Autenticación JWT. Log de auditoría en cada mutación para rastrear cualquier cambio de stock hasta una persona y un momento.
Aplicación de navegador de cara al público. Lee la misma tabla inventory_stock que escribe el POS — sin sincronización separada. Orientada a la educación: cada producto lleva una nota de "para qué sirve" con contexto de venta cruzada.
Una fila de inventory_items por SKU. Dos filas de inventory_stock (Gudang, Toko) con clave en (item_id, location). Cada evento de recepción dispara el costo promedio ponderado y una actualización opcional del precio de venta.
Llamada de alcance gratuita. Le decimos la opción más económica que realmente encaja.