quinta-feira, 11 de março de 2010

Novas validações no registro da nota fiscal

Devido aos requisitos do esquema xml da Nf-e, adicionamos uma série de validações no registro da nota fiscal, essas novas validações requerem alguma re-configuração do ambiente em que a NF-e é utilizada.

São elas:
1. Série deve ser numérica
2. Modelo da NF deve ser 55
3. Código BACEN deve estar definido no país
4. Código IBGE da Cidade deve estar definido
5. Nome, CNPJ e IE da empresa devem estar preenchido
6. Nome do país não pode estar em branco
7. Nome da rua, número e bairro devem esta preenchidos
8. Nome, CNPJ e IE do cliente/fornecedor devem estar preenchidos
9. Linhas da Nota Fiscal
-CFOP obrigatório
-ICMS obrigatório
-Unidade de Medida
-Descrição do Item

Existe um caso em que caso a descrição do item contenha somente espaços, a nota fiscal é registrada porém a NF-e é recusada pela SEFAZ, isso por que fazemos um trim antes de adiciona-la no XML.

Um comentário:

Leandro "Lelê" Menezes disse...

Matiazo, andei fazendo diversos testes com diversos tipos de notas de um cliente e notei que há uma divergencia do código com o layout da NFE.

Se tentar emitir uma nota com valor zero, irá ser rejeitada por schema (225), pois na classe:
EFDocMsgFormat_XmlSubmit_BR
método:
create_prod_Element

existe o código:
this.appendChildIfNotEmpty(prodElement, this.createElementWithValue('xProd', _line.fiscalDocTrans().itemName ));
this.appendChildIfNotEmpty(prodElement, this.createElementWithValue('NCM', this.formatKeepNumbersOnly(_line.fiscalDocTrans().TaxFiscalClassificationId)));
this.appendChildIfNotEmpty(prodElement, this.createElementWithValue('genero', substr(this.formatKeepNumbersOnly(_line.fiscalDocTrans().TaxFiscalClassificationId), 1, 2) ));
this.appendChildIfNotEmpty(prodElement, this.createElementWithValue('CFOP', this.formatKeepNumbersOnly(_line.fiscalDocTrans().CFOPId) ));
this.appendChildIfNotEmpty(prodElement, this.createElementWithValue('uCom', _line.fiscalDocTrans().LineUnit ));
this.appendChildIfNotEmpty(prodElement, this.createElementWithValue('qCom', this.formatXmlQty(_line.fiscalDocTrans().Qty) ));
this.appendChildIfNotEmpty(prodElement, this.createElementWithValue('vUnCom', this.formatXmlQty(this.mstAmount(_line.fiscalDocTrans().LineUnitPrice)) ));
this.appendChildIfNotEmpty(prodElement, this.createElementWithValue('vProd', this.formatXmlAmount(this.mstAmount(_line.grossLineAmount())) ));


e na verdade deveria ser:
prodElement.appendChild( this.createElementWithValue('xProd', _line.fiscalDocTrans().itemName ));
prodElement.appendChild( this.createElementWithValue('NCM', this.formatKeepNumbersOnly(_line.fiscalDocTrans().TaxFiscalClassificationId)));
prodElement.appendChild( this.createElementWithValue('genero', substr(this.formatKeepNumbersOnly(_line.fiscalDocTrans().TaxFiscalClassificationId), 1, 2) ));
prodElement.appendChild( this.createElementWithValue('CFOP', this.formatKeepNumbersOnly(_line.fiscalDocTrans().CFOPId) ));
prodElement.appendChild( this.createElementWithValue('uCom', _line.fiscalDocTrans().LineUnit ));
prodElement.appendChild( this.createElementWithValue('qCom', this.formatXmlQty(_line.fiscalDocTrans().Qty) ));
prodElement.appendChild( this.createElementWithValue('vUnCom', this.formatXmlQty(this.mstAmount(_line.fiscalDocTrans().LineUnitPrice)) ));
prodElement.appendChild( this.createElementWithValue('vProd', this.formatXmlAmount(this.mstAmount(_line.grossLineAmount())) ));

pois no layout da nfe todos os campos acima são obrigatórios.

Não fiz a verificação campo a campo se está assim na funcionalidade do ax, mas esses eu peguei pois deu erro para mim.

[]'s
Leandro Menezes.