DocumentaçãoDocumentationDocumentaciónOne Conecta
ÍndiceIndexÍndice
Baixar .mdDownload .mdBajar .md
Feature · Carrinho & criação de pedidoFeature · Cart & order creationFeature · Carrito y creación de pedido

Carrinho de comprasShopping cartCarrito de compras

O fluxo de criação e edição de pedido do representante de vendas: escolher produtos, aplicar promoções, revisar o carrinho, definir pagamento e enviar. Diferente da Lista de pedidos (somente leitura), aqui o app escreve — o pedido é montado no aparelho e enviado por transação gRPC. The sales rep's order creation and editing flow: pick products, apply promotions, review the cart, set payment and submit. Unlike the read-only Order list, this one writes — the order is assembled on-device and sent as a gRPC transaction. El flujo de creación y edición de pedido del representante de ventas: elegir productos, aplicar promociones, revisar el carrito, definir pago y enviar. A diferencia de la Lista de pedidos (solo lectura), aquí la app escribe — el pedido se arma en el dispositivo y se envía como transacción gRPC.

PúblicoAudiencePúblico
Representante · QA · Suporte · DevRep · QA · Support · DevRepresentante · QA · Soporte · Dev
Onde ficaWhereDónde
Detalhe da visita → Fazer pedidoVisit detail → Place orderDetalle de visita → Hacer pedido
RelacionadoRelatedRelacionado
AtualizadoUpdatedActualizado
22/07/20262026-07-22
Disponível emAvailable inDisponible en BR CL ZA
01

O que é e para que serveWhat it is and what it's forQué es y para qué sirve

O Carrinho é o coração da criação de pedido. Ele nasce dentro de uma visita a um varejo e acompanha o representante por quatro telas em sequência até o pedido ser enviado. É um estado transversal: o mesmo carrinho vive nas quatro telas, por isso não pertence a nenhuma delas. The Cart is the heart of order creation. It is born inside a retail visit and follows the rep through four screens in sequence until the order is submitted. It is cross-page state: the same cart lives across all four screens, which is why it belongs to none of them. El Carrito es el corazón de la creación de pedido. Nace dentro de una visita a un punto de venta y acompaña al representante por cuatro pantallas en secuencia hasta enviar el pedido. Es un estado transversal: el mismo carrito vive en las cuatro pantallas, por eso no pertenece a ninguna.

1 · Vitrine de produtos1 · Product showcase1 · Vitrina de productos

Abas por categoria + promoções, busca e filtros. Adiciona itens e vê o resumo no rodapé fixo.Category + promotions tabs, search and filters. Add items and see the running summary in the sticky footer.Pestañas por categoría + promociones, búsqueda y filtros. Agrega ítems y ve el resumen en el pie fijo.

2 · Revisão do carrinho2 · Cart review2 · Revisión del carrito

O que foi pedido, bonificações de promoção, totais e avisos de bloqueio.What was requested, promotion free goods, totals and lock warnings.Lo pedido, bonificaciones de promoción, totales y avisos de bloqueo.

3 · Pagamento3 · Payment3 · Pago

Forma de pagamento por bloco/split, parcelas e datas de vencimento.Payment method per split block, parcels and due dates.Forma de pago por bloque/split, cuotas y fechas de vencimiento.

4 · Confirmação4 · Confirmation4 · Confirmación

Comprovante do que foi enviado, por pedido/split, com número de PO e status.Receipt of what was submitted, per order/split, with PO number and status.Comprobante de lo enviado, por pedido/split, con número de PO y estado.

Um pedido pode virar váriosOne order may become manyUn pedido puede volverse varios Dependendo do mercado, o carrinho pode ser dividido em vários pedidos (splits) — por grupo de split (CL) ou por limite de crédito (ZA). Cada split é enviado como uma transação separada, em paralelo. Depending on the market, the cart may be split into several orders — by split group (CL) or by credit limit (ZA). Each split is submitted as a separate transaction, in parallel. Según el mercado, el carrito puede dividirse en varios pedidos (splits) — por grupo de split (CL) o por límite de crédito (ZA). Cada split se envía como una transacción separada, en paralelo.

Pendências / roadmapPending / roadmapPendencias / roadmap A criação de pedido é uma migração em andamento do app legado, guiada por docs/features/order_creation/PLAN.md. Hoje já existe: montagem do carrinho, motor de promoções, gates de bloqueio, splits e envio pelo Dispatcher. Ainda em evolução: Order creation is a migration in progress from the legacy app, driven by docs/features/order_creation/PLAN.md. Already in place: cart assembly, promotion engine, blocking gates, splits and submission via the Dispatcher. Still evolving: La creación de pedido es una migración en curso desde la app legada, guiada por docs/features/order_creation/PLAN.md. Ya existe: armado del carrito, motor de promociones, gates de bloqueo, splits y envío por el Dispatcher. Aún en evolución:

  • o envio ainda usa atrasos simulados por split (_mockDelay no OrderSubmission) sobre o transporte real do Dispatcher.submission still uses simulated per-split delays (_mockDelay in OrderSubmission) on top of the real Dispatcher transport.el envío aún usa retrasos simulados por split (_mockDelay en OrderSubmission) sobre el transporte real del Dispatcher.
  • gates de bloqueio hoje são 2 (sem produtos de compra; limite de crédito) — o motor é composável e crescerá.blocking gates are currently 2 (no purchase products; credit limit) — the engine is composable and will grow.los gates de bloqueo hoy son 2 (sin productos de compra; límite de crédito) — el motor es componible y crecerá.
  • Fora de escopo (por decisão): Incentives, Starter Kit, Telesales, Surprise Box, Buyback.Out of scope (by decision): Incentives, Starter Kit, Telesales, Surprise Box, Buyback.Fuera de alcance (por decisión): Incentives, Starter Kit, Telesales, Surprise Box, Buyback.
02

