Requisitos — [Front] Dinâmica de itens recomendados
Task #196865
Task pai: US 196869 ADRs relacionados: — Contrato de referência: cart-detail.json
Status: refinado Sessão de grilling: 25/06/2026
Visão geral
Integrar o bloco "Recomendados" na tela CartStatusDetailScreen do zzapp, exibindo os itens de cartItemRecommendations retornados pela API de detalhe do pedido.
A task cobre:
- Deserialização de
cartItemRecommendationsno modelCartDetail - Nova seção visual no final da tela (após "Resumo do pedido")
- Listagem somente leitura dos itens recomendados pendentes
- Reflexão do estado pós-convers ão via zzlink (item sai de
cartItemRecommendationse aparece emproductCartDetailscomfromRecommendation: true)
A conversão em si é server-side (zzlink + API Cart). O front não implementa a ação de adicionar recomendado — apenas renderiza o estado retornado pela API.
Tela: CartStatusDetailScreen → nova seção _ContentRecommendations ("Recomendados")
Papéis
| Papel | Responsabilidade |
|---|---|
| Vendedora | Acompanhar na Status do Pedido quais recomendações ainda estão pendentes e quais foram convertidas pela cliente |
| Cliente | Adicionar itens recomendados ao pedido via zzlink (fora do escopo desta task) |
| Desenvolvedor Front-end | Integrar seção "Recomendados", estender CartDetail e consumir factory recommended da task 196866 |
Requisitos
RF-01 — Visibilidade do bloco "Recomendados"
User Story: Como vendedora, eu quero ver o bloco "Recomendados" apenas quando aplicável, para não poluir pedidos sem upsell.
Acceptance Criteria:
WHENo pedido for de estoque da loja (saleEcommerce: false) ecartItemRecommendationspossuir ao menos um itemTHENo sistemaSHALLexibir a seção "Recomendados" naCartStatusDetailScreen.WHENcartItemRecommendationsfornullou lista vaziaTHENo sistemaSHALLocultar a seção inteira (título, subtítulo e lista).WHENo pedido for de Prateleira Infinita (saleEcommerce: true)THENo sistemaSHALL NOTexibir a seção "Recomendados", independentemente do conteúdo decartItemRecommendations.
Casos de Borda:
WHENa API retornarcartItemRecommendationspara pedido de PITHENo sistemaSHALLignorar os dados na renderização da seção.
RF-02 — Posicionamento e estrutura visual da seção
User Story: Como vendedora, eu quero localizar as recomendações no final da tela de Status, conforme o layout definido no Figma.
Acceptance Criteria:
WHENa seção "Recomendados" for exibidaTHENo sistemaSHALLposicioná-la após a seção "Resumo do pedido" e antes do padding final daListViewda tela.WHENa seção for renderizadaTHENo sistemaSHALLexibir o título "Recomendados" com estilo equivalente ao título da seção "Itens" (ZZTextNew,ZZFontSize.xs,ZZFontWeight.semibold).WHENa seção for renderizadaTHENo sistemaSHALLexibir o subtítulo "Produtos que você recomendou para a cliente." abaixo do título.WHENa seção for renderizadaTHENo sistemaSHALLutilizar o padrão visual da seção "Itens" (Columncom título + lista), sem envolver o bloco emCartStatusDetailCard.WHENa seção for renderizadaTHENo sistemaSHALL NOTexibir o banner de aviso de 1 hora presente emCheckSellRecommended.
Referência visual:


