Comercio
Los productos son registros de modelo, el carrito es un espacio de mutaciones público que llama tu tienda y los pedidos viven en el panel.
cmssy trae carrito, pedidos, descuentos y un pipeline de pedidos. Nada de eso es un área de producto aparte: un producto es un registro de modelo, la tienda habla con la misma API de entrega que todo lo demás y el escritorio de pedidos es el panel.
La capacidad es una bandera del plan -canUseCart en get_workspace_info-, así que léela en vez de suponerla.
Los productos son registros
En cmssy no hay un tipo "producto". Creas un modelo -product, plan, ticket, lo que sea tu catálogo- y la configuración de carrito del workspace lo mapea al carrito mediante una fuente de productos: qué modelo, qué campo es el precio, cuál el stock, cuáles las variantes.
Por eso un catálogo puede venir de más de un modelo a la vez, y por eso el mismo bloque que renderiza cualquier registro renderiza un producto.
Qué puede llamar la tienda
El espacio cart es público: sin token, con alcance de sesión, y es la única parte de la API de entrega que escribe.
cart.get(workspaceId): líneas,subtotal,tax,shippingTotal,discountedTotal,totalGross,currency,pricesIncludeTax,availableShippingMethods,appliedDiscount,taxSummary.cart.addItem:{ recordId, quantity, variantSelections, notes }. La línea referencia al registro, no lo copia.cart.updateItem,cart.removeItem(itemId),cart.clear.cart.applyDiscount(code),cart.removeDiscount,cart.setShippingMethod(shippingMethodId).cart.merge: funde el carrito anónimo de sesión con el del miembro tras iniciar sesión. Llámalo una vez, justo después de la autenticación.cart.checkout:{ customerEmail, customerNote, poNumber, shippingAddress }convierte el carrito en pedido.
Los totales vuelven calculados. No sumes precios en el navegador: el modo de impuestos, los descuentos y el envío se deciden en el servidor, y una segunda implementación en tu frontend es una segunda respuesta.
Estado del pedido sin cuenta
public.order.byToken devuelve un pedido -orderNumber, items, paymentStatus, fulfillmentStatus, amountPaid, balanceDue, invoiceUrl- para el token emitido en el checkout. Así funciona una página de "sigue tu pedido" para un invitado.
Qué configura el workspace
public.siteConfig.publicCart es la proyección segura de los ajustes del carrito: defaultCurrency, pricesIncludeTax, taxRates, shippingMethods, productSources, maxItemsPerCart, maxQuantityPerItem, enableSavedCarts, enableQuoteRequests. Léela una vez y deja que dé forma a la interfaz: formato de moneda, límites de cantidad y si se ofrece o no una solicitud de presupuesto.
Los pedidos son back-office
Todo lo posterior al checkout va autorizado: el panel, o el servidor MCP con un token cuyo rol lo permita. Los pedidos se listan y se leen, se crean a mano, se editan línea a línea, se marcan pagados total o parcialmente, se reembolsan, se cancelan, avanzan por el fulfillment, reciben factura y se mueven por un pipeline configurable. Los descuentos se crean, actualizan y activan igual; los productos se actualizan o borran en masa, o reciben tramos de precio.
Los proveedores de pago no forman parte de esto: cmssy registra qué pasó -mark_order_paid, record_order_payment, refund_order- y tu integración decide cuándo pasó.
Siguientes pasos
- Modelos de datos: los registros de los que se compone un catálogo.
- API de entrega GraphQL: cómo se acota una escritura pública.
- Webhooks: los diez eventos
order.*.