Como acessarHow to openCómo acceder

  1. Criar pedido — pela visitaCreate order — from the visitCrear pedido — desde la visitaNo detalhe da visita, a grade de ferramentas tem Fazer pedido → abre a Vitrine de produtos daquele varejo (visitSfid).In the visit detail, the tools grid has Place order → opens the Product showcase for that retail (visitSfid).En el detalle de visita, la grilla de herramientas tiene Hacer pedido → abre la Vitrina de productos de ese punto de venta (visitSfid).
  2. Editar pedido — pelo detalheEdit order — from the detailEditar pedido — desde el detalleNo detalhe do pedido, a ação Editar reconstrói o carrinho a partir do pedido e abre a mesma vitrine (modo edição).In the order detail, the Edit action rebuilds the cart from the order and opens the same showcase (edit mode).En el detalle del pedido, la acción Editar reconstruye el carrito desde el pedido y abre la misma vitrina (modo edición).
  3. Avançar pelas etapasMove through the stepsAvanzar por las etapasVitrine → RevisarPagamento → confirmar no modal de envio → Confirmação. Um stepper no topo mostra a etapa atual.Showcase → ReviewPayment → confirm in the submission modal → Confirmation. A stepper at the top shows the current step.Vitrina → RevisarPago → confirmar en el modal de envío → Confirmación. Un stepper arriba muestra la etapa actual.
  4. Ver últimos pedidos do varejoSee the retail's last ordersVer últimos pedidos del punto de ventaO detalhe da visita também abre a Últimos pedidos (Last orders) — lista somente-leitura dos pedidos daquela conta, com carregar mais antigos.The visit detail also opens Last orders — a read-only list of that account's orders, with load-older.El detalle de visita también abre Últimos pedidos — lista de solo lectura de los pedidos de esa cuenta, con cargar más antiguos.
03

Estrutura das telasScreen structureEstructura de las pantallas

Todas as telas do fluxo compartilham o mesmo cabeçalho: última sincronização, card da conta (nome, SAP, aviso de atraso) e pílula de data de entrega estimada.Every screen in the flow shares the same header: last sync, account card (name, SAP, overdue warning) and the estimated delivery date pill.Todas las pantallas del flujo comparten el mismo encabezado: última sincronización, tarjeta de la cuenta (nombre, SAP, aviso de mora) y la píldora de fecha de entrega estimada.

Vitrine de produtosProduct showcaseVitrina de productos
Abas (Promoções, Sugestão/SOQ, categorias), busca, filtros por grupo de material e família de marca, cards de produto com stepper de quantidade, e rodapé fixo (barra de resumo) com limite de crédito, total e itens; expande num resumo do carrinho.Tabs (Promotions, Suggestion/SOQ, categories), search, material-group and brand-family filters, product cards with a quantity stepper, and a sticky footer (summary bar) showing credit limit, total and items; it expands into a cart summary.Pestañas (Promociones, Sugerencia/SOQ, categorías), búsqueda, filtros por grupo de material y familia de marca, tarjetas de producto con stepper de cantidad y un pie fijo (barra de resumen) con límite de crédito, total e ítems; se expande en un resumen del carrito.
Revisão do carrinhoCart reviewRevisión del carrito
Seções: Promoções (aplicadas/disponíveis), Seu pedido (itens de compra), Bonificações (itens grátis das promoções), Totais e aviso de bloqueio. Rodapé: Limpar e Ir para pagamento.Sections: Promotions (applied/available), Your request (purchase items), Bonus (promotion free goods), Totals and a lock warning. Footer: Clear and Go to payment.Secciones: Promociones (aplicadas/disponibles), Tu pedido (ítems de compra), Bonificaciones (ítems gratis de promociones), Totales y un aviso de bloqueo. Pie: Limpiar e Ir a pago.
PagamentoPaymentPago
Um bloco por split (expansível): forma de pagamento, parcelas com valor/percentual/vencimento (editáveis onde o mercado permite) e chave Pix quando aplicável. Rodapé: Voltar e Confirmar.One block per split (expandable): payment method, parcels with value/percentage/due date (editable where the market allows) and Pix key when applicable. Footer: Come back and Confirm.Un bloque por split (expansible): forma de pago, cuotas con valor/porcentaje/vencimiento (editables donde el mercado lo permite) y clave Pix cuando aplica. Pie: Volver y Confirmar.
ConfirmaçãoConfirmationConfirmación
Um bloco por pedido enviado: número de PO, data, entrega, status da transação e itens agrupados por categoria. Sem voltar (a rota é travada); o botão final volta ao detalhe da visita (criação) ou à raiz (edição).One block per submitted order: PO number, date, delivery, transaction status and items grouped by category. No back (route is locked); the final button returns to the visit detail (create) or root (edit).Un bloque por pedido enviado: número de PO, fecha, entrega, estado de la transacción e ítems agrupados por categoría. Sin volver (la ruta está bloqueada); el botón final vuelve al detalle de visita (creación) o a la raíz (edición).
Últimos pedidosLast ordersÚltimos pedidos
Lista somente-leitura dos pedidos daquele varejo, com cabeçalho, lista de cards e botão carregar mais antigos.Read-only list of that retail's orders, with a header, a list of cards and a load older button.Lista de solo lectura de los pedidos de ese punto de venta, con encabezado, lista de tarjetas y botón cargar más antiguos.
04

Status e envioStatus & submissionEstado y envío

Ao confirmar, um modal de progresso mostra o envio de cada split, um por linha, com indicador de estado. O modal não pode ser fechado durante o envio.On confirm, a progress modal shows each split being sent, one per row, with a status indicator. The modal cannot be dismissed while sending.Al confirmar, un modal de progreso muestra el envío de cada split, uno por fila, con un indicador de estado.

Enviando / pendenteSending / pendingEnviando / pendiente Enviado com sucessoSent successfullyEnviado con éxito Falha no envioSend failedFalla en el envío

O envio só é considerado concluído quando todos os splits recebem confirmação (ACK). Cada pedido enviado carrega um status de transação resolvido no envio — a lista completa está na seção técnica Enums (OrderTransactionStatus):Submission is only completed when all splits are acknowledged (ACK). Each submitted order carries a transaction status resolved at send time — the full list is in the technical Enums section (OrderTransactionStatus):El envío solo se considera completado cuando todos los splits reciben confirmación (ACK). Cada pedido enviado lleva un estado de transacción resuelto en el envío — la lista completa está en la sección técnica Enums (OrderTransactionStatus):

Invoiced / Invoiced Not Sync
pedido criado direto (sem aprovação pendente).order created straight through (no pending approval).pedido creado directo (sin aprobación pendiente).
PA / Pending External Approval
enviado para aprovação (limite de crédito, dias de crédito, overdue).sent for approval (credit limit, credit days, overdue).enviado a aprobación (límite de crédito, días de crédito, mora).
Awaiting Pix Payment
Pix acima do limite: aguarda pré-pagamento.Pix over the limit: awaits pre-payment.Pix sobre el límite: espera pre-pago.
On-Hold / Cancelled
retido ou cancelado.held or cancelled.retenido o cancelado.

Idioma dos statusStatus languageIdioma de los estados Os códigos de status são de negócio, em inglês, compartilhados entre times — exibidos como estão (não traduzidos). Decisão de produto. Status codes are business codes in English, shared across teams — shown as-is (not translated). Product decision. Los códigos de estado son de negocio, en inglés, compartidos entre equipos — mostrados tal cual (no traducidos). Decisión de producto.