RF-03 — Deserialização de cartItemRecommendations em CartDetail
User Story: Como desenvolvedor front-end, eu quero consumir cartItemRecommendations da API de detalhe do pedido, para alimentar a seção "Recomendados".
Acceptance Criteria:
WHENa resposta da API de detalhe do pedido for parseadaTHENo modelCartDetailSHALLmapearcartItemRecommendationsparaList<CartItemRecommendation>.WHENa chavecartItemRecommendationsestiver ausente ou fornullTHENo sistemaSHALLtratar como lista vazia para fins de visibilidade (RF-01.2).WHENcada item decartItemRecommendationsfor deserializadoTHENo sistemaSHALLutilizar o modelCartItemRecommendationconforme contrato em cart-detail.json.
RF-04 — Listagem de produtos recomendados
User Story: Como vendedora, eu quero visualizar apenas os produtos que recomendei e que ainda não foram adicionados ao pedido, para acompanhar o upsell pendente.
Acceptance Criteria:
WHENa seção "Recomendados" for exibidaTHENo sistemaSHALLlistar exclusivamente os itens decartItemRecommendationsna ordem retornada pela API.WHENcada item recomendado for renderizadoTHENo sistemaSHALLutilizarCartStatusProductCardNew.recommended(factory da task 196866).WHENum produto recomendado for exibidoTHENeleSHALL NOTcomporproductCartDetails, valores, quantidades ou totalizadores do bloco "Resumo do pedido".WHENum produto recomendado for exibidoTHENo sistemaSHALLapresentá-lo com finalidade exclusivamente informativa (somente leitura).WHENum card recomendado for exibido na StatusTHENo sistemaSHALL NOToferecer ações de editar desconto, remover item ouonTap(diferente deCheckSellRecommended).
RF-05 — Conversão de recomendado em item do pedido (reflexão de estado)
User Story: Como vendedora, eu quero ver na Status do Pedido quando a cliente converteu uma recomendação via zzlink, para acompanhar o resultado do upsell.
Acceptance Criteria:
WHENa cliente adicionar um produto recomendado ao pedido via zzlink e a vendedora reentrar naCartStatusDetailScreenTHENo sistemaSHALLremover o produto decartItemRecommendationsna listagem "Recomendados".WHENa conversão ocorrerTHENo sistemaSHALLexibir o produto na seção "Itens" (productCartDetails).WHENo item convertido for exibido na seção "Itens"THENo sistemaSHALLrenderizar a tag "Item recomendado adicionado ao pedido" quandofromRecommendationfortrue(controle delegado ao componente da task 196866, RF-09).WHENtodos os itens recomendados forem convertidosTHENo sistemaSHALLocultar a seção "Recomendados" conforme RF-01.2.
Casos de Borda:
WHENa vendedora permanecer na tela sem sair após conversão via zzlinkTHENo sistemaSHALL NOTatualizar automaticamente os blocos (sem polling nesta task).
RF-06 — Consistência entre blocos "Itens" e "Recomendados"
User Story: Como vendedora, eu quero que os blocos reflitam o estado atual do pedido sem duplicidade de produtos.
Acceptance Criteria:
WHENa vendedora reentrar naCartStatusDetailScreenTHENo sistemaSHALLreexecutarCartController.finde refletir o estado atualizado nos blocos "Itens" e "Recomendados".WHENum produto constar emproductCartDetailsTHENo sistemaSHALL NOTexibi-lo simultaneamente emcartItemRecommendations.WHENo estado do pedido for alterado no backendTHENo sistemaSHALLconfiar na resposta da API como fonte de verdade para a composição dos dois blocos.
RF-07 — Preservação de comportamentos AS-IS
User Story: Como vendedora, eu quero que a inclusão do bloco "Recomendados" não altere o funcionamento existente da tela de Status.
Acceptance Criteria:
WHENa seção "Recomendados" for integradaTHENo sistemaSHALLmanter inalterados os blocos existentes (Loja, Cliente, Entrega, Pedido, Pagamento, Itens, Resumo do pedido).WHENo pedido for de Prateleira InfinitaTHENo sistemaSHALLmanter o comportamento AS-IS de ocultar "Resumo do pedido" (saleEcommerce: true) sem impacto na regra de RF-01.3.WHENa listagem de pedidos for atualizada ao retornar do detalheTHENo sistemaSHALLmanter o refresh existente emcartStoreController.findSearchCartStore.
Fora de Escopo
- Criação do novo layout de card e factory
recommended(task 196866) - Tag visual "Item recomendado adicionado ao pedido" — componente e prop
fromRecommendation(task 196866, RF-09) - Lógica de recomendação de produtos e conversão via zzlink (backend / zzlink)
- Fluxo de criação de carrinho e tela
CheckSellRecommended - Banner de aviso de 1 hora na Status do Pedido
- Pull-to-refresh ou polling na
CartStatusDetailScreen - Ações de editar desconto ou remover recomendação na Status
- Alterações no contrato da API Cart Detail
Dependências
| Dependência | Descrição | Status |
|---|---|---|
| Task 196866 | CartStatusProductCardNew.recommended, model CartItemRecommendation, campos fromRecommendation em ProductCartDetail | Pendente |
| API Cart Detail | Endpoint retorna cartItemRecommendations e fromRecommendation conforme cart-detail.json | Disponível |
| Figma ZZAPP 2.0 | Posicionamento, subtítulo e cards da seção "Recomendados" | Disponível |
| US 196869 | Critérios de aceite CA-1 a CA-4 | Disponível |
Decisões de refinamento
| # | Decisão |
|---|---|
| 1 | Bloco visível somente para pedidos com estoque da loja (saleEcommerce: false) |
| 2 | Posição: após "Resumo do pedido", no final da tela |
| 3 | Subtítulo: "Produtos que você recomendou para a cliente." |
| 4 | Atualização de estado: re-fetch ao reentrar na tela (sem pull-to-refresh nesta task) |
| 5 | Sem banner de aviso de 1 hora (diferente de CheckSellRecommended) |
| 6 | Cards somente leitura (sem editar, remover ou onTap) |
| 7 | Seção inteira oculta quando cartItemRecommendations for null ou vazio |
| 8 | Estrutura visual no padrão da seção "Itens" (título + subtítulo + lista, sem CartStatusDetailCard) |