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_pageO 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.
| Linha | Com 4 linhas | Com 2 linhas |
|---|---|---|
| 1 | logradouro | logradouro |
| 2 | número | número |
| 3 | complemento | — |
| 4 | bairro | — |
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
- Magento_Customer etc/config.xml (street_lines) — GitHub
- Magento_Customer adminhtml/system.xml (Number of Lines in a Street Address) — GitHub
- Customer Configuration — Name and Address Options — Adobe Experience League
- StreetAddressMapper do módulo PagBank para Magento 2 — GitHub