05

Ações e bloqueiosActions & gatesAcciones y bloqueos

O que dá pra fazer com o carrinhoWhat you can do with the cartQué se puede hacer con el carrito

ItensItemsÍtems
Adicionar, incrementar, decrementar, definir quantidade e remover — respeitando o passo (pack / meio-pack) e o SOQ do produto.Add, increment, decrement, set quantity and remove — respecting the step (pack / half-pack) and the product's SOQ.Agregar, incrementar, decrementar, definir cantidad y quitar — respetando el paso (pack / medio-pack) y el SOQ del producto.
PromoçõesPromotionsPromociones
Aplicar / remover promoções e spot promotions, e escolher a recompensa (reward) quando a promoção oferece opções.Apply / remove promotions and spot promotions, and pick the reward when a promotion offers options.Aplicar / quitar promociones y spot promotions, y elegir la recompensa cuando la promoción ofrece opciones.
PagamentoPaymentPago
Escolher a forma de pagamento, adicionar/remover parcelas, editar data de vencimento (onde permitido) e informar PO.Choose payment method, add/remove parcels, edit due date (where allowed) and enter a PO.Elegir forma de pago, agregar/quitar cuotas, editar fecha de vencimiento (donde se permite) e ingresar PO.
CarrinhoCartCarrito
Dobrar (fold) o carrinho e limpar tudo (com confirmação). Esvaziar o carrinho fecha o fluxo e volta atrás.Fold the cart and clear all (with confirmation). Emptying the cart closes the flow and navigates back.Plegar (fold) el carrito y limpiar todo (con confirmación). Vaciar el carrito cierra el flujo y vuelve atrás.

Bloqueios (gates)GatesBloqueos (gates)

Em dois pontos o app bloqueia o avanço (o botão fica cinza/desabilitado) até as condições serem satisfeitas:At two points the app blocks progress (the button turns grey/disabled) until the conditions are met:En dos puntos la app bloquea el avance (el botón queda gris/deshabilitado) hasta que se cumplan las condiciones:

CheckpointCheckpointCheckpointBloqueioBlockerBloqueoQuando disparaWhen it firesCuándo dispara
Revisão → PagamentoReview → PaymentRevisión → PagonoPurchaseProductssubtotal ≤ 0 (só bonificação, sem produto de compra).subtotal ≤ 0 (only free goods, no purchase product).subtotal ≤ 0 (solo bonificación, sin producto de compra).
Pagamento → EnviarPayment → SubmitPago → EnviarcreditLimitExceededlimite de crédito atingido (já considerando os bypasses do mercado: Pix, dias de crédito 0, bypass explícito).credit limit reached (already accounting for market bypasses: Pix, credit-days 0, explicit bypass).límite de crédito alcanzado (ya con los bypasses del mercado: Pix, días de crédito 0, bypass explícito).
06

Arquitetura e fluxo de dadosArchitecture & data flowArquitectura y flujo de datos

Clean Architecture + Riverpod + Freezed + ObjectBox + gRPC. Ao contrário da Lista de pedidos (leitura), o carrinho é estado de escrita client-side: montado no aparelho, persistido só localmente por conta, e enviado como transação. Há duas frentes distintas — a máquina de estado do carrinho (leitura/mutação) e o envio (escrita remota via Dispatcher).Clean Architecture + Riverpod + Freezed + ObjectBox + gRPC. Unlike the read-only Order list, the cart is client-side write state: assembled on-device, persisted locally only per account, and sent as a transaction. There are two distinct fronts — the cart state machine (read/mutate) and submission (remote write via the Dispatcher).Clean Architecture + Riverpod + Freezed + ObjectBox + gRPC. A diferencia de la Lista de pedidos (lectura), el carrito es estado de escritura client-side: armado en el dispositivo, persistido solo localmente por cuenta, y enviado como transacción. Hay dos frentes — la máquina de estado del carrito (lectura/mutación) y el envío (escritura remota vía Dispatcher).

1 · Máquina de estado do carrinho (leitura + mutação)1 · Cart state machine (read + mutate)1 · Máquina de estado del carrito (lectura + mutación)

O cartProvider(accountSfid) é a fonte única do carrinho. Toda mutação vira um CartIntent que passa pelo CartOrchestrator; os totais, os bloqueios e a avaliação de promoção são providers derivados.The cartProvider(accountSfid) is the cart's single source of truth. Every mutation becomes a CartIntent routed through the CartOrchestrator; totals, locks and promotion evaluation are derived providers.El cartProvider(accountSfid) es la fuente única del carrito. Toda mutación se vuelve un CartIntent que pasa por el CartOrchestrator; totales, bloqueos y evaluación de promoción son providers derivados.

  • CartIntentadd / remove / promo / payment…
    • Cart.applyCartOrchestrator.applyIntentmutate + evaluate + parcels
      • saveCartRepositoryObjectBox local-only
        • statecartProviderCartEntity? · keepAlive
          • watchcartTotals · cartLock · cartContextderived providers
            • → UIShowcase · Review · Payment

2 · Envio (escrita remota via Dispatcher)2 · Submission (remote write via Dispatcher)2 · Envío (escritura remota vía Dispatcher)

O OrderSubmission quebra o carrinho em splits, monta um envelope por split com o BuildOrderPlacementDispatcherPayloadUseCase e envia em paralelo (Future.wait). O contrato wire está documentado na transação Order Placement.The OrderSubmission breaks the cart into splits, builds one envelope per split with BuildOrderPlacementDispatcherPayloadUseCase and sends them in parallel (Future.wait). The wire contract is documented in the Order Placement transaction.El OrderSubmission divide el carrito en splits, arma un envelope por split con BuildOrderPlacementDispatcherPayloadUseCase y los envía en paralelo (Future.wait). El contrato wire está documentado en la transacción Order Placement.

  • OrderPaymentFooterConfirmar
    • notifier.submitOrderSubmission.submitsplits + status + envelopes
      • buildBuildOrderPlacementDispatcherPayloadUseCaseDispatcherEnvelope
        • submitSubmitOrderUseCase → DispatcherOrchestratorsendTransaction
          • on all ACKCart.clear+ OrderConfirmation

