Checkout & Pagamentos

Endereço no Magento 2: ligue as 4 linhas de rua

Duas linhas é o padrão americano, onde o número vai grudado na rua. Aqui a nota fiscal exige bairro e número em campos próprios — e quem lê isso é o módulo de pagamento, não você.

Por Roger Takemiya · Publicado em · 4 min de leitura

Todo projeto brasileiro tropeça nisso na primeira semana. O cliente digita "Rua das Flores, 210, apto 42, Centro" numa linha só, o pedido entra, e aí a NF-e é rejeitada porque bairro é obrigatório e o número tem que vir separado do logradouro.

A causa não é o cliente nem o emissor. É uma configuração do Magento que ninguém mexeu.

O que esse número faz

O caminho é customer/address/street_lines, e o valor de fábrica é 2. O campo aceita de 1 a 4 — o próprio system.xml do Magento traz a validação digits-range-1-4, então não adianta tentar 5.

Quando você salva esse valor, o Magento não mexe só numa linha de configuração. O backend model Magento\Customer\Model\Config\Backend\Address\Street atualiza o atributo EAV street do customer_address, gravando o novo multiline_count. É esse número que os formulários leem para desenhar os campos.

Uma coisa que vale entender antes de mudar: no banco continua sendo uma coluna só. As linhas ficam guardadas dentro do campo street separadas por quebra de linha, e cada consumidor separa de novo na hora de usar. Não existe coluna bairro no Magento.

Como mudar

Pelo admin fica em Stores > Configuration > Customers > Customer Configuration > Name and Address Options > Number of Lines in a Street Address.

Pela linha de comando é mais rápido, e passa pelo mesmo caminho de gravação — o backend model roda igual, então o multiline_count do atributo é atualizado do mesmo jeito:

bin/magento config:set customer/address/street_lines 4
bin/magento cache:clean config eav
bin/magento cache:clean full_page

O campo tem escopo de site (website), não de store view. Loja com dois sites e regras diferentes precisa de dois config:set, um com --scope=websites --scope-code=base.

Depois disso abra o checkout numa aba anônima. Se ainda aparecem duas caixas, o cache de layout do checkout ficou para trás: bin/magento cache:flush resolve.

Quem lê essas linhas do outro lado

Aqui está o motivo prático de virar 4 e não 3. Os módulos brasileiros seguem uma convenção de posição, e o do PagBank é um bom exemplo porque o mapeamento está aberto no repositório: linha 1 vira logradouro, linha 2 vira número, a última linha vira bairro, e o complemento só é enviado quando existem 4 linhas.

LinhaCom 4 linhasCom 2 linhas
1logradourologradouro
2númeronúmero
3complemento—
4bairro—

Com duas linhas, o módulo do PagBank manda literalmente (bairro não informado) para a API. Funciona, o pedido passa, e você fica com um endereço inútil para separação e para a nota. Emissor de NF-e e integração de transportadora fazem a mesma leitura por posição.

O que isso não resolve sozinho

Três avisos honestos, porque essa config sozinha não entrega o checkout brasileiro pronto.

O rótulo continua feio. O Magento nomeia as linhas como Street Address: Line 2, Line 3 e por aí vai — está no AttributeMerger do checkout, montado a partir de %1: Line %2. Para virar Número, Complemento e Bairro você precisa de um módulo (os de CEP brasileiros já fazem isso) ou de um plugin no LayoutProcessor.

Só a linha 1 é obrigatória. As demais entram como campo opcional. Se número e bairro precisam ser obrigatórios de verdade, a validação é trabalho de módulo também.

Endereço antigo não se conserta sozinho. Quem já tem cadastro salvo continua com tudo amontoado na linha 1 até editar. Se você vende para base grande, vale um script de migração ou aceitar que a correção vai acontecendo no próximo pedido de cada cliente. O que a NF-e espera receber está no guia de integração com ERP e NF-e.

Perguntas rápidas

Posso usar 3 linhas em vez de 4?

Dá, e alguns módulos aceitam. Mas com 3 linhas o complemento normalmente é descartado, porque a convenção manda tratar a última linha como bairro. Se a sua loja vende para apartamento, 4 é o número certo.

Mudar de 2 para 4 quebra os endereços já cadastrados?

Não apaga nada. O que estava na linha 1 continua na linha 1, e as linhas novas ficam vazias. O efeito colateral é que endereços antigos seguem sem bairro separado até alguém editar.

Preciso reindexar depois de mudar?

Não. É configuração de formulário e de atributo, não de catálogo. Limpar os caches de config, eav e full_page é o suficiente.

Pra conferir na fonte

  1. Magento_Customer etc/config.xml (street_lines) — GitHub
  2. Magento_Customer adminhtml/system.xml (Number of Lines in a Street Address) — GitHub
  3. Customer Configuration — Name and Address Options — Adobe Experience League
  4. StreetAddressMapper do módulo PagBank para Magento 2 — GitHub

endereço checkout nf-e

Precisa de um orçamento? Ficarei feliz em ajudar. Clique Aqui