svr-imp/FRONTEND_PEDIDO_SEVEN_MIGRA...

4.9 KiB

Migracao do Frontend: /pedidos/condvenda-7/:numped7

O que mudou

Antes, a API retornava uma lista achatada de itens:

PedidoCondVenda7RowDto[]

Agora, a API retorna uma lista de grupos logisticos:

PedidoCondVenda7GroupDto[]

Cada grupo ja vem separado no backend pela chave:

numped|tipoentrega|dtentrega|codfilialretira

Regra para o frontend

  • Nao agrupar por conta propria.
  • Nao usar hash como chave de separacao.
  • Nao inferir tipoentrega pelo primeiro item de uma lista mista.
  • Gerar 1 etiqueta por grupo retornado pela API.

Novo formato de resposta

type PedidoCondVenda7RowDto = {
  numped: number
  cgc: string
  razaosocial: string
  dtemissao: string
  codfilial: number
  filialvenda: string
  codfilialretira: number
  filialretira: string
  data: string
  numcar: number
  codcli: number
  cliente: string
  codusur: number
  vendedor: string
  vlfrete: number
  valor: number
  tipoentrega: string
  dtentrega: string | null
  codprod: number
  descricao: string
  qt: number
  hash: string
}

type PedidoCondVenda7GroupDto = {
  groupKey: string
  numped: number
  tipoentrega: string
  dtentrega: string | null
  codfilialretira: number
  filialretira: string
  cgc: string
  razaosocial: string
  dtemissao: string
  codfilial: number
  filialvenda: string
  data: string
  numcar: number
  codcli: number
  cliente: string
  codusur: number
  vendedor: string
  vlfrete: number
  valor: number
  hash: string
  items: PedidoCondVenda7RowDto[]
}

Exemplo de resposta

[
  {
    "groupKey": "157073710|RETIRA POSTERIOR|2026-03-11T00:00:00.000Z|4",
    "numped": 157073710,
    "tipoentrega": "RETIRA POSTERIOR",
    "dtentrega": "2026-03-11T00:00:00.000Z",
    "codfilialretira": 4,
    "filialretira": "JURUNENSE BR",
    "cgc": "13772792000407",
    "razaosocial": "JURUNENSE HOME CENTER LTDA",
    "dtemissao": "2026-03-17T18:58:51.000Z",
    "codfilial": 4,
    "filialvenda": "JURUNENSE BR",
    "data": "2026-03-04T00:00:00.000Z",
    "numcar": 0,
    "codcli": 247485,
    "cliente": "SORAIA CRISTINA SILVA DA COSTA",
    "codusur": 157,
    "vendedor": "BR - LOURIVAL EDVALDO COSTA FERREIRA",
    "vlfrete": 0,
    "valor": 827.83,
    "hash": "4368D18F69C36357A1FD52271EF58861",
    "items": [
      {
        "numped": 157073710,
        "tipoentrega": "RETIRA POSTERIOR",
        "codprod": 12586,
        "descricao": "ARG COZ E BANHEIROS 20KG QUARTZ",
        "qt": 7,
        "hash": "4368D18F69C36357A1FD52271EF58861"
      }
    ]
  },
  {
    "groupKey": "157073714|ENTREGA|2026-03-11T00:00:00.000Z|12",
    "numped": 157073714,
    "tipoentrega": "ENTREGA",
    "dtentrega": "2026-03-11T00:00:00.000Z",
    "codfilialretira": 12,
    "filialretira": "JURUNENSE DISTRITO",
    "cgc": "13772792001217",
    "razaosocial": "JURUNENSE HOME CENTER LTDA",
    "dtemissao": "2026-03-17T18:58:51.000Z",
    "codfilial": 12,
    "filialvenda": "JURUNENSE DISTRITO",
    "data": "2026-03-04T00:00:00.000Z",
    "numcar": 8899569,
    "codcli": 247485,
    "cliente": "SORAIA CRISTINA SILVA DA COSTA",
    "codusur": 157,
    "vendedor": "BR - LOURIVAL EDVALDO COSTA FERREIRA",
    "vlfrete": 0,
    "valor": 0,
    "hash": "4368D18F69C36357A1FD52271EF58861",
    "items": [
      {
        "numped": 157073714,
        "tipoentrega": "ENTREGA",
        "codprod": 54001,
        "descricao": "CER 66X66RT MILANO BG GR 2,18M",
        "qt": 4,
        "hash": "4368D18F69C36357A1FD52271EF58861"
      },
      {
        "numped": 157073714,
        "tipoentrega": "ENTREGA",
        "codprod": 54067,
        "descricao": "CER 45X45 BEGE 45 2,00M",
        "qt": 14,
        "hash": "4368D18F69C36357A1FD52271EF58861"
      }
    ]
  }
]

O que mudar no frontend

1. Tipagem

Trocar o tipo esperado da resposta:

const data: PedidoCondVenda7RowDto[] = await response.json()

por:

const groups: PedidoCondVenda7GroupDto[] = await response.json()

2. Renderizacao

Antes:

renderLabel(data)

Agora:

groups.forEach((group) => {
  renderLabel(group)
})

3. Cabecalho da etiqueta

Os dados do cabecalho devem vir do grupo:

group.numped
group.tipoentrega
group.dtentrega
group.cliente
group.filialretira
group.vendedor
group.hash
group.valor

4. Itens da etiqueta

A tabela de produtos deve vir de:

group.items

Exemplo:

group.items.map((item) => ({
  codprod: item.codprod,
  descricao: item.descricao,
  qt: item.qt,
}))

Erro antigo que nao pode voltar

Se existir algo assim:

const firstItem = data[0]
const tipoEntrega = firstItem.tipoentrega

isso precisa sair se data representar mais de um pedido misturado.

Agora o correto e:

const tipoEntrega = group.tipoentrega
const items = group.items

Resumo operacional

  • 1 grupo retornado = 1 etiqueta
  • cabecalho vem do grupo
  • produtos vem de group.items
  • separacao ja vem pronta do backend