Últimos pedidos é a exceção de leitura: usa o mesmo OrderRepository da Lista de pedidos (proto OrderConectaRep, RPC getOrderList) via GetOrdersForAccountUseCase / LoadOlderOrdersForAccountUseCase.Last orders is the read exception: it uses the Order list's OrderRepository (proto OrderConectaRep, RPC getOrderList) via GetOrdersForAccountUseCase / LoadOlderOrdersForAccountUseCase.Últimos pedidos es la excepción de lectura: usa el OrderRepository de la Lista de pedidos (proto OrderConectaRep, RPC getOrderList) vía GetOrdersForAccountUseCase / LoadOlderOrdersForAccountUseCase.

07

Modelo de dadosData modelModelo de datos

O carrinho não tem proto nem DTO — é estado de escrita nascido no aparelho, não um dado que chega do backend. Existe em duas representações ligadas por um mapper: Entity (domínio, fonte da verdade em runtime) e Model (ObjectBox, persistência local). O CartRepository grava/lê por accountSfid — cada varejo tem, no máximo, um carrinho salvo. Só no envio o carrinho vira JSON de wire, e isso mora no builder do Dispatcher (ver Order Placement), não aqui.The cart has no proto and no DTO — it is write state born on-device, not data arriving from the backend. It exists in two representations linked by a mapper: Entity (domain, runtime source of truth) and Model (ObjectBox, local persistence). The CartRepository reads/writes by accountSfid — each retail has at most one saved cart. Only at submission does the cart become wire JSON, and that lives in the Dispatcher builder (see Order Placement), not here.El carrito no tiene proto ni DTO — es estado de escritura nacido en el dispositivo, no un dato que llega del backend. Existe en dos representaciones unidas por un mapper: Entity (dominio, fuente de verdad en runtime) y Model (ObjectBox, persistencia local). El CartRepository lee/graba por accountSfid — cada punto de venta tiene como máximo un carrito guardado. Solo en el envío el carrito se vuelve JSON de wire, y eso vive en el builder del Dispatcher (ver Order Placement), no aquí.

A raiz é o Cart (11 campos), com itens, promoções aplicadas, spot promotions aplicadas e o pagamento. Os enums só existem tipados na Entity; no Model trafegam como String. As relações viram ToMany no Model. O sub-objeto de pagamento (CartPayment) é achatado no Model (método vira String; as parcelas sobem para uma ToMany no CartModel). Campos avaliados em runtime (replenishments, promotionLink) não têm caixa própria no ObjectBox. A seguir: as estruturas campo-a-campo, os value objects só-domínio da avaliação, e os mappers.The root is Cart (11 fields), with items, applied promotions, applied spot promotions and payment. Enums are only typed in the Entity; in the Model they travel as String. Relations become ToMany in the Model. The payment sub-object (CartPayment) is flattened in the Model (method becomes a String; parcels lift into a ToMany on CartModel). Runtime-evaluated fields (replenishments, promotionLink) have no ObjectBox box of their own. Next: the field-by-field structures, the domain-only evaluation value objects, and the mappers.La raíz es Cart (11 campos), con ítems, promociones aplicadas, spot promotions aplicadas y el pago. Los enums solo están tipados en la Entity; en el Model viajan como String. Las relaciones pasan a ToMany en el Model. El sub-objeto de pago (CartPayment) está aplanado en el Model (método pasa a String; las cuotas suben a una ToMany en el CartModel). Campos evaluados en runtime (replenishments, promotionLink) no tienen caja propia en ObjectBox. A continuación: las estructuras campo a campo, los value objects solo-dominio de la evaluación, y los mappers.

Estruturas de dadosData structuresEstructuras de datos

Um dropdown por estrutura, aninhados pela hierarquia. Duas colunas de camada — Model · Entity (Entity última). O delta (texto accent) marca onde o tipo diverge: enum tipado → Entity; relação → ToMany no Model.One dropdown per structure, nested by hierarchy. Two layer columns — Model · Entity (Entity last). The delta (accent text) marks where the type diverges: typed enum → Entity; relation → ToMany in the Model.Un dropdown por estructura, anidados por jerarquía. Dos columnas de capa — Model · Entity (Entity última). El delta (texto accent) marca dónde diverge el tipo: enum tipado → Entity; relación → ToMany en el Model.

  • Cart raiz 11 campos
    CampoModelEntity
    accountSfidStringString
    cartHashStringString
    deliveryDateStringString
    paymentflat (paymentMethod + parcels)CartPaymentEntity
    itemsToMany<CartItemModel>List<CartItemEntity>
    appliedPromotionsToMany<…Model>List<AppliedPromotionEntity>
    appliedSpotPromotionsToMany<…Model>List<AppliedSpotPromotionEntity>
    isFoldCartboolbool
    isPromptOrderboolbool
    orderIdStringString
    replenishmentsList<OrderLockEntity>
    • CartItem Cart.items[] 6 campos
      CampoModelEntity
      productSfidStringString
      quantitydoubledouble
      typeStringCartItemType
      promotionLinkflat (int fields)CartItemPromotionLink?
      batchAllocationsToMany<…Model>List<…Entity>
      orderLineItemSfidString?String?
      • CartItemPromotionLink CartItem.promotionLink 4 campos
        CampoModelEntity
        promotionIdintint
        isSpotPromotionboolbool
        rewardIndexint?int?
        rewardDetailIndexint?int?
      • CartItemBatchAllocation CartItem.batchAllocations[] 2 campos
        CampoModelEntity
        batchIdStringString
        quantitydoubledouble
    • CartPayment Cart.payment · achatado no Model 3 campos
      CampoModelEntity
      methodString (CartModel.paymentMethod)String
      parcelsToMany<ParcelModel> (no CartModel)List<ParcelEntity>
      creditNoteflat (sfid + value)CartCreditNoteEntity?
      • Parcel CartPayment.parcels[] 9 campos
        CampoModelEntity
        parcelSfidStringString
        pricedoubledouble
        percentagedoubledouble
        dueDateDateTime?DateTime?
        paymentMethodStringString
        creditDaysdoubledouble
        internalPixKeyStringString
        bankPixKeyStringString
        wasEditedboolbool
      • CartCreditNote CartPayment.creditNote 2 campos
        CampoModelEntity
        sfidStringString
        valuedoubledouble
    • AppliedPromotion Cart.appliedPromotions[] 6 campos
      CampoModelEntity
      promotionIdintint
      isAppliedboolbool
      achievedLevelintint
      selectedRewardflat (int fields)RewardSelection?
      isAvailableboolbool
      isTargetAchievedboolbool
    • AppliedSpotPromotion Cart.appliedSpotPromotions[] 2 campos
      CampoModelEntity
      spotPromotionIdintint
      isAppliedboolbool

Value objects de avaliação (só domínio)Evaluation value objects (domain-only)Value objects de evaluación (solo dominio)

