Olá, @Dfox. Tudo bem?
Existem duas tags para GTIN:
cEAN (GTIN do produto, antigo código EAN ou código de barras);
cEANTrib (GTIN da unidade tributável, antigo código EAN ou código de barras).
O primeiro diz respeito ao identificador do pacote e o segundo ao identificador dos itens dentro do pacote.
Por exemplo:
Está sendo feita a venda de um palete com 12 caixas contendo 10 latas:
cEAN vale para a caixa;
cEANTrib vale para a lata.
No caso onde o produto da nota for igual a sua unidade tributável (cEANTrib) o código enviado nas duas tags será idêntico.
Vamos as observações da SEFAZ:
cEAN:
Preencher com o código GTIN-8, GTIN-12, GTIN-13 ou GTIN-14 (antigos códigos EAN, UPC e DUN-14);
Para produtos que não possuem código de barras com GTIN, deve ser informado o literal “SEM GTIN”.
cEANTrib:
Preencher com o código GTIN-8, GTIN-12, GTIN-13 ou GTIN-14 (antigos códigos EAN, UPC e DUN-14) da unidade tributável do produto;
O GTIN da unidade tributável deve corresponder àquele da menor unidade comercializável identificada por código GTIN;
Para produtos que não possuem código de barras com GTIN, deve ser informado o literal "SEM GTIN”.
Em meu sistema caso o produto possua um GTIN válido eu preencho as tags com esse código, caso não eu informo "SEM GTIN".
Para tal eu utilizo o ACBrValidador que possui a função GtinValido, ele valida tanto o GTIN como o seu prefixo.
Para uma análise mais crítica você também pode consultar na SEFAZ os documentos:
NT2021.003_v1_10;
NT2022.001_v1.00.