La mayoría de las herramientas tratan la cotización como un PDF. La escribes, la mandas, te olvidas. Si el cliente acepta, retranscribes lo importante en otro sistema. Si no, borras el PDF.
Esta desconexión entre la herramienta de cotización y la de fulfillment es el handoff más costoso en distribución. El comercial cierra en un sistema, el almacén prepara en otro, y la brecha entre ellos se llena con correos, mensajes de Slack y Post-its. Nada se mantiene sincronizado porque nada fue diseñado para sincronizarse.
Estados que significan algo El Quote de Quotery tiene un enum de estado: borrador → enviada → cerrada → parcialmente_entregada → entregada, con cancelación desde borrador / enviada / cerrada. Cada transición es un service call que impone invariantes.
La máquina de estados no es cosmética. borrador significa que nada está reservado y nada es visible para el cliente. enviada significa que el cliente tiene acceso a la cotización vía su portal. cerrada significa que el cliente aceptó y el inventario está reservado. parcialmente_entregada significa que al menos una nota de entrega fue posteada contra esta cotización. entregada significa que cada línea fue completamente despachada. Cada estado controla acciones específicas — no puedes entregar desde borrador, no puedes cancelar desde entregada, y no puedes editar precios en una cotización cerrada.
Cerrar reserva inventario Al momento de cerrar una cotización, Quotery reserva el inventario de cada línea. Si no alcanza, la respuesta te dice exactamente qué productos faltan — la cotización cierra igual. El comercial recibe información, no fricción.
Esta es la decisión de diseño deliberada que describimos con más detalle en el post sobre la sobre-reserva. La operación de cierre nunca falla por disponibilidad. Reserva lo que hay, reporta lo que falta, y deja que el equipo comercial decida. Algunos seguirán adelante — la carga entrante llega el martes y el cliente no necesita entrega hasta el viernes. Otros llamarán al cliente y ajustarán cantidades. El trabajo de la herramienta es informar la decisión, no tomarla.
Cancelar es una transacción Cancelar una cotización cerrada escribe filas RELEASE en el ledger para deshacer la reserva. Cancelar una parcialmente entregada se rechaza — posteas una nota de devolución en su lugar. Las reglas son código, no memoria.
Cada transición de estado es una única transacción de base de datos. El cambio de estado, las escrituras en el ledger, y las actualizaciones de caché se comprometen todas juntas o hacen rollback todas juntas. No existe estado parcial. No existe 'el estado dice cerrada pero el inventario no se reservó'. Si la base de datos se cae a mitad de la transacción, todo se deshace y el llamador reintenta. La atomicidad no es una feature — es la única forma honesta de construir una máquina de estados que mueve dinero y producto.