Não persistem, não têm proto/mapper — são calculados a cada mutação pelo CartOrchestrator e expostos por providers derivados:These do not persist and have no proto/mapper — they are computed on every mutation by the CartOrchestrator and exposed by derived providers:No persisten, no tienen proto/mapper — se calculan en cada mutación por el CartOrchestrator y se exponen por providers derivados:

Value objectPapelRoleRol
CartTotalsEntitysubtotal, descontos, VAT, cashFee, total + itemTotals por item.subtotal, discounts, VAT, cashFee, total + per-item itemTotals.subtotal, descuentos, VAT, cashFee, total + itemTotals por ítem.
CartLockResultEntityveredito de checkout: allowCheckout, isCreditLimitReached, isPurchaseLimitReached.checkout verdict: allowCheckout, isCreditLimitReached, isPurchaseLimitReached.veredicto de checkout: allowCheckout, isCreditLimitReached, isPurchaseLimitReached.
CartOrchestrationContextEntityo "ambiente" da avaliação: mercado, config, crédito, promoções, catálogo de produtos, relógio.the evaluation "environment": market, config, credit, promotions, product catalog, clock.el "entorno" de la evaluación: mercado, config, crédito, promociones, catálogo de productos, reloj.
PendingApprovalResultEntityse o pedido vai para aprovação e de que tipo (CartApprovalType).whether the order goes to approval and of which type (CartApprovalType).si el pedido va a aprobación y de qué tipo (CartApprovalType).
PromotionDetailEvaluationEntitydetalhe de uma promoção no contexto do carrinho atual (target, tiers, rewards).detail of one promotion in the current cart context (target, tiers, rewards).detalle de una promoción en el contexto del carrito actual (target, tiers, rewards).

Mappers

Só duas direções (sem proto/DTO), como extension. Há ainda um mapper especial de edição:Only two directions (no proto/DTO), as extensions. There is also a special edit mapper:Solo dos direcciones (sin proto/DTO), como extension. Hay además un mapper especial de edición:

DireçãoDirectionDirecciónMétodoMethodMétodo
Entity → ModeltoModel() (enums → .value; popula ToMany; achata payment/creditNote)(enums → .value; fills ToMany; flattens payment/creditNote)(enums → .value; llena ToMany; aplana payment/creditNote)
Model → EntitytoDomain() (resolve enums via fromString; recompõe payment)(resolves enums via fromString; recomposes payment)(resuelve enums vía fromString; recompone payment)
Order → Cartcart_from_order_mapper (fluxo de edição: reconstrói o carrinho a partir de um OrderEntity)(edit flow: rebuilds the cart from an OrderEntity)(flujo de edición: reconstruye el carrito desde un OrderEntity)

Os únicos deltasThe only deltasLos únicos deltas

  • sem proto e sem DTO — o carrinho só existe como Entity + Model.no proto and no DTO — the cart only exists as Entity + Model.sin proto ni DTO — el carrito solo existe como Entity + Model.
  • CartItem.type StringCartItemType (enum só na Entity)(enum only in the Entity)(enum solo en la Entity)
  • relações (items, appliedPromotions, appliedSpotPromotions, batchAllocations) viram ToMany no Model.relations (items, appliedPromotions, appliedSpotPromotions, batchAllocations) become ToMany in the Model.relaciones (items, appliedPromotions, appliedSpotPromotions, batchAllocations) pasan a ToMany en el Model.
  • CartPayment é achatado: method vira CartModel.paymentMethod, parcels sobe para ToMany no CartModel, creditNote vira campos planos.is flattened: method becomes CartModel.paymentMethod, parcels lift to a ToMany on CartModel, creditNote becomes flat fields.se aplana: method pasa a CartModel.paymentMethod, parcels sube a ToMany en CartModel, creditNote pasa a campos planos.
  • replenishments é avaliado em runtime — não persiste no Model.is runtime-evaluated — not persisted in the Model.se evalúa en runtime — no persiste en el Model.
08

Repository

CartRepositoryImpl implementaimplementsimplementa CartRepositoryInterface e injeta apenas o CartLocalDataSource. É local-only — não há mock nem remote: o carrinho é escrita client-side, o envio ao backend é responsabilidade do Dispatcher.and injects only CartLocalDataSource. It is local-only — no mock, no remote: the cart is client-side write state; sending to the backend is the Dispatcher's job.e inyecta solo CartLocalDataSource. Es local-only — sin mock ni remote: el carrito es escritura client-side; el envío al backend es responsabilidad del Dispatcher.

getCart({accountSfid}) local

RetornaReturnsDevuelve Future<Result<CartEntity?, Failure>>

Lê o carrinho salvo daquela conta (ou null). Base do cartProvider.build.Reads that account's saved cart (or null). Backs cartProvider.build.Lee el carrito guardado de esa cuenta (o null). Base de cartProvider.build.

saveCart({cart}) local

RetornaReturnsDevuelve Future<Result<void, Failure>>

Substitui (remove + grava) o carrinho da conta. Usado pelo orchestrator após cada mutação.Replaces (remove + write) the account's cart. Used by the orchestrator after each mutation.Reemplaza (quita + graba) el carrito de la cuenta. Usado por el orchestrator tras cada mutación.

deleteCart({accountSfid}) · clearCart({accountSfid}) local

RetornaReturnsDevuelve Future<Result<void, Failure>>

Removem o carrinho da conta (pós-envio bem-sucedido ou "limpar tudo").Remove the account's cart (after a successful submit or "clear all").Quitan el carrito de la cuenta (tras un envío exitoso o "limpiar todo").

Leitura de pedidosOrder readsLectura de pedidos Últimos pedidos não passa pelo CartRepository: usa o OrderRepository da Lista de pedidos (cache + remote fallback). Last orders does not go through CartRepository: it uses the Order list's OrderRepository (cache + remote fallback). Últimos pedidos no pasa por CartRepository: usa el OrderRepository de la Lista de pedidos (caché + fallback remoto).

09

Datasources

Um só datasource — nada de mock/remote (o carrinho nunca é buscado do backend).A single datasource — no mock/remote (the cart is never fetched from the backend).Un solo datasource — sin mock/remote (el carrito nunca se busca del backend).

Local · CartLocalDataSource ObjectBox

