Pular para o conteúdo
Fiscal ProBiblioteca
NF-e e NFC-e · Produtos e serviços

cProd: código do produto ou serviço na NF-e e NFC-e

<cProd>det › prod › cProd

Revisão editorial em 26 de set. de 2026. As versões e condições das regras estão indicadas ao longo do artigo.

cProd é o código que identifica o produto ou serviço segundo a codificação do emitente. Ele aparece em NFe/infNFe/det/prod/cProd, uma vez em cada item, e é obrigatório: o campo admite de 1 a 60 caracteres. Sua função é ligar o item faturado ao cadastro de origem; ele não é uma classificação fiscal. A definição e a condição especial de preenchimento estão no MOC 7.0, Anexo I, I02, página 17.

Nesta página: O código pertence ao cadastro do emitente, cProd, cEAN, xProd e NCM são informações diferentes, A condição específica do formato CFOP9999, XML e formato do código, Como diagnosticar código ausente ou produto importado incorretamente.

O código pertence ao cadastro do emitente

Uma empresa pode identificar um produto como CAM-M-AZ e outra usar 10824 para a mesma mercadoria. Isso não é, por si, divergência fiscal: são catálogos próprios. Ao importar uma nota de fornecedor, preserve o código recebido e faça a correspondência com o cadastro interno usando também a identidade do fornecedor, a descrição, a unidade e as características do item. Não suponha que 10824 tenha o mesmo significado em todas as empresas.

Para conferir a origem, compare o cProd do XML com o código registrado no pedido e no cadastro que gerou aquele item. O identificador técnico de uma linha de banco ou o número de ordem do item não devem ser confundidos com o código comercial. O atributo det/@nItem indica a posição do item na nota: dois itens podem representar o mesmo produto em condições diferentes, sem que seus números de ordem sejam códigos de produto.

cProd, cEAN, xProd e NCM são informações diferentes

Campo O que identifica O que não resolve sozinho
cProd Código próprio do produto ou serviço do emitente Classificação ou identidade universal
xProd Descrição legível do que foi faturado Chave única do cadastro
cEAN GTIN da unidade comercial, quando existente; o MOC prevê SEM GTIN para produto sem esse código Código interno de cada empresa
NCM Classificação da mercadoria Código do cadastro comercial
CEST Código especificador, no contexto documentado desse campo Código interno do produto
cProdANP Código de produto ANP no grupo de combustível Identificação de qualquer mercadoria

Esses campos podem coexistir, com valores diferentes. Um cProd numericamente igual a um código de barras não transforma os campos em sinônimos. Mantenha os mapeamentos separados na integração. MOC, Grupo I, páginas 17–18, e grupo de combustíveis, campo cProdANP.

A condição específica do formato CFOP9999

O MOC orienta preencher com o CFOP no formato CFOP9999 quando o item não se relaciona com mercadoria/produto e o contribuinte não possui codificação própria. As duas condições importam. A convenção não é uma regra geral para todos os produtos, serviços ou cadastros incompletos.

Nessa notação, CFOP é o prefixo literal e 9999 representa as quatro posições do código fiscal da operação definido para o item. Não acrescente outro bloco 9999 ao código e não escolha uma operação tributária a partir desse artigo. Se essa situação especial estiver em análise, confirme a natureza do item, a existência de código próprio e o CFOP com o responsável pela configuração fiscal. Com o parâmetro confirmado, a integração consegue montar e conferir a representação documentada. Essa montagem não elimina o campo CFOP próprio do XML.

XML e formato do código

O exemplo é sintético e parcial; não é uma nota pronta para transmissão:

<det xmlns="http://www.portalfiscal.inf.br/nfe" nItem="1">
  <prod>
    <cProd>CAM-M-AZ</cProd>
    <xProd>Camiseta de algodão, tamanho M, azul</xProd>
  </prod>
</det>

Foram omitidos os demais campos obrigatórios. Em um XML processado, o caminho completo inclui nfeProc/NFe/infNFe/det/prod/cProd. Procure o det correspondente, e não qualquer texto semelhante no documento.

O tipo textual aceita códigos alfanuméricos; não há exigência geral de somente números. Zeros que fazem parte de um código textual, como 00042, precisam ser preservados. Isso difere de nNF, cuja representação tem outro tipo e não aceita zeros à esquerda. O código não pode ser vazio nem ultrapassar 60 caracteres; TString também restringe caracteres e espaços nas extremidades. Use um gerador XML para escapar caracteres reservados, como & representado por &amp;. As restrições podem ser conferidas em prod/cProd e TString no pacote oficial PL_010c.

Como diagnosticar código ausente ou produto importado incorretamente

Se o campo está ausente ou vazio, confira o vínculo do item com o cadastro e o mapeamento usado para gerar XML. Se chega correto do fornecedor e muda na importação, examine conversões numéricas que removem zeros, truncamento de texto e correspondência de produtos feita apenas pelo código. Se o texto excede o limite, corrija a política de codificação ou seu mapeamento de forma identificável; cortar caracteres silenciosamente pode transformar um produto em outro.

Depois da correção, compare o novo cProd, a descrição e a unidade com a origem do item. Um XML que passa no schema não prova que o vínculo comercial esteja correto ou que a nota tenha sido autorizada. Não edite diretamente um XML assinado ou autorizado para alterar o código: o arquivo resultante não altera o documento fiscal original.

Para aprofundar a distinção, consulte xProd, descrição do item. A conferência de código e descrição continua separada da decisão sobre NCM, CFOP ou tributação.

Referência técnica para integração

XPath completo
/nfeProc/NFe/infNFe/det/prod/cProd
Namespace
http://www.portalfiscal.inf.br/nfe
Leiaute
4.00 · PL_010e_v1.02
Ocorrências no XSD
1–1 no contexto do elemento pai
Tipo
inline:TString · TString
Preenchimento no catálogo
Obrigatório

A ocorrência vale dentro da estrutura XML: um campo obrigatório em um grupo opcional não torna esse grupo obrigatório. A aplicação fiscal depende da operação e da versão da regra.

maxLength
60
minLength
1
pattern
[!-ÿ]{1}[ -ÿ]{0,}[!-ÿ]{1}|[!-ÿ]{1}
whiteSpace
preserve