# Release — Sprint 21 **Data:** 2026-06-28 ## Versões | Projeto | Versão | VersionCode | |----------------|---------|-------------| | DoncMobile.App | 3.5.14 | 50 | | DoncMobile.API | 3.5.8 | — | | Admin | 3.3.10 | — | | WebHubDonc | 2.4.10 | — | | Servico | 3.0.27 | — | | ApiV2 | 3.0.24 | — | --- ## Release Notes ### DoncMobile.App — v3.5.14 **@jessica** - Volumes por PedidoItem: sessão de escaneamento refatorada para iterar por volume individual, exibindo descrição e progresso "Volume X de Y", priorizando CodigoDeBarras sobre QRCode **@tiago** - Fotos do RelatorioProblema não chegam ao Admin: substituído fire-and-forget por await direto na fila de sincronização - Travamento ao tirar foto offline: eliminada tentativa de GPS por rede sem conectividade; Preferences.Remove movido para finally - Peças de outros TipoProblemas na busca: busca usa lista já filtrada pelo TipoProblema selecionado - OS finalizada reaparecer como pendente após sincronização: flags locais preservadas antes de recriar tabelas; envio priorizado antes do download - DbUpdateConcurrencyException ao iniciar deslocamento: retry automático com backoff exponencial no JobItemProgressService ### Admin — v3.3.10 **@jessica** - Volumes por PedidoItem: modal de gerenciamento de volumes na criação de OS (AddEdit) com geração automática de código; GridView aninhado em View exibindo volumes por produto com gerador de QR - Campo Etiqueta removido do cadastro de produto (interface, code-behind, designer.cs) - GeraMontagem: combo de TipoJob de montagem configurável por produto no cadastro **@tiago** - TipoPeca — Importação com upsert: atualiza registros existentes por CodigoProduto + NomePeca, ignora linhas em branco, parse de Quantidade via decimal como fallback - Pedidos — Exportação corrigida: COUNT com DISTINCT e deduplicação no ToList evitam registro inflado por JOIN - Parceiros — Campo Codigo (CodigoManual) adicionado ao CSV de exportação - Saidas — Coluna Job corrigida: div overflow:hidden + word-break evitam invasão de colunas adjacentes ### ApiV2 — v3.0.24 **@jessica** - Volumes por PedidoItem: PedidoItemVolume incluído no input/output; campo Etiqueta removido dos modelos - Busca de produto prioriza CodigoLegado antes de fallback por Nome/NomeComercial - Peças solicitadas incluídas no payload do webhook (Problemas[].Pecas[]) - Log adicionado no catch de InserirJob; TextWriterTraceListener configurado no Web.config **@tiago** - OS não aparecia no app após encaminhamento via Rotas: log adicionado para falhas de ajuste de data - Duplicidade de Jobs por race condition: SemaphoreSlim por CodigoJob serializa requisições concorrentes ### DoncMobile.API — v3.5.8 **@jessica** - Volumes por PedidoItem: query Dapper de volumes por pedido; VolumesJson incluído no payload de sync - GeraMontagem: TipoJobId lido de TipoJobIdMontagem do produto ao enfileirar OS de montagem - Corrigido RuntimeBinderException no WebHook: campos bit NULL tratados com ?? false - Peças solicitadas incluídas no payload do webhook de Problema Geral e Status Change **@tiago** - Corrigido erro de cast (Guid → int?) ao buscar info do pedido para estoque: UserId removido do SELECT e model - Chamada ao WebHub para bolsa do cliente desativada (retorna lista vazia imediatamente) ### Servico — v3.0.27 **@jessica** - Janela de busca SSW ampliada de 30 para 90 dias em AtualizaStatusSSWParaDoncAsync ### WebHubDonc — v2.4.10 **@tiago** - Link de avaliação no SMS (Todimo): {Link} substituído por avaliacao.aspx quando tipo é AvaliarServico --- ## Guia de Testes — QA ### Ambientes | Projeto | Onde testar | |----------------|--------------------------------------| | Admin | https://admin.teste.donc.com.br | | ApiV2 | https://api.teste.donc.com.br | | DoncMobile.API | https://apimobile.teste.donc.com.br | | WebHubDonc | https://webhub.teste.donc.com.br | | DoncMobile.App | Play Store Closed Testing (Alpha) | ### DoncMobile.App - [ ] Abrir OS com produtos que possuem volumes cadastrados → sessão QR deve apresentar cada volume individualmente com nome + descrição e progresso "Volume X de Y" - [ ] Volume com CodigoDeBarras preenchido → deve usar CodigoDeBarras como código esperado - [ ] Volume com apenas QRCode preenchido → deve usar QRCode como código esperado - [ ] Produto sem volumes → sessão QR deve ser ignorada normalmente - [ ] Tirar foto no RelatorioProblema → foto deve aparecer no Admin após sincronização - [ ] Tirar foto offline na ExecucaoServico → app não deve travar; foto deve sincronizar ao reconectar - [ ] Buscar peça no RelatorioProblema → apenas peças do TipoProblema selecionado devem aparecer - [ ] Finalizar OS offline → após sincronização, OS não deve reaparecer como pendente - [ ] Iniciar deslocamento com sincronização ativa em background → não deve exibir erro de concorrência ### Admin - [ ] Cadastro de produto com GeraMontagem ativado → deve exibir combo de TipoJob de montagem - [ ] Criar OS com produtos e adicionar volumes pelo modal → volumes devem ser salvos em PedidoItemVolume - [ ] View de pedido com volumes → GridView aninhado deve exibir Descricao, CodigoDeBarras e botão QR - [ ] Clicar em botão QR de um volume → modal deve exibir QR gerado com código correto - [ ] Cadastro de produto → campo Etiqueta não deve aparecer - [ ] Importar planilha de TipoPeca com registros já existentes → deve atualizar sem rejeitar - [ ] Importar planilha com linhas em branco → devem ser ignoradas - [ ] Exportar Pedidos com filtro → total do CSV deve coincidir com total da grid - [ ] Exportar Parceiros → CSV deve incluir coluna Codigo - [ ] Grid de Rotas/Saidas → coluna Job não deve invadir colunas adjacentes ### ApiV2 - [ ] POST de OS com Volumes[] no produto → volumes devem ser persistidos em PedidoItemVolume - [ ] GET de OS → resposta deve incluir Volumes[] por produto sem campo Etiqueta - [ ] POST de OS com CodigoLegado de produto existente → produto correto vinculado mesmo com Nome repetido - [ ] POST de OS duplicado (mesmo CodigoJob) em paralelo → apenas um Job deve ser criado ### DoncMobile.API - [ ] Finalizar serviço com produto GeraMontagem → nova OS deve ser criada com TipoJob configurado no produto - [ ] Finalizar serviço com pedido com JobItens com campos de flag nulos → webhook deve disparar sem erro - [ ] POST /api/estoque/alocar → não deve retornar erro de cast de tipo - [ ] Disparar webhook de Problema Geral e Status Change → payload deve incluir Problemas[].Pecas[] ### Servico - [ ] Pedido com DataCriacao entre 31 e 90 dias → status SSW deve ser atualizado normalmente ### WebHubDonc - [ ] SMS de AvaliarServico para cliente Todimo → link deve ser avaliacao.aspx - [ ] SMS de Profissional a caminho → link deve ser acompanhamento.aspx