Guarda o carrinho em várias boxes ObjectBox (CartModel, CartItemModel, ParcelModel, AppliedPromotionModel, AppliedSpotPromotionModel, CartItemBatchAllocationModel). Consulta por accountSfid; salvar substitui o carrinho existente da conta.Stores the cart across several ObjectBox boxes (CartModel, CartItemModel, ParcelModel, AppliedPromotionModel, AppliedSpotPromotionModel, CartItemBatchAllocationModel). Queried by accountSfid; saving replaces the account's existing cart.Guarda el carrito en varias boxes ObjectBox (CartModel, CartItemModel, ParcelModel, AppliedPromotionModel, AppliedSpotPromotionModel, CartItemBatchAllocationModel). Consulta por accountSfid; guardar reemplaza el carrito existente de la cuenta.

getCart
query por accountSfidCartModel?.toDomain().query by accountSfidCartModel?.toDomain().query por accountSfidCartModel?.toDomain().
saveCart
remove o carrinho da conta e grava cart.toModel().removes the account's cart and writes cart.toModel().quita el carrito de la cuenta y graba cart.toModel().
deleteCart / clearCart
removem as caixas do carrinho da conta.remove the account's cart boxes.quitan las cajas del carrito de la cuenta.
ErrosErrorsErrores
lançam CacheException; o repository mapeia para Failure.throw CacheException; the repository maps to Failure.lanzan CacheException; el repository mapea a Failure.
10

Enums e labelsEnums & labelsEnums y labels

Um dropdown por enum, todos os valores, um por linha. Códigos de wire ficam crus.One dropdown per enum, all values, one per line. Wire codes stay raw.Un dropdown por enum, todos los valores, uno por línea. Los códigos de wire quedan crudos.

CartItemType 3
casevalue
productproduct
freeOfChargeFoC
unknownUnknown
CartApprovalType 4
casevalue
nonenone
overdueThresholdOverdue Threshold
creditDaysCredit Days
promotionalCreditDaysPromotional Credit Days
OrderSubmitIntent 4
casenotanotenota
createcriar (getter isCreation)create (getter isCreation)crear (getter isCreation)
editeditarediteditar
releaseliberarreleaseliberar
cancelcancelar (getter isCancellation)cancel (getter isCancellation)cancelar (getter isCancellation)
OrderTransactionStatus 7
casevalue
cancelledCancelled
awaitingPixPaymentAwaiting Pix Payment
pendingApprovalPA
pendingExternalApprovalPending External Approval
invoicedInvoiced
invoicedNotSyncInvoiced Not Sync
onHoldOn-Hold
OrderCreationStage 2
casecheckpointcheckpointcheckpoint
cartToPaymentRevisão → PagamentoReview → PaymentRevisión → Pago
paymentToSubmitPagamento → EnviarPayment → SubmitPago → Enviar
OrderCreationBlocker 2
casecondiçãoconditioncondición
noPurchaseProductstotals.subtotal <= 0
creditLimitExceededlock.isCreditLimitReached
OrderPlacementStep 3
case
cart
payment
finish
OrderSubmissionPhase · SplitSendStatus 4 · 4
enumvaloresvaluesvalores
OrderSubmissionPhaseidle · submitting · completed · failed
SplitSendStatuspending · sending · success · error
PaymentMode 13 · code wire
casecode
bankSlipZG
electronicFundsTransferZE
bankDepositZB
cashZH
chequeZC
promissoryNoteZI
creditNoteZ9
pixZX
creditCardZ1
debitCardZ2
paymentOrderZP
directDebitZJ
mobilePaymentZM
11

UseCases

A lógica não vive na Page nem no Notifier: fica em UseCases puros orquestrados pelo CartOrchestrator (o motor do carrinho) mais os UseCases de gate e envio.Logic lives neither in the Page nor the Notifier: it sits in pure UseCases orchestrated by the CartOrchestrator (the cart engine) plus the gate and submission UseCases.La lógica no vive en la Page ni en el Notifier: está en UseCases puros orquestados por el CartOrchestrator (el motor del carrito) más los UseCases de gate y envío.

CartOrchestrator motorenginemotor
MétodoMethodMétodoRetornaReturnsDevuelveUsoUseUso
applyIntentFuture<CartEntity>muta + avalia promoções + regenera parcelasmutate + evaluate promotions + regenerate parcelsmuta + evalúa promociones + regenera cuotas
computeTotalsFuture<CartTotalsEntity>totais do carrinhocart totalstotales del carrito
computeLockRulesFuture<CartLockResultEntity>veredito de bloqueio/checkoutlock/checkout verdictveredicto de bloqueo/checkout
resolvePendingApprovalFuture<PendingApprovalResultEntity>precisa de aprovação?needs approval?¿necesita aprobación?
buildSplitsFuture<List<CartEntity>>divide o carrinho em pedidossplit cart into ordersdivide el carrito en pedidos
evaluatePromotionDetailFuture<PromotionDetailEvaluationEntity?>detalhe de 1 promoção no cart atualdetail of 1 promotion in current cartdetalle de 1 promoción en el cart actual
reconstructFromOrderFuture<CartEntity>edição: recria o cart a partir de um pedidoedit: recreate cart from an orderedición: recrea el cart desde un pedido
getEmptyCartCartEntitycarrinho vazio inicial (método padrão de pagamento)initial empty cart (default payment method)carrito vacío inicial (método de pago por defecto)
EvaluateOrderCreationAvailabilityUseCase gatesgatesgates
MétodoMethodMétodoRetornaReturnsDevuelveUsoUseUso
execute({stage, ctx})OrderCreationAvailabilityEntityroda os gates _checkPurchaseProducts + _checkCreditLimit; devolve blockers[] e canProceed.runs gates _checkPurchaseProducts + _checkCreditLimit; returns blockers[] and canProceed.corre los gates _checkPurchaseProducts + _checkCreditLimit; devuelve blockers[] y canProceed.
Envio (Dispatcher) build · resolve · submit
UseCaseUseCaseUseCaseRetornaReturnsDevuelveUsoUseUso
BuildOrderPlacementDispatcherPayloadUseCaseDispatcherEnvelopemonta o payload wire de 1 split (tipo order/orderIndirect/orderApproval; Promo_ se há promoção).builds the wire payload for 1 split (type order/orderIndirect/orderApproval; Promo_ if there is a promotion).arma el payload wire de 1 split (tipo order/orderIndirect/orderApproval; Promo_ si hay promoción).
ResolveOrderTransactionStatusUseCaseOrderTransactionStatusresolve o status de cada pedido enviado.resolves each submitted order's status.resuelve el estado de cada pedido enviado.
SubmitOrderUseCaseFuture<List<Result<DispatcherAck, Failure>>>envia os envelopes via DispatcherOrchestrator (Future.wait).sends the envelopes via DispatcherOrchestrator (Future.wait).envía los envelopes vía DispatcherOrchestrator (Future.wait).
Últimos pedidos (leitura) OrderRepository
UseCaseRetornaReturnsDevuelveUsoUseUso
GetOrdersForAccountUseCaseFuture<Result<List<OrderEntity>, Failure>>execute({accountSfid})
LoadOlderOrdersForAccountUseCaseFuture<Result<List<OrderEntity>, Failure>>execute({accountSfid, beforeDate})

