xTexto de obsCont no item: conteúdo de até 60 caracteres
<xTexto>det › obsItem › obsCont › xTextoRevisão editorial em 14 de out. de 2026. As versões e condições das regras estão indicadas ao longo do artigo.
xTexto em obsItem/obsCont contém o texto da observação de uso livre do contribuinte para um item. Ele é o conteúdo da informação identificada pelo atributo xCampo do mesmo obsCont.
A estrutura descrita usa o pacote oficial PL_010f_v1.04, publicado em 31/08/2026. Esse pacote não altera a versão selecionada de um XML histórico na consulta; para arquivos de outra versão, confira a declaração correspondente e as regras vigentes na data e no ambiente do documento.
Neste artigo:
- Onde localizar o texto do contribuinte
- O limite é do conteúdo, não da identificação
- Como escapar o texto sem alterar o que será lido
- Exemplo de identificação e conteúdo separados
- Como tratar texto grande, repetido ou ausente
Onde localizar o texto do contribuinte
O XPath é /nfeProc/NFe/infNFe/det/obsItem/obsCont/xTexto, VA04. O xTexto de obsFisco pertence ao espaço do Fisco, e os xTexto de infAdic pertencem às observações da nota inteira. Procure pelo pai e pelo nItem, sem selecionar só o nome xTexto.
O elemento é obrigatório e único quando obsCont do item existe. obsCont também exige xCampo, atributo que nomeia a informação. Um texto solto diretamente dentro de obsCont não substitui o elemento xTexto, e uma tag xTexto sem o pai correto não reproduz o contrato.
Schemas NF-e/NFC-e PL_010f_v1.04 NT 2021.004 — Regras de Validação e Novos Campos
O limite é do conteúdo, não da identificação
xTexto admite uma a 60 posições, baseado em TString. xCampo tem limite separado de uma a 20. Um valor de 61 caracteres não pode ser transferido parcialmente ao atributo só para passar no schema: nome e conteúdo têm responsabilidades diferentes.
Um campo inexistente significa ausência da observação ou de seu grupo. Um xTexto vazio dentro de obsCont informado é estrutura incompleta. Não preencha com espaços para simular conteúdo: TString preserva espaços e não permite espaços nas extremidades. A regra de caracteres também impede controles ou emojis fora da faixa aceita; acentos portugueses compatíveis podem ser mantidos em UTF-8.
Schemas NF-e/NFC-e PL_010f_v1.04 Tipos básicos do leiaute NF-e NT 2021.004 — Regras de Validação e Novos Campos
Como escapar o texto sem alterar o que será lido
Use um serializador XML. Um & no conteúdo é escrito como &, e um sinal < como <; o parser recupera os caracteres originais. O limite se refere ao conteúdo interpretado: a entidade & representa um caractere, e não cinco posições da observação.
CDATA é apenas outra forma de escrever texto XML e não aumenta o limite nem contorna a restrição TString. Também evite o escape duplo: se o valor já escapado for escapado outra vez, o leitor pode receber literalmente a sequência & em vez do caractere pretendido. Compare o valor de origem com o valor interpretado pelo parser, além de validar o arquivo.
Schemas NF-e/NFC-e PL_010f_v1.04 Tipos básicos do leiaute NF-e
Exemplo de identificação e conteúdo separados
Trecho sintético completo de obsCont, parcial em relação à NF-e. REF_INTERNA é um identificador ilustrativo, e o texto demonstra um & corretamente escapado; não se trata de observação fiscal padronizada.
<obsCont xmlns="http://www.portalfiscal.inf.br/nfe" xCampo="REF_INTERNA">
<xTexto>Separacao & conferencia do item 1</xTexto>
</obsCont>
O conteúdo interpretado é Separacao & conferencia do item 1. Ele pertence a det/obsItem/obsCont, e não a infAdic. Validar o fragmento confirma estrutura e literais; não confirma que a observação é verdadeira ou exigida para determinada operação.
Schemas NF-e/NFC-e PL_010f_v1.04 Tipos básicos do leiaute NF-e NT 2021.004 — Regras de Validação e Novos Campos
Como tratar texto grande, repetido ou ausente
Se o conteúdo ultrapassa 60 caracteres, identifique o que precisa ser comunicado e confirme uma redação que preserve o significado com o responsável pelo dado. Não corte silenciosamente. infAdProd tem limite de 500 caracteres, mas é complemento do produto com semântica própria; não é um destino automático para qualquer excesso.
Há no máximo um obsCont dentro de obsItem. Não divida a frase em vários obsCont importando a cardinalidade do grupo infAdic. Se o texto está ausente, trace a origem, a associação ao nItem, o mapeamento para xTexto e o XML final. Se a ausência é apenas no DANFE, compare a representação auxiliar: a tag não garante uma área de impressão.
Quando o texto pretende cumprir uma exigência fiscal, confirme fonte, operação e conteúdo com o responsável contábil. A conferência técnica preserva o dado confirmado, verifica limites e serialização e não substitui códigos ou tributos estruturados por uma frase.
Schemas NF-e/NFC-e PL_010f_v1.04 NT 2021.004 — Regras de Validação e Novos Campos MOC 7.0 — Anexo I
Leitura relacionada
- obsCont — det/obsItem/obsCont
- xCampo — det/obsItem/obsCont/@xCampo
- xTexto — det/obsItem/obsFisco/xTexto
- infAdProd — det/infAdProd
Fontes oficiais
- Schemas NF-e/NFC-e PL_010f_v1.04, 010f v1.04, publicado em 31/08/2026 — /infNFe/det/obsItem/obsCont/xTexto; sequência e cardinalidade dos ancestrais.
- NT 2021.004 — Regras de Validação e Novos Campos, 1.30, maio/2022; histórico do grupo VA, não última edição nacional — NT 2021.004 v1.30, seção 3.4, p.13 VA01–VA07; edição histórica confrontada com XSD atual, sem inferência de cronograma vigente.
- Tipos básicos do leiaute NF-e, PL_010f_v1.04 — TString; TDec_1302; TDec_0302Max100 conforme o campo.
- MOC 7.0 — Anexo I, 7.00, novembro/2020 — MOC 7.0 p.58 V01; p.64 Z04–Z09: observações da nota inteira, contexto distinto.
Referência técnica para integração
- XPath completo
/nfeProc/NFe/infNFe/det/obsItem/obsCont/xTexto- 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
- Condicional
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