O CartOrchestrator apoia-se em ~20 UseCases pequenos em usecases/cart/ (pricing, meio-pack, parcelas, splits, lock rules, credit note, aprovação…) e no motor de promoções (usecases/promotion/). Cada mutação é composição pura desses UseCases.The CartOrchestrator leans on ~20 small UseCases in usecases/cart/ (pricing, half-pack, parcels, splits, lock rules, credit note, approval…) and the promotion engine (usecases/promotion/). Each mutation is a pure composition of these.El CartOrchestrator se apoya en ~20 UseCases pequeños en usecases/cart/ (pricing, medio-pack, cuotas, splits, lock rules, credit note, aprobación…) y el motor de promociones (usecases/promotion/). Cada mutación es composición pura de estos.

12

Providers, Notifiers & StateProviders, Notifiers & StateProviders, Notifiers y State

O carrinho é estado cross-page, então mora em Providers (não em Notifier de página — CLAUDE.md §33). As 5 telas têm cada uma seu Notifier de página, que só compõe o State a partir dos providers de cart + catálogo.The cart is cross-page state, so it lives in Providers (not a page Notifier — CLAUDE.md §33). The 5 screens each have their own page Notifier, which only composes State from the cart + catalog providers.El carrito es estado cross-page, por eso vive en Providers (no en Notifier de página — CLAUDE.md §33). Las 5 pantallas tienen cada una su Notifier de página, que solo compone el State desde los providers de cart + catálogo.

Providers transversais do carrinhoCross-page cart providersProviders transversales del carrito

Cart(accountSfid) keepAlive · fonte única

AsyncNotifier<CartEntity?>. Expõe as mutações como métodos que viram CartIntent e passam pelo orchestrator, salvando via repository:AsyncNotifier<CartEntity?>. Exposes mutations as methods that become a CartIntent routed through the orchestrator, saved via the repository:AsyncNotifier<CartEntity?>. Expone las mutaciones como métodos que se vuelven CartIntent y pasan por el orchestrator, guardando vía repository:

addProduct · increment · decrement · setQuantity · removeProduct
itensitemsítems
applyPromotion · unapplyPromotion · selectReward
promoções e recompensapromotions and rewardpromociones y recompensa
setPaymentMethod · setDeliveryDate · foldCart
pagamento / entrega / foldpayment / delivery / foldpago / entrega / fold
clear()
esvazia o carrinho (aplica ClearCartIntent).empties the cart (applies ClearCartIntent).vacía el carrito (aplica ClearCartIntent).
Providers derivados context · totals · lock · promoDetail · availability · submission
ProviderExpõeExposesExpone
cartContextProviderCartOrchestrationContextEntity (mercado, config, crédito, promoções, catálogo)(market, config, credit, promotions, catalog)(mercado, config, crédito, promociones, catálogo)
cartTotalsProviderCartTotalsEntity
cartLockProviderCartLockResultEntity
promotionDetailEvaluationProviderPromotionDetailEvaluationEntity?
orderCreationAvailabilityProvider(accountSfid, stage)OrderCreationAvailabilityEntity (gates → canProceed)(gates → canProceed)(gates → canProceed)
OrderSubmission(accountSfid)OrderSubmissionState — método submit() orquestra splits + envio (§39: envio disparado do notifier)— method submit() orchestrates splits + send (§39: send fired from the notifier)— método submit() orquesta splits + envío (§39)

Notifiers de páginaPage notifiersNotifiers de página

ProductShowcaseNotifier · CartReviewNotifier · OrderPaymentNotifier AsyncGuard + refresh

Todos usam AsyncGuard, com build → _load() e refresh() que re-busca a visita/catálogo remoto e invalida o cartContext. O Showcase tem também setActiveTab, setSearchQuery, setMaterialGroupFilter, setBrandFamilyFilter, loadMore. O Payment tem selectMethod, setPoNumber, toggleExpanded, addParcel, removeParcel, editParcelDueDate e submit() — que apenas delega ao OrderSubmission.submit().All use AsyncGuard, with build → _load() and a refresh() that re-fetches the remote visit/catalog and invalidates cartContext. Showcase also has setActiveTab, setSearchQuery, setMaterialGroupFilter, setBrandFamilyFilter, loadMore. Payment has selectMethod, setPoNumber, toggleExpanded, addParcel, removeParcel, editParcelDueDate and submit() — which only delegates to OrderSubmission.submit().Todos usan AsyncGuard, con build → _load() y un refresh() que re-busca la visita/catálogo remoto e invalida cartContext. Showcase tiene además setActiveTab, setSearchQuery, setMaterialGroupFilter, setBrandFamilyFilter, loadMore. Payment tiene selectMethod, setPoNumber, toggleExpanded, addParcel, removeParcel, editParcelDueDate y submit() — que solo delega a OrderSubmission.submit().

OrderConfirmationNotifier · LastOrdersNotifier confirm · read-list

Confirmation lê o OrderSubmissionResultEntity do OrderSubmission e o expõe como State (sem refresh). LastOrders usa AsyncGuard: _load busca pedidos da conta, refresh() e loadOlderOrders() (paginação por data).Confirmation reads the OrderSubmissionResultEntity from OrderSubmission and exposes it as State (no refresh). LastOrders uses AsyncGuard: _load fetches the account's orders, refresh() and loadOlderOrders() (date pagination).Confirmation lee el OrderSubmissionResultEntity del OrderSubmission y lo expone como State (sin refresh). LastOrders usa AsyncGuard: _load busca pedidos de la cuenta, refresh() y loadOlderOrders() (paginación por fecha).

State disponível para as PagesState available to the PagesState disponible para las Pages

ProductShowcaseState tabs · filtros · SOQ
camposfieldscampos
accountSfid, account, estimatedDeliveryDate, lastSyncAt, tabs, products, promotions, activeTabRoute, searchQuery, materialGroupFilter, brandFamilyFilter, visibleCount
getters
activeTab, isPromotionsTab, isSuggestionTab, filteredProducts, visibleProducts, materialGroupOptions, brandFamilyOptions, showsFilters, hasMoreToLoad, sobFor/soqFor, promotionsForProduct
CartReviewState · OrderPaymentState · OrderConfirmationState · LastOrdersState 4 states
StateCampos-chaveKey fieldsCampos clave
CartReviewStateaccount, products, promotions, estimatedDeliveryDate + getters availablePromotions/achievedPromotions/soqFor
OrderPaymentStatemarket, splits: List<OrderPaymentSplit>, paymentOptions, poNumber, maxParcels, allowParcelDateEdit + getter isSplit
OrderConfirmationStateresult: OrderSubmissionResultEntity + getters splits, itemGroups(split)
LastOrdersStateorders: List<OrderEntity>, lastSyncAt, isLoadingOlder
OrderSubmissionStatephase, splitProgress, result, submissionFailure + getters isSubmitting/isCompleted/isFailed
13

Pages e widgetsPages & widgetsPages y widgets

Cinco Pages, todas em AppPageShell com pull-to-refresh e rodapé/barra fixa. Modais aninhados sob o widget que os abre.Five Pages, all in AppPageShell with pull-to-refresh and a sticky footer/bar. Modals nested under the widget that opens them.Cinco Pages, todas en AppPageShell con pull-to-refresh y pie/barra fija. Modales anidados bajo el widget que los abre.

  • ProductShowcasePage visitSfid
    • DataLoadInfo · AccountHeaderCard · OrderPlacementDeliveryPill
    • ProductShowcaseTabsWidget
    • ProductShowcaseFiltersWidget
    • ProductShowcasePromotionsSectionWidget
    • ProductShowcaseProductsSectionWidget loadMore ao rolar
    • ProductShowcaseStickyFooterWidget CustomSummaryBar → goToCartReview
      • ProductShowcaseSummaryModalContent resumo do carrinho (expandido)
      • OrderPlacementClearCartConfirmModalContent confirmar limpar
  • CartReviewPage accountSfid · listen cart→back se esvaziou
    • DataLoadInfo · AccountHeaderCard · OrderPlacementCheckoutStepper(cart) · DeliveryPill
    • CartReviewPromotionsSectionWidget
    • CartReviewYourRequestSectionWidget
    • CartReviewBonusSectionWidget
    • CartReviewTotalsWidget · CartReviewLockWarningWidget
    • CartReviewFooterWidget Limpar / Pagamento (gate cartToPayment)
      • OrderPlacementClearCartConfirmModalContent
  • OrderPaymentPage accountSfid · listen cart→back
    • DataLoadInfo · AccountHeaderCard · Stepper(payment) · DeliveryPill
    • OrderPaymentSplitBlockWidget × nº de splits
    • OrderPaymentDetailsSectionWidget
    • OrderPaymentFooterWidget Voltar / Confirmar (gate paymentToSubmit)
      • OrderSubmissionProgressModalContent progresso por split; onStart → notifier.submit; sucesso → goToOrderConfirmation
  • OrderConfirmationPage accountSfid · PopScope canPop:false
    • DataLoadInfo · AccountHeaderCard · Stepper(finish)
    • OrderConfirmationSplitBlockWidget × pedido enviado
    • OrderConfirmationFooterWidget Continuar → visit detail (create) / root (edit)
  • LastOrdersPage accountSfid
    • DataLoadInfo · LastOrdersHeaderWidget
    • LastOrdersListWidget
      • LastOrdersLoadOlderWidget carregar mais antigos

MercadosMarketsMercados

A criação de pedido é dirigida pelo OrderCreationConfig do End Market Configuration — está presente nos três mercados ativos (BR/CL/ZA) e ausente em AR/PY/PE (config PANGEA mínima). O comportamento muda bastante por mercado.Order creation is driven by the End Market Configuration's OrderCreationConfig — present in the three active markets (BR/CL/ZA) and absent in AR/PY/PE (minimal PANGEA config). Behavior varies a lot per market.La creación de pedido está dirigida por el OrderCreationConfig del End Market Configuration — presente en los tres mercados activos (BR/CL/ZA) y ausente en AR/PY/PE (config PANGEA mínima). El comportamiento varía bastante por mercado.

BRon CLon ZAon AR PY PE
Disponível (config presente)Available (config present)Disponible (config presente) Presente porém desligadoPresent but offPresente pero apagado Ausente (sem config)Absent (no config)Ausente (sin config)

Matriz de OrderCreationConfigOrderCreationConfig matrixMatriz de OrderCreationConfig

ChaveKeyClave BR CL ZA
orderPlacementTypenormalsplit_by_split_groupsplit_by_credit_limit
enableIndirectOrderfalsefalsetrue
pixPaymentAvailabletruefalsefalse
allowPixOverCreditLimittruefalsefalse
injectsCashWhenAccountAllowsfalsetruefalse
allowOrderPlacementWithCreditDays0falsetruefalse
bypassCreditLimitCheckfalsefalsetrue
orderPlacementWithCashFeefalsetruetrue
appliesCashFeeToTotalsfalsefalsetrue
maxParcels411
allowParcelDateEdittruefalsefalse
restrictedOrderEdittruefalsefalse
checksVanStockForPromptOrderstruetruefalse
usesSecondaryUomForAllCategoriesfalsefalsetrue

BR Pix disponível (e permitido acima do limite), até 4 parcelas com datas editáveis, edição de pedido restrita, checa estoque da van em pedidos prompt.Pix available (and allowed over the limit), up to 4 parcels with editable dates, restricted order editing, checks van stock for prompt orders.Pix disponible (y permitido sobre el límite), hasta 4 cuotas con fechas editables, edición de pedido restringida, chequea stock de la van en pedidos prompt.

CL Split por grupo de split, injeta pagamento em dinheiro quando a conta permite, permite pedido com 0 dias de crédito, cashFee no pedido, 1 parcela.Split by split group, injects cash payment when the account allows, permits orders with 0 credit days, cashFee on the order, 1 parcel.Split por grupo de split, inyecta pago en efectivo cuando la cuenta lo permite, permite pedido con 0 días de crédito, cashFee en el pedido, 1 cuota.

ZA Pedidos indiretos habilitados, split por limite de crédito, bypass da checagem de limite, cashFee aplicado aos totais, UOM secundária em todas as categorias.Indirect orders enabled, split by credit limit, credit-limit check bypass, cashFee applied to totals, secondary UOM across all categories.Pedidos indirectos habilitados, split por límite de crédito, bypass del chequeo de límite, cashFee aplicado a los totales, UOM secundaria en todas las categorías.

ARPYPE Sem OrderCreationConfig na configuração PANGEA mínima — o fluxo de criação de pedido não está disponível.No OrderCreationConfig in the minimal PANGEA config — the order creation flow is not available.Sin OrderCreationConfig en la config PANGEA mínima — el flujo de creación de pedido no está disponible.