From e9fa623a7451092bea2dc15fc4aeb7ea8f023c5e Mon Sep 17 00:00:00 2001 From: gestefane Date: Sat, 26 Mar 2022 22:36:56 -0300 Subject: [PATCH 01/11] atribuicao do subgrupo do grupo --- lib/factory/processor/enviaProcessor.js | 3 ++- lib/factory/processor/nfeProcessor.js | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/factory/processor/enviaProcessor.js b/lib/factory/processor/enviaProcessor.js index f807c40..8a48ef4 100644 --- a/lib/factory/processor/enviaProcessor.js +++ b/lib/factory/processor/enviaProcessor.js @@ -1167,7 +1167,8 @@ class EnviaProcessor { } getTransp(transp) { return { - modFrete: transp.modalidateFrete + modFrete: transp.modalidateFrete, + vol: transp.vol /** * transporta: TNFeInfNFeTranspTransporta; retTransp: TNFeInfNFeTranspRetTransp; diff --git a/lib/factory/processor/nfeProcessor.js b/lib/factory/processor/nfeProcessor.js index fbc685a..704c4dd 100644 --- a/lib/factory/processor/nfeProcessor.js +++ b/lib/factory/processor/nfeProcessor.js @@ -1222,7 +1222,8 @@ class NFeProcessor { } getTransp(transp) { return { - modFrete: transp.modalidateFrete + modFrete: transp.modalidateFrete, + vol: transp.vol /** * transporta: TNFeInfNFeTranspTransporta; retTransp: TNFeInfNFeTranspRetTransp; From 0f903f08b871b54f957bea52e1b1b83cc5f013d4 Mon Sep 17 00:00:00 2001 From: gestefane Date: Wed, 6 Apr 2022 09:17:35 -0300 Subject: [PATCH 02/11] Breaks faltando em getImpostoPis e ajuste na enumeracao de indIntermed --- lib/factory/processor/enviaProcessor.js | 7 +++++-- lib/factory/processor/nfeProcessor.js | 1 + lib/factory/schema/index.d.ts | 6 +----- lib/factory/schema/index.js | 4 ---- src/factory/processor/enviaProcessor.ts | 2 ++ src/factory/processor/nfeProcessor.ts | 2 ++ 6 files changed, 11 insertions(+), 11 deletions(-) diff --git a/lib/factory/processor/enviaProcessor.js b/lib/factory/processor/enviaProcessor.js index 8a48ef4..885aac6 100644 --- a/lib/factory/processor/enviaProcessor.js +++ b/lib/factory/processor/enviaProcessor.js @@ -929,6 +929,7 @@ class EnviaProcessor { CST: pis.CST } }; + break; case '49': case '50': case '51': @@ -965,6 +966,7 @@ class EnviaProcessor { vPIS: pis.vPIS } }; + break; default: result = { PISOutr: { @@ -1166,9 +1168,9 @@ class EnviaProcessor { return icmsTot; } getTransp(transp) { - return { + var res = { modFrete: transp.modalidateFrete, - vol: transp.vol + vol: transp.vol /** * transporta: TNFeInfNFeTranspTransporta; retTransp: TNFeInfNFeTranspRetTransp; @@ -1181,6 +1183,7 @@ class EnviaProcessor { vol: TNFeInfNFeTranspVol[]; */ }; + return res; } getCobr(cobranca) { if ((cobranca && cobranca.fatura) && diff --git a/lib/factory/processor/nfeProcessor.js b/lib/factory/processor/nfeProcessor.js index 704c4dd..50eca13 100644 --- a/lib/factory/processor/nfeProcessor.js +++ b/lib/factory/processor/nfeProcessor.js @@ -984,6 +984,7 @@ class NFeProcessor { CST: pis.CST } }; + break; case '49': case '50': case '51': diff --git a/lib/factory/schema/index.d.ts b/lib/factory/schema/index.d.ts index f783091..7e78634 100644 --- a/lib/factory/schema/index.d.ts +++ b/lib/factory/schema/index.d.ts @@ -135,11 +135,7 @@ export interface TNFeInfNFeIde { } export declare enum TNFeInfNFeIdeIndIntermed { Item0 = "0", - Item1 = "1", - Item2 = "2", - Item3 = "3", - Item4 = "4", - Item9 = "9" + Item1 = "1" } export declare enum TMod { Item55 = "55", diff --git a/lib/factory/schema/index.js b/lib/factory/schema/index.js index 7a8f245..a899b98 100644 --- a/lib/factory/schema/index.js +++ b/lib/factory/schema/index.js @@ -64,10 +64,6 @@ var TNFeInfNFeIdeIndIntermed; (function (TNFeInfNFeIdeIndIntermed) { TNFeInfNFeIdeIndIntermed["Item0"] = "0"; TNFeInfNFeIdeIndIntermed["Item1"] = "1"; - TNFeInfNFeIdeIndIntermed["Item2"] = "2"; - TNFeInfNFeIdeIndIntermed["Item3"] = "3"; - TNFeInfNFeIdeIndIntermed["Item4"] = "4"; - TNFeInfNFeIdeIndIntermed["Item9"] = "9"; })(TNFeInfNFeIdeIndIntermed = exports.TNFeInfNFeIdeIndIntermed || (exports.TNFeInfNFeIdeIndIntermed = {})); //[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.portalfiscal.inf.br/nfe")] var TMod; diff --git a/src/factory/processor/enviaProcessor.ts b/src/factory/processor/enviaProcessor.ts index e0d8d9a..10e1845 100644 --- a/src/factory/processor/enviaProcessor.ts +++ b/src/factory/processor/enviaProcessor.ts @@ -1027,6 +1027,7 @@ export class EnviaProcessor { CST: pis.CST } } + break; case '49': case '50': case '51': @@ -1062,6 +1063,7 @@ export class EnviaProcessor { vPIS: pis.vPIS } } + break; default: result = { PISOutr: { diff --git a/src/factory/processor/nfeProcessor.ts b/src/factory/processor/nfeProcessor.ts index f7ff89f..811f5f2 100644 --- a/src/factory/processor/nfeProcessor.ts +++ b/src/factory/processor/nfeProcessor.ts @@ -1109,6 +1109,7 @@ export class NFeProcessor { CST: pis.CST } } + break; case '49': case '50': case '51': @@ -1144,6 +1145,7 @@ export class NFeProcessor { vPIS: pis.vPIS } } + break; default: result = { PISOutr: { From 13b91ab08daa88edbbb8e8b61fb1fbcddd1d48e0 Mon Sep 17 00:00:00 2001 From: gestefane Date: Thu, 7 Apr 2022 13:56:25 -0300 Subject: [PATCH 03/11] indIntermed ajustes nas opcoes possiveis --- src/factory/schema/index.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/factory/schema/index.ts b/src/factory/schema/index.ts index 884240e..ae8a2d5 100644 --- a/src/factory/schema/index.ts +++ b/src/factory/schema/index.ts @@ -166,10 +166,6 @@ export interface TNFeInfNFeIde { export enum TNFeInfNFeIdeIndIntermed { Item0 = "0", Item1 = "1", - Item2 = "2", - Item3 = "3", - Item4 = "4", - Item9 = "9" } //[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.portalfiscal.inf.br/nfe")] From f3de7045649efb62df134a15cc8699626695f83a Mon Sep 17 00:00:00 2001 From: gestefane Date: Fri, 8 Apr 2022 10:54:02 -0300 Subject: [PATCH 04/11] indIntermer reposicionado no XML para corrigir rejeicao 225-Falha no Schema XML --- lib/factory/processor/enviaProcessor.js | 5 +++-- lib/factory/processor/nfeProcessor.js | 5 +++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/factory/processor/enviaProcessor.js b/lib/factory/processor/enviaProcessor.js index 885aac6..0204791 100644 --- a/lib/factory/processor/enviaProcessor.js +++ b/lib/factory/processor/enviaProcessor.js @@ -314,14 +314,15 @@ class EnviaProcessor { finNFe: Utils.getEnumByValue(schema.TFinNFe, documento.finalidadeEmissao), indFinal: Utils.getEnumByValue(schema.TNFeInfNFeIdeIndFinal, documento.indConsumidorFinal), indPres: Utils.getEnumByValue(schema.TNFeInfNFeIdeIndPres, documento.indPresenca), + indIntermed : documento.indIntermed ? Utils.getEnumByValue(schema.TNFeInfNFeIdeIndIntermed, documento.indIntermed) : null, // NT 2020.006 procEmi: Utils.getEnumByValue(schema.TProcEmi, documento.processoEmissao), verProc: documento.versaoAplicativoEmissao, dhSaiEnt: documento.dhSaiEnt, dhCont: documento.dhContingencia, xJust: documento.justificativaContingencia, }; - if (documento.indIntermed) { - ide.indIntermed = Utils.getEnumByValue(schema.TNFeInfNFeIdeIndIntermed, documento.indIntermed); // NT 2020.006 + if (!documento.indIntermed) { + delete ide.indIntermed; // NT 2020.006 } return ide; } diff --git a/lib/factory/processor/nfeProcessor.js b/lib/factory/processor/nfeProcessor.js index 50eca13..41e0040 100644 --- a/lib/factory/processor/nfeProcessor.js +++ b/lib/factory/processor/nfeProcessor.js @@ -364,12 +364,16 @@ class NFeProcessor { finNFe: Utils.getEnumByValue(schema.TFinNFe, documento.finalidadeEmissao), indFinal: Utils.getEnumByValue(schema.TNFeInfNFeIdeIndFinal, documento.indConsumidorFinal), indPres: Utils.getEnumByValue(schema.TNFeInfNFeIdeIndPres, documento.indPresenca), + indIntermed : documento.indIntermed ? Utils.getEnumByValue(schema.TNFeInfNFeIdeIndIntermed, documento.indIntermed) : null, // NT 2020.006 procEmi: Utils.getEnumByValue(schema.TProcEmi, documento.processoEmissao), verProc: documento.versaoAplicativoEmissao, dhSaiEnt: documento.dhSaiEnt, dhCont: documento.dhContingencia, xJust: documento.justificativaContingencia, }; + if (!documento.indIntermed) { + delete ide.indIntermed; // NT 2020.006 + } return ide; } getEmit(empresa) { @@ -1021,6 +1025,7 @@ class NFeProcessor { vPIS: pis.vPIS } }; + break; default: result = { PISOutr: { From ed9b80d4c37227b9939ca93111dc9681b493feeb Mon Sep 17 00:00:00 2001 From: gestefane Date: Tue, 12 Apr 2022 00:15:23 -0300 Subject: [PATCH 05/11] transportadora --- .gitignore | 6 + lib/factory/processor/enviaProcessor.js | 2663 ++++++++++++---------- lib/factory/processor/nfeProcessor.js | 2724 +++++++++++++---------- 3 files changed, 2958 insertions(+), 2435 deletions(-) diff --git a/.gitignore b/.gitignore index d37fe86..df5e4c7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,9 @@ +omni-nfetest.js +.gitignore + +#ide vs +.vscode + #ide stuff .idea diff --git a/lib/factory/processor/enviaProcessor.js b/lib/factory/processor/enviaProcessor.js index 0204791..54cf1e8 100644 --- a/lib/factory/processor/enviaProcessor.js +++ b/lib/factory/processor/enviaProcessor.js @@ -10,1169 +10,1408 @@ const signature_1 = require("../signature"); const sefazNfce_1 = require("../webservices/sefazNfce"); const sefazNfe_1 = require("../webservices/sefazNfe"); const path = require("path"); -const sha1 = require('sha1'); +const sha1 = require("sha1"); let soapAutorizacao = null; let soapRetAutorizacao = null; function log(msg, processo) { - console.log(`[node-dfe][${processo || 'log'}]->${msg}`); + console.log(`[node-dfe][${processo || "log"}]->${msg}`); } function jsonOneLevel(obj) { - const result = {}; - for (const k of Object.keys(obj)) { - let logStr = obj[k].toString() || "null"; - if (logStr.length > 500) { - logStr = logStr.substring(0, 499); - } - result[k] = logStr; + const result = {}; + for (const k of Object.keys(obj)) { + let logStr = obj[k].toString() || "null"; + if (logStr.length > 500) { + logStr = logStr.substring(0, 499); } - return JSON.stringify(result); + result[k] = logStr; + } + return JSON.stringify(result); } /** * Classe para processamento de NFe/NFCe */ class EnviaProcessor { - constructor(configuracoes) { - this.configuracoes = configuracoes; - if (!this.configuracoes.geral.versao) - this.configuracoes.geral.versao = '4.00'; - if (!this.configuracoes.webservices) - this.configuracoes.webservices = { tentativas: 3, aguardarConsultaRetorno: 1000 }; - if (!this.configuracoes.webservices.tentativas) - this.configuracoes.webservices.tentativas = 3; - if (!this.configuracoes.webservices.aguardarConsultaRetorno) - this.configuracoes.webservices.aguardarConsultaRetorno = 1000; - if (this.configuracoes.arquivos) { - if (this.configuracoes.arquivos.pastaEnvio && (!'/\\'.includes(this.configuracoes.arquivos.pastaEnvio.substr(-1)))) - this.configuracoes.arquivos.pastaEnvio = this.configuracoes.arquivos.pastaEnvio + path.sep; - if (this.configuracoes.arquivos.pastaRetorno && (!'/\\'.includes(this.configuracoes.arquivos.pastaRetorno.substr(-1)))) - this.configuracoes.arquivos.pastaRetorno = this.configuracoes.arquivos.pastaRetorno + path.sep; - if (this.configuracoes.arquivos.pastaXML && (!'/\\'.includes(this.configuracoes.arquivos.pastaXML.substr(-1)))) - this.configuracoes.arquivos.pastaXML = this.configuracoes.arquivos.pastaXML + path.sep; - } + constructor(configuracoes) { + this.configuracoes = configuracoes; + if (!this.configuracoes.geral.versao) + this.configuracoes.geral.versao = "4.00"; + if (!this.configuracoes.webservices) + this.configuracoes.webservices = { + tentativas: 3, + aguardarConsultaRetorno: 1000, + }; + if (!this.configuracoes.webservices.tentativas) + this.configuracoes.webservices.tentativas = 3; + if (!this.configuracoes.webservices.aguardarConsultaRetorno) + this.configuracoes.webservices.aguardarConsultaRetorno = 1000; + if (this.configuracoes.arquivos) { + if ( + this.configuracoes.arquivos.pastaEnvio && + !"/\\".includes(this.configuracoes.arquivos.pastaEnvio.substr(-1)) + ) + this.configuracoes.arquivos.pastaEnvio = + this.configuracoes.arquivos.pastaEnvio + path.sep; + if ( + this.configuracoes.arquivos.pastaRetorno && + !"/\\".includes(this.configuracoes.arquivos.pastaRetorno.substr(-1)) + ) + this.configuracoes.arquivos.pastaRetorno = + this.configuracoes.arquivos.pastaRetorno + path.sep; + if ( + this.configuracoes.arquivos.pastaXML && + !"/\\".includes(this.configuracoes.arquivos.pastaXML.substr(-1)) + ) + this.configuracoes.arquivos.pastaXML = + this.configuracoes.arquivos.pastaXML + path.sep; } - /** - * Metodo para realizar o processamento de documento(s) do tipo 55 ou 65 - * @param documento Array de documentos modelo 55 ou 1 documento modelo 65 - * @param assincrono Boolean para definir se a execução sera sincrona ou assincrona, por padrao === sincrona! - */ - async executar(documento, assincrono = false) { - let result = { - success: false - }; - try { - this.configuraUrlsSefaz(); - let doc = this.gerarXml(documento); - let xmlAssinado = signature_1.Signature.signXmlX509(doc.xml, 'infNFe', this.configuracoes.certificado); - if (documento.docFiscal.modelo == '65') { - let appendQRCode = this.appendQRCodeXML(documento, xmlAssinado); - xmlAssinado = appendQRCode.xml; - doc.nfe.infNFeSupl = appendQRCode.qrCode; - } - let xmlLote = this.gerarXmlLote(xmlAssinado, assincrono); - if (documento.docFiscal.modelo == '65' && documento.docFiscal.isContingenciaOffline) { - result.retornoContingenciaOffline = {}; - result.success = true; - result.retornoContingenciaOffline.xml_gerado = xmlLote; - } - else { - result = await this.transmitirXml(xmlLote, doc.nfe); - } - } - catch (ex) { - result.success = false; - result.error = ex; - } - return result; + } + /** + * Metodo para realizar o processamento de documento(s) do tipo 55 ou 65 + * @param documento Array de documentos modelo 55 ou 1 documento modelo 65 + * @param assincrono Boolean para definir se a execução sera sincrona ou assincrona, por padrao === sincrona! + */ + async executar(documento, assincrono = false) { + let result = { + success: false, + }; + try { + this.configuraUrlsSefaz(); + let doc = this.gerarXml(documento); + let xmlAssinado = signature_1.Signature.signXmlX509( + doc.xml, + "infNFe", + this.configuracoes.certificado + ); + if (documento.docFiscal.modelo == "65") { + let appendQRCode = this.appendQRCodeXML(documento, xmlAssinado); + xmlAssinado = appendQRCode.xml; + doc.nfe.infNFeSupl = appendQRCode.qrCode; + } + let xmlLote = this.gerarXmlLote(xmlAssinado, assincrono); + if ( + documento.docFiscal.modelo == "65" && + documento.docFiscal.isContingenciaOffline + ) { + result.retornoContingenciaOffline = {}; + result.success = true; + result.retornoContingenciaOffline.xml_gerado = xmlLote; + } else { + result = await this.transmitirXml(xmlLote, doc.nfe); + } + } catch (ex) { + result.success = false; + result.error = ex; } - configuraUrlsSefaz() { - const { geral: { modelo, ambiente }, empresa } = this.configuracoes; - if (!soapAutorizacao || !soapRetAutorizacao) { - let Sefaz = modelo == '65' ? sefazNfce_1.SefazNFCe : sefazNfe_1.SefazNFe; - soapAutorizacao = Sefaz.getSoapInfo(empresa.endereco.uf, ambiente, nfe_1.ServicosSefaz.autorizacao); - soapRetAutorizacao = Sefaz.getSoapInfo(empresa.endereco.uf, ambiente, nfe_1.ServicosSefaz.retAutorizacao); - } + return result; + } + configuraUrlsSefaz() { + const { + geral: { modelo, ambiente }, + empresa, + } = this.configuracoes; + if (!soapAutorizacao || !soapRetAutorizacao) { + let Sefaz = modelo == "65" ? sefazNfce_1.SefazNFCe : sefazNfe_1.SefazNFe; + soapAutorizacao = Sefaz.getSoapInfo( + empresa.endereco.uf, + ambiente, + nfe_1.ServicosSefaz.autorizacao + ); + soapRetAutorizacao = Sefaz.getSoapInfo( + empresa.endereco.uf, + ambiente, + nfe_1.ServicosSefaz.retAutorizacao + ); } - appendQRCodeXML(documento, xmlAssinado) { - let qrCode = null; - let xmlAssinadoObj = xmlHelper_1.XmlHelper.deserializeXml(xmlAssinado, { explicitArray: false }); - let chave = Object(xmlAssinadoObj).NFe.infNFe.$.Id.replace('NFe', ''); - if (documento.docFiscal.isContingenciaOffline) { - let diaEmissao = documento.docFiscal.dhEmissao.substring(8, 10); - let valorTotal = documento.total.icmsTot.vNF; - let digestValue = Object(xmlAssinadoObj).NFe.Signature.SignedInfo.Reference.DigestValue; - qrCode = this.gerarQRCodeNFCeOffline(soapAutorizacao.urlQRCode, chave, '2', documento.docFiscal.ambiente, diaEmissao, valorTotal, digestValue, this.configuracoes.empresa.idCSC, this.configuracoes.empresa.CSC); - } - else { - qrCode = this.gerarQRCodeNFCeOnline(soapAutorizacao.urlQRCode, chave, '2', documento.docFiscal.ambiente, this.configuracoes.empresa.idCSC, this.configuracoes.empresa.CSC); - } - let qrCodeObj = { - qrCode: '<' + qrCode + '>', - urlChave: soapAutorizacao.urlChave - }; - let qrCodeXml = xmlHelper_1.XmlHelper.serializeXml(qrCodeObj, 'infNFeSupl').replace('>]]>', ']]>').replace('' + qrCodeXml + '", + urlChave: soapAutorizacao.urlChave, + }; + let qrCodeXml = xmlHelper_1.XmlHelper.serializeXml(qrCodeObj, "infNFeSupl") + .replace(">]]>", "]]>") + .replace("" + qrCodeXml + " 0 + ? this.getImpostoDevolucao({ + pDevol: produtos[i].prod.percentualDevolucao, + vIPIDevol: produtos[i].prod.valorIPIDevolucao, + }) + : undefined, + }); } - obterDigitoVerificador(chave) { - let soma = 0; - let mod = -1; - let dv = -1; - let peso = 2; - let chaveArr = chave.split(''); - for (let i = chaveArr.length - 1; i !== -1; i--) { - let ch = Number(chaveArr[i].toString()); - soma += ch * peso; - if (peso < 9) - peso += 1; - else - peso = 2; - } - mod = soma % 11; - if (mod === 0 || mod === 1) - dv = 0; - else - dv = 11 - mod; - return dv.toString(); + return det_list; + } + getDetProd(produto, ambiente, isPrimeiroProduto) { + return { + cProd: produto.codigo, + cEAN: produto.cEAN, + xProd: + ambiente == "2" && isPrimeiroProduto + ? "NOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL" + : produto.descricao, + NCM: produto.NCM, + //nVE: string[]; + CEST: produto.cest, + //indEscala: TNFeInfNFeDetProdIndEscala; + cNPJFab: produto.cNPJFab, + cBenef: produto.cBenef, + eXTIPI: produto.eXTIPI, + CFOP: produto.CFOP, + uCom: produto.unidadeComercial, + qCom: produto.quantidadeComercial, + vUnCom: produto.valorUnitarioComercial, + vProd: produto.valorTotal, + cEANTrib: produto.cEANTrib, + uTrib: produto.unidadeTributavel, + qTrib: produto.quantidadeTributavel, + vUnTrib: produto.valorUnitarioTributavel, + vFrete: produto.valorFrete, + vSeg: produto.valorSeguro, + vDesc: produto.valorDesconto, + vOutro: produto.valorOutro, + indTot: produto.indicadorTotal, + //di: TNFeInfNFeDetProdDI[]; + //detExport: TNFeInfNFeDetProdDetExport[]; + xPed: produto.numeroPedido, + nItemPed: produto.numeroItemPedido, + }; + } + getDetImposto(imposto, modelo, cfop) { + let detImposto = { + vTotTrib: imposto.valorAproximadoTributos, + ICMS: imposto.icms ? [this.getImpostoIcms(imposto.icms)] : [], + PIS: imposto.pis ? [this.getImpostoPIS(imposto.pis, modelo)] : [], + COFINS: imposto.cofins + ? [this.getImpostoCOFINS(imposto.cofins, modelo)] + : [], + PISST: imposto.pisst ? [this.getImpostoPISST(imposto.pisst)] : [], + COFINSST: imposto.cofinsst + ? [this.getImpostoCOFINSST(imposto.cofinsst)] + : [], + IPI: imposto.ipi ? [this.getImpostoIPI(imposto.ipi, modelo)] : [], + II: imposto.ii ? [this.getImpostoII(imposto.ii, cfop)] : [], + ICMSUFDest: imposto.icmsUfDest + ? [this.getIcmsUfDest(imposto.icmsUfDest)] + : [], + ISSQN: "", + }; + return detImposto; + } + getImpostoIcms(icms) { + let result; + if (icms.CST && icms.CST !== "") { + switch (icms.CST) { + case "00": + result = { + ICMS00: { + orig: icms.orig, + CST: icms.CST, + modBC: Utils.getEnumByValue( + schema.TNFeInfNFeDetImpostoICMSICMS00ModBC, + icms.modBC + ), + vBC: icms.vBC, + pICMS: icms.pICMS, + vICMS: icms.vICMS, + pFCP: icms.pFCP, + vFCP: icms.vFCP, + }, + }; + break; + case "10": + // partilha icms + if ( + icms.UFST && + icms.UFST !== "" && + icms.pBCOp && + icms.pBCOp !== "" + ) { + result = { + ICMS10: { + orig: icms.orig, + CST: icms.CST, + modBC: Utils.getEnumByValue( + schema.TNFeInfNFeDetImpostoICMSICMSPartModBC, + icms.modBC + ), + vBC: icms.vBC, + pRedBC: icms.pRedBC, + pICMS: icms.pICMS, + vICMS: icms.vICMS, + modBCST: Utils.getEnumByValue( + schema.TNFeInfNFeDetImpostoICMSICMSPartModBCST, + icms.modBCST + ), + pMVAST: icms.pMVAST, + pRedBCST: icms.pRedBCST, + vBCST: icms.vBCST, + pICMSST: icms.pICMSST, + vICMSST: icms.vICMSST, + pBCOp: icms.pBCOp, + UFST: Utils.getEnumByValue(schema.TUf, icms.UFST), + }, + }; + } else { + result = { + ICMS10: { + orig: icms.orig, + CST: icms.CST, + modBC: Utils.getEnumByValue( + schema.TNFeInfNFeDetImpostoICMSICMS10ModBC, + icms.modBC + ), + pICMS: icms.pICMS, + vBC: icms.vBC, + vICMS: icms.vICMS, + pFCP: icms.pFCP, + vFCP: icms.vFCP, + modBCST: Utils.getEnumByValue( + schema.TNFeInfNFeDetImpostoICMSICMS10ModBCST, + icms.modBCST + ), + pFCPST: icms.pFCPST, + pICMSST: icms.pICMSST, + pMVAST: icms.pMVAST, + pRedBCST: icms.pRedBCST, + vBCFCP: icms.vBCFCP, + vBCFCPST: icms.vBCFCPST, + vBCST: icms.vBCST, + vFCPST: icms.vFCPST, + vICMSST: icms.vICMSST, + }, + }; + } + break; + case "20": + result = { + ICMS20: { + orig: icms.orig, + CST: icms.CST, + modBC: Utils.getEnumByValue( + schema.TNFeInfNFeDetImpostoICMSICMS20ModBC, + icms.modBC + ), + pRedBC: icms.pRedBC, + vBC: icms.vBC, + pICMS: icms.pICMS, + vICMS: icms.vICMS, + vBCFCP: icms.vBCFCP, + pFCP: icms.pFCP, + vFCP: icms.vFCP, + vICMSDeson: icms.vICMSDeson, + motDesICMS: Utils.getEnumByValue( + schema.TNFeInfNFeDetImpostoICMSICMS20MotDesICMS, + icms.motDesICMS + ), + }, + }; + break; + case "30": + result = { + ICMS30: { + orig: icms.orig, + CST: icms.CST, + modBCST: Utils.getEnumByValue( + schema.TNFeInfNFeDetImpostoICMSICMS30ModBCST, + icms.modBCST + ), + pMVAST: icms.pMVAST, + pRedBCST: icms.pRedBCST, + vBCST: icms.vBCST, + pICMSST: icms.pICMSST, + vICMSST: icms.vICMSST, + motDesICMS: Utils.getEnumByValue( + schema.TNFeInfNFeDetImpostoICMSICMS30MotDesICMS, + icms.motDesICMS + ), + vICMSDeson: icms.vICMSDeson, + vBCFCPST: icms.vBCFCPST, + pFCPST: icms.pFCPST, + vFCPST: icms.vFCPST, + }, + }; + break; + case "40": + case "50": + result = { + ICMS40: { + orig: icms.orig, + CST: icms.CST, + motDesICMS: Utils.getEnumByValue( + schema.TNFeInfNFeDetImpostoICMSICMS40MotDesICMS, + icms.motDesICMS + ), + vICMSDeson: icms.vICMSDeson, + }, + }; + break; + case "41": + if (icms.vBCSTRet && icms.vBCSTRet !== "") { + result = { + ICMS41: { + orig: icms.orig, + CST: icms.CST, + vBCSTRet: icms.vBCSTRet, + vICMSSTRet: icms.vICMSSTRet, + vBCSTDest: icms.vBCSTDest, + vICMSSTDest: icms.vICMSSTDest, + //pFCPSTRet: '', + //pST: '', + //vBCFCPSTRet: '', + //vFCPSTRet: '', + pRedBCEfet: icms.pRedBCEfet, + vBCEfet: icms.vBCEfet, + pICMSEfet: icms.pICMSEfet, + vICMSEfet: icms.vICMSEfet, + }, + }; + } else { + result = { + ICMS40: { + orig: icms.orig, + CST: icms.CST, + motDesICMS: Utils.getEnumByValue( + schema.TNFeInfNFeDetImpostoICMSICMS40MotDesICMS, + icms.motDesICMS + ), + vICMSDeson: icms.vICMSDeson, + }, + }; + } + break; + case "51": + result = { + ICMS51: { + orig: icms.orig, + CST: icms.CST, + modBC: Utils.getEnumByValue( + schema.TNFeInfNFeDetImpostoICMSICMS51ModBC, + icms.modBC + ), + vBC: icms.vBC, + pRedBC: icms.pRedBC, + pICMS: icms.pICMS, + vICMS: icms.vICMS, + pDif: icms.pDif, + vICMSDif: icms.vICMSDif, + vICMSOp: icms.vICMSOp, + vBCFCP: icms.vBCFCP, + pFCP: icms.pFCP, + vFCP: icms.vFCP, + }, + }; + break; + case "60": + result = { + ICMS60: { + orig: icms.orig, + CST: icms.CST, + vBCSTRet: icms.vBCSTRet, + vICMSSTRet: icms.vICMSSTRet, + pST: icms.pST, + vBCFCPSTRet: icms.vBCFCPSTRet, + pFCPSTRet: icms.pFCPSTRet, + vFCPSTRet: icms.vFCPSTRet, + pRedBCEfet: icms.pRedBCEfet, + vBCEfet: icms.vBCEfet, + pICMSEfet: icms.pICMSEfet, + vICMSEfet: icms.vICMSEfet, + }, + }; + break; + case "70": + result = { + ICMS70: { + orig: icms.orig, + CST: icms.CST, + modBC: icms.modBC, + vBC: icms.vBC, + pRedBC: icms.pRedBC, + pICMS: icms.pICMS, + vICMS: icms.vICMS, + modBCST: icms.modBCST, + pMVAST: icms.pMVAST, + pRedBCST: icms.pRedBCST, + vBCST: icms.vBCST, + pICMSST: icms.pICMSST, + vICMSST: icms.vICMSST, + motDesICMS: icms.motDesICMS, + vICMSDeson: icms.vICMSDeson, + vBCFCP: icms.vBCFCP, + pFCP: icms.pFCP, + vFCP: icms.vFCP, + vBCFCPST: icms.vBCFCPST, + pFCPST: icms.pFCPST, + vFCPST: icms.vFCPST, + }, + }; + break; + case "90": + // partilha icms + if ( + icms.UFST && + icms.UFST !== "" && + icms.pBCOp && + icms.pBCOp !== "" + ) { + result = { + ICMS90: { + orig: icms.orig, + CST: icms.CST, + modBC: Utils.getEnumByValue( + schema.TNFeInfNFeDetImpostoICMSICMSPartModBC, + icms.modBC + ), + vBC: icms.vBC, + pRedBC: icms.pRedBC, + pICMS: icms.pICMS, + vICMS: icms.vICMS, + modBCST: Utils.getEnumByValue( + schema.TNFeInfNFeDetImpostoICMSICMSPartModBCST, + icms.modBCST + ), + pMVAST: icms.pMVAST, + pRedBCST: icms.pRedBCST, + vBCST: icms.vBCST, + pICMSST: icms.pICMSST, + vICMSST: icms.vICMSST, + pBCOp: icms.pBCOp, + UFST: Utils.getEnumByValue(schema.TUf, icms.UFST), + }, + }; + } else { + result = { + ICMS90: { + orig: icms.orig, + CST: icms.CST, + modBC: Utils.getEnumByValue( + schema.TNFeInfNFeDetImpostoICMSICMS90ModBC, + icms.modBC + ), + vBC: icms.vBC, + pRedBC: icms.pRedBC, + pICMS: icms.pICMS, + vICMS: icms.vICMS, + modBCST: icms.modBCST, + pMVAST: icms.pMVAST, + pRedBCST: icms.pRedBCST, + vBCST: icms.vBCST, + pICMSST: icms.pICMSST, + vICMSST: icms.vICMSST, + motDesICMS: Utils.getEnumByValue( + schema.TNFeInfNFeDetImpostoICMSICMS90MotDesICMS, + icms.motDesICMS + ), + vICMSDeson: icms.vICMSDeson, + vBCFCP: icms.vBCFCP, + pFCP: icms.pFCP, + vFCP: icms.vFCP, + vBCFCPST: icms.vBCFCPST, + vFCPST: icms.vFCPST, + }, + }; + } + break; + default: + //throw exception? + break; + } + } else { + // Simples Nacional + switch (icms.CSOSN) { + case "101": + result = { + ICMSSN101: { + orig: icms.orig, + CSOSN: icms.CSOSN, + pCredSN: icms.pCredSN, + vCredICMSSN: icms.vCredICMSSN, + }, + }; + break; + case "102": + case "103": + case "300": + case "400": + result = { + ICMSSN102: { + orig: icms.orig, + CSOSN: icms.CSOSN, + }, + }; + break; + case "201": + result = { + ICMSSN201: { + orig: icms.orig, + CSOSN: icms.CSOSN, + modBCST: icms.modBCST, + pMVAST: icms.pMVAST, + pRedBCST: icms.pRedBCST, + vBCST: icms.vBCST, + pICMSST: icms.pICMSST, + vICMSST: icms.vICMSST, + pCredSN: icms.pCredSN, + vCredICMSSN: icms.vCredICMSSN, + vBCFCPST: icms.vBCFCPST, + pFCPST: icms.pFCPST, + vFCPST: icms.vFCPST, + }, + }; + break; + case "202": + case "203": + result = { + ICMSSN202: { + orig: icms.orig, + CSOSN: icms.CSOSN, + modBCST: icms.modBCST, + pMVAST: icms.pMVAST, + pRedBCST: icms.pRedBCST, + vBCST: icms.vBCST, + pICMSST: icms.pICMSST, + vICMSST: icms.vICMSST, + vBCFCPST: icms.vBCFCPST, + pFCPST: icms.pFCPST, + vFCPST: icms.vFCPST, + }, + }; + break; + case "500": + result = { + ICMSSN500: { + orig: icms.orig, + CSOSN: icms.CSOSN, + vBCSTRet: icms.vBCSTRet, + vICMSSTRet: icms.vICMSSTRet, + vBCFCPSTRet: icms.vBCFCPSTRet, + pFCPSTRet: icms.pFCPSTRet, + vFCPSTRet: icms.vFCPSTRet, + pRedBCEfet: icms.pRedBCEfet, + vBCEfet: icms.vBCEfet, + pICMSEfet: icms.pICMSEfet, + vICMSEfet: icms.vICMSEfet, + }, + }; + break; + case "900": + result = { + ICMSSN900: { + orig: icms.orig, + CSOSN: icms.CSOSN, + modBC: icms.modBC, + vBC: icms.vBC, + pRedBC: icms.pRedBC, + pICMS: icms.pICMS, + vICMS: icms.vICMS, + modBCST: icms.modBCST, + pMVAST: icms.pMVAST, + pRedBCST: icms.pRedBCST, + vBCST: icms.vBCST, + pICMSST: icms.pICMSST, + vICMSST: icms.vICMSST, + pCredSN: icms.pCredSN, + vCredICMSSN: icms.vCredICMSSN, + vBCFCPST: icms.vBCFCPST, + pFCPST: icms.pFCPST, + vFCPST: icms.vFCPST, + }, + }; + break; + } } - gerarQRCodeNFCeOnline(urlQRCode, chave, versaoQRCode, ambiente, idCSC, CSC) { - let s = '|'; - let concat = [chave, versaoQRCode, ambiente, Number(idCSC)].join(s); - let hash = sha1(concat + CSC).toUpperCase(); - return urlQRCode + '?p=' + concat + s + hash; + return result; + } + getImpostoISSQN() { + return { + vBC: "", + vAliq: "", + vISSQN: "", + cMunFG: "", + cListServ: schema.TCListServ.Item0101, + vDeducao: "", + vOutro: "", + vDescIncond: "", + vDescCond: "", + vISSRet: "", + indISS: schema.TNFeInfNFeDetImpostoISSQNIndISS.Item1, + cServico: "", + cMun: "", + cPais: "", + nProcesso: "", + indIncentivo: schema.TNFeInfNFeDetImpostoISSQNIndIncentivo.Item1, + }; + } + getImpostoIPI(ipi, modelo) { + let result; + if (modelo != "55" || !ipi) return; //não deve gerar grupo IPI para NFCe + // if (!GerarTagIPIparaNaoTributado) && (!['00', '49', '50', '99'].includes(ipi.CST)) return; + //se valores padrão de quando não foi preenchido a TAG IPI + if ( + (ipi.cEnq = "") && + (ipi.CST = "00") && + (ipi.vBC = 0) && + (ipi.qUnid = 0) && + (ipi.vUnid = 0) && + (ipi.pIPI = 0) && + (ipi.vIPI = 0) + ) + return; + if (ipi.vBC + ipi.pIPI > 0 && ipi.qUnid + ipi.vUnid > 0) + throw "As TAG e não podem ser informadas em conjunto com as TAG e "; + result = { + IPI: { + CNPJProd: ipi.CNPJProd, + cSelo: ipi.cSelo, + qSelo: ipi.qSelo, + cEnq: ipi.cEnq || "999", + }, + }; + if (ipi.qUnid + ipi.vUnid > 0) { + result.IPI.IPITrib = { + CST: ipi.CST, + qUnid: ipi.qUnid, + vUnid: ipi.vUnid, + vIPI: ipi.vIPI, + }; + } else { + result.IPI.IPITrib = { + CST: ipi.CST, + vBC: ipi.vBC, + pIPI: ipi.pIPI, + vIPI: ipi.vIPI, + }; } - gerarQRCodeNFCeOffline(urlQRCode, chave, versaoQRCode, ambiente, diaEmissao, valorTotal, digestValue, idCSC, CSC) { - let s = '|'; - let hexDigestValue = Buffer.from(digestValue).toString('hex'); - let concat = [chave, versaoQRCode, ambiente, diaEmissao, valorTotal, hexDigestValue, Number(idCSC)].join(s); - let hash = sha1(concat + CSC).toUpperCase(); - return urlQRCode + '?p=' + concat + s + hash; + // result.IPI.IPINT = { CST: ipi.CST } + return result; + } + getImpostoII(ii, cfop) { + if (!ii) return; + if ( + ii.vBC > 0 || + ii.vDespAdu > 0 || + ii.vII > 0 || + ii.vIOF > 0 || + cfop[0] === "3" + ) { + return { + vBC: ii.vBC, + vDespAdu: ii.vDespAdu, + vII: ii.vII, + vIOF: ii.vIOF, + }; } - gerarNFe(documento, dadosChave) { - let nfe = { - $: { versao: '4.00', Id: 'NFe' + dadosChave.chave } + return; + } + getImpostoPIS(pis, modelo) { + let result; + if ( + modelo != "55" && + pis.vBC == 0 && + (pis.pPIS = 0) && + (pis.vPIS = 0) && + (pis.qBCProd = 0) && + (pis.vAliqProd = 0) && + !["04", "05", "06", "07", "08", "09", "49", "99"].includes(pis.CST) + ) + return undefined; + if (!pis && modelo == "55") throw "NF-e sem grupo do PIS"; + switch (pis.CST) { + case "01": + case "02": + result = { + PISAliq: { + CST: pis.CST, + vBC: pis.vBC, + pPIS: pis.pPIS, + vPIS: pis.vPIS, + }, }; - nfe.ide = this.getIde(documento.docFiscal, dadosChave); - nfe.emit = this.getEmit(this.configuracoes.empresa); - //nfe.avulsa = ; - nfe.dest = this.getDest(documento.destinatario, documento.docFiscal.ambiente); - //nfe.retirada = ; - //nfe.entrega = ; - //nfe.autXML = ; - nfe.det = this.getDet(documento.produtos, documento.docFiscal.ambiente, documento.docFiscal.modelo); - nfe.total = this.getTotal(documento.total); - nfe.transp = this.getTransp(documento.transporte); - nfe.cobr = this.getCobr(documento.cobranca); - nfe.pag = this.getPag(documento.pagamento); - nfe.infAdic = this.getInfoAdic(documento.infoAdicional); - //nfe.exporta = ; - //nfe.compra = ; - //nfe.cana = ; - if (this.configuracoes.responsavelTecnico) - nfe.infRespTec = this.getResponsavelTecnico(this.configuracoes.responsavelTecnico, dadosChave.chave); - return nfe; - } - gerarNFCe(documento, dadosChave) { - let nfce = { - $: { versao: '4.00', Id: 'NFe' + dadosChave.chave } + break; + case "03": + result = { + PISQtde: { + CST: pis.CST, + vBCProd: pis.vBCProd, + vAliqProd: pis.vAliqProd, + vPIS: pis.vPIS, + }, }; - nfce.ide = this.getIde(documento.docFiscal, dadosChave); - nfce.emit = this.getEmit(this.configuracoes.empresa); - if (documento.destinatario) - nfce.dest = this.getDest(documento.destinatario, documento.docFiscal.ambiente); - nfce.det = this.getDet(documento.produtos, documento.docFiscal.ambiente, documento.docFiscal.modelo); - nfce.total = this.getTotal(documento.total); - nfce.transp = this.getTransp(documento.transporte); - nfce.pag = this.getPag(documento.pagamento); - nfce.infAdic = this.getInfoAdic(documento.infoAdicional); - if (this.configuracoes.responsavelTecnico) - nfce.infRespTec = this.getResponsavelTecnico(this.configuracoes.responsavelTecnico, dadosChave.chave); - return nfce; - } - getIde(documento, dadosChave) { - let ide = { - cUF: Utils.getEnumByValue(schema.TCodUfIBGE, documento.codUF), - cNF: dadosChave.cnf, - natOp: documento.naturezaOperacao, - mod: Utils.getEnumByValue(schema.TMod, documento.modelo), - serie: documento.serie, - nNF: documento.numeroNota, - dhEmi: documento.dhEmissao, - tpNF: Utils.getEnumByValue(schema.TNFeInfNFeIdeTpNF, documento.tipoDocumentoFiscal), - idDest: Utils.getEnumByValue(schema.TNFeInfNFeIdeIdDest, documento.identificadorDestinoOperacao), - cMunFG: documento.codIbgeFatoGerador, - tpImp: Utils.getEnumByValue(schema.TNFeInfNFeIdeTpImp, documento.tipoImpressao), - tpEmis: Utils.getEnumByValue(schema.TNFeInfNFeIdeTpEmis, documento.tipoEmissao), - cDV: dadosChave.dv, - tpAmb: Utils.getEnumByValue(schema.TAmb, documento.ambiente), - finNFe: Utils.getEnumByValue(schema.TFinNFe, documento.finalidadeEmissao), - indFinal: Utils.getEnumByValue(schema.TNFeInfNFeIdeIndFinal, documento.indConsumidorFinal), - indPres: Utils.getEnumByValue(schema.TNFeInfNFeIdeIndPres, documento.indPresenca), - indIntermed : documento.indIntermed ? Utils.getEnumByValue(schema.TNFeInfNFeIdeIndIntermed, documento.indIntermed) : null, // NT 2020.006 - procEmi: Utils.getEnumByValue(schema.TProcEmi, documento.processoEmissao), - verProc: documento.versaoAplicativoEmissao, - dhSaiEnt: documento.dhSaiEnt, - dhCont: documento.dhContingencia, - xJust: documento.justificativaContingencia, + break; + case "04": + case "05": + case "06": + case "07": + case "08": + case "09": + result = { + PISNT: { + CST: pis.CST, + }, }; - if (!documento.indIntermed) { - delete ide.indIntermed; // NT 2020.006 - } - return ide; - } - getEmit(empresa) { - return { - CNPJ: empresa.cnpj, - xNome: empresa.razaoSocial, - xFant: empresa.nomeFantasia, - enderEmit: this.getEnderEmit(empresa.endereco), - IE: empresa.inscricaoEstadual, - IM: empresa.inscricaoMunicipal, - CRT: empresa.codRegimeTributario, - iEST: empresa.inscricaoEstadualST, - CNAE: empresa.CNAE + break; + case "49": + case "50": + case "51": + case "52": + case "53": + case "54": + case "55": + case "56": + case "60": + case "61": + case "62": + case "63": + case "64": + case "65": + case "66": + case "67": + case "70": + case "71": + case "72": + case "73": + case "74": + case "75": + case "98": + case "99": + if (pis.vBC + pis.pPIS > 0 && pis.qBCProd + pis.vAliqProd > 0) + throw "As TAG e não podem ser informadas em conjunto com as TAG e "; + if (pis.qBCProd + pis.vAliqProd <= 0) return undefined; + result = { + PISOutr: { + CST: pis.CST, + qBCProd: pis.qBCProd, + vAliqProd: pis.vAliqProd, + vPIS: pis.vPIS, + }, }; - } - getEnderEmit(endereco) { - return { - xLgr: endereco.logradouro, - nro: endereco.numero, - xCpl: endereco.complemento, - xBairro: endereco.bairro, - cMun: endereco.codMunicipio, - xMun: endereco.municipio, - UF: Utils.getEnumByValue(schema.TUfEmi, endereco.uf), - CEP: endereco.cep, - cPais: schema.TEnderEmiCPais.Item1058, - xPais: schema.TEnderEmiXPais.BRASIL, - fone: endereco.telefone, + break; + default: + result = { + PISOutr: { + CST: pis.CST, + vBC: pis.vBC, + pPIS: pis.pPIS, + vPIS: pis.vPIS, + }, }; + break; } - getEnderDest(endereco) { - return { - xLgr: endereco.logradouro, - nro: endereco.numero, - xCpl: endereco.complemento, - xBairro: endereco.bairro, - cMun: endereco.codMunicipio, - xMun: endereco.municipio, - UF: Utils.getEnumByValue(schema.TUf, endereco.uf), - CEP: endereco.cep, - cPais: endereco.codPais, - xPais: endereco.pais, - fone: endereco.telefone, + return result; + } + getImpostoCOFINS(cofins, modelo) { + let result; + if ( + modelo != "55" && + cofins.vBC == 0 && + (cofins.pCOFINS = 0) && + (cofins.vCOFINS = 0) && + (cofins.qBCProd = 0) && + (cofins.vAliqProd = 0) && + !["04", "05", "06", "07", "08", "09", "49", "99"].includes(cofins.CST) + ) + return undefined; + //No caso da NFC-e, o grupo de tributação do PIS e o grupo de tributação da COFINS são opcionais. + if (!cofins && modelo == "55") throw "NF-e sem grupo do COFINS"; + switch (cofins.CST) { + case "01": + case "02": + result = { + COFINSAliq: { + CST: cofins.CST, + vBC: cofins.vBC, + pCOFINS: cofins.pCOFINS, + vCOFINS: cofins.vCOFINS, + }, }; - } - getDest(destinatario, ambiente) { - let dest = {}; - if (destinatario.isEstrangeiro) - dest.idEstrangeiro = destinatario.documento; - if (destinatario.documento.length == 14) - dest.CNPJ = destinatario.documento; - else - dest.CPF = destinatario.documento; - dest.xNome = ambiente == '2' ? 'NF-E EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL' : destinatario.nome; - if (destinatario.endereco) - dest.enderDest = this.getEnderDest(destinatario.endereco); - dest.indIEDest = Utils.getEnumByValue(schema.TNFeInfNFeDestIndIEDest, destinatario.indicadorIEDestinario); - dest.IE = destinatario.inscricaoEstadual; - dest.ISUF = destinatario.inscricaoSuframa; - dest.IM = destinatario.inscricaoMunicipal; - dest.email = destinatario.email; - return dest; - } - getDet(produtos, ambiente, modelo) { - let det_list = []; - for (let i = 0; i < produtos.length; i++) { - det_list.push({ - $: { nItem: produtos[i].numeroItem }, - prod: this.getDetProd(produtos[i].prod, ambiente, i == 0), - imposto: this.getDetImposto(produtos[i].imposto, modelo, produtos[i].prod.CFOP), - infAdProd: produtos[i].infoAdicional, - impostoDevol: (produtos[i].prod.percentualDevolucao && (produtos[i].prod.percentualDevolucao > 0)) ? this.getImpostoDevolucao({ pDevol: produtos[i].prod.percentualDevolucao, vIPIDevol: produtos[i].prod.valorIPIDevolucao }) : undefined - }); - } - return det_list; - } - getDetProd(produto, ambiente, isPrimeiroProduto) { - return { - cProd: produto.codigo, - cEAN: produto.cEAN, - xProd: (ambiente == '2' && isPrimeiroProduto) ? 'NOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL' : produto.descricao, - NCM: produto.NCM, - //nVE: string[]; - CEST: produto.cest, - //indEscala: TNFeInfNFeDetProdIndEscala; - cNPJFab: produto.cNPJFab, - cBenef: produto.cBenef, - eXTIPI: produto.eXTIPI, - CFOP: produto.CFOP, - uCom: produto.unidadeComercial, - qCom: produto.quantidadeComercial, - vUnCom: produto.valorUnitarioComercial, - vProd: produto.valorTotal, - cEANTrib: produto.cEANTrib, - uTrib: produto.unidadeTributavel, - qTrib: produto.quantidadeTributavel, - vUnTrib: produto.valorUnitarioTributavel, - vFrete: produto.valorFrete, - vSeg: produto.valorSeguro, - vDesc: produto.valorDesconto, - vOutro: produto.valorOutro, - indTot: produto.indicadorTotal, - //di: TNFeInfNFeDetProdDI[]; - //detExport: TNFeInfNFeDetProdDetExport[]; - xPed: produto.numeroPedido, - nItemPed: produto.numeroItemPedido, + break; + case "03": + result = { + COFINSQtde: { + CST: cofins.CST, + qBCProd: cofins.qBCProd, + vAliqProd: cofins.vAliqProd, + vCOFINS: cofins.vCOFINS, + }, }; - } - getDetImposto(imposto, modelo, cfop) { - let detImposto = { - vTotTrib: imposto.valorAproximadoTributos, - ICMS: imposto.icms ? [this.getImpostoIcms(imposto.icms)] : [], - PIS: imposto.pis ? [this.getImpostoPIS(imposto.pis, modelo)] : [], - COFINS: imposto.cofins ? [this.getImpostoCOFINS(imposto.cofins, modelo)] : [], - PISST: imposto.pisst ? [this.getImpostoPISST(imposto.pisst)] : [], - COFINSST: imposto.cofinsst ? [this.getImpostoCOFINSST(imposto.cofinsst)] : [], - IPI: imposto.ipi ? [this.getImpostoIPI(imposto.ipi, modelo)] : [], - II: imposto.ii ? [this.getImpostoII(imposto.ii, cfop)] : [], - ICMSUFDest: imposto.icmsUfDest ? [this.getIcmsUfDest(imposto.icmsUfDest)] : [], - ISSQN: '', + break; + case "04": + case "05": + case "06": + case "07": + case "08": + case "09": + result = { + COFINSNT: { + CST: cofins.CST, + }, }; - return detImposto; - } - getImpostoIcms(icms) { - let result; - if (icms.CST && icms.CST !== '') { - switch (icms.CST) { - case '00': - result = { - ICMS00: { - orig: icms.orig, - CST: icms.CST, - modBC: Utils.getEnumByValue(schema.TNFeInfNFeDetImpostoICMSICMS00ModBC, icms.modBC), - vBC: icms.vBC, - pICMS: icms.pICMS, - vICMS: icms.vICMS, - pFCP: icms.pFCP, - vFCP: icms.vFCP - } - }; - break; - case '10': - // partilha icms - if (icms.UFST && icms.UFST !== '' && icms.pBCOp && icms.pBCOp !== '') { - result = { - ICMS10: { - orig: icms.orig, - CST: icms.CST, - modBC: Utils.getEnumByValue(schema.TNFeInfNFeDetImpostoICMSICMSPartModBC, icms.modBC), - vBC: icms.vBC, - pRedBC: icms.pRedBC, - pICMS: icms.pICMS, - vICMS: icms.vICMS, - modBCST: Utils.getEnumByValue(schema.TNFeInfNFeDetImpostoICMSICMSPartModBCST, icms.modBCST), - pMVAST: icms.pMVAST, - pRedBCST: icms.pRedBCST, - vBCST: icms.vBCST, - pICMSST: icms.pICMSST, - vICMSST: icms.vICMSST, - pBCOp: icms.pBCOp, - UFST: Utils.getEnumByValue(schema.TUf, icms.UFST), - } - }; - } - else { - result = { - ICMS10: { - orig: icms.orig, - CST: icms.CST, - modBC: Utils.getEnumByValue(schema.TNFeInfNFeDetImpostoICMSICMS10ModBC, icms.modBC), - pICMS: icms.pICMS, - vBC: icms.vBC, - vICMS: icms.vICMS, - pFCP: icms.pFCP, - vFCP: icms.vFCP, - modBCST: Utils.getEnumByValue(schema.TNFeInfNFeDetImpostoICMSICMS10ModBCST, icms.modBCST), - pFCPST: icms.pFCPST, - pICMSST: icms.pICMSST, - pMVAST: icms.pMVAST, - pRedBCST: icms.pRedBCST, - vBCFCP: icms.vBCFCP, - vBCFCPST: icms.vBCFCPST, - vBCST: icms.vBCST, - vFCPST: icms.vFCPST, - vICMSST: icms.vICMSST, - } - }; - } - break; - case '20': - result = { - ICMS20: { - orig: icms.orig, - CST: icms.CST, - modBC: Utils.getEnumByValue(schema.TNFeInfNFeDetImpostoICMSICMS20ModBC, icms.modBC), - pRedBC: icms.pRedBC, - vBC: icms.vBC, - pICMS: icms.pICMS, - vICMS: icms.vICMS, - vBCFCP: icms.vBCFCP, - pFCP: icms.pFCP, - vFCP: icms.vFCP, - vICMSDeson: icms.vICMSDeson, - motDesICMS: Utils.getEnumByValue(schema.TNFeInfNFeDetImpostoICMSICMS20MotDesICMS, icms.motDesICMS) - } - }; - break; - case '30': - result = { - ICMS30: { - orig: icms.orig, - CST: icms.CST, - modBCST: Utils.getEnumByValue(schema.TNFeInfNFeDetImpostoICMSICMS30ModBCST, icms.modBCST), - pMVAST: icms.pMVAST, - pRedBCST: icms.pRedBCST, - vBCST: icms.vBCST, - pICMSST: icms.pICMSST, - vICMSST: icms.vICMSST, - motDesICMS: Utils.getEnumByValue(schema.TNFeInfNFeDetImpostoICMSICMS30MotDesICMS, icms.motDesICMS), - vICMSDeson: icms.vICMSDeson, - vBCFCPST: icms.vBCFCPST, - pFCPST: icms.pFCPST, - vFCPST: icms.vFCPST - } - }; - break; - case '40': - case '50': - result = { - ICMS40: { - orig: icms.orig, - CST: icms.CST, - motDesICMS: Utils.getEnumByValue(schema.TNFeInfNFeDetImpostoICMSICMS40MotDesICMS, icms.motDesICMS), - vICMSDeson: icms.vICMSDeson - } - }; - break; - case '41': - if (icms.vBCSTRet && icms.vBCSTRet !== '') { - result = { - ICMS41: { - orig: icms.orig, - CST: icms.CST, - vBCSTRet: icms.vBCSTRet, - vICMSSTRet: icms.vICMSSTRet, - vBCSTDest: icms.vBCSTDest, - vICMSSTDest: icms.vICMSSTDest, - //pFCPSTRet: '', - //pST: '', - //vBCFCPSTRet: '', - //vFCPSTRet: '', - pRedBCEfet: icms.pRedBCEfet, - vBCEfet: icms.vBCEfet, - pICMSEfet: icms.pICMSEfet, - vICMSEfet: icms.vICMSEfet, - } - }; - } - else { - result = { - ICMS40: { - orig: icms.orig, - CST: icms.CST, - motDesICMS: Utils.getEnumByValue(schema.TNFeInfNFeDetImpostoICMSICMS40MotDesICMS, icms.motDesICMS), - vICMSDeson: icms.vICMSDeson - } - }; - } - break; - case '51': - result = { - ICMS51: { - orig: icms.orig, - CST: icms.CST, - modBC: Utils.getEnumByValue(schema.TNFeInfNFeDetImpostoICMSICMS51ModBC, icms.modBC), - vBC: icms.vBC, - pRedBC: icms.pRedBC, - pICMS: icms.pICMS, - vICMS: icms.vICMS, - pDif: icms.pDif, - vICMSDif: icms.vICMSDif, - vICMSOp: icms.vICMSOp, - vBCFCP: icms.vBCFCP, - pFCP: icms.pFCP, - vFCP: icms.vFCP - } - }; - break; - case '60': - result = { - ICMS60: { - orig: icms.orig, - CST: icms.CST, - vBCSTRet: icms.vBCSTRet, - vICMSSTRet: icms.vICMSSTRet, - pST: icms.pST, - vBCFCPSTRet: icms.vBCFCPSTRet, - pFCPSTRet: icms.pFCPSTRet, - vFCPSTRet: icms.vFCPSTRet, - pRedBCEfet: icms.pRedBCEfet, - vBCEfet: icms.vBCEfet, - pICMSEfet: icms.pICMSEfet, - vICMSEfet: icms.vICMSEfet, - } - }; - break; - case '70': - result = { - ICMS70: { - orig: icms.orig, - CST: icms.CST, - modBC: icms.modBC, - vBC: icms.vBC, - pRedBC: icms.pRedBC, - pICMS: icms.pICMS, - vICMS: icms.vICMS, - modBCST: icms.modBCST, - pMVAST: icms.pMVAST, - pRedBCST: icms.pRedBCST, - vBCST: icms.vBCST, - pICMSST: icms.pICMSST, - vICMSST: icms.vICMSST, - motDesICMS: icms.motDesICMS, - vICMSDeson: icms.vICMSDeson, - vBCFCP: icms.vBCFCP, - pFCP: icms.pFCP, - vFCP: icms.vFCP, - vBCFCPST: icms.vBCFCPST, - pFCPST: icms.pFCPST, - vFCPST: icms.vFCPST, - } - }; - break; - case '90': - // partilha icms - if (icms.UFST && icms.UFST !== '' && icms.pBCOp && icms.pBCOp !== '') { - result = { - ICMS90: { - orig: icms.orig, - CST: icms.CST, - modBC: Utils.getEnumByValue(schema.TNFeInfNFeDetImpostoICMSICMSPartModBC, icms.modBC), - vBC: icms.vBC, - pRedBC: icms.pRedBC, - pICMS: icms.pICMS, - vICMS: icms.vICMS, - modBCST: Utils.getEnumByValue(schema.TNFeInfNFeDetImpostoICMSICMSPartModBCST, icms.modBCST), - pMVAST: icms.pMVAST, - pRedBCST: icms.pRedBCST, - vBCST: icms.vBCST, - pICMSST: icms.pICMSST, - vICMSST: icms.vICMSST, - pBCOp: icms.pBCOp, - UFST: Utils.getEnumByValue(schema.TUf, icms.UFST) - } - }; - } - else { - result = { - ICMS90: { - orig: icms.orig, - CST: icms.CST, - modBC: Utils.getEnumByValue(schema.TNFeInfNFeDetImpostoICMSICMS90ModBC, icms.modBC), - vBC: icms.vBC, - pRedBC: icms.pRedBC, - pICMS: icms.pICMS, - vICMS: icms.vICMS, - modBCST: icms.modBCST, - pMVAST: icms.pMVAST, - pRedBCST: icms.pRedBCST, - vBCST: icms.vBCST, - pICMSST: icms.pICMSST, - vICMSST: icms.vICMSST, - motDesICMS: Utils.getEnumByValue(schema.TNFeInfNFeDetImpostoICMSICMS90MotDesICMS, icms.motDesICMS), - vICMSDeson: icms.vICMSDeson, - vBCFCP: icms.vBCFCP, - pFCP: icms.pFCP, - vFCP: icms.vFCP, - vBCFCPST: icms.vBCFCPST, - vFCPST: icms.vFCPST, - } - }; - } - break; - default: - //throw exception? - break; - } - } - else { - // Simples Nacional - switch (icms.CSOSN) { - case '101': - result = { - ICMSSN101: { - orig: icms.orig, - CSOSN: icms.CSOSN, - pCredSN: icms.pCredSN, - vCredICMSSN: icms.vCredICMSSN - } - }; - break; - case '102': - case '103': - case '300': - case '400': - result = { - ICMSSN102: { - orig: icms.orig, - CSOSN: icms.CSOSN - } - }; - break; - case '201': - result = { - ICMSSN201: { - orig: icms.orig, - CSOSN: icms.CSOSN, - modBCST: icms.modBCST, - pMVAST: icms.pMVAST, - pRedBCST: icms.pRedBCST, - vBCST: icms.vBCST, - pICMSST: icms.pICMSST, - vICMSST: icms.vICMSST, - pCredSN: icms.pCredSN, - vCredICMSSN: icms.vCredICMSSN, - vBCFCPST: icms.vBCFCPST, - pFCPST: icms.pFCPST, - vFCPST: icms.vFCPST - } - }; - break; - case '202': - case '203': - result = { - ICMSSN202: { - orig: icms.orig, - CSOSN: icms.CSOSN, - modBCST: icms.modBCST, - pMVAST: icms.pMVAST, - pRedBCST: icms.pRedBCST, - vBCST: icms.vBCST, - pICMSST: icms.pICMSST, - vICMSST: icms.vICMSST, - vBCFCPST: icms.vBCFCPST, - pFCPST: icms.pFCPST, - vFCPST: icms.vFCPST - } - }; - break; - case '500': - result = { - ICMSSN500: { - orig: icms.orig, - CSOSN: icms.CSOSN, - vBCSTRet: icms.vBCSTRet, - vICMSSTRet: icms.vICMSSTRet, - vBCFCPSTRet: icms.vBCFCPSTRet, - pFCPSTRet: icms.pFCPSTRet, - vFCPSTRet: icms.vFCPSTRet, - pRedBCEfet: icms.pRedBCEfet, - vBCEfet: icms.vBCEfet, - pICMSEfet: icms.pICMSEfet, - vICMSEfet: icms.vICMSEfet, - } - }; - break; - case '900': - result = { - ICMSSN900: { - orig: icms.orig, - CSOSN: icms.CSOSN, - modBC: icms.modBC, - vBC: icms.vBC, - pRedBC: icms.pRedBC, - pICMS: icms.pICMS, - vICMS: icms.vICMS, - modBCST: icms.modBCST, - pMVAST: icms.pMVAST, - pRedBCST: icms.pRedBCST, - vBCST: icms.vBCST, - pICMSST: icms.pICMSST, - vICMSST: icms.vICMSST, - pCredSN: icms.pCredSN, - vCredICMSSN: icms.vCredICMSSN, - vBCFCPST: icms.vBCFCPST, - pFCPST: icms.pFCPST, - vFCPST: icms.vFCPST - } - }; - break; - } - } - return result; - } - getImpostoISSQN() { - return { - vBC: '', - vAliq: '', - vISSQN: '', - cMunFG: '', - cListServ: schema.TCListServ.Item0101, - vDeducao: '', - vOutro: '', - vDescIncond: '', - vDescCond: '', - vISSRet: '', - indISS: schema.TNFeInfNFeDetImpostoISSQNIndISS.Item1, - cServico: '', - cMun: '', - cPais: '', - nProcesso: '', - indIncentivo: schema.TNFeInfNFeDetImpostoISSQNIndIncentivo.Item1 + break; + case "49": + case "50": + case "51": + case "52": + case "53": + case "54": + case "55": + case "56": + case "60": + case "61": + case "62": + case "63": + case "64": + case "65": + case "66": + case "67": + case "70": + case "71": + case "72": + case "73": + case "74": + case "75": + case "98": + case "99": + if ( + cofins.vBC + cofins.pCOFINS > 0 && + cofins.qBCProd + cofins.vAliqProd > 0 + ) + throw "As TAG e não podem ser informadas em conjunto com as TAG e "; + if (cofins.qBCProd + cofins.vAliqProd <= 0) return undefined; + result = { + COFINSOutr: { + CST: cofins.CST, + qBCProd: cofins.qBCProd, + vAliqProd: cofins.vAliqProd, + vCOFINS: cofins.vCOFINS, + }, }; - } - getImpostoIPI(ipi, modelo) { - let result; - if (modelo != '55' || !ipi) - return; //não deve gerar grupo IPI para NFCe - // if (!GerarTagIPIparaNaoTributado) && (!['00', '49', '50', '99'].includes(ipi.CST)) return; - //se valores padrão de quando não foi preenchido a TAG IPI - if ((ipi.cEnq = '') && (ipi.CST = '00') && (ipi.vBC = 0) && (ipi.qUnid = 0) && (ipi.vUnid = 0) && (ipi.pIPI = 0) && (ipi.vIPI = 0)) - return; - if ((ipi.vBC + ipi.pIPI > 0) && (ipi.qUnid + ipi.vUnid > 0)) - throw 'As TAG e não podem ser informadas em conjunto com as TAG e '; + break; + default: result = { - IPI: { - CNPJProd: ipi.CNPJProd, - cSelo: ipi.cSelo, - qSelo: ipi.qSelo, - cEnq: ipi.cEnq || '999', - } + COFINSOutr: { + CST: cofins.CST, + vBC: cofins.vBC, + pCOFINS: cofins.pCOFINS, + vCOFINS: cofins.vCOFINS, + }, }; - if (ipi.qUnid + ipi.vUnid > 0) { - result.IPI.IPITrib = { - CST: ipi.CST, - qUnid: ipi.qUnid, - vUnid: ipi.vUnid, - vIPI: ipi.vIPI, - }; - } - else { - result.IPI.IPITrib = { - CST: ipi.CST, - vBC: ipi.vBC, - pIPI: ipi.pIPI, - vIPI: ipi.vIPI, - }; - } - // result.IPI.IPINT = { CST: ipi.CST } - return result; - } - getImpostoII(ii, cfop) { - if (!ii) - return; - if ((ii.vBC > 0) || (ii.vDespAdu > 0) || (ii.vII > 0) || (ii.vIOF > 0) || (cfop[0] === '3')) { - return { - vBC: ii.vBC, - vDespAdu: ii.vDespAdu, - vII: ii.vII, - vIOF: ii.vIOF - }; - } - return; - } - getImpostoPIS(pis, modelo) { - let result; - if ((modelo != '55') && - ((pis.vBC == 0) && (pis.pPIS = 0) && (pis.vPIS = 0) && - (pis.qBCProd = 0) && (pis.vAliqProd = 0) && - (!['04', '05', '06', '07', '08', '09', '49', '99'].includes(pis.CST)))) - return undefined; - if (!pis && modelo == '55') - throw 'NF-e sem grupo do PIS'; - switch (pis.CST) { - case '01': - case '02': - result = { - PISAliq: { - CST: pis.CST, - vBC: pis.vBC, - pPIS: pis.pPIS, - vPIS: pis.vPIS, - } - }; - break; - case '03': - result = { - PISQtde: { - CST: pis.CST, - vBCProd: pis.vBCProd, - vAliqProd: pis.vAliqProd, - vPIS: pis.vPIS, - } - }; - break; - case '04': - case '05': - case '06': - case '07': - case '08': - case '09': - result = { - PISNT: { - CST: pis.CST - } - }; - break; - case '49': - case '50': - case '51': - case '52': - case '53': - case '54': - case '55': - case '56': - case '60': - case '61': - case '62': - case '63': - case '64': - case '65': - case '66': - case '67': - case '70': - case '71': - case '72': - case '73': - case '74': - case '75': - case '98': - case '99': - if ((pis.vBC + pis.pPIS > 0) && (pis.qBCProd + pis.vAliqProd > 0)) - throw 'As TAG e não podem ser informadas em conjunto com as TAG e '; - if (pis.qBCProd + pis.vAliqProd <= 0) - return undefined; - result = { - PISOutr: { - CST: pis.CST, - qBCProd: pis.qBCProd, - vAliqProd: pis.vAliqProd, - vPIS: pis.vPIS - } - }; - break; - default: - result = { - PISOutr: { - CST: pis.CST, - vBC: pis.vBC, - pPIS: pis.pPIS, - vPIS: pis.vPIS - } - }; - break; - } - return result; - } - getImpostoCOFINS(cofins, modelo) { - let result; - if ((modelo != '55') && - ((cofins.vBC == 0) && (cofins.pCOFINS = 0) && (cofins.vCOFINS = 0) && - (cofins.qBCProd = 0) && (cofins.vAliqProd = 0) && - (!['04', '05', '06', '07', '08', '09', '49', '99'].includes(cofins.CST)))) - return undefined; - //No caso da NFC-e, o grupo de tributação do PIS e o grupo de tributação da COFINS são opcionais. - if (!cofins && modelo == '55') - throw 'NF-e sem grupo do COFINS'; - switch (cofins.CST) { - case '01': - case '02': - result = { - COFINSAliq: { - CST: cofins.CST, - vBC: cofins.vBC, - pCOFINS: cofins.pCOFINS, - vCOFINS: cofins.vCOFINS, - } - }; - break; - case '03': - result = { - COFINSQtde: { - CST: cofins.CST, - qBCProd: cofins.qBCProd, - vAliqProd: cofins.vAliqProd, - vCOFINS: cofins.vCOFINS - } - }; - break; - case '04': - case '05': - case '06': - case '07': - case '08': - case '09': - result = { - COFINSNT: { - CST: cofins.CST - } - }; - break; - case '49': - case '50': - case '51': - case '52': - case '53': - case '54': - case '55': - case '56': - case '60': - case '61': - case '62': - case '63': - case '64': - case '65': - case '66': - case '67': - case '70': - case '71': - case '72': - case '73': - case '74': - case '75': - case '98': - case '99': - if ((cofins.vBC + cofins.pCOFINS > 0) && (cofins.qBCProd + cofins.vAliqProd > 0)) - throw 'As TAG e não podem ser informadas em conjunto com as TAG e '; - if (cofins.qBCProd + cofins.vAliqProd <= 0) - return undefined; - result = { - COFINSOutr: { - CST: cofins.CST, - qBCProd: cofins.qBCProd, - vAliqProd: cofins.vAliqProd, - vCOFINS: cofins.vCOFINS - } - }; - break; - default: - result = { - COFINSOutr: { - CST: cofins.CST, - vBC: cofins.vBC, - pCOFINS: cofins.pCOFINS, - vCOFINS: cofins.vCOFINS - } - }; - break; - } - return result; - } - getImpostoPISST(PISST) { - let result; - if (!PISST) - return; - if ((PISST.vBC > 0) || (PISST.pPIS > 0) || (PISST.qBCProd > 0) || (PISST.vAliqProd > 0) || (PISST.vPIS > 0)) { - if ((PISST.vBC + PISST.pPIS > 0) && (PISST.qBCProd + PISST.vAliqProd > 0)) - throw 'As TAG e não podem ser informadas em conjunto com as TAG e '; - if (PISST.vBC + PISST.pPIS > 0) { - result = { - PISST: { - vBC: PISST.vBC, - pPIS: PISST.pPIS, - vPIS: PISST.vPIS, - } - }; - } - if (PISST.qBCProd + PISST.vAliqProd > 0) { - result = { - PISST: { - qBCProd: PISST.qBCProd, - vAliqProd: PISST.vAliqProd, - vPIS: PISST.vPIS, - } - }; - } - } - return result; - } - getImpostoCOFINSST(COFINSST) { - let result; - if (!COFINSST) - return; - if ((COFINSST.vBC > 0) && (COFINSST.pCOFINS > 0) && (COFINSST.qBCProd > 0) && (COFINSST.vAliqProd > 0) && (COFINSST.vCOFINS > 0)) { - if ((COFINSST.vBC + COFINSST.pCOFINS > 0) && (COFINSST.qBCProd + COFINSST.vAliqProd > 0)) - throw 'As TAG e não podem ser informadas em conjunto com as TAG e '; - if (COFINSST.vBC + COFINSST.pCOFINS > 0) { - result = { - COFINSST: { - vBC: COFINSST.vBC, - pCOFINS: COFINSST.pCOFINS, - vCOFINS: COFINSST.vCOFINS, - } - }; - } - if (COFINSST.qBCProd + COFINSST.vAliqProd > 0) { - result = { - COFINSST: { - qBCProd: COFINSST.qBCProd, - vAliqProd: COFINSST.vAliqProd, - vCOFINS: COFINSST.vCOFINS, - } - }; - } - } - return result; + break; } - getImpostoDevolucao(devol) { - return { - impostoDevol: { - pDevol: devol.pDevol, - IPI: { - vIPIDevol: devol.vIPIDevol - } - } + return result; + } + getImpostoPISST(PISST) { + let result; + if (!PISST) return; + if ( + PISST.vBC > 0 || + PISST.pPIS > 0 || + PISST.qBCProd > 0 || + PISST.vAliqProd > 0 || + PISST.vPIS > 0 + ) { + if (PISST.vBC + PISST.pPIS > 0 && PISST.qBCProd + PISST.vAliqProd > 0) + throw "As TAG e não podem ser informadas em conjunto com as TAG e "; + if (PISST.vBC + PISST.pPIS > 0) { + result = { + PISST: { + vBC: PISST.vBC, + pPIS: PISST.pPIS, + vPIS: PISST.vPIS, + }, }; - } - getIcmsUfDest(icmsUfDest) { - if (!icmsUfDest) - return; - if (icmsUfDest.pICMSInterPart <= 0) - return; - return { - ICMSUFDest: { - vBCUFDest: icmsUfDest.vBCUFDest, - vBCFCPUFDest: icmsUfDest.vBCFCPUFDest, - pFCPUFDest: icmsUfDest.pFCPUFDest, - pICMSUFDest: icmsUfDest.pICMSUFDest, - pICMSInter: icmsUfDest.pICMSInter, - pICMSInterPart: icmsUfDest.pICMSInterPart, - vFCPUFDest: icmsUfDest.vFCPUFDest, - vICMSUFDest: icmsUfDest.vICMSUFDest, - vICMSUFRemet: icmsUfDest.vICMSUFRemet, - } + } + if (PISST.qBCProd + PISST.vAliqProd > 0) { + result = { + PISST: { + qBCProd: PISST.qBCProd, + vAliqProd: PISST.vAliqProd, + vPIS: PISST.vPIS, + }, }; + } } - getTotal(total) { - return { - ICMSTot: total.icmsTot + return result; + } + getImpostoCOFINSST(COFINSST) { + let result; + if (!COFINSST) return; + if ( + COFINSST.vBC > 0 && + COFINSST.pCOFINS > 0 && + COFINSST.qBCProd > 0 && + COFINSST.vAliqProd > 0 && + COFINSST.vCOFINS > 0 + ) { + if ( + COFINSST.vBC + COFINSST.pCOFINS > 0 && + COFINSST.qBCProd + COFINSST.vAliqProd > 0 + ) + throw "As TAG e não podem ser informadas em conjunto com as TAG e "; + if (COFINSST.vBC + COFINSST.pCOFINS > 0) { + result = { + COFINSST: { + vBC: COFINSST.vBC, + pCOFINS: COFINSST.pCOFINS, + vCOFINS: COFINSST.vCOFINS, + }, }; + } + if (COFINSST.qBCProd + COFINSST.vAliqProd > 0) { + result = { + COFINSST: { + qBCProd: COFINSST.qBCProd, + vAliqProd: COFINSST.vAliqProd, + vCOFINS: COFINSST.vCOFINS, + }, + }; + } } - getIcmsTot(icmsTot) { - return icmsTot; - } - getTransp(transp) { - var res = { - modFrete: transp.modalidateFrete, - vol: transp.vol - /** + return result; + } + getImpostoDevolucao(devol) { + return { + impostoDevol: { + pDevol: devol.pDevol, + IPI: { + vIPIDevol: devol.vIPIDevol, + }, + }, + }; + } + getIcmsUfDest(icmsUfDest) { + if (!icmsUfDest) return; + if (icmsUfDest.pICMSInterPart <= 0) return; + return { + ICMSUFDest: { + vBCUFDest: icmsUfDest.vBCUFDest, + vBCFCPUFDest: icmsUfDest.vBCFCPUFDest, + pFCPUFDest: icmsUfDest.pFCPUFDest, + pICMSUFDest: icmsUfDest.pICMSUFDest, + pICMSInter: icmsUfDest.pICMSInter, + pICMSInterPart: icmsUfDest.pICMSInterPart, + vFCPUFDest: icmsUfDest.vFCPUFDest, + vICMSUFDest: icmsUfDest.vICMSUFDest, + vICMSUFRemet: icmsUfDest.vICMSUFRemet, + }, + }; + } + getTotal(total) { + return { + ICMSTot: total.icmsTot, + }; + } + getIcmsTot(icmsTot) { + return icmsTot; + } + getTransp(transp) { + var res = { + modFrete: transp.modalidateFrete, + transporta: transp.transporta, + vol: transp.vol, + /** * transporta: TNFeInfNFeTranspTransporta; retTransp: TNFeInfNFeTranspRetTransp; //balsa @@ -1183,87 +1422,103 @@ class EnviaProcessor { itemsElementName: ItemsChoiceType5[]; vol: TNFeInfNFeTranspVol[]; */ - }; - return res; - } - getCobr(cobranca) { - if ((cobranca && cobranca.fatura) && - (cobranca.fatura.nFatura || (cobranca.fatura.vOriginal > 0) || - cobranca.duplicatas.length > 0)) { - const cobr = { fat: {} }; - cobr.fat.nFat = cobranca.fatura.nFatura; - cobr.fat.vOrig = cobranca.fatura.vOriginal.toFixed(2); - cobr.fat.vDesc = (cobranca.fatura.vDesconto ? cobranca.fatura.vDesconto : 0).toFixed(2); - cobr.fat.vLiq = cobranca.fatura.vLiquido.toFixed(2); - cobr.dup = this.getDetalheCobranca(cobranca.duplicatas); - return cobr; - } - else - return; + }; + return res; + } + getCobr(cobranca) { + if ( + cobranca && + cobranca.fatura && + (cobranca.fatura.nFatura || + cobranca.fatura.vOriginal > 0 || + cobranca.duplicatas.length > 0) + ) { + const cobr = { fat: {} }; + cobr.fat.nFat = cobranca.fatura.nFatura; + cobr.fat.vOrig = cobranca.fatura.vOriginal.toFixed(2); + cobr.fat.vDesc = ( + cobranca.fatura.vDesconto ? cobranca.fatura.vDesconto : 0 + ).toFixed(2); + cobr.fat.vLiq = cobranca.fatura.vLiquido.toFixed(2); + cobr.dup = this.getDetalheCobranca(cobranca.duplicatas); + return cobr; + } else return; + } + getDetalheCobranca(duplicatas) { + let listaDuplicata = []; + let detDup; + for (const dup of duplicatas) { + detDup = {}; + detDup.nDup = dup.nDuplicata; + detDup.dVenc = dup.dVencimento; + detDup.vDup = (dup.vDuplicatata ? dup.vDuplicatata : 0).toFixed(2); + listaDuplicata.push(detDup); } - getDetalheCobranca(duplicatas) { - let listaDuplicata = []; - let detDup; - for (const dup of duplicatas) { - detDup = {}; - detDup.nDup = dup.nDuplicata; - detDup.dVenc = dup.dVencimento; - detDup.vDup = (dup.vDuplicatata ? dup.vDuplicatata : 0).toFixed(2); - listaDuplicata.push(detDup); - } - return listaDuplicata; - } - getPag(pagamento) { - let pag = {}; - pag.detPag = this.getDetalhamentoPagamentos(pagamento.pagamentos); - pag.vTroco = pagamento.valorTroco; - return pag; + return listaDuplicata; + } + getPag(pagamento) { + let pag = {}; + pag.detPag = this.getDetalhamentoPagamentos(pagamento.pagamentos); + pag.vTroco = pagamento.valorTroco; + return pag; + } + getDetalhamentoPagamentos(pagamentos) { + let listPagamentos = []; + let detPag; + for (const pag of pagamentos) { + detPag = {}; + detPag.indPag = Utils.getEnumByValue( + schema.TNFeInfNFePagDetPagIndPag, + pag.indicadorFormaPagamento + ); + detPag.tPag = Utils.getEnumByValue( + schema.TNFeInfNFePagDetPagTPag, + pag.formaPagamento + ); + detPag.vPag = pag.valor; + if (pag.descricaoFormaPagamento) { + detPag.xPag = pag.descricaoFormaPagamento; // YA02A NT 2020.006 + } + if (pag.dadosCartao) { + detPag.card = this.getDetalhamentoCartao(pag.dadosCartao); + } + listPagamentos.push(detPag); } - getDetalhamentoPagamentos(pagamentos) { - let listPagamentos = []; - let detPag; - for (const pag of pagamentos) { - detPag = {}; - detPag.indPag = Utils.getEnumByValue(schema.TNFeInfNFePagDetPagIndPag, pag.indicadorFormaPagamento); - detPag.tPag = Utils.getEnumByValue(schema.TNFeInfNFePagDetPagTPag, pag.formaPagamento); - detPag.vPag = pag.valor; - if (pag.descricaoFormaPagamento) { - detPag.xPag = pag.descricaoFormaPagamento; // YA02A NT 2020.006 - } - if (pag.dadosCartao) { - detPag.card = this.getDetalhamentoCartao(pag.dadosCartao); - } - listPagamentos.push(detPag); - } - return listPagamentos; + return listPagamentos; + } + getDetalhamentoCartao(dadosCartao) { + return { + tpIntegra: Utils.getEnumByValue( + schema.TNFeInfNFePagDetPagCardTpIntegra, + dadosCartao.tipoIntegracao + ), + CNPJ: dadosCartao.cnpj, + tBand: Utils.getEnumByValue( + schema.TNFeInfNFePagDetPagCardTBand, + dadosCartao.bandeira + ), + cAut: dadosCartao.codAutorizacao, + }; + } + getInfoAdic(info) { + return { + infCpl: info.infoComplementar, + infAdFisco: info.infoFisco, + }; + } + getResponsavelTecnico(respTec, chave) { + const result = { + CNPJ: respTec.cnpj, + xContato: respTec.contato, + email: respTec.email, + fone: respTec.fone, + }; + if (respTec.CSRT != null && respTec.CSRT != "") { + result.idCSRT = respTec.idCSRT; + result.hashCSRT = this.gerarHashCSRT(chave, respTec.CSRT); } - getDetalhamentoCartao(dadosCartao) { - return { - tpIntegra: Utils.getEnumByValue(schema.TNFeInfNFePagDetPagCardTpIntegra, dadosCartao.tipoIntegracao), - CNPJ: dadosCartao.cnpj, - tBand: Utils.getEnumByValue(schema.TNFeInfNFePagDetPagCardTBand, dadosCartao.bandeira), - cAut: dadosCartao.codAutorizacao - }; - } - getInfoAdic(info) { - return { - infCpl: info.infoComplementar, - infAdFisco: info.infoFisco - }; - } - getResponsavelTecnico(respTec, chave) { - const result = { - CNPJ: respTec.cnpj, - xContato: respTec.contato, - email: respTec.email, - fone: respTec.fone, - }; - if (respTec.CSRT != null && respTec.CSRT != "") { - result.idCSRT = respTec.idCSRT; - result.hashCSRT = this.gerarHashCSRT(chave, respTec.CSRT); - } - return result; - /* + return result; + /* return { CNPJ: respTec.cnpj, xContato: respTec.contato, @@ -1273,9 +1528,9 @@ class EnviaProcessor { hashCSRT: this.gerarHashCSRT(chave, respTec.CSRT) } */ - } - gerarHashCSRT(chave, CSRT) { - return Buffer.from(sha1(CSRT + chave), 'hex').toString('base64'); - } + } + gerarHashCSRT(chave, CSRT) { + return Buffer.from(sha1(CSRT + chave), "hex").toString("base64"); + } } exports.EnviaProcessor = EnviaProcessor; diff --git a/lib/factory/processor/nfeProcessor.js b/lib/factory/processor/nfeProcessor.js index 41e0040..b3be263 100644 --- a/lib/factory/processor/nfeProcessor.js +++ b/lib/factory/processor/nfeProcessor.js @@ -9,1228 +9,1478 @@ const Utils = require("../utils/utils"); const signature_1 = require("../signature"); const sefazNfce_1 = require("../webservices/sefazNfce"); const sefazNfe_1 = require("../webservices/sefazNfe"); -const sha1 = require('sha1'); +const sha1 = require("sha1"); let soapAutorizacao = null; let soapRetAutorizacao = null; function log(msg, processo) { - console.log(`[node-dfe][${processo || 'log'}]->${msg}`); + console.log(`[node-dfe][${processo || "log"}]->${msg}`); } function jsonOneLevel(obj) { - const result = {}; - for (const k of Object.keys(obj)) { - let logStr = obj[k].toString() || "null"; - if (logStr.length > 500) { - logStr = logStr.substring(0, 499); - } - result[k] = logStr; + const result = {}; + for (const k of Object.keys(obj)) { + let logStr = obj[k].toString() || "null"; + if (logStr.length > 500) { + logStr = logStr.substring(0, 499); } - return JSON.stringify(result); + result[k] = logStr; + } + return JSON.stringify(result); } /** * Classe para processamento de NFe/NFCe */ class NFeProcessor { - constructor(empresa, responsavelTecnico, webProxy) { - this.empresa = empresa; - this.responsavelTecnico = responsavelTecnico; - this.webProxy = webProxy; + constructor(empresa, responsavelTecnico, webProxy) { + this.empresa = empresa; + this.responsavelTecnico = responsavelTecnico; + this.webProxy = webProxy; + } + /** + * Metodo para realizar o processamento de documento(s) do tipo 55 ou 65 de forma sincrona + * @param documento Array de documentos modelo 55 ou 1 documento modelo 65 + */ + async processarDocumento(documento) { + let result = { + success: false, + }; + try { + this.configuraUrlsSefaz( + documento.docFiscal.modelo, + documento.docFiscal.ambiente + ); + let doc = this.gerarXml(documento); + let xmlAssinado = signature_1.Signature.signXmlX509( + doc.xml, + "infNFe", + this.empresa.certificado + ); + if (documento.docFiscal.modelo == "65") { + let appendQRCode = this.appendQRCodeXML(documento, xmlAssinado); + xmlAssinado = appendQRCode.xml; + doc.nfe.infNFeSupl = appendQRCode.qrCode; + } + let xmlLote = this.gerarXmlLote(xmlAssinado, false); + if ( + documento.docFiscal.modelo == "65" && + documento.docFiscal.isContingenciaOffline + ) { + result.retornoContingenciaOffline = {}; + result.success = true; + result.retornoContingenciaOffline.xml_gerado = xmlLote; + } else { + result = await this.transmitirXml( + xmlLote, + documento.docFiscal.modelo, + documento.docFiscal.ambiente, + doc.nfe + ); + } + } catch (ex) { + result.success = false; + result.error = ex; } - /** - * Metodo para realizar o processamento de documento(s) do tipo 55 ou 65 de forma sincrona - * @param documento Array de documentos modelo 55 ou 1 documento modelo 65 - */ - async processarDocumento(documento) { - let result = { - success: false - }; - try { - this.configuraUrlsSefaz(documento.docFiscal.modelo, documento.docFiscal.ambiente); - let doc = this.gerarXml(documento); - let xmlAssinado = signature_1.Signature.signXmlX509(doc.xml, 'infNFe', this.empresa.certificado); - if (documento.docFiscal.modelo == '65') { - let appendQRCode = this.appendQRCodeXML(documento, xmlAssinado); - xmlAssinado = appendQRCode.xml; - doc.nfe.infNFeSupl = appendQRCode.qrCode; - } - let xmlLote = this.gerarXmlLote(xmlAssinado, false); - if (documento.docFiscal.modelo == '65' && documento.docFiscal.isContingenciaOffline) { - result.retornoContingenciaOffline = {}; - result.success = true; - result.retornoContingenciaOffline.xml_gerado = xmlLote; - } - else { - result = await this.transmitirXml(xmlLote, documento.docFiscal.modelo, documento.docFiscal.ambiente, doc.nfe); - } - } - catch (ex) { - result.success = false; - result.error = ex; - } - return result; + return result; + } + /** + * Metodo para realizar o processamento de documento(s) do tipo 55 ou 65 de forma assincrona + * @param documento Array de documentos modelo 55 ou 1 documento modelo 65 + */ + async processarDocumentoAsync(documento) { + let result = { + success: false, + }; + try { + this.configuraUrlsSefaz( + documento.docFiscal.modelo, + documento.docFiscal.ambiente + ); + let doc = this.gerarXml(documento); + let xmlAssinado = signature_1.Signature.signXmlX509( + doc.xml, + "infNFe", + this.empresa.certificado + ); + if (documento.docFiscal.modelo == "65") { + let appendQRCode = this.appendQRCodeXML(documento, xmlAssinado); + xmlAssinado = appendQRCode.xml; + doc.nfe.infNFeSupl = appendQRCode.qrCode; + } + let xmlLote = this.gerarXmlLote(xmlAssinado, true); + if ( + documento.docFiscal.modelo == "65" && + documento.docFiscal.isContingenciaOffline + ) { + result.retornoContingenciaOffline = {}; + result.success = true; + result.retornoContingenciaOffline.xml_gerado = xmlLote; + } else { + result = await this.transmitirXml( + xmlLote, + documento.docFiscal.modelo, + documento.docFiscal.ambiente, + doc.nfe + ); + } + } catch (ex) { + result.success = false; + result.error = ex; } - /** - * Metodo para realizar o processamento de documento(s) do tipo 55 ou 65 de forma assincrona - * @param documento Array de documentos modelo 55 ou 1 documento modelo 65 - */ - async processarDocumentoAsync(documento) { - let result = { - success: false - }; - try { - this.configuraUrlsSefaz(documento.docFiscal.modelo, documento.docFiscal.ambiente); - let doc = this.gerarXml(documento); - let xmlAssinado = signature_1.Signature.signXmlX509(doc.xml, 'infNFe', this.empresa.certificado); - if (documento.docFiscal.modelo == '65') { - let appendQRCode = this.appendQRCodeXML(documento, xmlAssinado); - xmlAssinado = appendQRCode.xml; - doc.nfe.infNFeSupl = appendQRCode.qrCode; - } - let xmlLote = this.gerarXmlLote(xmlAssinado, true); - if (documento.docFiscal.modelo == '65' && documento.docFiscal.isContingenciaOffline) { - result.retornoContingenciaOffline = {}; - result.success = true; - result.retornoContingenciaOffline.xml_gerado = xmlLote; - } - else { - result = await this.transmitirXml(xmlLote, documento.docFiscal.modelo, documento.docFiscal.ambiente, doc.nfe); - } - } - catch (ex) { - result.success = false; - result.error = ex; - } - return result; + return result; + } + configuraUrlsSefaz(modelo, ambiente) { + if (!soapAutorizacao || !soapRetAutorizacao) { + let Sefaz = modelo == "65" ? sefazNfce_1.SefazNFCe : sefazNfe_1.SefazNFe; + soapAutorizacao = Sefaz.getSoapInfo( + this.empresa.endereco.uf, + ambiente, + nfe_1.ServicosSefaz.autorizacao + ); + soapRetAutorizacao = Sefaz.getSoapInfo( + this.empresa.endereco.uf, + ambiente, + nfe_1.ServicosSefaz.retAutorizacao + ); } - configuraUrlsSefaz(modelo, ambiente) { - if (!soapAutorizacao || !soapRetAutorizacao) { - let Sefaz = modelo == '65' ? sefazNfce_1.SefazNFCe : sefazNfe_1.SefazNFe; - soapAutorizacao = Sefaz.getSoapInfo(this.empresa.endereco.uf, ambiente, nfe_1.ServicosSefaz.autorizacao); - soapRetAutorizacao = Sefaz.getSoapInfo(this.empresa.endereco.uf, ambiente, nfe_1.ServicosSefaz.retAutorizacao); - } - } - appendQRCodeXML(documento, xmlAssinado) { - let qrCode = null; - let xmlAssinadoObj = xmlHelper_1.XmlHelper.deserializeXml(xmlAssinado, { explicitArray: false }); - let chave = Object(xmlAssinadoObj).NFe.infNFe.$.Id.replace('NFe', ''); - if (documento.docFiscal.isContingenciaOffline) { - let diaEmissao = documento.docFiscal.dhEmissao.substring(8, 10); - let valorTotal = documento.total.icmsTot.vNF; - let digestValue = Object(xmlAssinadoObj).NFe.Signature.SignedInfo.Reference.DigestValue; - qrCode = this.gerarQRCodeNFCeOffline(soapAutorizacao.urlQRCode, chave, '2', documento.docFiscal.ambiente, diaEmissao, valorTotal, digestValue, this.empresa.idCSC, this.empresa.CSC); - } - else { - qrCode = this.gerarQRCodeNFCeOnline(soapAutorizacao.urlQRCode, chave, '2', documento.docFiscal.ambiente, this.empresa.idCSC, this.empresa.CSC); - } - let qrCodeObj = { - qrCode: '<' + qrCode + '>', - urlChave: soapAutorizacao.urlChave - }; - let qrCodeXml = xmlHelper_1.XmlHelper.serializeXml(qrCodeObj, 'infNFeSupl').replace('>]]>', ']]>').replace('' + qrCodeXml + '", + urlChave: soapAutorizacao.urlChave, + }; + let qrCodeXml = xmlHelper_1.XmlHelper.serializeXml(qrCodeObj, "infNFeSupl") + .replace(">]]>", "]]>") + .replace("" + qrCodeXml + " 0 + ? this.getImpostoDevolucao({ + pDevol: produtos[i].prod.percentualDevolucao, + vIPIDevol: produtos[i].prod.valorIPIDevolucao, + }) + : undefined, + }); } - gerarXml(documento) { - if (documento.docFiscal.modelo == '65' && documento.docFiscal.isContingenciaOffline) - documento.docFiscal.tipoEmissao = '9'; - let dadosChave = this.gerarChaveNF(this.empresa, documento.docFiscal); - let NFe = { - $: { - xmlns: 'http://www.portalfiscal.inf.br/nfe' + return det_list; + } + getDetProd(produto, ambiente, isPrimeiroProduto) { + return { + cProd: produto.codigo, + cEAN: produto.cEAN, + xProd: + ambiente == "2" && isPrimeiroProduto + ? "NOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL" + : produto.descricao, + NCM: produto.NCM, + //nVE: string[]; + CEST: produto.cest, + //indEscala: TNFeInfNFeDetProdIndEscala; + cNPJFab: produto.cNPJFab, + cBenef: produto.cBenef, + eXTIPI: produto.eXTIPI, + CFOP: produto.CFOP, + uCom: produto.unidadeComercial, + qCom: produto.quantidadeComercial, + vUnCom: produto.valorUnitarioComercial, + vProd: produto.valorTotal, + cEANTrib: produto.cEANTrib, + uTrib: produto.unidadeTributavel, + qTrib: produto.quantidadeTributavel, + vUnTrib: produto.valorUnitarioTributavel, + vFrete: produto.valorFrete, + vSeg: produto.valorSeguro, + vDesc: produto.valorDesconto, + vOutro: produto.valorOutro, + indTot: produto.indicadorTotal, + //di: TNFeInfNFeDetProdDI[]; + //detExport: TNFeInfNFeDetProdDetExport[]; + xPed: produto.numeroPedido, + nItemPed: produto.numeroItemPedido, + }; + } + getDetImposto(imposto, modelo, cfop) { + let detImposto = { + vTotTrib: imposto.valorAproximadoTributos, + ICMS: [this.getImpostoIcms(imposto.icms)], + PIS: [this.getImpostoPIS(imposto.pis, modelo)], + COFINS: [this.getImpostoCOFINS(imposto.cofins, modelo)], + PISST: [this.getImpostoPISST(imposto.pisst)], + COFINSST: [this.getImpostoCOFINSST(imposto.cofinsst)], + IPI: [this.getImpostoIPI(imposto.ipi, modelo)], + II: [this.getImpostoII(imposto.ii, cfop)], + ICMSUFDest: [this.getIcmsUfDest(imposto.icmsUfDest)], + ISSQN: "", + }; + return detImposto; + } + getImpostoIcms(icms) { + let result; + if (icms.CST && icms.CST !== "") { + switch (icms.CST) { + case "00": + result = { + ICMS00: { + orig: icms.orig, + CST: icms.CST, + modBC: Utils.getEnumByValue( + schema.TNFeInfNFeDetImpostoICMSICMS00ModBC, + icms.modBC + ), + vBC: icms.vBC, + pICMS: icms.pICMS, + vICMS: icms.vICMS, + pFCP: icms.pFCP, + vFCP: icms.vFCP, }, - infNFe: documento.docFiscal.modelo == '65' ? this.gerarNFCe(documento, dadosChave) : this.gerarNFe(documento, dadosChave) - }; - Utils.removeSelfClosedFields(NFe); - return { - nfe: NFe, - xml: xmlHelper_1.XmlHelper.serializeXml(NFe, 'NFe') - }; - } - gerarChaveNF(empresa, docFiscal) { - let chave = ''; - let ano = docFiscal.dhEmissao.substring(2, 4); - let mes = docFiscal.dhEmissao.substring(5, 7); - chave += (docFiscal.codUF.padStart(2, '0')); - chave += (ano + mes); - chave += (empresa.cnpj.padStart(14, '0')); - chave += (docFiscal.modelo.padStart(2, '0')); - chave += (docFiscal.serie.padStart(3, '0')); - chave += (docFiscal.numeroNota.toString().padStart(9, '0')); - chave += (docFiscal.tipoEmissao); - let cnf = (Utils.randomInt(10000000, 99999999)).toString(); - chave += cnf; - let digitoVerificador = this.obterDigitoVerificador(chave); - chave += digitoVerificador; - return { - chave: chave, - cnf: cnf, - dv: digitoVerificador - }; - } - obterDigitoVerificador(chave) { - let soma = 0; - let mod = -1; - let dv = -1; - let peso = 2; - let chaveArr = chave.split(''); - for (let i = chaveArr.length - 1; i !== -1; i--) { - let ch = Number(chaveArr[i].toString()); - soma += ch * peso; - if (peso < 9) - peso += 1; - else - peso = 2; - } - mod = soma % 11; - if (mod === 0 || mod === 1) - dv = 0; - else - dv = 11 - mod; - return dv.toString(); + }; + break; + case "10": + // partilha icms + if ( + icms.UFST && + icms.UFST !== "" && + icms.pBCOp && + icms.pBCOp !== "" + ) { + result = { + ICMS10: { + orig: icms.orig, + CST: icms.CST, + modBC: Utils.getEnumByValue( + schema.TNFeInfNFeDetImpostoICMSICMSPartModBC, + icms.modBC + ), + vBC: icms.vBC, + pRedBC: icms.pRedBC, + pICMS: icms.pICMS, + vICMS: icms.vICMS, + modBCST: Utils.getEnumByValue( + schema.TNFeInfNFeDetImpostoICMSICMSPartModBCST, + icms.modBCST + ), + pMVAST: icms.pMVAST, + pRedBCST: icms.pRedBCST, + vBCST: icms.vBCST, + pICMSST: icms.pICMSST, + vICMSST: icms.vICMSST, + pBCOp: icms.pBCOp, + UFST: Utils.getEnumByValue(schema.TUf, icms.UFST), + }, + }; + } else { + result = { + ICMS10: { + orig: icms.orig, + CST: icms.CST, + modBC: Utils.getEnumByValue( + schema.TNFeInfNFeDetImpostoICMSICMS10ModBC, + icms.modBC + ), + pICMS: icms.pICMS, + vBC: icms.vBC, + vICMS: icms.vICMS, + pFCP: icms.pFCP, + vFCP: icms.vFCP, + modBCST: Utils.getEnumByValue( + schema.TNFeInfNFeDetImpostoICMSICMS10ModBCST, + icms.modBCST + ), + pFCPST: icms.pFCPST, + pICMSST: icms.pICMSST, + pMVAST: icms.pMVAST, + pRedBCST: icms.pRedBCST, + vBCFCP: icms.vBCFCP, + vBCFCPST: icms.vBCFCPST, + vBCST: icms.vBCST, + vFCPST: icms.vFCPST, + vICMSST: icms.vICMSST, + }, + }; + } + break; + case "20": + result = { + ICMS20: { + orig: icms.orig, + CST: icms.CST, + modBC: Utils.getEnumByValue( + schema.TNFeInfNFeDetImpostoICMSICMS20ModBC, + icms.modBC + ), + pRedBC: icms.pRedBC, + vBC: icms.vBC, + pICMS: icms.pICMS, + vICMS: icms.vICMS, + vBCFCP: icms.vBCFCP, + pFCP: icms.pFCP, + vFCP: icms.vFCP, + vICMSDeson: icms.vICMSDeson, + motDesICMS: Utils.getEnumByValue( + schema.TNFeInfNFeDetImpostoICMSICMS20MotDesICMS, + icms.motDesICMS + ), + }, + }; + break; + case "30": + result = { + ICMS30: { + orig: icms.orig, + CST: icms.CST, + modBCST: Utils.getEnumByValue( + schema.TNFeInfNFeDetImpostoICMSICMS30ModBCST, + icms.modBCST + ), + pMVAST: icms.pMVAST, + pRedBCST: icms.pRedBCST, + vBCST: icms.vBCST, + pICMSST: icms.pICMSST, + vICMSST: icms.vICMSST, + motDesICMS: Utils.getEnumByValue( + schema.TNFeInfNFeDetImpostoICMSICMS30MotDesICMS, + icms.motDesICMS + ), + vICMSDeson: icms.vICMSDeson, + vBCFCPST: icms.vBCFCPST, + pFCPST: icms.pFCPST, + vFCPST: icms.vFCPST, + }, + }; + break; + case "40": + case "50": + result = { + ICMS40: { + orig: icms.orig, + CST: icms.CST, + motDesICMS: Utils.getEnumByValue( + schema.TNFeInfNFeDetImpostoICMSICMS40MotDesICMS, + icms.motDesICMS + ), + vICMSDeson: icms.vICMSDeson, + }, + }; + break; + case "41": + if (icms.vBCSTRet && icms.vBCSTRet !== "") { + result = { + ICMS41: { + orig: icms.orig, + CST: icms.CST, + vBCSTRet: icms.vBCSTRet, + vICMSSTRet: icms.vICMSSTRet, + vBCSTDest: icms.vBCSTDest, + vICMSSTDest: icms.vICMSSTDest, + //pFCPSTRet: '', + //pST: '', + //vBCFCPSTRet: '', + //vFCPSTRet: '', + pRedBCEfet: icms.pRedBCEfet, + vBCEfet: icms.vBCEfet, + pICMSEfet: icms.pICMSEfet, + vICMSEfet: icms.vICMSEfet, + }, + }; + } else { + result = { + ICMS40: { + orig: icms.orig, + CST: icms.CST, + motDesICMS: Utils.getEnumByValue( + schema.TNFeInfNFeDetImpostoICMSICMS40MotDesICMS, + icms.motDesICMS + ), + vICMSDeson: icms.vICMSDeson, + }, + }; + } + break; + case "51": + result = { + ICMS51: { + orig: icms.orig, + CST: icms.CST, + modBC: Utils.getEnumByValue( + schema.TNFeInfNFeDetImpostoICMSICMS51ModBC, + icms.modBC + ), + vBC: icms.vBC, + pRedBC: icms.pRedBC, + pICMS: icms.pICMS, + vICMS: icms.vICMS, + pDif: icms.pDif, + vICMSDif: icms.vICMSDif, + vICMSOp: icms.vICMSOp, + vBCFCP: icms.vBCFCP, + pFCP: icms.pFCP, + vFCP: icms.vFCP, + }, + }; + break; + case "60": + result = { + ICMS60: { + orig: icms.orig, + CST: icms.CST, + vBCSTRet: icms.vBCSTRet, + vICMSSTRet: icms.vICMSSTRet, + pST: icms.pST, + vBCFCPSTRet: icms.vBCFCPSTRet, + pFCPSTRet: icms.pFCPSTRet, + vFCPSTRet: icms.vFCPSTRet, + pRedBCEfet: icms.pRedBCEfet, + vBCEfet: icms.vBCEfet, + pICMSEfet: icms.pICMSEfet, + vICMSEfet: icms.vICMSEfet, + }, + }; + break; + case "70": + result = { + ICMS70: { + orig: icms.orig, + CST: icms.CST, + modBC: icms.modBC, + vBC: icms.vBC, + pRedBC: icms.pRedBC, + pICMS: icms.pICMS, + vICMS: icms.vICMS, + modBCST: icms.modBCST, + pMVAST: icms.pMVAST, + pRedBCST: icms.pRedBCST, + vBCST: icms.vBCST, + pICMSST: icms.pICMSST, + vICMSST: icms.vICMSST, + motDesICMS: icms.motDesICMS, + vICMSDeson: icms.vICMSDeson, + vBCFCP: icms.vBCFCP, + pFCP: icms.pFCP, + vFCP: icms.vFCP, + vBCFCPST: icms.vBCFCPST, + pFCPST: icms.pFCPST, + vFCPST: icms.vFCPST, + }, + }; + break; + case "90": + // partilha icms + if ( + icms.UFST && + icms.UFST !== "" && + icms.pBCOp && + icms.pBCOp !== "" + ) { + result = { + ICMS90: { + orig: icms.orig, + CST: icms.CST, + modBC: Utils.getEnumByValue( + schema.TNFeInfNFeDetImpostoICMSICMSPartModBC, + icms.modBC + ), + vBC: icms.vBC, + pRedBC: icms.pRedBC, + pICMS: icms.pICMS, + vICMS: icms.vICMS, + modBCST: Utils.getEnumByValue( + schema.TNFeInfNFeDetImpostoICMSICMSPartModBCST, + icms.modBCST + ), + pMVAST: icms.pMVAST, + pRedBCST: icms.pRedBCST, + vBCST: icms.vBCST, + pICMSST: icms.pICMSST, + vICMSST: icms.vICMSST, + pBCOp: icms.pBCOp, + UFST: Utils.getEnumByValue(schema.TUf, icms.UFST), + }, + }; + } else { + result = { + ICMS90: { + orig: icms.orig, + CST: icms.CST, + modBC: Utils.getEnumByValue( + schema.TNFeInfNFeDetImpostoICMSICMS90ModBC, + icms.modBC + ), + vBC: icms.vBC, + pRedBC: icms.pRedBC, + pICMS: icms.pICMS, + vICMS: icms.vICMS, + modBCST: icms.modBCST, + pMVAST: icms.pMVAST, + pRedBCST: icms.pRedBCST, + vBCST: icms.vBCST, + pICMSST: icms.pICMSST, + vICMSST: icms.vICMSST, + motDesICMS: Utils.getEnumByValue( + schema.TNFeInfNFeDetImpostoICMSICMS90MotDesICMS, + icms.motDesICMS + ), + vICMSDeson: icms.vICMSDeson, + vBCFCP: icms.vBCFCP, + pFCP: icms.pFCP, + vFCP: icms.vFCP, + vBCFCPST: icms.vBCFCPST, + vFCPST: icms.vFCPST, + }, + }; + } + break; + default: + //throw exception? + break; + } + } else { + // Simples Nacional + switch (icms.CSOSN) { + case "101": + result = { + ICMSSN101: { + orig: icms.orig, + CSOSN: icms.CSOSN, + pCredSN: icms.pCredSN, + vCredICMSSN: icms.vCredICMSSN, + }, + }; + break; + case "102": + case "103": + case "300": + case "400": + result = { + ICMSSN102: { + orig: icms.orig, + CSOSN: icms.CSOSN, + }, + }; + break; + case "201": + result = { + ICMSSN201: { + orig: icms.orig, + CSOSN: icms.CSOSN, + modBCST: icms.modBCST, + pMVAST: icms.pMVAST, + pRedBCST: icms.pRedBCST, + vBCST: icms.vBCST, + pICMSST: icms.pICMSST, + vICMSST: icms.vICMSST, + pCredSN: icms.pCredSN, + vCredICMSSN: icms.vCredICMSSN, + vBCFCPST: icms.vBCFCPST, + pFCPST: icms.pFCPST, + vFCPST: icms.vFCPST, + }, + }; + break; + case "202": + case "203": + result = { + ICMSSN202: { + orig: icms.orig, + CSOSN: icms.CSOSN, + modBCST: icms.modBCST, + pMVAST: icms.pMVAST, + pRedBCST: icms.pRedBCST, + vBCST: icms.vBCST, + pICMSST: icms.pICMSST, + vICMSST: icms.vICMSST, + vBCFCPST: icms.vBCFCPST, + pFCPST: icms.pFCPST, + vFCPST: icms.vFCPST, + }, + }; + break; + case "500": + result = { + ICMSSN500: { + orig: icms.orig, + CSOSN: icms.CSOSN, + vBCSTRet: icms.vBCSTRet, + vICMSSTRet: icms.vICMSSTRet, + vBCFCPSTRet: icms.vBCFCPSTRet, + pFCPSTRet: icms.pFCPSTRet, + vFCPSTRet: icms.vFCPSTRet, + pRedBCEfet: icms.pRedBCEfet, + vBCEfet: icms.vBCEfet, + pICMSEfet: icms.pICMSEfet, + vICMSEfet: icms.vICMSEfet, + }, + }; + break; + case "900": + result = { + ICMSSN900: { + orig: icms.orig, + CSOSN: icms.CSOSN, + modBC: icms.modBC, + vBC: icms.vBC, + pRedBC: icms.pRedBC, + pICMS: icms.pICMS, + vICMS: icms.vICMS, + modBCST: icms.modBCST, + pMVAST: icms.pMVAST, + pRedBCST: icms.pRedBCST, + vBCST: icms.vBCST, + pICMSST: icms.pICMSST, + vICMSST: icms.vICMSST, + pCredSN: icms.pCredSN, + vCredICMSSN: icms.vCredICMSSN, + vBCFCPST: icms.vBCFCPST, + pFCPST: icms.pFCPST, + vFCPST: icms.vFCPST, + }, + }; + break; + } } - gerarQRCodeNFCeOnline(urlQRCode, chave, versaoQRCode, ambiente, idCSC, CSC) { - let s = '|'; - let concat = [chave, versaoQRCode, ambiente, Number(idCSC)].join(s); - let hash = sha1(concat + CSC).toUpperCase(); - return urlQRCode + '?p=' + concat + s + hash; + return result; + } + // private getImpostoII() { + // return { + // vBC: '', + // vDespAdu: '', + // vII: '', + // vIOF: '' + // } + // } + getImpostoISSQN() { + return { + vBC: "", + vAliq: "", + vISSQN: "", + cMunFG: "", + cListServ: schema.TCListServ.Item0101, + vDeducao: "", + vOutro: "", + vDescIncond: "", + vDescCond: "", + vISSRet: "", + indISS: schema.TNFeInfNFeDetImpostoISSQNIndISS.Item1, + cServico: "", + cMun: "", + cPais: "", + nProcesso: "", + indIncentivo: schema.TNFeInfNFeDetImpostoISSQNIndIncentivo.Item1, + }; + } + getImpostoIPI(ipi, modelo) { + let result; + if (modelo != "55" || !ipi) return; //não deve gerar grupo IPI para NFCe + // if (!GerarTagIPIparaNaoTributado) && (!['00', '49', '50', '99'].includes(ipi.CST)) return; + //se valores padrão de quando não foi preenchido a TAG IPI + if ( + (ipi.cEnq = "") && + (ipi.CST = "00") && + (ipi.vBC = 0) && + (ipi.qUnid = 0) && + (ipi.vUnid = 0) && + (ipi.pIPI = 0) && + (ipi.vIPI = 0) + ) + return; + if (ipi.vBC + ipi.pIPI > 0 && ipi.qUnid + ipi.vUnid > 0) + throw "As TAG e não podem ser informadas em conjunto com as TAG e "; + result = { + IPI: { + CNPJProd: ipi.CNPJProd, + cSelo: ipi.cSelo, + qSelo: ipi.qSelo, + cEnq: ipi.cEnq || "999", + }, + }; + if (ipi.qUnid + ipi.vUnid > 0) { + result.IPI.IPITrib = { + CST: ipi.CST, + qUnid: ipi.qUnid, + vUnid: ipi.vUnid, + vIPI: ipi.vIPI, + }; + } else { + result.IPI.IPITrib = { + CST: ipi.CST, + vBC: ipi.vBC, + pIPI: ipi.pIPI, + vIPI: ipi.vIPI, + }; } - gerarQRCodeNFCeOffline(urlQRCode, chave, versaoQRCode, ambiente, diaEmissao, valorTotal, digestValue, idCSC, CSC) { - let s = '|'; - let hexDigestValue = Buffer.from(digestValue).toString('hex'); - let concat = [chave, versaoQRCode, ambiente, diaEmissao, valorTotal, hexDigestValue, Number(idCSC)].join(s); - let hash = sha1(concat + CSC).toUpperCase(); - return urlQRCode + '?p=' + concat + s + hash; + // result.IPI.IPINT = { CST: ipi.CST } + return result; + } + getImpostoII(ii, cfop) { + if (!ii) return; + if ( + ii.vBC > 0 || + ii.vDespAdu > 0 || + ii.vII > 0 || + ii.vIOF > 0 || + cfop[0] === "3" + ) { + return { + vBC: ii.vBC, + vDespAdu: ii.vDespAdu, + vII: ii.vII, + vIOF: ii.vIOF, + }; } - gerarNFe(documento, dadosChave) { - let nfe = { - $: { versao: '4.00', Id: 'NFe' + dadosChave.chave } + return; + } + getImpostoPIS(pis, modelo) { + let result; + if ( + modelo != "55" && + pis.vBC == 0 && + (pis.pPIS = 0) && + (pis.vPIS = 0) && + (pis.qBCProd = 0) && + (pis.vAliqProd = 0) && + !["04", "05", "06", "07", "08", "09", "49", "99"].includes(pis.CST) + ) + return undefined; + if (!pis && modelo == "55") throw "NF-e sem grupo do PIS"; + switch (pis.CST) { + case "01": + case "02": + result = { + PISAliq: { + CST: pis.CST, + vBC: pis.vBC, + pPIS: pis.pPIS, + vPIS: pis.vPIS, + }, }; - nfe.ide = this.getIde(documento.docFiscal, dadosChave); - nfe.emit = this.getEmit(this.empresa); - //nfe.avulsa = ; - nfe.dest = this.getDest(documento.destinatario, documento.docFiscal.ambiente); - //nfe.retirada = ; - //nfe.entrega = ; - //nfe.autXML = ; - nfe.det = this.getDet(documento.produtos, documento.docFiscal.ambiente, documento.docFiscal.modelo); - nfe.total = this.getTotal(documento.total); - nfe.transp = this.getTransp(documento.transporte); - //nfe.cobr = - nfe.pag = this.getPag(documento.pagamento); - nfe.infAdic = this.getInfoAdic(documento.infoAdicional); - //nfe.exporta = ; - //nfe.compra = ; - //nfe.cana = ; - if (this.responsavelTecnico) - nfe.infRespTec = this.getResponsavelTecnico(this.responsavelTecnico, dadosChave.chave); - return nfe; - } - gerarNFCe(documento, dadosChave) { - let nfce = { - $: { versao: '4.00', Id: 'NFe' + dadosChave.chave } + break; + case "03": + result = { + PISQtde: { + CST: pis.CST, + vBCProd: pis.vBCProd, + vAliqProd: pis.vAliqProd, + vPIS: pis.vPIS, + }, }; - nfce.ide = this.getIde(documento.docFiscal, dadosChave); - nfce.emit = this.getEmit(this.empresa); - if (documento.destinatario) - nfce.dest = this.getDest(documento.destinatario, documento.docFiscal.ambiente); - nfce.det = this.getDet(documento.produtos, documento.docFiscal.ambiente, documento.docFiscal.modelo); - nfce.total = this.getTotal(documento.total); - nfce.transp = this.getTransp(documento.transporte); - nfce.pag = this.getPag(documento.pagamento); - nfce.infAdic = this.getInfoAdic(documento.infoAdicional); - if (this.responsavelTecnico) - nfce.infRespTec = this.getResponsavelTecnico(this.responsavelTecnico, dadosChave.chave); - return nfce; - } - getIde(documento, dadosChave) { - let ide = { - cUF: Utils.getEnumByValue(schema.TCodUfIBGE, documento.codUF), - cNF: dadosChave.cnf, - natOp: documento.naturezaOperacao, - mod: Utils.getEnumByValue(schema.TMod, documento.modelo), - serie: documento.serie, - nNF: documento.numeroNota, - dhEmi: documento.dhEmissao, - tpNF: Utils.getEnumByValue(schema.TNFeInfNFeIdeTpNF, documento.tipoDocumentoFiscal), - idDest: Utils.getEnumByValue(schema.TNFeInfNFeIdeIdDest, documento.identificadorDestinoOperacao), - cMunFG: documento.codIbgeFatoGerador, - tpImp: Utils.getEnumByValue(schema.TNFeInfNFeIdeTpImp, documento.tipoImpressao), - tpEmis: Utils.getEnumByValue(schema.TNFeInfNFeIdeTpEmis, documento.tipoEmissao), - cDV: dadosChave.dv, - tpAmb: Utils.getEnumByValue(schema.TAmb, documento.ambiente), - finNFe: Utils.getEnumByValue(schema.TFinNFe, documento.finalidadeEmissao), - indFinal: Utils.getEnumByValue(schema.TNFeInfNFeIdeIndFinal, documento.indConsumidorFinal), - indPres: Utils.getEnumByValue(schema.TNFeInfNFeIdeIndPres, documento.indPresenca), - indIntermed : documento.indIntermed ? Utils.getEnumByValue(schema.TNFeInfNFeIdeIndIntermed, documento.indIntermed) : null, // NT 2020.006 - procEmi: Utils.getEnumByValue(schema.TProcEmi, documento.processoEmissao), - verProc: documento.versaoAplicativoEmissao, - dhSaiEnt: documento.dhSaiEnt, - dhCont: documento.dhContingencia, - xJust: documento.justificativaContingencia, + break; + case "04": + case "05": + case "06": + case "07": + case "08": + case "09": + result = { + PISNT: { + CST: pis.CST, + }, }; - if (!documento.indIntermed) { - delete ide.indIntermed; // NT 2020.006 - } - return ide; - } - getEmit(empresa) { - return { - CNPJ: empresa.cnpj, - xNome: empresa.razaoSocial, - xFant: empresa.nomeFantasia, - enderEmit: this.getEnderEmit(empresa.endereco), - IE: empresa.inscricaoEstadual, - IM: empresa.inscricaoMunicipal, - CRT: empresa.codRegimeTributario, - iEST: empresa.inscricaoEstadualST, - CNAE: empresa.CNAE + break; + case "49": + case "50": + case "51": + case "52": + case "53": + case "54": + case "55": + case "56": + case "60": + case "61": + case "62": + case "63": + case "64": + case "65": + case "66": + case "67": + case "70": + case "71": + case "72": + case "73": + case "74": + case "75": + case "98": + case "99": + if (pis.vBC + pis.pPIS > 0 && pis.qBCProd + pis.vAliqProd > 0) + throw "As TAG e não podem ser informadas em conjunto com as TAG e "; + if (pis.qBCProd + pis.vAliqProd <= 0) return undefined; + result = { + PISOutr: { + CST: pis.CST, + qBCProd: pis.qBCProd, + vAliqProd: pis.vAliqProd, + vPIS: pis.vPIS, + }, }; - } - getEnderEmit(endereco) { - return { - xLgr: endereco.logradouro, - nro: endereco.numero, - xCpl: endereco.complemento, - xBairro: endereco.bairro, - cMun: endereco.codMunicipio, - xMun: endereco.municipio, - UF: Utils.getEnumByValue(schema.TUfEmi, endereco.uf), - CEP: endereco.cep, - cPais: schema.TEnderEmiCPais.Item1058, - xPais: schema.TEnderEmiXPais.BRASIL, - fone: endereco.telefone, + break; + default: + result = { + PISOutr: { + CST: pis.CST, + vBC: pis.vBC, + pPIS: pis.pPIS, + vPIS: pis.vPIS, + }, }; + break; } - getEnderDest(endereco) { - return { - xLgr: endereco.logradouro, - nro: endereco.numero, - xCpl: endereco.complemento, - xBairro: endereco.bairro, - cMun: endereco.codMunicipio, - xMun: endereco.municipio, - UF: Utils.getEnumByValue(schema.TUf, endereco.uf), - CEP: endereco.cep, - cPais: endereco.codPais, - xPais: endereco.pais, - fone: endereco.telefone, + return result; + } + getImpostoCOFINS(cofins, modelo) { + let result; + if ( + modelo != "55" && + cofins.vBC == 0 && + (cofins.pCOFINS = 0) && + (cofins.vCOFINS = 0) && + (cofins.qBCProd = 0) && + (cofins.vAliqProd = 0) && + !["04", "05", "06", "07", "08", "09", "49", "99"].includes(cofins.CST) + ) + return undefined; + //No caso da NFC-e, o grupo de tributação do PIS e o grupo de tributação da COFINS são opcionais. + if (!cofins && modelo == "55") throw "NF-e sem grupo do COFINS"; + switch (cofins.CST) { + case "01": + case "02": + result = { + COFINSAliq: { + CST: cofins.CST, + vBC: cofins.vBC, + pCOFINS: cofins.pCOFINS, + vCOFINS: cofins.vCOFINS, + }, }; - } - getDest(destinatario, ambiente) { - let dest = {}; - if (destinatario.isEstrangeiro) - dest.idEstrangeiro = destinatario.documento; - if (destinatario.documento.length == 14) - dest.CNPJ = destinatario.documento; - else - dest.CPF = destinatario.documento; - dest.xNome = ambiente == '2' ? 'NF-E EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL' : destinatario.nome; - if (destinatario.endereco) - dest.enderDest = this.getEnderDest(destinatario.endereco); - dest.indIEDest = Utils.getEnumByValue(schema.TNFeInfNFeDestIndIEDest, destinatario.indicadorIEDestinario); - dest.IE = destinatario.inscricaoEstadual; - dest.ISUF = destinatario.inscricaoSuframa; - dest.IM = destinatario.inscricaoMunicipal; - dest.email = destinatario.email; - return dest; - } - getDet(produtos, ambiente, modelo) { - let det_list = []; - for (let i = 0; i < produtos.length; i++) { - det_list.push({ - $: { nItem: produtos[i].numeroItem }, - prod: this.getDetProd(produtos[i].prod, ambiente, i == 0), - imposto: this.getDetImposto(produtos[i].imposto, modelo, produtos[i].prod.CFOP), - infAdProd: produtos[i].infoAdicional, - impostoDevol: (produtos[i].prod.percentualDevolucao && (produtos[i].prod.percentualDevolucao > 0)) ? this.getImpostoDevolucao({ pDevol: produtos[i].prod.percentualDevolucao, vIPIDevol: produtos[i].prod.valorIPIDevolucao }) : undefined - }); - } - return det_list; - } - getDetProd(produto, ambiente, isPrimeiroProduto) { - return { - cProd: produto.codigo, - cEAN: produto.cEAN, - xProd: (ambiente == '2' && isPrimeiroProduto) ? 'NOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL' : produto.descricao, - NCM: produto.NCM, - //nVE: string[]; - CEST: produto.cest, - //indEscala: TNFeInfNFeDetProdIndEscala; - cNPJFab: produto.cNPJFab, - cBenef: produto.cBenef, - eXTIPI: produto.eXTIPI, - CFOP: produto.CFOP, - uCom: produto.unidadeComercial, - qCom: produto.quantidadeComercial, - vUnCom: produto.valorUnitarioComercial, - vProd: produto.valorTotal, - cEANTrib: produto.cEANTrib, - uTrib: produto.unidadeTributavel, - qTrib: produto.quantidadeTributavel, - vUnTrib: produto.valorUnitarioTributavel, - vFrete: produto.valorFrete, - vSeg: produto.valorSeguro, - vDesc: produto.valorDesconto, - vOutro: produto.valorOutro, - indTot: produto.indicadorTotal, - //di: TNFeInfNFeDetProdDI[]; - //detExport: TNFeInfNFeDetProdDetExport[]; - xPed: produto.numeroPedido, - nItemPed: produto.numeroItemPedido, + break; + case "03": + result = { + COFINSQtde: { + CST: cofins.CST, + qBCProd: cofins.qBCProd, + vAliqProd: cofins.vAliqProd, + vCOFINS: cofins.vCOFINS, + }, }; - } - getDetImposto(imposto, modelo, cfop) { - let detImposto = { - vTotTrib: imposto.valorAproximadoTributos, - ICMS: [this.getImpostoIcms(imposto.icms)], - PIS: [this.getImpostoPIS(imposto.pis, modelo)], - COFINS: [this.getImpostoCOFINS(imposto.cofins, modelo)], - PISST: [this.getImpostoPISST(imposto.pisst)], - COFINSST: [this.getImpostoCOFINSST(imposto.cofinsst)], - IPI: [this.getImpostoIPI(imposto.ipi, modelo)], - II: [this.getImpostoII(imposto.ii, cfop)], - ICMSUFDest: [this.getIcmsUfDest(imposto.icmsUfDest)], - ISSQN: '', + break; + case "04": + case "05": + case "06": + case "07": + case "08": + case "09": + result = { + COFINSNT: { + CST: cofins.CST, + }, }; - return detImposto; - } - getImpostoIcms(icms) { - let result; - if (icms.CST && icms.CST !== '') { - switch (icms.CST) { - case '00': - result = { - ICMS00: { - orig: icms.orig, - CST: icms.CST, - modBC: Utils.getEnumByValue(schema.TNFeInfNFeDetImpostoICMSICMS00ModBC, icms.modBC), - vBC: icms.vBC, - pICMS: icms.pICMS, - vICMS: icms.vICMS, - pFCP: icms.pFCP, - vFCP: icms.vFCP - } - }; - break; - case '10': - // partilha icms - if (icms.UFST && icms.UFST !== '' && icms.pBCOp && icms.pBCOp !== '') { - result = { - ICMS10: { - orig: icms.orig, - CST: icms.CST, - modBC: Utils.getEnumByValue(schema.TNFeInfNFeDetImpostoICMSICMSPartModBC, icms.modBC), - vBC: icms.vBC, - pRedBC: icms.pRedBC, - pICMS: icms.pICMS, - vICMS: icms.vICMS, - modBCST: Utils.getEnumByValue(schema.TNFeInfNFeDetImpostoICMSICMSPartModBCST, icms.modBCST), - pMVAST: icms.pMVAST, - pRedBCST: icms.pRedBCST, - vBCST: icms.vBCST, - pICMSST: icms.pICMSST, - vICMSST: icms.vICMSST, - pBCOp: icms.pBCOp, - UFST: Utils.getEnumByValue(schema.TUf, icms.UFST), - } - }; - } - else { - result = { - ICMS10: { - orig: icms.orig, - CST: icms.CST, - modBC: Utils.getEnumByValue(schema.TNFeInfNFeDetImpostoICMSICMS10ModBC, icms.modBC), - pICMS: icms.pICMS, - vBC: icms.vBC, - vICMS: icms.vICMS, - pFCP: icms.pFCP, - vFCP: icms.vFCP, - modBCST: Utils.getEnumByValue(schema.TNFeInfNFeDetImpostoICMSICMS10ModBCST, icms.modBCST), - pFCPST: icms.pFCPST, - pICMSST: icms.pICMSST, - pMVAST: icms.pMVAST, - pRedBCST: icms.pRedBCST, - vBCFCP: icms.vBCFCP, - vBCFCPST: icms.vBCFCPST, - vBCST: icms.vBCST, - vFCPST: icms.vFCPST, - vICMSST: icms.vICMSST, - } - }; - } - break; - case '20': - result = { - ICMS20: { - orig: icms.orig, - CST: icms.CST, - modBC: Utils.getEnumByValue(schema.TNFeInfNFeDetImpostoICMSICMS20ModBC, icms.modBC), - pRedBC: icms.pRedBC, - vBC: icms.vBC, - pICMS: icms.pICMS, - vICMS: icms.vICMS, - vBCFCP: icms.vBCFCP, - pFCP: icms.pFCP, - vFCP: icms.vFCP, - vICMSDeson: icms.vICMSDeson, - motDesICMS: Utils.getEnumByValue(schema.TNFeInfNFeDetImpostoICMSICMS20MotDesICMS, icms.motDesICMS) - } - }; - break; - case '30': - result = { - ICMS30: { - orig: icms.orig, - CST: icms.CST, - modBCST: Utils.getEnumByValue(schema.TNFeInfNFeDetImpostoICMSICMS30ModBCST, icms.modBCST), - pMVAST: icms.pMVAST, - pRedBCST: icms.pRedBCST, - vBCST: icms.vBCST, - pICMSST: icms.pICMSST, - vICMSST: icms.vICMSST, - motDesICMS: Utils.getEnumByValue(schema.TNFeInfNFeDetImpostoICMSICMS30MotDesICMS, icms.motDesICMS), - vICMSDeson: icms.vICMSDeson, - vBCFCPST: icms.vBCFCPST, - pFCPST: icms.pFCPST, - vFCPST: icms.vFCPST - } - }; - break; - case '40': - case '50': - result = { - ICMS40: { - orig: icms.orig, - CST: icms.CST, - motDesICMS: Utils.getEnumByValue(schema.TNFeInfNFeDetImpostoICMSICMS40MotDesICMS, icms.motDesICMS), - vICMSDeson: icms.vICMSDeson - } - }; - break; - case '41': - if (icms.vBCSTRet && icms.vBCSTRet !== '') { - result = { - ICMS41: { - orig: icms.orig, - CST: icms.CST, - vBCSTRet: icms.vBCSTRet, - vICMSSTRet: icms.vICMSSTRet, - vBCSTDest: icms.vBCSTDest, - vICMSSTDest: icms.vICMSSTDest, - //pFCPSTRet: '', - //pST: '', - //vBCFCPSTRet: '', - //vFCPSTRet: '', - pRedBCEfet: icms.pRedBCEfet, - vBCEfet: icms.vBCEfet, - pICMSEfet: icms.pICMSEfet, - vICMSEfet: icms.vICMSEfet, - } - }; - } - else { - result = { - ICMS40: { - orig: icms.orig, - CST: icms.CST, - motDesICMS: Utils.getEnumByValue(schema.TNFeInfNFeDetImpostoICMSICMS40MotDesICMS, icms.motDesICMS), - vICMSDeson: icms.vICMSDeson - } - }; - } - break; - case '51': - result = { - ICMS51: { - orig: icms.orig, - CST: icms.CST, - modBC: Utils.getEnumByValue(schema.TNFeInfNFeDetImpostoICMSICMS51ModBC, icms.modBC), - vBC: icms.vBC, - pRedBC: icms.pRedBC, - pICMS: icms.pICMS, - vICMS: icms.vICMS, - pDif: icms.pDif, - vICMSDif: icms.vICMSDif, - vICMSOp: icms.vICMSOp, - vBCFCP: icms.vBCFCP, - pFCP: icms.pFCP, - vFCP: icms.vFCP - } - }; - break; - case '60': - result = { - ICMS60: { - orig: icms.orig, - CST: icms.CST, - vBCSTRet: icms.vBCSTRet, - vICMSSTRet: icms.vICMSSTRet, - pST: icms.pST, - vBCFCPSTRet: icms.vBCFCPSTRet, - pFCPSTRet: icms.pFCPSTRet, - vFCPSTRet: icms.vFCPSTRet, - pRedBCEfet: icms.pRedBCEfet, - vBCEfet: icms.vBCEfet, - pICMSEfet: icms.pICMSEfet, - vICMSEfet: icms.vICMSEfet, - } - }; - break; - case '70': - result = { - ICMS70: { - orig: icms.orig, - CST: icms.CST, - modBC: icms.modBC, - vBC: icms.vBC, - pRedBC: icms.pRedBC, - pICMS: icms.pICMS, - vICMS: icms.vICMS, - modBCST: icms.modBCST, - pMVAST: icms.pMVAST, - pRedBCST: icms.pRedBCST, - vBCST: icms.vBCST, - pICMSST: icms.pICMSST, - vICMSST: icms.vICMSST, - motDesICMS: icms.motDesICMS, - vICMSDeson: icms.vICMSDeson, - vBCFCP: icms.vBCFCP, - pFCP: icms.pFCP, - vFCP: icms.vFCP, - vBCFCPST: icms.vBCFCPST, - pFCPST: icms.pFCPST, - vFCPST: icms.vFCPST, - } - }; - break; - case '90': - // partilha icms - if (icms.UFST && icms.UFST !== '' && icms.pBCOp && icms.pBCOp !== '') { - result = { - ICMS90: { - orig: icms.orig, - CST: icms.CST, - modBC: Utils.getEnumByValue(schema.TNFeInfNFeDetImpostoICMSICMSPartModBC, icms.modBC), - vBC: icms.vBC, - pRedBC: icms.pRedBC, - pICMS: icms.pICMS, - vICMS: icms.vICMS, - modBCST: Utils.getEnumByValue(schema.TNFeInfNFeDetImpostoICMSICMSPartModBCST, icms.modBCST), - pMVAST: icms.pMVAST, - pRedBCST: icms.pRedBCST, - vBCST: icms.vBCST, - pICMSST: icms.pICMSST, - vICMSST: icms.vICMSST, - pBCOp: icms.pBCOp, - UFST: Utils.getEnumByValue(schema.TUf, icms.UFST) - } - }; - } - else { - result = { - ICMS90: { - orig: icms.orig, - CST: icms.CST, - modBC: Utils.getEnumByValue(schema.TNFeInfNFeDetImpostoICMSICMS90ModBC, icms.modBC), - vBC: icms.vBC, - pRedBC: icms.pRedBC, - pICMS: icms.pICMS, - vICMS: icms.vICMS, - modBCST: icms.modBCST, - pMVAST: icms.pMVAST, - pRedBCST: icms.pRedBCST, - vBCST: icms.vBCST, - pICMSST: icms.pICMSST, - vICMSST: icms.vICMSST, - motDesICMS: Utils.getEnumByValue(schema.TNFeInfNFeDetImpostoICMSICMS90MotDesICMS, icms.motDesICMS), - vICMSDeson: icms.vICMSDeson, - vBCFCP: icms.vBCFCP, - pFCP: icms.pFCP, - vFCP: icms.vFCP, - vBCFCPST: icms.vBCFCPST, - vFCPST: icms.vFCPST, - } - }; - } - break; - default: - //throw exception? - break; - } - } - else { - // Simples Nacional - switch (icms.CSOSN) { - case '101': - result = { - ICMSSN101: { - orig: icms.orig, - CSOSN: icms.CSOSN, - pCredSN: icms.pCredSN, - vCredICMSSN: icms.vCredICMSSN - } - }; - break; - case '102': - case '103': - case '300': - case '400': - result = { - ICMSSN102: { - orig: icms.orig, - CSOSN: icms.CSOSN - } - }; - break; - case '201': - result = { - ICMSSN201: { - orig: icms.orig, - CSOSN: icms.CSOSN, - modBCST: icms.modBCST, - pMVAST: icms.pMVAST, - pRedBCST: icms.pRedBCST, - vBCST: icms.vBCST, - pICMSST: icms.pICMSST, - vICMSST: icms.vICMSST, - pCredSN: icms.pCredSN, - vCredICMSSN: icms.vCredICMSSN, - vBCFCPST: icms.vBCFCPST, - pFCPST: icms.pFCPST, - vFCPST: icms.vFCPST - } - }; - break; - case '202': - case '203': - result = { - ICMSSN202: { - orig: icms.orig, - CSOSN: icms.CSOSN, - modBCST: icms.modBCST, - pMVAST: icms.pMVAST, - pRedBCST: icms.pRedBCST, - vBCST: icms.vBCST, - pICMSST: icms.pICMSST, - vICMSST: icms.vICMSST, - vBCFCPST: icms.vBCFCPST, - pFCPST: icms.pFCPST, - vFCPST: icms.vFCPST - } - }; - break; - case '500': - result = { - ICMSSN500: { - orig: icms.orig, - CSOSN: icms.CSOSN, - vBCSTRet: icms.vBCSTRet, - vICMSSTRet: icms.vICMSSTRet, - vBCFCPSTRet: icms.vBCFCPSTRet, - pFCPSTRet: icms.pFCPSTRet, - vFCPSTRet: icms.vFCPSTRet, - pRedBCEfet: icms.pRedBCEfet, - vBCEfet: icms.vBCEfet, - pICMSEfet: icms.pICMSEfet, - vICMSEfet: icms.vICMSEfet, - } - }; - break; - case '900': - result = { - ICMSSN900: { - orig: icms.orig, - CSOSN: icms.CSOSN, - modBC: icms.modBC, - vBC: icms.vBC, - pRedBC: icms.pRedBC, - pICMS: icms.pICMS, - vICMS: icms.vICMS, - modBCST: icms.modBCST, - pMVAST: icms.pMVAST, - pRedBCST: icms.pRedBCST, - vBCST: icms.vBCST, - pICMSST: icms.pICMSST, - vICMSST: icms.vICMSST, - pCredSN: icms.pCredSN, - vCredICMSSN: icms.vCredICMSSN, - vBCFCPST: icms.vBCFCPST, - pFCPST: icms.pFCPST, - vFCPST: icms.vFCPST - } - }; - break; - } - } - return result; - } - // private getImpostoII() { - // return { - // vBC: '', - // vDespAdu: '', - // vII: '', - // vIOF: '' - // } - // } - getImpostoISSQN() { - return { - vBC: '', - vAliq: '', - vISSQN: '', - cMunFG: '', - cListServ: schema.TCListServ.Item0101, - vDeducao: '', - vOutro: '', - vDescIncond: '', - vDescCond: '', - vISSRet: '', - indISS: schema.TNFeInfNFeDetImpostoISSQNIndISS.Item1, - cServico: '', - cMun: '', - cPais: '', - nProcesso: '', - indIncentivo: schema.TNFeInfNFeDetImpostoISSQNIndIncentivo.Item1 + break; + case "49": + case "50": + case "51": + case "52": + case "53": + case "54": + case "55": + case "56": + case "60": + case "61": + case "62": + case "63": + case "64": + case "65": + case "66": + case "67": + case "70": + case "71": + case "72": + case "73": + case "74": + case "75": + case "98": + case "99": + if ( + cofins.vBC + cofins.pCOFINS > 0 && + cofins.qBCProd + cofins.vAliqProd > 0 + ) + throw "As TAG e não podem ser informadas em conjunto com as TAG e "; + if (cofins.qBCProd + cofins.vAliqProd <= 0) return undefined; + result = { + COFINSOutr: { + CST: cofins.CST, + qBCProd: cofins.qBCProd, + vAliqProd: cofins.vAliqProd, + vCOFINS: cofins.vCOFINS, + }, }; - } - getImpostoIPI(ipi, modelo) { - let result; - if (modelo != '55' || !ipi) - return; //não deve gerar grupo IPI para NFCe - // if (!GerarTagIPIparaNaoTributado) && (!['00', '49', '50', '99'].includes(ipi.CST)) return; - //se valores padrão de quando não foi preenchido a TAG IPI - if ((ipi.cEnq = '') && (ipi.CST = '00') && (ipi.vBC = 0) && (ipi.qUnid = 0) && (ipi.vUnid = 0) && (ipi.pIPI = 0) && (ipi.vIPI = 0)) - return; - if ((ipi.vBC + ipi.pIPI > 0) && (ipi.qUnid + ipi.vUnid > 0)) - throw 'As TAG e não podem ser informadas em conjunto com as TAG e '; + break; + default: result = { - IPI: { - CNPJProd: ipi.CNPJProd, - cSelo: ipi.cSelo, - qSelo: ipi.qSelo, - cEnq: ipi.cEnq || '999', - } + COFINSOutr: { + CST: cofins.CST, + vBC: cofins.vBC, + pCOFINS: cofins.pCOFINS, + vCOFINS: cofins.vCOFINS, + }, }; - if (ipi.qUnid + ipi.vUnid > 0) { - result.IPI.IPITrib = { - CST: ipi.CST, - qUnid: ipi.qUnid, - vUnid: ipi.vUnid, - vIPI: ipi.vIPI, - }; - } - else { - result.IPI.IPITrib = { - CST: ipi.CST, - vBC: ipi.vBC, - pIPI: ipi.pIPI, - vIPI: ipi.vIPI, - }; - } - // result.IPI.IPINT = { CST: ipi.CST } - return result; + break; } - getImpostoII(ii, cfop) { - if (!ii) - return; - if ((ii.vBC > 0) || (ii.vDespAdu > 0) || (ii.vII > 0) || (ii.vIOF > 0) || (cfop[0] === '3')) { - return { - vBC: ii.vBC, - vDespAdu: ii.vDespAdu, - vII: ii.vII, - vIOF: ii.vIOF - }; - } - return; - } - getImpostoPIS(pis, modelo) { - let result; - if ((modelo != '55') && - ((pis.vBC == 0) && (pis.pPIS = 0) && (pis.vPIS = 0) && - (pis.qBCProd = 0) && (pis.vAliqProd = 0) && - (!['04', '05', '06', '07', '08', '09', '49', '99'].includes(pis.CST)))) - return undefined; - if (!pis && modelo == '55') - throw 'NF-e sem grupo do PIS'; - switch (pis.CST) { - case '01': - case '02': - result = { - PISAliq: { - CST: pis.CST, - vBC: pis.vBC, - pPIS: pis.pPIS, - vPIS: pis.vPIS, - } - }; - break; - case '03': - result = { - PISQtde: { - CST: pis.CST, - vBCProd: pis.vBCProd, - vAliqProd: pis.vAliqProd, - vPIS: pis.vPIS, - } - }; - break; - case '04': - case '05': - case '06': - case '07': - case '08': - case '09': - result = { - PISNT: { - CST: pis.CST - } - }; - break; - case '49': - case '50': - case '51': - case '52': - case '53': - case '54': - case '55': - case '56': - case '60': - case '61': - case '62': - case '63': - case '64': - case '65': - case '66': - case '67': - case '70': - case '71': - case '72': - case '73': - case '74': - case '75': - case '98': - case '99': - if ((pis.vBC + pis.pPIS > 0) && (pis.qBCProd + pis.vAliqProd > 0)) - throw 'As TAG e não podem ser informadas em conjunto com as TAG e '; - if (pis.qBCProd + pis.vAliqProd <= 0) - return undefined; - result = { - PISOutr: { - CST: pis.CST, - qBCProd: pis.qBCProd, - vAliqProd: pis.vAliqProd, - vPIS: pis.vPIS - } - }; - break; - default: - result = { - PISOutr: { - CST: pis.CST, - vBC: pis.vBC, - pPIS: pis.pPIS, - vPIS: pis.vPIS - } - }; - break; - } - return result; - } - getImpostoCOFINS(cofins, modelo) { - let result; - if ((modelo != '55') && - ((cofins.vBC == 0) && (cofins.pCOFINS = 0) && (cofins.vCOFINS = 0) && - (cofins.qBCProd = 0) && (cofins.vAliqProd = 0) && - (!['04', '05', '06', '07', '08', '09', '49', '99'].includes(cofins.CST)))) - return undefined; - //No caso da NFC-e, o grupo de tributação do PIS e o grupo de tributação da COFINS são opcionais. - if (!cofins && modelo == '55') - throw 'NF-e sem grupo do COFINS'; - switch (cofins.CST) { - case '01': - case '02': - result = { - COFINSAliq: { - CST: cofins.CST, - vBC: cofins.vBC, - pCOFINS: cofins.pCOFINS, - vCOFINS: cofins.vCOFINS, - } - }; - break; - case '03': - result = { - COFINSQtde: { - CST: cofins.CST, - qBCProd: cofins.qBCProd, - vAliqProd: cofins.vAliqProd, - vCOFINS: cofins.vCOFINS - } - }; - break; - case '04': - case '05': - case '06': - case '07': - case '08': - case '09': - result = { - COFINSNT: { - CST: cofins.CST - } - }; - break; - case '49': - case '50': - case '51': - case '52': - case '53': - case '54': - case '55': - case '56': - case '60': - case '61': - case '62': - case '63': - case '64': - case '65': - case '66': - case '67': - case '70': - case '71': - case '72': - case '73': - case '74': - case '75': - case '98': - case '99': - if ((cofins.vBC + cofins.pCOFINS > 0) && (cofins.qBCProd + cofins.vAliqProd > 0)) - throw 'As TAG e não podem ser informadas em conjunto com as TAG e '; - if (cofins.qBCProd + cofins.vAliqProd <= 0) - return undefined; - result = { - COFINSOutr: { - CST: cofins.CST, - qBCProd: cofins.qBCProd, - vAliqProd: cofins.vAliqProd, - vCOFINS: cofins.vCOFINS - } - }; - break; - default: - result = { - COFINSOutr: { - CST: cofins.CST, - vBC: cofins.vBC, - pCOFINS: cofins.pCOFINS, - vCOFINS: cofins.vCOFINS - } - }; - break; - } - return result; - } - getImpostoPISST(PISST) { - let result; - if (!PISST) - return; - if ((PISST.vBC > 0) || (PISST.pPIS > 0) || (PISST.qBCProd > 0) || (PISST.vAliqProd > 0) || (PISST.vPIS > 0)) { - if ((PISST.vBC + PISST.pPIS > 0) && (PISST.qBCProd + PISST.vAliqProd > 0)) - throw 'As TAG e não podem ser informadas em conjunto com as TAG e '; - if (PISST.vBC + PISST.pPIS > 0) { - result = { - PISST: { - vBC: PISST.vBC, - pPIS: PISST.pPIS, - vPIS: PISST.vPIS, - } - }; - } - if (PISST.qBCProd + PISST.vAliqProd > 0) { - result = { - PISST: { - qBCProd: PISST.qBCProd, - vAliqProd: PISST.vAliqProd, - vPIS: PISST.vPIS, - } - }; - } - } - return result; - } - getImpostoCOFINSST(COFINSST) { - let result; - if (!COFINSST) - return; - if ((COFINSST.vBC > 0) && (COFINSST.pCOFINS > 0) && (COFINSST.qBCProd > 0) && (COFINSST.vAliqProd > 0) && (COFINSST.vCOFINS > 0)) { - if ((COFINSST.vBC + COFINSST.pCOFINS > 0) && (COFINSST.qBCProd + COFINSST.vAliqProd > 0)) - throw 'As TAG e não podem ser informadas em conjunto com as TAG e '; - if (COFINSST.vBC + COFINSST.pCOFINS > 0) { - result = { - COFINSST: { - vBC: COFINSST.vBC, - pCOFINS: COFINSST.pCOFINS, - vCOFINS: COFINSST.vCOFINS, - } - }; - } - if (COFINSST.qBCProd + COFINSST.vAliqProd > 0) { - result = { - COFINSST: { - qBCProd: COFINSST.qBCProd, - vAliqProd: COFINSST.vAliqProd, - vCOFINS: COFINSST.vCOFINS, - } - }; - } - } - return result; - } - getImpostoDevolucao(devol) { - return { - impostoDevol: { - pDevol: devol.pDevol, - IPI: { - vIPIDevol: devol.vIPIDevol - } - } + return result; + } + getImpostoPISST(PISST) { + let result; + if (!PISST) return; + if ( + PISST.vBC > 0 || + PISST.pPIS > 0 || + PISST.qBCProd > 0 || + PISST.vAliqProd > 0 || + PISST.vPIS > 0 + ) { + if (PISST.vBC + PISST.pPIS > 0 && PISST.qBCProd + PISST.vAliqProd > 0) + throw "As TAG e não podem ser informadas em conjunto com as TAG e "; + if (PISST.vBC + PISST.pPIS > 0) { + result = { + PISST: { + vBC: PISST.vBC, + pPIS: PISST.pPIS, + vPIS: PISST.vPIS, + }, }; - } - getIcmsUfDest(icmsUfDest) { - if (!icmsUfDest) - return; - if (icmsUfDest.pICMSInterPart <= 0) - return; - return { - ICMSUFDest: { - vBCUFDest: icmsUfDest.vBCUFDest, - vBCFCPUFDest: icmsUfDest.vBCFCPUFDest, - pFCPUFDest: icmsUfDest.pFCPUFDest, - pICMSUFDest: icmsUfDest.pICMSUFDest, - pICMSInter: icmsUfDest.pICMSInter, - pICMSInterPart: icmsUfDest.pICMSInterPart, - vFCPUFDest: icmsUfDest.vFCPUFDest, - vICMSUFDest: icmsUfDest.vICMSUFDest, - vICMSUFRemet: icmsUfDest.vICMSUFRemet, - } + } + if (PISST.qBCProd + PISST.vAliqProd > 0) { + result = { + PISST: { + qBCProd: PISST.qBCProd, + vAliqProd: PISST.vAliqProd, + vPIS: PISST.vPIS, + }, }; + } } - getTotal(total) { - return { - ICMSTot: total.icmsTot + return result; + } + getImpostoCOFINSST(COFINSST) { + let result; + if (!COFINSST) return; + if ( + COFINSST.vBC > 0 && + COFINSST.pCOFINS > 0 && + COFINSST.qBCProd > 0 && + COFINSST.vAliqProd > 0 && + COFINSST.vCOFINS > 0 + ) { + if ( + COFINSST.vBC + COFINSST.pCOFINS > 0 && + COFINSST.qBCProd + COFINSST.vAliqProd > 0 + ) + throw "As TAG e não podem ser informadas em conjunto com as TAG e "; + if (COFINSST.vBC + COFINSST.pCOFINS > 0) { + result = { + COFINSST: { + vBC: COFINSST.vBC, + pCOFINS: COFINSST.pCOFINS, + vCOFINS: COFINSST.vCOFINS, + }, }; + } + if (COFINSST.qBCProd + COFINSST.vAliqProd > 0) { + result = { + COFINSST: { + qBCProd: COFINSST.qBCProd, + vAliqProd: COFINSST.vAliqProd, + vCOFINS: COFINSST.vCOFINS, + }, + }; + } } - getIcmsTot(icmsTot) { - return icmsTot; - } - getTransp(transp) { - return { - modFrete: transp.modalidateFrete, - vol: transp.vol - /** + return result; + } + getImpostoDevolucao(devol) { + return { + impostoDevol: { + pDevol: devol.pDevol, + IPI: { + vIPIDevol: devol.vIPIDevol, + }, + }, + }; + } + getIcmsUfDest(icmsUfDest) { + if (!icmsUfDest) return; + if (icmsUfDest.pICMSInterPart <= 0) return; + return { + ICMSUFDest: { + vBCUFDest: icmsUfDest.vBCUFDest, + vBCFCPUFDest: icmsUfDest.vBCFCPUFDest, + pFCPUFDest: icmsUfDest.pFCPUFDest, + pICMSUFDest: icmsUfDest.pICMSUFDest, + pICMSInter: icmsUfDest.pICMSInter, + pICMSInterPart: icmsUfDest.pICMSInterPart, + vFCPUFDest: icmsUfDest.vFCPUFDest, + vICMSUFDest: icmsUfDest.vICMSUFDest, + vICMSUFRemet: icmsUfDest.vICMSUFRemet, + }, + }; + } + getTotal(total) { + return { + ICMSTot: total.icmsTot, + }; + } + getIcmsTot(icmsTot) { + return icmsTot; + } + getTransp(transp) { + return { + modFrete: transp.modalidateFrete, + transporta: transp.transporta, + vol: transp.vol, + + /** * transporta: TNFeInfNFeTranspTransporta; retTransp: TNFeInfNFeTranspRetTransp; //balsa @@ -1241,56 +1491,68 @@ class NFeProcessor { itemsElementName: ItemsChoiceType5[]; vol: TNFeInfNFeTranspVol[]; */ - }; - } - getPag(pagamento) { - let pag = {}; - pag.detPag = this.getDetalhamentoPagamentos(pagamento.pagamentos); - pag.vTroco = pagamento.valorTroco; - return pag; + }; + } + getPag(pagamento) { + let pag = {}; + pag.detPag = this.getDetalhamentoPagamentos(pagamento.pagamentos); + pag.vTroco = pagamento.valorTroco; + return pag; + } + getDetalhamentoPagamentos(pagamentos) { + let listPagamentos = []; + let detPag; + for (const pag of pagamentos) { + detPag = {}; + detPag.indPag = Utils.getEnumByValue( + schema.TNFeInfNFePagDetPagIndPag, + pag.indicadorFormaPagamento + ); + detPag.tPag = Utils.getEnumByValue( + schema.TNFeInfNFePagDetPagTPag, + pag.formaPagamento + ); + detPag.vPag = pag.valor; + if (pag.dadosCartao) { + detPag.card = this.getDetalhamentoCartao(pag.dadosCartao); + } + listPagamentos.push(detPag); } - getDetalhamentoPagamentos(pagamentos) { - let listPagamentos = []; - let detPag; - for (const pag of pagamentos) { - detPag = {}; - detPag.indPag = Utils.getEnumByValue(schema.TNFeInfNFePagDetPagIndPag, pag.indicadorFormaPagamento); - detPag.tPag = Utils.getEnumByValue(schema.TNFeInfNFePagDetPagTPag, pag.formaPagamento); - detPag.vPag = pag.valor; - if (pag.dadosCartao) { - detPag.card = this.getDetalhamentoCartao(pag.dadosCartao); - } - listPagamentos.push(detPag); - } - return listPagamentos; + return listPagamentos; + } + getDetalhamentoCartao(dadosCartao) { + return { + tpIntegra: Utils.getEnumByValue( + schema.TNFeInfNFePagDetPagCardTpIntegra, + dadosCartao.tipoIntegracao + ), + CNPJ: dadosCartao.cnpj, + tBand: Utils.getEnumByValue( + schema.TNFeInfNFePagDetPagCardTBand, + dadosCartao.bandeira + ), + cAut: dadosCartao.codAutorizacao, + }; + } + getInfoAdic(info) { + return { + infCpl: info.infoComplementar, + infAdFisco: info.infoFisco, + }; + } + getResponsavelTecnico(respTec, chave) { + const result = { + CNPJ: respTec.cnpj, + xContato: respTec.contato, + email: respTec.email, + fone: respTec.fone, + }; + if (respTec.CSRT != null && respTec.CSRT != "") { + result.idCSRT = respTec.idCSRT; + result.hashCSRT = this.gerarHashCSRT(chave, respTec.CSRT); } - getDetalhamentoCartao(dadosCartao) { - return { - tpIntegra: Utils.getEnumByValue(schema.TNFeInfNFePagDetPagCardTpIntegra, dadosCartao.tipoIntegracao), - CNPJ: dadosCartao.cnpj, - tBand: Utils.getEnumByValue(schema.TNFeInfNFePagDetPagCardTBand, dadosCartao.bandeira), - cAut: dadosCartao.codAutorizacao - }; - } - getInfoAdic(info) { - return { - infCpl: info.infoComplementar, - infAdFisco: info.infoFisco - }; - } - getResponsavelTecnico(respTec, chave) { - const result = { - CNPJ: respTec.cnpj, - xContato: respTec.contato, - email: respTec.email, - fone: respTec.fone, - }; - if (respTec.CSRT != null && respTec.CSRT != "") { - result.idCSRT = respTec.idCSRT; - result.hashCSRT = this.gerarHashCSRT(chave, respTec.CSRT); - } - return result; - /* + return result; + /* return { CNPJ: respTec.cnpj, xContato: respTec.contato, @@ -1300,9 +1562,9 @@ class NFeProcessor { hashCSRT: this.gerarHashCSRT(chave, respTec.CSRT) } */ - } - gerarHashCSRT(chave, CSRT) { - return Buffer.from(sha1(CSRT + chave), 'hex').toString('base64'); - } + } + gerarHashCSRT(chave, CSRT) { + return Buffer.from(sha1(CSRT + chave), "hex").toString("base64"); + } } exports.NFeProcessor = NFeProcessor; From 297af9e986da7965d5acee4a89a4c95ade78a6f2 Mon Sep 17 00:00:00 2001 From: gestefane Date: Fri, 29 Apr 2022 00:45:55 -0300 Subject: [PATCH 06/11] validacao do lote envio com schema xsd --- autorizadores.json | 12 +- autorizadoresNFe.json | 10 +- lib/factory/processor/enviaProcessor.d.ts | 1 + lib/factory/processor/enviaProcessor.js | 27 + lib/factory/processor/nfeProcessor2.d.ts | 1 + lib/factory/processor/nfeProcessor2.js | 256 +- package.json | 9 +- rascunho/Schemas.zip | Bin 0 -> 216979 bytes rascunho/Schemas/Averb_v1.00.xsd | 11 + rascunho/Schemas/CCe_v1.00.xsd | 11 + rascunho/Schemas/EPEC_v1.00.xsd | 9 + rascunho/Schemas/SuframaInternaliza_v1.00.xsd | 9 + rascunho/Schemas/SuframaVistoria_v1.00.xsd | 9 + rascunho/Schemas/confRecebto_v1.00.xsd | 9 + rascunho/Schemas/consCad_v2.00.xsd | 9 + rascunho/Schemas/consNFeDest_v1.01.xsd | 10 + rascunho/Schemas/consReciNFe_v3.10.xsd | 9 + rascunho/Schemas/consReciNFe_v4.00.xsd | 9 + rascunho/Schemas/consSitNFe_v3.10.xsd | 9 + rascunho/Schemas/consSitNFe_v4.00.xsd | 9 + rascunho/Schemas/consStatServ_v3.10.xsd | 9 + rascunho/Schemas/consStatServ_v4.00.xsd | 9 + rascunho/Schemas/distDFeInt_v1.00.xsd | 71 + rascunho/Schemas/distDFeInt_v1.01.xsd | 85 + rascunho/Schemas/downloadNFe_v1.00.xsd | 10 + rascunho/Schemas/e110110_v1.00.xsd | 58 + rascunho/Schemas/e110111_v1.00.xsd | 42 + rascunho/Schemas/e110112_v1.00.xsd | 69 + rascunho/Schemas/e110130_v1.00.xsd | 102 + rascunho/Schemas/e110131_v1.00.xsd | 51 + rascunho/Schemas/e110140NFCe_v1.00.xsd | 118 + rascunho/Schemas/e110140NFe_v1.00.xsd | 124 + rascunho/Schemas/e110140_v1.00.xsd | 124 + rascunho/Schemas/e110150_v1.00.xsd | 88 + rascunho/Schemas/e111500_v1.00.xsd | 69 + rascunho/Schemas/e111501_v1.00.xsd | 69 + rascunho/Schemas/e111502_v1.00.xsd | 50 + rascunho/Schemas/e111503_v1.00.xsd | 50 + rascunho/Schemas/e210200_v1.00.xsd | 32 + rascunho/Schemas/e210210_v1.00.xsd | 32 + rascunho/Schemas/e210220_v1.00.xsd | 45 + rascunho/Schemas/e210240_v1.00.xsd | 44 + rascunho/Schemas/e411500_v1.00.xsd | 134 + rascunho/Schemas/e411501_v1.00.xsd | 134 + rascunho/Schemas/e411502_v1.00.xsd | 95 + rascunho/Schemas/e411503_v1.00.xsd | 95 + rascunho/Schemas/e610130_v1.00.xsd | 128 + rascunho/Schemas/e610131_v1.00.xsd | 68 + rascunho/Schemas/e790700_v1.00.xsd | 125 + rascunho/Schemas/e990900_v1.00.xsd | 87 + rascunho/Schemas/e990910_v1.00.xsd | 81 + rascunho/Schemas/envAverb_v1.00.xsd | 9 + rascunho/Schemas/envCCe_v1.00.xsd | 10 + .../Schemas/envCancelPProrrogNFe_v1.0.xsd | 50 + .../envComprovanteEntregaNFe_v1.00.xsd | 11 + rascunho/Schemas/envConfRecebto_v1.00.xsd | 9 + rascunho/Schemas/envEPEC_v1.00.xsd | 9 + .../envEventoAtorInteressado_v1.00.xsd | 9 + .../Schemas/envEventoCancEntregaNFe_v1.00.xsd | 10 + rascunho/Schemas/envEventoCancNFe_v1.00.xsd | 9 + rascunho/Schemas/envEventoCancSubst_v1.00.xsd | 9 + .../Schemas/envEventoEntregaNFe_v1.00.xsd | 10 + rascunho/Schemas/envEvento_v1.00.xsd | 9 + rascunho/Schemas/envFiscoNfe_v1.0.xsd | 179 + rascunho/Schemas/envPProrrogNFe_v1.0.xsd | 65 + rascunho/Schemas/envRemIndus_v1.00.xsd | 9 + .../Schemas/envSuframaInternaliza_v1.00.xsd | 10 + rascunho/Schemas/envSuframaVistoria_v1.00.xsd | 10 + rascunho/Schemas/enviNFe_v3.10.xsd | 9 + rascunho/Schemas/enviNFe_v4.00.xsd | 9 + .../Schemas/eventoAtorInteressado_v1.00.xsd | 9 + .../Schemas/eventoCancEntregaNFe_v1.00.xsd | 9 + rascunho/Schemas/eventoCancNFe_v1.00.xsd | 9 + rascunho/Schemas/eventoCancSubst_v1.00.xsd | 9 + rascunho/Schemas/eventoEPEC_v0.01.xsd | 267 + rascunho/Schemas/eventoEPEC_v1.00.xsd | 267 + rascunho/Schemas/eventoEntregaNFe_v1.00.xsd | 9 + rascunho/Schemas/eventoRemIndus_v1.00.xsd | 9 + rascunho/Schemas/inutNFe_v3.10.xsd | 9 + rascunho/Schemas/inutNFe_v4.00.xsd | 9 + rascunho/Schemas/leiauteAverb_v1.00.xsd | 482 ++ rascunho/Schemas/leiauteCCe_v1.00.xsd | 418 + .../leiauteComprovanteEntregaNFe_v1.00.xsd | 487 ++ rascunho/Schemas/leiauteConfRecebto_v1.00.xsd | 406 + rascunho/Schemas/leiauteConsNFeDest_v1.01.xsd | 483 ++ rascunho/Schemas/leiauteConsSitNFe_v3.10.xsd | 502 ++ rascunho/Schemas/leiauteConsSitNFe_v4.00.xsd | 503 ++ .../Schemas/leiauteConsStatServ_v3.10.xsd | 98 + .../Schemas/leiauteConsStatServ_v4.00.xsd | 98 + .../Schemas/leiauteConsultaCadastro_v2.00.xsd | 404 + rascunho/Schemas/leiauteDownloadNFe_v1.00.xsd | 149 + rascunho/Schemas/leiauteEPEC_v1.00.xsd | 459 ++ .../leiauteEventoAtorInteressado_v1.00.xsd | 384 + .../leiauteEventoCancEntregaNFe_v1.00.xsd | 307 + .../Schemas/leiauteEventoCancNFe_v1.00.xsd | 358 + .../Schemas/leiauteEventoCancSubst_v1.00.xsd | 366 + .../Schemas/leiauteEventoEntregaNFe_v1.00.xsd | 321 + rascunho/Schemas/leiauteEvento_v1.00.xsd | 379 + rascunho/Schemas/leiauteInutNFe_v3.10.xsd | 193 + rascunho/Schemas/leiauteInutNFe_v4.00.xsd | 193 + rascunho/Schemas/leiauteNFe_v3.10.xsd | 6060 +++++++++++++++ rascunho/Schemas/leiauteNFe_v4.00.xsd | 6874 +++++++++++++++++ rascunho/Schemas/leiauteRemIndus_v1.00.xsd | 382 + .../leiauteSuframaInternaliza_v1.00.xsd | 642 ++ .../Schemas/leiauteSuframaVistoria_v1.00.xsd | 648 ++ rascunho/Schemas/nfe_v3.10.xsd | 9 + rascunho/Schemas/nfe_v4.00.xsd | 9 + rascunho/Schemas/procAverbNFe_v1.00.xsd | 10 + rascunho/Schemas/procCCeNFe_v1.00.xsd | 10 + .../procComprovanteEntregaNFe_v1.00.xsd | 10 + rascunho/Schemas/procConfRecebtoNFe_v1.00.xsd | 9 + rascunho/Schemas/procEPEC_v1.00.xsd | 9 + .../procEventoAtorInteressado_v1.00.xsd | 9 + .../procEventoCancEntregaNFe_v1.00.xsd | 9 + rascunho/Schemas/procEventoCancNFe_v1.00.xsd | 9 + .../Schemas/procEventoCancSubst_v1.00.xsd | 9 + .../Schemas/procEventoEntregaNFe_v1.00.xsd | 9 + rascunho/Schemas/procEventoNFe_v1.00.xsd | 9 + rascunho/Schemas/procEventoNFe_v99.99.xsd | 37 + rascunho/Schemas/procInutNFe_v3.10.xsd | 9 + rascunho/Schemas/procInutNFe_v4.00.xsd | 9 + rascunho/Schemas/procNFe_v3.10.xsd | 9 + rascunho/Schemas/procNFe_v4.00.xsd | 9 + rascunho/Schemas/procRemIndus_v1.00.xsd | 9 + rascunho/Schemas/resEvento_v1.00.xsd | 94 + rascunho/Schemas/resEvento_v1.01.xsd | 95 + rascunho/Schemas/resNFe_v1.00.xsd | 110 + rascunho/Schemas/resNFe_v1.01.xsd | 113 + .../retComprovanteEntregaNFe_v1.00.xsd | 10 + rascunho/Schemas/retConsReciNFe_v3.10.xsd | 9 + rascunho/Schemas/retConsReciNFe_v4.00.xsd | 9 + rascunho/Schemas/retConsSitNFe_v3.10.xsd | 9 + rascunho/Schemas/retConsSitNFe_v4.00.xsd | 9 + rascunho/Schemas/retConsStatServ_v3.10.xsd | 9 + rascunho/Schemas/retConsStatServ_v4.00.xsd | 9 + rascunho/Schemas/retDistDFeInt_v1.00.xsd | 84 + rascunho/Schemas/retDistDFeInt_v1.01.xsd | 86 + rascunho/Schemas/retDownloadNFe_v1.00.xsd | 9 + rascunho/Schemas/retEnvAverb_v1.00.xsd | 9 + rascunho/Schemas/retEnvCCe_v1.00.xsd | 10 + .../Schemas/retEnvCancelPProrrogNFe_v1.0.xsd | 231 + rascunho/Schemas/retEnvConfRecebto_v1.00.xsd | 9 + rascunho/Schemas/retEnvEPEC_v1.00.xsd | 9 + .../retEnvEventoAtorInteressado_v1.00.xsd | 9 + .../Schemas/retEnvEventoCancNFe_v1.00.xsd | 9 + .../Schemas/retEnvEventoCancSubst_v1.00.xsd | 9 + rascunho/Schemas/retEnvEvento_v1.00.xsd | 9 + rascunho/Schemas/retEnvFiscoNFe_v1.0.xsd | 234 + rascunho/Schemas/retEnvRemIndus_v1.00.xsd | 9 + .../retEnvSuframaInternaliza_v1.00.xsd | 9 + .../Schemas/retEnvSuframaVistoria_v1.00.xsd | 9 + rascunho/Schemas/retEnviNFe_v3.10.xsd | 9 + rascunho/Schemas/retEnviNFe_v4.00.xsd | 9 + .../Schemas/retEventoCancEntregaNFe_v1.00.xsd | 9 + rascunho/Schemas/retEventoEPEC_v0.01.xsd | 207 + .../Schemas/retEventoEntregaNFe_v1.00.xsd | 9 + rascunho/Schemas/retInutNFe_v3.10.xsd | 9 + rascunho/Schemas/retInutNFe_v4.00.xsd | 9 + rascunho/Schemas/retPProrrogNFe_v1.0.xsd | 233 + rascunho/Schemas/retconsNFeDest_v1.01.xsd | 9 + rascunho/Schemas/tiposBasico_v1.03.xsd | 872 +++ rascunho/Schemas/tiposBasico_v3.10.xsd | 571 ++ rascunho/Schemas/tiposBasico_v4.00.xsd | 589 ++ rascunho/Schemas/tiposDistDFe_v1.00.xsd | 217 + rascunho/Schemas/tiposDistDFe_v1.01.xsd | 218 + .../Schemas/xmldsig-core-schema_v1.01.xsd | 98 + rascunho/lote-envio.xml | 186 + rascunho/nf.xml | 1 + rascunho/xml-51778.xml | 1 + 169 files changed, 29941 insertions(+), 111 deletions(-) create mode 100755 rascunho/Schemas.zip create mode 100644 rascunho/Schemas/Averb_v1.00.xsd create mode 100644 rascunho/Schemas/CCe_v1.00.xsd create mode 100644 rascunho/Schemas/EPEC_v1.00.xsd create mode 100644 rascunho/Schemas/SuframaInternaliza_v1.00.xsd create mode 100644 rascunho/Schemas/SuframaVistoria_v1.00.xsd create mode 100644 rascunho/Schemas/confRecebto_v1.00.xsd create mode 100644 rascunho/Schemas/consCad_v2.00.xsd create mode 100644 rascunho/Schemas/consNFeDest_v1.01.xsd create mode 100644 rascunho/Schemas/consReciNFe_v3.10.xsd create mode 100644 rascunho/Schemas/consReciNFe_v4.00.xsd create mode 100644 rascunho/Schemas/consSitNFe_v3.10.xsd create mode 100644 rascunho/Schemas/consSitNFe_v4.00.xsd create mode 100644 rascunho/Schemas/consStatServ_v3.10.xsd create mode 100644 rascunho/Schemas/consStatServ_v4.00.xsd create mode 100644 rascunho/Schemas/distDFeInt_v1.00.xsd create mode 100644 rascunho/Schemas/distDFeInt_v1.01.xsd create mode 100644 rascunho/Schemas/downloadNFe_v1.00.xsd create mode 100644 rascunho/Schemas/e110110_v1.00.xsd create mode 100644 rascunho/Schemas/e110111_v1.00.xsd create mode 100644 rascunho/Schemas/e110112_v1.00.xsd create mode 100644 rascunho/Schemas/e110130_v1.00.xsd create mode 100644 rascunho/Schemas/e110131_v1.00.xsd create mode 100644 rascunho/Schemas/e110140NFCe_v1.00.xsd create mode 100644 rascunho/Schemas/e110140NFe_v1.00.xsd create mode 100644 rascunho/Schemas/e110140_v1.00.xsd create mode 100644 rascunho/Schemas/e110150_v1.00.xsd create mode 100644 rascunho/Schemas/e111500_v1.00.xsd create mode 100644 rascunho/Schemas/e111501_v1.00.xsd create mode 100644 rascunho/Schemas/e111502_v1.00.xsd create mode 100644 rascunho/Schemas/e111503_v1.00.xsd create mode 100644 rascunho/Schemas/e210200_v1.00.xsd create mode 100644 rascunho/Schemas/e210210_v1.00.xsd create mode 100644 rascunho/Schemas/e210220_v1.00.xsd create mode 100644 rascunho/Schemas/e210240_v1.00.xsd create mode 100644 rascunho/Schemas/e411500_v1.00.xsd create mode 100644 rascunho/Schemas/e411501_v1.00.xsd create mode 100644 rascunho/Schemas/e411502_v1.00.xsd create mode 100644 rascunho/Schemas/e411503_v1.00.xsd create mode 100644 rascunho/Schemas/e610130_v1.00.xsd create mode 100644 rascunho/Schemas/e610131_v1.00.xsd create mode 100644 rascunho/Schemas/e790700_v1.00.xsd create mode 100644 rascunho/Schemas/e990900_v1.00.xsd create mode 100644 rascunho/Schemas/e990910_v1.00.xsd create mode 100644 rascunho/Schemas/envAverb_v1.00.xsd create mode 100644 rascunho/Schemas/envCCe_v1.00.xsd create mode 100644 rascunho/Schemas/envCancelPProrrogNFe_v1.0.xsd create mode 100644 rascunho/Schemas/envComprovanteEntregaNFe_v1.00.xsd create mode 100644 rascunho/Schemas/envConfRecebto_v1.00.xsd create mode 100644 rascunho/Schemas/envEPEC_v1.00.xsd create mode 100644 rascunho/Schemas/envEventoAtorInteressado_v1.00.xsd create mode 100644 rascunho/Schemas/envEventoCancEntregaNFe_v1.00.xsd create mode 100644 rascunho/Schemas/envEventoCancNFe_v1.00.xsd create mode 100644 rascunho/Schemas/envEventoCancSubst_v1.00.xsd create mode 100644 rascunho/Schemas/envEventoEntregaNFe_v1.00.xsd create mode 100644 rascunho/Schemas/envEvento_v1.00.xsd create mode 100644 rascunho/Schemas/envFiscoNfe_v1.0.xsd create mode 100644 rascunho/Schemas/envPProrrogNFe_v1.0.xsd create mode 100644 rascunho/Schemas/envRemIndus_v1.00.xsd create mode 100644 rascunho/Schemas/envSuframaInternaliza_v1.00.xsd create mode 100644 rascunho/Schemas/envSuframaVistoria_v1.00.xsd create mode 100644 rascunho/Schemas/enviNFe_v3.10.xsd create mode 100644 rascunho/Schemas/enviNFe_v4.00.xsd create mode 100644 rascunho/Schemas/eventoAtorInteressado_v1.00.xsd create mode 100644 rascunho/Schemas/eventoCancEntregaNFe_v1.00.xsd create mode 100644 rascunho/Schemas/eventoCancNFe_v1.00.xsd create mode 100644 rascunho/Schemas/eventoCancSubst_v1.00.xsd create mode 100644 rascunho/Schemas/eventoEPEC_v0.01.xsd create mode 100644 rascunho/Schemas/eventoEPEC_v1.00.xsd create mode 100644 rascunho/Schemas/eventoEntregaNFe_v1.00.xsd create mode 100644 rascunho/Schemas/eventoRemIndus_v1.00.xsd create mode 100644 rascunho/Schemas/inutNFe_v3.10.xsd create mode 100644 rascunho/Schemas/inutNFe_v4.00.xsd create mode 100644 rascunho/Schemas/leiauteAverb_v1.00.xsd create mode 100644 rascunho/Schemas/leiauteCCe_v1.00.xsd create mode 100644 rascunho/Schemas/leiauteComprovanteEntregaNFe_v1.00.xsd create mode 100644 rascunho/Schemas/leiauteConfRecebto_v1.00.xsd create mode 100644 rascunho/Schemas/leiauteConsNFeDest_v1.01.xsd create mode 100644 rascunho/Schemas/leiauteConsSitNFe_v3.10.xsd create mode 100644 rascunho/Schemas/leiauteConsSitNFe_v4.00.xsd create mode 100644 rascunho/Schemas/leiauteConsStatServ_v3.10.xsd create mode 100644 rascunho/Schemas/leiauteConsStatServ_v4.00.xsd create mode 100644 rascunho/Schemas/leiauteConsultaCadastro_v2.00.xsd create mode 100644 rascunho/Schemas/leiauteDownloadNFe_v1.00.xsd create mode 100644 rascunho/Schemas/leiauteEPEC_v1.00.xsd create mode 100644 rascunho/Schemas/leiauteEventoAtorInteressado_v1.00.xsd create mode 100644 rascunho/Schemas/leiauteEventoCancEntregaNFe_v1.00.xsd create mode 100644 rascunho/Schemas/leiauteEventoCancNFe_v1.00.xsd create mode 100644 rascunho/Schemas/leiauteEventoCancSubst_v1.00.xsd create mode 100644 rascunho/Schemas/leiauteEventoEntregaNFe_v1.00.xsd create mode 100644 rascunho/Schemas/leiauteEvento_v1.00.xsd create mode 100644 rascunho/Schemas/leiauteInutNFe_v3.10.xsd create mode 100644 rascunho/Schemas/leiauteInutNFe_v4.00.xsd create mode 100644 rascunho/Schemas/leiauteNFe_v3.10.xsd create mode 100644 rascunho/Schemas/leiauteNFe_v4.00.xsd create mode 100644 rascunho/Schemas/leiauteRemIndus_v1.00.xsd create mode 100644 rascunho/Schemas/leiauteSuframaInternaliza_v1.00.xsd create mode 100644 rascunho/Schemas/leiauteSuframaVistoria_v1.00.xsd create mode 100644 rascunho/Schemas/nfe_v3.10.xsd create mode 100644 rascunho/Schemas/nfe_v4.00.xsd create mode 100644 rascunho/Schemas/procAverbNFe_v1.00.xsd create mode 100644 rascunho/Schemas/procCCeNFe_v1.00.xsd create mode 100644 rascunho/Schemas/procComprovanteEntregaNFe_v1.00.xsd create mode 100644 rascunho/Schemas/procConfRecebtoNFe_v1.00.xsd create mode 100644 rascunho/Schemas/procEPEC_v1.00.xsd create mode 100644 rascunho/Schemas/procEventoAtorInteressado_v1.00.xsd create mode 100644 rascunho/Schemas/procEventoCancEntregaNFe_v1.00.xsd create mode 100644 rascunho/Schemas/procEventoCancNFe_v1.00.xsd create mode 100644 rascunho/Schemas/procEventoCancSubst_v1.00.xsd create mode 100644 rascunho/Schemas/procEventoEntregaNFe_v1.00.xsd create mode 100644 rascunho/Schemas/procEventoNFe_v1.00.xsd create mode 100644 rascunho/Schemas/procEventoNFe_v99.99.xsd create mode 100644 rascunho/Schemas/procInutNFe_v3.10.xsd create mode 100644 rascunho/Schemas/procInutNFe_v4.00.xsd create mode 100644 rascunho/Schemas/procNFe_v3.10.xsd create mode 100644 rascunho/Schemas/procNFe_v4.00.xsd create mode 100644 rascunho/Schemas/procRemIndus_v1.00.xsd create mode 100644 rascunho/Schemas/resEvento_v1.00.xsd create mode 100644 rascunho/Schemas/resEvento_v1.01.xsd create mode 100644 rascunho/Schemas/resNFe_v1.00.xsd create mode 100644 rascunho/Schemas/resNFe_v1.01.xsd create mode 100644 rascunho/Schemas/retComprovanteEntregaNFe_v1.00.xsd create mode 100644 rascunho/Schemas/retConsReciNFe_v3.10.xsd create mode 100644 rascunho/Schemas/retConsReciNFe_v4.00.xsd create mode 100644 rascunho/Schemas/retConsSitNFe_v3.10.xsd create mode 100644 rascunho/Schemas/retConsSitNFe_v4.00.xsd create mode 100644 rascunho/Schemas/retConsStatServ_v3.10.xsd create mode 100644 rascunho/Schemas/retConsStatServ_v4.00.xsd create mode 100644 rascunho/Schemas/retDistDFeInt_v1.00.xsd create mode 100644 rascunho/Schemas/retDistDFeInt_v1.01.xsd create mode 100644 rascunho/Schemas/retDownloadNFe_v1.00.xsd create mode 100644 rascunho/Schemas/retEnvAverb_v1.00.xsd create mode 100644 rascunho/Schemas/retEnvCCe_v1.00.xsd create mode 100644 rascunho/Schemas/retEnvCancelPProrrogNFe_v1.0.xsd create mode 100644 rascunho/Schemas/retEnvConfRecebto_v1.00.xsd create mode 100644 rascunho/Schemas/retEnvEPEC_v1.00.xsd create mode 100644 rascunho/Schemas/retEnvEventoAtorInteressado_v1.00.xsd create mode 100644 rascunho/Schemas/retEnvEventoCancNFe_v1.00.xsd create mode 100644 rascunho/Schemas/retEnvEventoCancSubst_v1.00.xsd create mode 100644 rascunho/Schemas/retEnvEvento_v1.00.xsd create mode 100644 rascunho/Schemas/retEnvFiscoNFe_v1.0.xsd create mode 100644 rascunho/Schemas/retEnvRemIndus_v1.00.xsd create mode 100644 rascunho/Schemas/retEnvSuframaInternaliza_v1.00.xsd create mode 100644 rascunho/Schemas/retEnvSuframaVistoria_v1.00.xsd create mode 100644 rascunho/Schemas/retEnviNFe_v3.10.xsd create mode 100644 rascunho/Schemas/retEnviNFe_v4.00.xsd create mode 100644 rascunho/Schemas/retEventoCancEntregaNFe_v1.00.xsd create mode 100644 rascunho/Schemas/retEventoEPEC_v0.01.xsd create mode 100644 rascunho/Schemas/retEventoEntregaNFe_v1.00.xsd create mode 100644 rascunho/Schemas/retInutNFe_v3.10.xsd create mode 100644 rascunho/Schemas/retInutNFe_v4.00.xsd create mode 100644 rascunho/Schemas/retPProrrogNFe_v1.0.xsd create mode 100644 rascunho/Schemas/retconsNFeDest_v1.01.xsd create mode 100644 rascunho/Schemas/tiposBasico_v1.03.xsd create mode 100644 rascunho/Schemas/tiposBasico_v3.10.xsd create mode 100644 rascunho/Schemas/tiposBasico_v4.00.xsd create mode 100644 rascunho/Schemas/tiposDistDFe_v1.00.xsd create mode 100644 rascunho/Schemas/tiposDistDFe_v1.01.xsd create mode 100644 rascunho/Schemas/xmldsig-core-schema_v1.01.xsd create mode 100644 rascunho/lote-envio.xml create mode 100644 rascunho/nf.xml create mode 100644 rascunho/xml-51778.xml diff --git a/autorizadores.json b/autorizadores.json index 98a49f6..23dabd5 100644 --- a/autorizadores.json +++ b/autorizadores.json @@ -120,8 +120,12 @@ "url_homologacao": "https://hnfce.fazenda.mg.gov.br/nfce/services/NFeStatusServico4" }, "inutilizacao": { - "url_producao": "https://nfe.fazenda.mg.gov.br/nfe2/services/NFeInutilizacao4", + "url_producao": "https://nfce.fazenda.mg.gov.br/nfe2/services/NFeInutilizacao4", "url_homologacao": "https://hnfce.fazenda.mg.gov.br/nfce/services/Nfeinutilizacao4.asmx" + }, + "recepcaoEvento": { + "url_producao": "https://nfce.fazenda.mg.gov.br/nfce/services/NFeRecepcaoEvento4", + "url_homologacao": "https://hnfce.fazenda.mg.gov.br/nfce/services/NFeRecepcaoEvento4" } } }, @@ -185,6 +189,10 @@ "inutilizacao": { "url_producao": "https://nfe.svrs.rs.gov.br/ws/nfeinutilizacao/nfeinutilizacao4.asmx", "url_homologacao": "https://nfce-homologacao.svrs.rs.gov.br/ws/nfeinutilizacao/nfeinutilizacao4.asmx" + }, + "recepcaoEvento": { + "url_producao": "https://nfce.svrs.rs.gov.br/ws/recepcaoevento/recepcaoevento4.asmx", + "url_homologacao": "https://nfce-homologacao.svrs.rs.gov.br/ws/recepcaoevento/recepcaoevento4.asmx" } } }, @@ -221,4 +229,4 @@ } } } -} \ No newline at end of file +} diff --git a/autorizadoresNFe.json b/autorizadoresNFe.json index 4833b73..4ed92ab 100644 --- a/autorizadoresNFe.json +++ b/autorizadoresNFe.json @@ -81,6 +81,10 @@ "consultarStatusServico": { "url_producao": "https://nfe.fazenda.mg.gov.br/nfe2/services/NFeStatusServico4", "url_homologacao": "https://hnfe.fazenda.mg.gov.br/nfe2/services/NFeStatusServico4" + }, + "recepcaoEvento": { + "url_producao": "https://nfe.fazenda.mg.gov.br/nfe2/services/NFeRecepcaoEvento4", + "url_homologacao": "https://hnfe.fazenda.mg.gov.br/nfe2/services/NFeRecepcaoEvento4" } } }, @@ -233,6 +237,10 @@ "consultarStatusServico": { "url_producao": "https://nfe.svrs.rs.gov.br/ws/NfeStatusServico/NfeStatusServico4.asmx", "url_homologacao": "https://nfe-homologacao.svrs.rs.gov.br/ws/NfeStatusServico/NfeStatusServico4.asmx" + }, + "recepcaoEvento": { + "url_producao": "https://nfe.svrs.rs.gov.br/ws/recepcaoevento/recepcaoevento4.asmx", + "url_homologacao": "https://nfe-homologacao.svrs.rs.gov.br/ws/recepcaoevento/recepcaoevento4.asmx" } } }, @@ -270,4 +278,4 @@ } } } -} \ No newline at end of file +} diff --git a/lib/factory/processor/enviaProcessor.d.ts b/lib/factory/processor/enviaProcessor.d.ts index 02ec938..8d1b2d0 100644 --- a/lib/factory/processor/enviaProcessor.d.ts +++ b/lib/factory/processor/enviaProcessor.d.ts @@ -11,6 +11,7 @@ export declare class EnviaProcessor { * @param assincrono Boolean para definir se a execução sera sincrona ou assincrona, por padrao === sincrona! */ executar(documento: NFeBase, assincrono?: boolean): Promise; + obterXmlLoteAssinado(documento: NFeBase); private configuraUrlsSefaz; private appendQRCodeXML; transmitirXml(xmlLote: string, nfeObj: Object): Promise; diff --git a/lib/factory/processor/enviaProcessor.js b/lib/factory/processor/enviaProcessor.js index 54cf1e8..3233bea 100644 --- a/lib/factory/processor/enviaProcessor.js +++ b/lib/factory/processor/enviaProcessor.js @@ -104,6 +104,33 @@ class EnviaProcessor { } return result; } + /** + * Metodo para realizar o processamento de documento(s) do tipo 55 ou 65 + * @param documento Array de documentos modelo 55 ou 1 documento modelo 65 + */ + async obterXmlLoteAssinado(documento) { + var result = null; + var assincrono = false; + try { + this.configuraUrlsSefaz(); + let doc = this.gerarXml(documento); + let xmlAssinado = signature_1.Signature.signXmlX509( + doc.xml, + "infNFe", + this.configuracoes.certificado + ); + if (documento.docFiscal.modelo == "65") { + let appendQRCode = this.appendQRCodeXML(documento, xmlAssinado); + xmlAssinado = appendQRCode.xml; + doc.nfe.infNFeSupl = appendQRCode.qrCode; + } + let xmlLote = this.gerarXmlLote(xmlAssinado, assincrono); + result = xmlLote; + } catch (ex) { + result = null; + } + return result; + } configuraUrlsSefaz() { const { geral: { modelo, ambiente }, diff --git a/lib/factory/processor/nfeProcessor2.d.ts b/lib/factory/processor/nfeProcessor2.d.ts index 3c202a4..c995878 100644 --- a/lib/factory/processor/nfeProcessor2.d.ts +++ b/lib/factory/processor/nfeProcessor2.d.ts @@ -20,4 +20,5 @@ export declare class NFeProcessor { inutilizarNumeracao(dados: Inutilizar): Promise; gerarEvento(evento: Evento): Promise; processarXmlContingencia(xml: string): Promise; + obterXmlLoteAssinado(documento: NFeDocumento | NFCeDocumento); } diff --git a/lib/factory/processor/nfeProcessor2.js b/lib/factory/processor/nfeProcessor2.js index 6284af0..d0e4e12 100644 --- a/lib/factory/processor/nfeProcessor2.js +++ b/lib/factory/processor/nfeProcessor2.js @@ -13,116 +13,160 @@ const path = require("path"); * Classe para processamento de NFe/NFCe */ class NFeProcessor { - constructor(configuracoes) { - this.configuracoes = configuracoes; - this.retornoProcessor = null; - this.enviaProcessor = null; - this.eventoProcessor = null; - this.inutlizacaoProcessor = null; - if (!this.configuracoes.geral.versao) - this.configuracoes.geral.versao = '4.00'; - if (!this.configuracoes.webservices) - this.configuracoes.webservices = { tentativas: 3, aguardarConsultaRetorno: 1000 }; - if (!this.configuracoes.webservices.tentativas) - this.configuracoes.webservices.tentativas = 3; - if (!this.configuracoes.webservices.aguardarConsultaRetorno) - this.configuracoes.webservices.aguardarConsultaRetorno = 1000; - if (this.configuracoes.arquivos) { - if (this.configuracoes.arquivos.pastaEnvio && (!'/\\'.includes(this.configuracoes.arquivos.pastaEnvio.substr(-1)))) - this.configuracoes.arquivos.pastaEnvio = this.configuracoes.arquivos.pastaEnvio + path.sep; - if (this.configuracoes.arquivos.pastaRetorno && (!'/\\'.includes(this.configuracoes.arquivos.pastaRetorno.substr(-1)))) - this.configuracoes.arquivos.pastaRetorno = this.configuracoes.arquivos.pastaRetorno + path.sep; - if (this.configuracoes.arquivos.pastaXML && (!'/\\'.includes(this.configuracoes.arquivos.pastaXML.substr(-1)))) - this.configuracoes.arquivos.pastaXML = this.configuracoes.arquivos.pastaXML + path.sep; - } - this.retornoProcessor = new retornoProcessor_1.RetornoProcessor(this.configuracoes); - this.enviaProcessor = new enviaProcessor_1.EnviaProcessor(this.configuracoes); - this.eventoProcessor = new eventoProcessor_1.EventoProcessor(this.configuracoes); - this.inutlizacaoProcessor = new inutilizaProcessor_1.InutilizaProcessor(this.configuracoes); - } - /** - * Metodo para realizar o processamento de documento(s) do tipo 55 ou 65 de forma sincrona - * @param documento Array de documentos modelo 55 ou 1 documento modelo 65 - */ - async processarDocumento(documento) { - let result = await this.executar(documento); - return result; + constructor(configuracoes) { + this.configuracoes = configuracoes; + this.retornoProcessor = null; + this.enviaProcessor = null; + this.eventoProcessor = null; + this.inutlizacaoProcessor = null; + if (!this.configuracoes.geral.versao) + this.configuracoes.geral.versao = "4.00"; + if (!this.configuracoes.webservices) + this.configuracoes.webservices = { + tentativas: 3, + aguardarConsultaRetorno: 1000, + }; + if (!this.configuracoes.webservices.tentativas) + this.configuracoes.webservices.tentativas = 3; + if (!this.configuracoes.webservices.aguardarConsultaRetorno) + this.configuracoes.webservices.aguardarConsultaRetorno = 1000; + if (this.configuracoes.arquivos) { + if ( + this.configuracoes.arquivos.pastaEnvio && + !"/\\".includes(this.configuracoes.arquivos.pastaEnvio.substr(-1)) + ) + this.configuracoes.arquivos.pastaEnvio = + this.configuracoes.arquivos.pastaEnvio + path.sep; + if ( + this.configuracoes.arquivos.pastaRetorno && + !"/\\".includes(this.configuracoes.arquivos.pastaRetorno.substr(-1)) + ) + this.configuracoes.arquivos.pastaRetorno = + this.configuracoes.arquivos.pastaRetorno + path.sep; + if ( + this.configuracoes.arquivos.pastaXML && + !"/\\".includes(this.configuracoes.arquivos.pastaXML.substr(-1)) + ) + this.configuracoes.arquivos.pastaXML = + this.configuracoes.arquivos.pastaXML + path.sep; } - async executar(documento) { - const { arquivos, geral } = this.configuracoes; - let result = {}; - try { - result = await this.enviaProcessor.executar(documento); - let retEnviNFe = null; - let retConsReciNFe = null; - let cStat = ''; - if (result.envioNF && result.envioNF.data) { - const data = Object(result.envioNF.data); - if (data.retEnviNFe && geral.modelo == '55') { - retEnviNFe = data.retEnviNFe; - const recibo = retEnviNFe.infRec.nRec; - result.consultaProc = await this.retornoProcessor.executar(recibo); - retConsReciNFe = Object(result.consultaProc.data).retConsReciNFe; - cStat = retConsReciNFe.cStat; - } - if (retEnviNFe && retConsReciNFe) - if (retEnviNFe.cStat == '103' && retConsReciNFe.cStat == '104') { //protNFe.infProt. - result.confirmada = true; - result.success = true; - } - if (arquivos && arquivos.salvar) { - if (!fs.existsSync(arquivos.pastaEnvio)) - fs.mkdirSync(arquivos.pastaEnvio, { recursive: true }); - if (!fs.existsSync(arquivos.pastaRetorno)) - fs.mkdirSync(arquivos.pastaRetorno, { recursive: true }); - if (!fs.existsSync(arquivos.pastaXML)) - fs.mkdirSync(arquivos.pastaXML, { recursive: true }); - if ((result.success == true) && (retConsReciNFe.cStat == '104')) { - const filename = `${arquivos.pastaXML}${retConsReciNFe.protNFe.infProt.chNFe}-procNFe.xml`; - const nfe_enviada = Object(xmlHelper_1.XmlHelper.deserializeXml(result.envioNF.xml_enviado, { explicitArray: false })); - const nfeProc = { - $: { versao: "1.00", xmlns: "http://www.portalfiscal.inf.br/nfe" }, - NFe: nfe_enviada.enviNFe.NFe, - protNFe: retConsReciNFe.protNFe - }; - Utils.removeSelfClosedFields(nfeProc); - let xmlNfeProc = xmlHelper_1.XmlHelper.serializeXml(nfeProc, 'nfeProc'); - fs.writeFileSync(filename, xmlNfeProc); - } - else { - const filenameEnvio = `${arquivos.pastaEnvio}${retEnviNFe.infRec.nRec}-enviNFe.xml`; - const filenameRetorno = `${arquivos.pastaRetorno}${retEnviNFe.infRec.nRec}-retEnviNFe.xml`; - fs.writeFileSync(filenameEnvio, result.envioNF.xml_enviado); - fs.writeFileSync(filenameRetorno, result.envioNF.xml_recebido); - const filenameConsultaEnvio = `${arquivos.pastaEnvio}${retConsReciNFe.nRec}-consReciNFe.xml`; - const filenameConsultaRetorno = `${arquivos.pastaRetorno}${retConsReciNFe.nRec}-retConsReciNFe.xml`; - fs.writeFileSync(filenameConsultaEnvio, result.consultaProc.xml_enviado); - fs.writeFileSync(filenameConsultaRetorno, result.consultaProc.xml_recebido); - } - } - } - else if (result.retornoContingenciaOffline && result.success) { - return result; - } - else { - console.error('nfeProcessor.executar: Erro ao realizar requisição', result); - throw new Error('Erro ao realizar requisição'); - } + this.retornoProcessor = new retornoProcessor_1.RetornoProcessor( + this.configuracoes + ); + this.enviaProcessor = new enviaProcessor_1.EnviaProcessor( + this.configuracoes + ); + this.eventoProcessor = new eventoProcessor_1.EventoProcessor( + this.configuracoes + ); + this.inutlizacaoProcessor = new inutilizaProcessor_1.InutilizaProcessor( + this.configuracoes + ); + } + /** + * Metodo para realizar o processamento de documento(s) do tipo 55 ou 65 de forma sincrona + * @param documento Array de documentos modelo 55 ou 1 documento modelo 65 + */ + async processarDocumento(documento) { + let result = await this.executar(documento); + return result; + } + async executar(documento) { + const { arquivos, geral } = this.configuracoes; + let result = {}; + try { + result = await this.enviaProcessor.executar(documento); + let retEnviNFe = null; + let retConsReciNFe = null; + let cStat = ""; + if (result.envioNF && result.envioNF.data) { + const data = Object(result.envioNF.data); + if (data.retEnviNFe && geral.modelo == "55") { + retEnviNFe = data.retEnviNFe; + const recibo = retEnviNFe.infRec.nRec; + result.consultaProc = await this.retornoProcessor.executar(recibo); + retConsReciNFe = Object(result.consultaProc.data).retConsReciNFe; + cStat = retConsReciNFe.cStat; } - catch (ex) { - result.success = false; - result.error = ex; + if (retEnviNFe && retConsReciNFe) + if (retEnviNFe.cStat == "103" && retConsReciNFe.cStat == "104") { + //protNFe.infProt. + result.confirmada = true; + result.success = true; + } + if (arquivos && arquivos.salvar) { + if (!fs.existsSync(arquivos.pastaEnvio)) + fs.mkdirSync(arquivos.pastaEnvio, { recursive: true }); + if (!fs.existsSync(arquivos.pastaRetorno)) + fs.mkdirSync(arquivos.pastaRetorno, { recursive: true }); + if (!fs.existsSync(arquivos.pastaXML)) + fs.mkdirSync(arquivos.pastaXML, { recursive: true }); + if (result.success == true && retConsReciNFe.cStat == "104") { + const filename = `${arquivos.pastaXML}${retConsReciNFe.protNFe.infProt.chNFe}-procNFe.xml`; + const nfe_enviada = Object( + xmlHelper_1.XmlHelper.deserializeXml(result.envioNF.xml_enviado, { + explicitArray: false, + }) + ); + const nfeProc = { + $: { + versao: "1.00", + xmlns: "http://www.portalfiscal.inf.br/nfe", + }, + NFe: nfe_enviada.enviNFe.NFe, + protNFe: retConsReciNFe.protNFe, + }; + Utils.removeSelfClosedFields(nfeProc); + let xmlNfeProc = xmlHelper_1.XmlHelper.serializeXml( + nfeProc, + "nfeProc" + ); + fs.writeFileSync(filename, xmlNfeProc); + } else { + const filenameEnvio = `${arquivos.pastaEnvio}${retEnviNFe.infRec.nRec}-enviNFe.xml`; + const filenameRetorno = `${arquivos.pastaRetorno}${retEnviNFe.infRec.nRec}-retEnviNFe.xml`; + fs.writeFileSync(filenameEnvio, result.envioNF.xml_enviado); + fs.writeFileSync(filenameRetorno, result.envioNF.xml_recebido); + const filenameConsultaEnvio = `${arquivos.pastaEnvio}${retConsReciNFe.nRec}-consReciNFe.xml`; + const filenameConsultaRetorno = `${arquivos.pastaRetorno}${retConsReciNFe.nRec}-retConsReciNFe.xml`; + fs.writeFileSync( + filenameConsultaEnvio, + result.consultaProc.xml_enviado + ); + fs.writeFileSync( + filenameConsultaRetorno, + result.consultaProc.xml_recebido + ); + } } + } else if (result.retornoContingenciaOffline && result.success) { return result; + } else { + console.error( + "nfeProcessor.executar: Erro ao realizar requisição", + result + ); + throw new Error("Erro ao realizar requisição"); + } + } catch (ex) { + result.success = false; + result.error = ex; } - async inutilizarNumeracao(dados) { - return await this.inutlizacaoProcessor.executar(dados); - } - async gerarEvento(evento) { - return await this.eventoProcessor.executar(evento); - } - async processarXmlContingencia(xml) { - return await this.enviaProcessor.transmitirXml(xml); - } + return result; + } + async inutilizarNumeracao(dados) { + return await this.inutlizacaoProcessor.executar(dados); + } + async gerarEvento(evento) { + return await this.eventoProcessor.executar(evento); + } + async processarXmlContingencia(xml) { + return await this.enviaProcessor.transmitirXml(xml); + } + async obterXmlLoteAssinado(documento) { + const { arquivos, geral } = this.configuracoes; + var result = await this.enviaProcessor.obterXmlLoteAssinado(documento); + return result; + } } exports.NFeProcessor = NFeProcessor; diff --git a/package.json b/package.json index 356f3bb..ea8fc39 100644 --- a/package.json +++ b/package.json @@ -35,18 +35,23 @@ "homepage": "https://github.com/lealhugui/node-dfe#readme", "dependencies": { "@types/node": "^12.11.1", + "axios": "^0.27.2", "cxsd": "^0.1.1", "debug": "^4.1.0", + "express-xml-bodyparser": "^0.3.0", + "libxmljs": "^0.19.7", + "libxmljs2": "^0.30.1", "lodash": "^4.17.11", "moment": "^2.22.2", "request": "^2.88.0", "sha1": "^1.1.1", "xml-crypto": "^1.2.0", - "xml2js": "0.4.19" + "xml2js": "0.4.19", + "xsd-schema-validator": "^0.7.0" }, "devDependencies": { - "@types/xml2js": "0.4.3", "@types/request": "^2.48.1", + "@types/xml2js": "0.4.3", "ts-node-dev": "^1.0.0-pre.44", "typescript": "^3.1.6" } diff --git a/rascunho/Schemas.zip b/rascunho/Schemas.zip new file mode 100755 index 0000000000000000000000000000000000000000..e5c891aabf2f7e1b8a7f41596d64e752322823ee GIT binary patch literal 216979 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 literal 0 HcmV?d00001 diff --git a/rascunho/Schemas/Averb_v1.00.xsd b/rascunho/Schemas/Averb_v1.00.xsd new file mode 100644 index 0000000..0758f6f --- /dev/null +++ b/rascunho/Schemas/Averb_v1.00.xsd @@ -0,0 +1,11 @@ + + + + + + + + Schema XML de validação do evento de Averbação da NFe + + + diff --git a/rascunho/Schemas/CCe_v1.00.xsd b/rascunho/Schemas/CCe_v1.00.xsd new file mode 100644 index 0000000..d142089 --- /dev/null +++ b/rascunho/Schemas/CCe_v1.00.xsd @@ -0,0 +1,11 @@ + + + + + + + + Schema XML de validação do evento Carta de Correção + + + diff --git a/rascunho/Schemas/EPEC_v1.00.xsd b/rascunho/Schemas/EPEC_v1.00.xsd new file mode 100644 index 0000000..234d5e1 --- /dev/null +++ b/rascunho/Schemas/EPEC_v1.00.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de validação do Evento Prévio de Emissão em Contingência + + + \ No newline at end of file diff --git a/rascunho/Schemas/SuframaInternaliza_v1.00.xsd b/rascunho/Schemas/SuframaInternaliza_v1.00.xsd new file mode 100644 index 0000000..04b8d4e --- /dev/null +++ b/rascunho/Schemas/SuframaInternaliza_v1.00.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de validação do evento do Internalização SUFRAMA 990910 + + + diff --git a/rascunho/Schemas/SuframaVistoria_v1.00.xsd b/rascunho/Schemas/SuframaVistoria_v1.00.xsd new file mode 100644 index 0000000..aecdaa6 --- /dev/null +++ b/rascunho/Schemas/SuframaVistoria_v1.00.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de validação do evento de Vistoria SUFRAMA 990900 + + + diff --git a/rascunho/Schemas/confRecebto_v1.00.xsd b/rascunho/Schemas/confRecebto_v1.00.xsd new file mode 100644 index 0000000..ca5bf7e --- /dev/null +++ b/rascunho/Schemas/confRecebto_v1.00.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de validação do evento Confirmação de recebimento + + + diff --git a/rascunho/Schemas/consCad_v2.00.xsd b/rascunho/Schemas/consCad_v2.00.xsd new file mode 100644 index 0000000..cfe02ff --- /dev/null +++ b/rascunho/Schemas/consCad_v2.00.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de validação do retorno da consulta cadastro contribuintes + + + diff --git a/rascunho/Schemas/consNFeDest_v1.01.xsd b/rascunho/Schemas/consNFeDest_v1.01.xsd new file mode 100644 index 0000000..7f41d67 --- /dev/null +++ b/rascunho/Schemas/consNFeDest_v1.01.xsd @@ -0,0 +1,10 @@ + + + + + + + Schema de validação XML dp Pedido de Consulta de NF-e + + + diff --git a/rascunho/Schemas/consReciNFe_v3.10.xsd b/rascunho/Schemas/consReciNFe_v3.10.xsd new file mode 100644 index 0000000..db5df75 --- /dev/null +++ b/rascunho/Schemas/consReciNFe_v3.10.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de validação do Pedido de Consulta do Recido do Lote de Notas Fiscais Eletrônicas + + + \ No newline at end of file diff --git a/rascunho/Schemas/consReciNFe_v4.00.xsd b/rascunho/Schemas/consReciNFe_v4.00.xsd new file mode 100644 index 0000000..475a9c2 --- /dev/null +++ b/rascunho/Schemas/consReciNFe_v4.00.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de validação do Pedido de Consulta do Recido do Lote de Notas Fiscais Eletrônicas + + + diff --git a/rascunho/Schemas/consSitNFe_v3.10.xsd b/rascunho/Schemas/consSitNFe_v3.10.xsd new file mode 100644 index 0000000..86e8fd2 --- /dev/null +++ b/rascunho/Schemas/consSitNFe_v3.10.xsd @@ -0,0 +1,9 @@ + + + + + + Schema de validação XML dp Pedido de Consulta da Situação Atual da Nota Fiscal Eletrônica + + + \ No newline at end of file diff --git a/rascunho/Schemas/consSitNFe_v4.00.xsd b/rascunho/Schemas/consSitNFe_v4.00.xsd new file mode 100644 index 0000000..d06c562 --- /dev/null +++ b/rascunho/Schemas/consSitNFe_v4.00.xsd @@ -0,0 +1,9 @@ + + + + + + Schema de validação XML dp Pedido de Consulta da Situação Atual da Nota Fiscal Eletrônica + + + diff --git a/rascunho/Schemas/consStatServ_v3.10.xsd b/rascunho/Schemas/consStatServ_v3.10.xsd new file mode 100644 index 0000000..03c0f0d --- /dev/null +++ b/rascunho/Schemas/consStatServ_v3.10.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de validação do Pedido de Consulta do Status do Serviço + + + \ No newline at end of file diff --git a/rascunho/Schemas/consStatServ_v4.00.xsd b/rascunho/Schemas/consStatServ_v4.00.xsd new file mode 100644 index 0000000..d625959 --- /dev/null +++ b/rascunho/Schemas/consStatServ_v4.00.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de validação do Pedido de Consulta do Status do Serviço + + + diff --git a/rascunho/Schemas/distDFeInt_v1.00.xsd b/rascunho/Schemas/distDFeInt_v1.00.xsd new file mode 100644 index 0000000..54ccd4d --- /dev/null +++ b/rascunho/Schemas/distDFeInt_v1.00.xsd @@ -0,0 +1,71 @@ + + + + + + Schema de pedido de distribuição de DF-e de interesse + + + + + + + Identificação do Ambiente: + 1 - Produção + 2 - Homologação + + + + + + Código da UF do Autor + + + + + + CNPJ do interessado no DF-e + + + + + CPF do interessado no DF-e + + + + + + + Grupo para distribuir DF-e de interesse + + + + + + Último NSU recebido pelo ator. Caso seja informado com zero, ou com um NSU muito antigo, a consulta retornará unicamente as informações resumidas e documentos fiscais eletrônicos que tenham sido recepcionados pelo Ambiente Nacional nos últimos 3 meses. + + + + + + + + Grupo para consultar um DF-e a partir de um NSU específico + + + + + + Número Sequencial Único. Geralmente esta consulta será utilizada quando identificado pelo interessado um NSU faltante. O Web Service retornará o documento ou informará que o NSU não existe no Ambiente Nacional. Assim, esta consulta fechará a lacuna do NSU identificado como faltante. + + + + + + + + + + + + diff --git a/rascunho/Schemas/distDFeInt_v1.01.xsd b/rascunho/Schemas/distDFeInt_v1.01.xsd new file mode 100644 index 0000000..647c3f3 --- /dev/null +++ b/rascunho/Schemas/distDFeInt_v1.01.xsd @@ -0,0 +1,85 @@ + + + + + + Schema de pedido de distribuição de DF-e de interesse + + + + + + + Identificação do Ambiente: + 1 - Produção + 2 - Homologação + + + + + + Código da UF do Autor + + + + + + CNPJ do interessado no DF-e + + + + + CPF do interessado no DF-e + + + + + + + Grupo para distribuir DF-e de interesse + + + + + + Último NSU recebido pelo ator. Caso seja informado com zero, ou com um NSU muito antigo, a consulta retornará unicamente as informações resumidas e documentos fiscais eletrônicos que tenham sido recepcionados pelo Ambiente Nacional nos últimos 3 meses. + + + + + + + + Grupo para consultar um DF-e a partir de um NSU específico + + + + + + Número Sequencial Único. Geralmente esta consulta será utilizada quando identificado pelo interessado um NSU faltante. O Web Service retornará o documento ou informará que o NSU não existe no Ambiente Nacional. Assim, esta consulta fechará a lacuna do NSU identificado como faltante. + + + + + + + + Grupo para consultar uma NF-e a partir da chave de acesso + + + + + + Chave de acesso da NF-e a ser consultada + + + + + + + + + + + + diff --git a/rascunho/Schemas/downloadNFe_v1.00.xsd b/rascunho/Schemas/downloadNFe_v1.00.xsd new file mode 100644 index 0000000..9beb044 --- /dev/null +++ b/rascunho/Schemas/downloadNFe_v1.00.xsd @@ -0,0 +1,10 @@ + + + + + + + Schema de validação XML dp Pedido de download de NF-e + + + diff --git a/rascunho/Schemas/e110110_v1.00.xsd b/rascunho/Schemas/e110110_v1.00.xsd new file mode 100644 index 0000000..098b466 --- /dev/null +++ b/rascunho/Schemas/e110110_v1.00.xsd @@ -0,0 +1,58 @@ + + + + + + Schema XML de validação do evento do carta de correção e1101110 + + + + + + Descrição do Evento - “Carta de Correção” + + + + + + + + + + + + Correção a ser considerada + + + + + + + + + + + + + Texto Fixo com as condições de uso da Carta de Correção + + + + + + + + + + + + + + + + + + + + + diff --git a/rascunho/Schemas/e110111_v1.00.xsd b/rascunho/Schemas/e110111_v1.00.xsd new file mode 100644 index 0000000..f1447fa --- /dev/null +++ b/rascunho/Schemas/e110111_v1.00.xsd @@ -0,0 +1,42 @@ + + + + + + Schema XML de validação do evento do cancelamento 1101111 + + + + + + Descrição do Evento - “Cancelamento” + + + + + + + + + + + Número do Protocolo de Status da NF-e. 1 posição (1 – Secretaria de Fazenda Estadual 2 – Receita Federal); 2 posições ano; 10 seqüencial no ano. + + + + + Justificativa do cancelamento + + + + + + + + + + + + + + diff --git a/rascunho/Schemas/e110112_v1.00.xsd b/rascunho/Schemas/e110112_v1.00.xsd new file mode 100644 index 0000000..dcaa3e6 --- /dev/null +++ b/rascunho/Schemas/e110112_v1.00.xsd @@ -0,0 +1,69 @@ + + + + + + Schema XML de validação do evento do cancelamento por substituição 110112 + + + + + + Descrição do Evento - “Cancelamento por substituição” + + + + + + + + + + + Código do Órgão Autor do Evento. Informar o Código da UF para este Evento. + + + + + Autor do Evento de Irregularidade FiscalInformar 5=Fisco para este Evento. + Valores: 1=Empresa Emitente, 2=Empresa destinatária; 3=Empresa; 5=Fisco;6=RFB; 9=Outros Órgãos; + + + + + + + + + + + Versão do Aplicativo que recebeu o Evento + + + + + Número do Protocolo de Status da NF-e. 1 posição (1 – Secretaria de Fazenda Estadual 2 – Receita Federal); 2 posições ano; 10 seqüencial no ano. + + + + + Justificativa do cancelamento + + + + + Chave de Acesso NF-e vinculada + + + + + + + + + + + + + + diff --git a/rascunho/Schemas/e110130_v1.00.xsd b/rascunho/Schemas/e110130_v1.00.xsd new file mode 100644 index 0000000..06f7ab6 --- /dev/null +++ b/rascunho/Schemas/e110130_v1.00.xsd @@ -0,0 +1,102 @@ + + + + + + + Schema XML de validação do evento de Comprovante de Entrega da NF-e + + + + + + + + + + + + + + + 1=Empresa Emitente; 2=Empresa Destinatária; 3=Empresa; 5=Fisco; 6=RFB; 9=Outros; + + + + + + + + + + Versão do Aplicativo do Autor do Evento + + + + + Data e hora do final da entrega. Formato AAAA-MMDDThh:mm:ssTZD + + + + + + + Número do documento de identificação da pessoa que assinou o Comprovante de Entrega da NF-e + + + + + + + + + + Nome da pessoa que assinou o Comprovante de Entrega da NF-e + + + + + + + + + + + Latitude do ponto de entrega + + + + + Longitude do ponto de entrega + + + + + Hash (SHA1) no formato Base64 resultante da concatenação: Chave de acesso da NFe + Base64 da imagem capturada da entrega (Exemplo: imagem capturada da assinatura eletrônica, digital do recebedor, foto, etc) + O hashCSRT é o resultado das funções SHA-1 e base64 do token CSRT fornecido pelo fisco + chave de acesso do DF-e. (Implementação em futura NT) +Observação: 28 caracteres são representados no schema como 20 bytes do tipo base64Binary + + + + + + + + + + Data e hora da geração do hash do Comprovante de Entrega da NF-e. Formato AAAA-MMDDThh:mm:ssTZD. + + + + + + + + + + + + + + + diff --git a/rascunho/Schemas/e110131_v1.00.xsd b/rascunho/Schemas/e110131_v1.00.xsd new file mode 100644 index 0000000..23f428d --- /dev/null +++ b/rascunho/Schemas/e110131_v1.00.xsd @@ -0,0 +1,51 @@ + + + + + + + Schema XML de validação do evento de Cancelamento do Comprovante de Entrega da NF-e + + + + + + + + + + + + + + + 1=Empresa Emitente; 2=Empresa Destinatária; 3=Empresa; 5=Fisco; 6=RFB; 9=Outros; + + + + + + + + + + Versão do Aplicativo do Autor do Evento + + + + + Número do Protocolo de Autorização do Evento da NF-e a que se refere este cancelamento. + + + + + + + + + + + + + + diff --git a/rascunho/Schemas/e110140NFCe_v1.00.xsd b/rascunho/Schemas/e110140NFCe_v1.00.xsd new file mode 100644 index 0000000..ed8ea80 --- /dev/null +++ b/rascunho/Schemas/e110140NFCe_v1.00.xsd @@ -0,0 +1,118 @@ + + + + + + + + + + + + + + + + + + + + + + + Identificador do destinatário, em caso de comprador estrangeiro + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Neste evento, aceitar apenas 1. 1=Empresa Emitente; 2=Empresa Destinatária; 3=Empresa; 5=Fisco; 6=RFB; 9=Outros Órgãos + + + + + + + + + + + Versão do Aplicativo do Autor do Evento + + + + + Data de emissão no formato UTC. AAAA-MM-DDThh:mm:ssTZD + + + + + Tipo do Documento Fiscal (0 - entrada; 1 - saída) + + + + + + + + + + + + + Informar a IE. Para IE do destinatário somente quando o contribuinte possuir uma inscrição estadual + + + + + + + + + + + Sigla UF do destinatário. Informar "EX" no caso de operação com o exterior + + + + + Valor total da NF-e + + + + + Valor total do ICMS + + + diff --git a/rascunho/Schemas/e110140NFe_v1.00.xsd b/rascunho/Schemas/e110140NFe_v1.00.xsd new file mode 100644 index 0000000..60ceae5 --- /dev/null +++ b/rascunho/Schemas/e110140NFe_v1.00.xsd @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + Identificador do destinatário, em caso de comprador estrangeiro + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Neste evento, aceitar apenas 1. 1=Empresa Emitente; 2=Empresa Destinatária; 3=Empresa; 5=Fisco; 6=RFB; 9=Outros Órgãos + + + + + + + + + + + Versão do Aplicativo do Autor do Evento + + + + + Data de emissão no formato UTC. AAAA-MM-DDThh:mm:ssTZD + + + + + Tipo do Documento Fiscal (0 - entrada; 1 - saída) + + + + + + + + + + + + + Informar a IE. Para IE do destinatário somente quando o contribuinte possuir uma inscrição estadual + + + + + + + + + + + Sigla UF do destinatário. Informar "EX" no caso de operação com o exterior + + + + + Valor total da NF-e + + + + + Valor total do ICMS + + + + + Valor total do ICMS de Substituição Tributária + + + diff --git a/rascunho/Schemas/e110140_v1.00.xsd b/rascunho/Schemas/e110140_v1.00.xsd new file mode 100644 index 0000000..60ceae5 --- /dev/null +++ b/rascunho/Schemas/e110140_v1.00.xsd @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + Identificador do destinatário, em caso de comprador estrangeiro + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Neste evento, aceitar apenas 1. 1=Empresa Emitente; 2=Empresa Destinatária; 3=Empresa; 5=Fisco; 6=RFB; 9=Outros Órgãos + + + + + + + + + + + Versão do Aplicativo do Autor do Evento + + + + + Data de emissão no formato UTC. AAAA-MM-DDThh:mm:ssTZD + + + + + Tipo do Documento Fiscal (0 - entrada; 1 - saída) + + + + + + + + + + + + + Informar a IE. Para IE do destinatário somente quando o contribuinte possuir uma inscrição estadual + + + + + + + + + + + Sigla UF do destinatário. Informar "EX" no caso de operação com o exterior + + + + + Valor total da NF-e + + + + + Valor total do ICMS + + + + + Valor total do ICMS de Substituição Tributária + + + diff --git a/rascunho/Schemas/e110150_v1.00.xsd b/rascunho/Schemas/e110150_v1.00.xsd new file mode 100644 index 0000000..2c092fd --- /dev/null +++ b/rascunho/Schemas/e110150_v1.00.xsd @@ -0,0 +1,88 @@ + + + + + + + Schema XML de validação do evento de Ator Interessado na NF-e - Transportador (110150)” + + + + + + Descrição do Evento - "Ator interessado na NF-e”" + + + + + + + + + + + + Tipo do Órgão Autor do Evento. Informar uma das opções 1=Geração do Evento pelo Emitente; 2=Geração do Evento pelo Destinatário; 3=Geração do Evento pelo Transportador +Outros valores: 1=Empresa Emitente, 2=Empresa destinatária; 3=Empresa; 5=Fisco; 6=RFB; 9=Outros Órgãos; + + + + + + + + + + + + + Versão do aplicativo do Autor do Evento. + + + + + Pessoas autorizadas a acessar o XML da NF-e + + + + + + + + + + + 0 – Não permite; 1 – Permite o transportador autorizado pelo emitente ou destinatário autorizar outros transportadores para ter acesso ao download da NF-e + + + + + + + + + + + + + Texto Fixo com as Condição de uso do tipo de autorização para o transportador: + + + + + + + + + + + + + + + + + + + + diff --git a/rascunho/Schemas/e111500_v1.00.xsd b/rascunho/Schemas/e111500_v1.00.xsd new file mode 100644 index 0000000..5a60217 --- /dev/null +++ b/rascunho/Schemas/e111500_v1.00.xsd @@ -0,0 +1,69 @@ + + + + + + Informações do Pedido de Prorrogação + + + + + + Pedido de Prorrogação ou Pedido de Prorrogacao + + + + + + + + + + + Informar o número do Protocolo de Autorização da NF-e a ser Prorrogada. (vide item 5.6). + + + + + Item do Pedido de Prorrogação. Recomenda-se agrupar a maior quantidade de itens em cada Pedido de Prorrogação + + + + + + Quantidade do item que será solicitado a prorrogação de prazo + + + + + + Número do item da NF-e. O número do item deverá ser o mesmo número do item na NF-e + + + + + + + + + + + + + + Versão do Pedido de Prorrogação + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/rascunho/Schemas/e111501_v1.00.xsd b/rascunho/Schemas/e111501_v1.00.xsd new file mode 100644 index 0000000..4565d41 --- /dev/null +++ b/rascunho/Schemas/e111501_v1.00.xsd @@ -0,0 +1,69 @@ + + + + + + Informações do Pedido de Prorrogação + + + + + + Pedido de Prorrogação ou Pedido de Prorrogacao” + + + + + + + + + + + Informar o número do Protocolo de Autorização da NF-e a ser Prorrogada. (vide item 5.6). + + + + + Item do Pedido de Prorrogação. Recomenda-se agrupar a maior quantidade de itens em cada Pedido de Prorrogação + + + + + + Quantidade do item que será solicitado a prorrogação de prazo + + + + + + Número do item da NF-e. O número do item deverá ser o mesmo número do item na NF-e + + + + + + + + + + + + + + Versão do Pedido de Prorrogação + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/rascunho/Schemas/e111502_v1.00.xsd b/rascunho/Schemas/e111502_v1.00.xsd new file mode 100644 index 0000000..56a3c36 --- /dev/null +++ b/rascunho/Schemas/e111502_v1.00.xsd @@ -0,0 +1,50 @@ + + + + + + Informações do Cancelamento de Pedido de Prorrogação + + + + + + Cancelamento de Pedido de Prorrogação” ou “Cancelamento de Pedido de Prorrogacao” + + + + + + + + + + + Identificador do evento a ser cancelado, a regra de formação do Id é: “ID” + tpEvento + chave da NF-e + nSeqEvento + + + + + + + + + + Informar o número do Protocolo de Autorização do Pedido de Prorrogaçãoa ser cancelado. + + + + + + Versão do Cancelamento de Pedido de Prorrogação + + + + + + + + + + + \ No newline at end of file diff --git a/rascunho/Schemas/e111503_v1.00.xsd b/rascunho/Schemas/e111503_v1.00.xsd new file mode 100644 index 0000000..56a3c36 --- /dev/null +++ b/rascunho/Schemas/e111503_v1.00.xsd @@ -0,0 +1,50 @@ + + + + + + Informações do Cancelamento de Pedido de Prorrogação + + + + + + Cancelamento de Pedido de Prorrogação” ou “Cancelamento de Pedido de Prorrogacao” + + + + + + + + + + + Identificador do evento a ser cancelado, a regra de formação do Id é: “ID” + tpEvento + chave da NF-e + nSeqEvento + + + + + + + + + + Informar o número do Protocolo de Autorização do Pedido de Prorrogaçãoa ser cancelado. + + + + + + Versão do Cancelamento de Pedido de Prorrogação + + + + + + + + + + + \ No newline at end of file diff --git a/rascunho/Schemas/e210200_v1.00.xsd b/rascunho/Schemas/e210200_v1.00.xsd new file mode 100644 index 0000000..81e97ac --- /dev/null +++ b/rascunho/Schemas/e210200_v1.00.xsd @@ -0,0 +1,32 @@ + + + + + Schema XML de validação do evento da confirmação de recebimento + + + + + + Descrição do Evento: + “Confirmacao de Recebimento" + + + + + + + + + + + + + + + + + + + + diff --git a/rascunho/Schemas/e210210_v1.00.xsd b/rascunho/Schemas/e210210_v1.00.xsd new file mode 100644 index 0000000..a57afaa --- /dev/null +++ b/rascunho/Schemas/e210210_v1.00.xsd @@ -0,0 +1,32 @@ + + + + + Schema XML de validação do evento de Ciência da Operação + + + + + + Descrição do Evento: + "Ciência da Operação" + + + + + + + + + + + + + + + + + + + + diff --git a/rascunho/Schemas/e210220_v1.00.xsd b/rascunho/Schemas/e210220_v1.00.xsd new file mode 100644 index 0000000..b80c879 --- /dev/null +++ b/rascunho/Schemas/e210220_v1.00.xsd @@ -0,0 +1,45 @@ + + + + + Schema XML de validação do evento de desconhecimento da operação + + + + + + Descrição do Evento: + "Desconhecimento da Operacao" + + + + + + + + + + + Justificativa de desconhecimento da Operacao + + + + + + + + + + + + + + + + + + + + + + diff --git a/rascunho/Schemas/e210240_v1.00.xsd b/rascunho/Schemas/e210240_v1.00.xsd new file mode 100644 index 0000000..838692f --- /dev/null +++ b/rascunho/Schemas/e210240_v1.00.xsd @@ -0,0 +1,44 @@ + + + + + Schema XML de validação do evento de Recusa de Recebimento (Operação não Realizada) + + + + + + Descrição do Evento:"Operação não Realizada" + + + + + + + + + + + Justificativa de recusa do recebimento da mercadoria + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/rascunho/Schemas/e411500_v1.00.xsd b/rascunho/Schemas/e411500_v1.00.xsd new file mode 100644 index 0000000..e7b3722 --- /dev/null +++ b/rascunho/Schemas/e411500_v1.00.xsd @@ -0,0 +1,134 @@ + + + + + + Informações do Fisco + + + + + + Fisco Prorrogação ICMS remessa para industrialização” + + + + + + + + + + + Identificador do Pedido de Prorrogação ou Cancelamento de Pedido de Prorrogação que deu origem ao evento do Fisco, a regra de formação do Id é: + “ID” + tpEvento + chave da NF-e + nSeqEvento + + + + + + + + + + + + + Versão do Fisco + + + + + + + + + + + + + + + + + Resposta a um tpEvento 111500 ou 111501 + + + + + Identificador do cumprimento do prazo para solicitação do pedido de prorrogação: 0 – Após o prazo, 1 – Dentro do prazo + + + + + + + + + + + + Item do Pedido de Prorrogação + + + + + + Resposta do Fisco ao item do Pedido de Prorrogação: 1 - Deferido, 2 - Indeferido + + + + + + + + + + + + Justificativa da resposta do Fisco ao item do Pedido de Prorrogação + + + + + + + + + + + + + + + + + + + + Justificativa diferente das opções disponíveis no campo P25 + + + + + + + + + + + + Número do item da NF-e. O número do item deverá ser o mesmo número do item na NF-e + + + + + + + + + + + + + \ No newline at end of file diff --git a/rascunho/Schemas/e411501_v1.00.xsd b/rascunho/Schemas/e411501_v1.00.xsd new file mode 100644 index 0000000..e0484bd --- /dev/null +++ b/rascunho/Schemas/e411501_v1.00.xsd @@ -0,0 +1,134 @@ + + + + + + Informações do Fisco + + + + + + Fisco Prorrogação ICMS remessa para industrialização” + + + + + + + + + + + Identificador do Pedido de Prorrogação ou Cancelamento de Pedido de Prorrogação que deu origem ao evento do Fisco, a regra de formação do Id é: + “ID” + tpEvento + chave da NF-e + nSeqEvento + + + + + + + + + + + + + Versão do Fisco + + + + + + + + + + + + + + + + + Resposta a um tpEvento 111500 ou 111501 + + + + + Identificador do cumprimento do prazo para solicitação do pedido de prorrogação: 0 – Após o prazo, 1 – Dentro do prazo + + + + + + + + + + + + Item do Pedido de Prorrogação + + + + + + Resposta do Fisco ao item do Pedido de Prorrogação: 1 - Deferido, 2 - Indeferido + + + + + + + + + + + + Justificativa da resposta do Fisco ao item do Pedido de Prorrogação + + + + + + + + + + + + + + + + + + + + Justificativa diferente das opções disponíveis no campo P25 + + + + + + + + + + + + Número do item da NF-e. O número do item deverá ser o mesmo número do item na NF-e + + + + + + + + + + + + + \ No newline at end of file diff --git a/rascunho/Schemas/e411502_v1.00.xsd b/rascunho/Schemas/e411502_v1.00.xsd new file mode 100644 index 0000000..e02b36d --- /dev/null +++ b/rascunho/Schemas/e411502_v1.00.xsd @@ -0,0 +1,95 @@ + + + + + + Informações do Fisco + + + + + + Fisco Prorrogação ICMS remessa para industrialização” + + + + + + + + + + + Identificador do Pedido de Prorrogação ou Cancelamento de Pedido de Prorrogação que deu origem ao evento do Fisco, a regra de formação do Id é: + “ID” + tpEvento + chave da NF-e + nSeqEvento + + + + + + + + + + + + + Versão do Fisco + + + + + + + + + + + + + + Resposta a um tpEvento 111502 ou 111503. + + + + + Resposta do Fisco ao Cancelamento do Pedido de Prorrogação: 1 - Deferido, 2 - Indeferido + + + + + + + + + + + + Justificativa da resposta do Fisco ao Cancelamento de Pedido de Prorrogação + + + + + + + + + + + + + + + Justificativa diferente das opções disponíveis no campo P29 + + + + + + + + + + + + \ No newline at end of file diff --git a/rascunho/Schemas/e411503_v1.00.xsd b/rascunho/Schemas/e411503_v1.00.xsd new file mode 100644 index 0000000..e02b36d --- /dev/null +++ b/rascunho/Schemas/e411503_v1.00.xsd @@ -0,0 +1,95 @@ + + + + + + Informações do Fisco + + + + + + Fisco Prorrogação ICMS remessa para industrialização” + + + + + + + + + + + Identificador do Pedido de Prorrogação ou Cancelamento de Pedido de Prorrogação que deu origem ao evento do Fisco, a regra de formação do Id é: + “ID” + tpEvento + chave da NF-e + nSeqEvento + + + + + + + + + + + + + Versão do Fisco + + + + + + + + + + + + + + Resposta a um tpEvento 111502 ou 111503. + + + + + Resposta do Fisco ao Cancelamento do Pedido de Prorrogação: 1 - Deferido, 2 - Indeferido + + + + + + + + + + + + Justificativa da resposta do Fisco ao Cancelamento de Pedido de Prorrogação + + + + + + + + + + + + + + + Justificativa diferente das opções disponíveis no campo P29 + + + + + + + + + + + + \ No newline at end of file diff --git a/rascunho/Schemas/e610130_v1.00.xsd b/rascunho/Schemas/e610130_v1.00.xsd new file mode 100644 index 0000000..b638436 --- /dev/null +++ b/rascunho/Schemas/e610130_v1.00.xsd @@ -0,0 +1,128 @@ + + + + + + + Schema XML de validação do evento de Comprovante de Entrega de CT-e + + + + + + + + + + + + + + + 1=Empresa Emitente; 2=Empresa Destinatária; 3=Empresa; 5=Fisco; 6=RFB; 9=Outros; + + + + + + + + + + Versão do Aplicativo do Autor do Evento + + + + + + + + + Chave de Acesso do CT-e + + + + + + + + + + + Número Protocolo CT-e para o evento “Comprovante de Entrega do CT-e”. + + + + + + + + + + Data e hora do final da entrega. Formato AAAA-MMDDThh:mm:ssTZD. + + + + + + Número do documento de identificação da pessoa que assinou o Comprovante de Entrega do CT-e + + + + + + + + + + Nome da pessoa que assinou o Comprovante de Entrega da NF-e + + + + + + + + + + + Latitude do ponto de entrega + + + + + Longitude do ponto de entrega + + + + + Hash (SHA1) no formato Base64 resultante da concatenação: Chave de acesso do CT-e + Base64 da imagem capturada da entrega (Exemplo: imagem capturada da assinatura eletrônica, digital do recebedor, foto, etc) + O hashCSRT é o resultado das funções SHA-1 e base64 do token CSRT fornecido pelo fisco + chave de acesso do DF-e. (Implementação em futura NT) +Observação: 28 caracteres são representados no schema como 20 bytes do tipo base64Binary + + + + + + + + + + Data e hora da geração do hash do Comprovante de Entrega do CT-e Formato AAAA-MMDDThh:mm:ssTZD. + + + + + + + + + + + + + + + + + diff --git a/rascunho/Schemas/e610131_v1.00.xsd b/rascunho/Schemas/e610131_v1.00.xsd new file mode 100644 index 0000000..eab248d --- /dev/null +++ b/rascunho/Schemas/e610131_v1.00.xsd @@ -0,0 +1,68 @@ + + + + + + + Schema XML de validação do evento de Cancelamento do Comprovante de Entrega de CT-e + + + + + + + + + + + + + + + 1=Empresa Emitente; 2=Empresa Destinatária; 3=Empresa; 5=Fisco; 6=RFB; 9=Outros; + + + + + + + + + + Versão do Aplicativo do Autor do Evento + + + + + + Chave de Acesso do CT-e + + + + + + + + + + + Número Protocolo CT-e para o cancelamento do Evento de “Comprovante de Entrega do CT-e + + + + + + + + + + + + + + + + + + + diff --git a/rascunho/Schemas/e790700_v1.00.xsd b/rascunho/Schemas/e790700_v1.00.xsd new file mode 100644 index 0000000..e1a6d21 --- /dev/null +++ b/rascunho/Schemas/e790700_v1.00.xsd @@ -0,0 +1,125 @@ + + + + + + + Schema XML de validação do evento de averbação da NFe (e790700) + + + + + + Descrição do Evento - “Averbação para Exportação” + + + + + + + + + + + + Tipo do Autor do Evento (6=RFB) + + + + + + + + + + + Versão do aplicativo do autor do evento + + + + + Informações dos itens da NF-e do evento. + + + + + + Data do Embarque no formato AAAA-MM-DDThh:mm:ssTZD + + + + + Data da averbação no formato AAAA-MM-DDThh:mm:ssTZD + + + + + Número Identificador da Declaração Única do Comércio Exterior associada + + + + + + + + + + + Número do item da NF-e averbada + + + + + + + + + + + Informação do número do item na Declaração de Exportação associada a averbação. + + + + + + + + + + + Quantidade averbada do item na unidade tributária (campo uTrib) + + + + + + Motivo da Alteração + 1 - Exportação Averbada; + 2 - Retificação da Quantidade Averbada; + 3 - Cancelamento da Exportação; + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/rascunho/Schemas/e990900_v1.00.xsd b/rascunho/Schemas/e990900_v1.00.xsd new file mode 100644 index 0000000..9905cde --- /dev/null +++ b/rascunho/Schemas/e990900_v1.00.xsd @@ -0,0 +1,87 @@ + + + + + + Schema XML de validação do evento doVistoria SUFRAMA 990900 + + + + + + Descrição do Evento - “Vistoria SUFRAMA” + + + + + + + + + + + Número do PIN-e - Protocolo de Internalização de Mercadoria Nacional eletronico + + + + + + + + + + + Data de ocorrência da vistoria, formato UTC (AAAA-MM-DDThh:mm:ssTZD, onde TZD = +hh:mm ou -hh:mm) + + + + + + + + + + + Localidade onde ocorreu a vistoria + + + + + + + + + + + Nome Posto do ponto onde ocorreu a vistoria + + + + + + + + + + + Histórico da ocorrência, se existir. + + + + + + + + + + + + + + + + + + + + diff --git a/rascunho/Schemas/e990910_v1.00.xsd b/rascunho/Schemas/e990910_v1.00.xsd new file mode 100644 index 0000000..e19c47b --- /dev/null +++ b/rascunho/Schemas/e990910_v1.00.xsd @@ -0,0 +1,81 @@ + + + + + + Schema XML de validação do evento do Confirmação de Internalização da Mercadoria na SUFRAMA 990910 + + + + + + Descrição do Evento - “Confirmação de Internalização da Mercadoria na SUFRAMA” + + + + + + + + + + + Número do PIN-e - Protocolo de Internalização de Mercadoria Nacional eletronico + + + + + + + + + + + Data de ocorrência da vistoria, formato UTC (AAAA-MM-DDThh:mm:ssTZD, onde TZD = +hh:mm ou -hh:mm) + + + + + Localidade onde ocorreu a vistoria + + + + + + + + + + + Nome Posto do ponto onde ocorreu a vistoria + + + + + + + + + + + Histórico da ocorrência, se existir. + + + + + + + + + + + + + + + + + + + + diff --git a/rascunho/Schemas/envAverb_v1.00.xsd b/rascunho/Schemas/envAverb_v1.00.xsd new file mode 100644 index 0000000..ecd8600 --- /dev/null +++ b/rascunho/Schemas/envAverb_v1.00.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de validação do lote de envio do evento de averbação + + + diff --git a/rascunho/Schemas/envCCe_v1.00.xsd b/rascunho/Schemas/envCCe_v1.00.xsd new file mode 100644 index 0000000..b850ca8 --- /dev/null +++ b/rascunho/Schemas/envCCe_v1.00.xsd @@ -0,0 +1,10 @@ + + + + + + + Schema XML de validação do lote de envio do evento carta de correção + + + diff --git a/rascunho/Schemas/envCancelPProrrogNFe_v1.0.xsd b/rascunho/Schemas/envCancelPProrrogNFe_v1.0.xsd new file mode 100644 index 0000000..32dfe46 --- /dev/null +++ b/rascunho/Schemas/envCancelPProrrogNFe_v1.0.xsd @@ -0,0 +1,50 @@ + + + + + + Informações do Cancelamento de Pedido de Prorrogação + + + + + + Cancelamento de Pedido de Prorrogação” ou “Cancelamento de Pedido de Prorrogacao” + + + + + + + + + + + Identificador do evento a ser cancelado, a regra de formação do Id é: “ID” + tpEvento + chave da NF-e + nSeqEvento + + + + + + + + + + Informar o número do Protocolo de Autorização do Pedido de Prorrogaçãoa ser cancelado. + + + + + + Versão do Cancelamento de Pedido de Prorrogação + + + + + + + + + + + \ No newline at end of file diff --git a/rascunho/Schemas/envComprovanteEntregaNFe_v1.00.xsd b/rascunho/Schemas/envComprovanteEntregaNFe_v1.00.xsd new file mode 100644 index 0000000..4506ce5 --- /dev/null +++ b/rascunho/Schemas/envComprovanteEntregaNFe_v1.00.xsd @@ -0,0 +1,11 @@ + + + + + + + + Schema XML de validação do lote de envio do evento de Comprovante de Entrega de NFe + + + diff --git a/rascunho/Schemas/envConfRecebto_v1.00.xsd b/rascunho/Schemas/envConfRecebto_v1.00.xsd new file mode 100644 index 0000000..989045e --- /dev/null +++ b/rascunho/Schemas/envConfRecebto_v1.00.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de validação do lote de envio do evento confirmação de recebimento + + + diff --git a/rascunho/Schemas/envEPEC_v1.00.xsd b/rascunho/Schemas/envEPEC_v1.00.xsd new file mode 100644 index 0000000..926dfa8 --- /dev/null +++ b/rascunho/Schemas/envEPEC_v1.00.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de validação do lote de envio do Evento Prévio de Emissão em Contingência + + + \ No newline at end of file diff --git a/rascunho/Schemas/envEventoAtorInteressado_v1.00.xsd b/rascunho/Schemas/envEventoAtorInteressado_v1.00.xsd new file mode 100644 index 0000000..5da5cb1 --- /dev/null +++ b/rascunho/Schemas/envEventoAtorInteressado_v1.00.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de validação do lote de envio do evento de Ator Interessado na NF-e + + + diff --git a/rascunho/Schemas/envEventoCancEntregaNFe_v1.00.xsd b/rascunho/Schemas/envEventoCancEntregaNFe_v1.00.xsd new file mode 100644 index 0000000..6b056f6 --- /dev/null +++ b/rascunho/Schemas/envEventoCancEntregaNFe_v1.00.xsd @@ -0,0 +1,10 @@ + + + + + + + Schema XML de validação do lote de envio do evento de Cancelamento do Comprovante de Entrega da NFe + + + diff --git a/rascunho/Schemas/envEventoCancNFe_v1.00.xsd b/rascunho/Schemas/envEventoCancNFe_v1.00.xsd new file mode 100644 index 0000000..fa6505b --- /dev/null +++ b/rascunho/Schemas/envEventoCancNFe_v1.00.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de validação do lote de envio do evento cancelamento + + + diff --git a/rascunho/Schemas/envEventoCancSubst_v1.00.xsd b/rascunho/Schemas/envEventoCancSubst_v1.00.xsd new file mode 100644 index 0000000..7974e86 --- /dev/null +++ b/rascunho/Schemas/envEventoCancSubst_v1.00.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de validação do lote de envio do evento cancelamento + + + diff --git a/rascunho/Schemas/envEventoEntregaNFe_v1.00.xsd b/rascunho/Schemas/envEventoEntregaNFe_v1.00.xsd new file mode 100644 index 0000000..f360069 --- /dev/null +++ b/rascunho/Schemas/envEventoEntregaNFe_v1.00.xsd @@ -0,0 +1,10 @@ + + + + + + + Schema XML de validação do lote de envio do evento de Comprovante de Entrega da NFe + + + diff --git a/rascunho/Schemas/envEvento_v1.00.xsd b/rascunho/Schemas/envEvento_v1.00.xsd new file mode 100644 index 0000000..523e8f9 --- /dev/null +++ b/rascunho/Schemas/envEvento_v1.00.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de validação do lote de envio do Evento + + + diff --git a/rascunho/Schemas/envFiscoNfe_v1.0.xsd b/rascunho/Schemas/envFiscoNfe_v1.0.xsd new file mode 100644 index 0000000..95345be --- /dev/null +++ b/rascunho/Schemas/envFiscoNfe_v1.0.xsd @@ -0,0 +1,179 @@ + + + + + Informações do Fisco + + + + + + Fisco Prorrogação ICMS remessa para industrialização” + + + + + + + + + + + Identificador do Pedido de Prorrogação ou Cancelamento de Pedido de Prorrogação que deu origem ao evento do Fisco, a regra de formação do Id é: + “ID” + tpEvento + chave da NF-e + nSeqEvento + + + + + + + + + + + + + + + + Versão do Fisco + + + + + + + + + + + + + Resposta a um tpEvento 111500 ou 111501 + + + + + Identificador do cumprimento do prazo para solicitação do pedido de prorrogação: 0 – Após o prazo, 1 – Dentro do prazo + + + + + + + + + + + + Item do Pedido de Prorrogação + + + + + + Resposta do Fisco ao item do Pedido de Prorrogação: 1 - Deferido, 2 - Indeferido + + + + + + + + + + + + Justificativa da resposta do Fisco ao item do Pedido de Prorrogação + + + + + + + + + + + + + + + + + + + + Justificativa diferente das opções disponíveis no campo P25 + + + + + + + + + + + + Número do item da NF-e. O número do item deverá ser o mesmo número do item na NF-e + + + + + + + + + + + + + + + + Resposta a um tpEvento 111502 ou 111503. + + + + + Resposta do Fisco ao Cancelamento do Pedido de Prorrogação: 1 - Deferido, 2 - Indeferido + + + + + + + + + + + + Justificativa da resposta do Fisco ao Cancelamento de Pedido de Prorrogação + + + + + + + + + + + + + + + Justificativa diferente das opções disponíveis no campo P29 + + + + + + + + + + + + \ No newline at end of file diff --git a/rascunho/Schemas/envPProrrogNFe_v1.0.xsd b/rascunho/Schemas/envPProrrogNFe_v1.0.xsd new file mode 100644 index 0000000..33870f8 --- /dev/null +++ b/rascunho/Schemas/envPProrrogNFe_v1.0.xsd @@ -0,0 +1,65 @@ + + + + + + Informações do Pedido de Prorrogação + + + + + + Pedido de Prorrogação ou Pedido de Prorrogacao” + + + + + + + + + + + Informar o número do Protocolo de Autorização da NF-e a ser Prorrogada. (vide item 5.6). + + + + + Item do Pedido de Prorrogação. Recomenda-se agrupar a maior quantidade de itens em cada Pedido de Prorrogação + + + + + + Quantidade do item que será solicitado a prorrogação de prazo + + + + + + Número do item da NF-e. O número do item deverá ser o mesmo número do item na NF-e + + + + + + + + + + + + + + Versão do Pedido de Prorrogação + + + + + + + + + + + \ No newline at end of file diff --git a/rascunho/Schemas/envRemIndus_v1.00.xsd b/rascunho/Schemas/envRemIndus_v1.00.xsd new file mode 100644 index 0000000..f0eafb3 --- /dev/null +++ b/rascunho/Schemas/envRemIndus_v1.00.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de validacao do pedido de prorrogacao de remessa para industrializacao + + + diff --git a/rascunho/Schemas/envSuframaInternaliza_v1.00.xsd b/rascunho/Schemas/envSuframaInternaliza_v1.00.xsd new file mode 100644 index 0000000..ea21dd7 --- /dev/null +++ b/rascunho/Schemas/envSuframaInternaliza_v1.00.xsd @@ -0,0 +1,10 @@ + + + + + + + Schema XML de validação do lote de envio do evento de Internalizacao SUFRAMA + + + diff --git a/rascunho/Schemas/envSuframaVistoria_v1.00.xsd b/rascunho/Schemas/envSuframaVistoria_v1.00.xsd new file mode 100644 index 0000000..a997282 --- /dev/null +++ b/rascunho/Schemas/envSuframaVistoria_v1.00.xsd @@ -0,0 +1,10 @@ + + + + + + + Schema XML de validação do lote de envio do evento de Vistoria SUFRAMA + + + diff --git a/rascunho/Schemas/enviNFe_v3.10.xsd b/rascunho/Schemas/enviNFe_v3.10.xsd new file mode 100644 index 0000000..85bf09a --- /dev/null +++ b/rascunho/Schemas/enviNFe_v3.10.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de validação do Pedido de Concessão de Autorização da Nota Fiscal Eletrônica + + + \ No newline at end of file diff --git a/rascunho/Schemas/enviNFe_v4.00.xsd b/rascunho/Schemas/enviNFe_v4.00.xsd new file mode 100644 index 0000000..2dbb368 --- /dev/null +++ b/rascunho/Schemas/enviNFe_v4.00.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de validação do Pedido de Concessão de Autorização da Nota Fiscal Eletrônica + + + diff --git a/rascunho/Schemas/eventoAtorInteressado_v1.00.xsd b/rascunho/Schemas/eventoAtorInteressado_v1.00.xsd new file mode 100644 index 0000000..5534cf6 --- /dev/null +++ b/rascunho/Schemas/eventoAtorInteressado_v1.00.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de validação do evento de Ator Interessado na NF-e + + + diff --git a/rascunho/Schemas/eventoCancEntregaNFe_v1.00.xsd b/rascunho/Schemas/eventoCancEntregaNFe_v1.00.xsd new file mode 100644 index 0000000..cb04560 --- /dev/null +++ b/rascunho/Schemas/eventoCancEntregaNFe_v1.00.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de validação do evento de Cancelamento do Comprovante de Entrega da NFe + + + diff --git a/rascunho/Schemas/eventoCancNFe_v1.00.xsd b/rascunho/Schemas/eventoCancNFe_v1.00.xsd new file mode 100644 index 0000000..ed16481 --- /dev/null +++ b/rascunho/Schemas/eventoCancNFe_v1.00.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de validação do evento Cancelamento + + + diff --git a/rascunho/Schemas/eventoCancSubst_v1.00.xsd b/rascunho/Schemas/eventoCancSubst_v1.00.xsd new file mode 100644 index 0000000..dc7c9c4 --- /dev/null +++ b/rascunho/Schemas/eventoCancSubst_v1.00.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de validação do evento Cancelamento + + + diff --git a/rascunho/Schemas/eventoEPEC_v0.01.xsd b/rascunho/Schemas/eventoEPEC_v0.01.xsd new file mode 100644 index 0000000..0d0a987 --- /dev/null +++ b/rascunho/Schemas/eventoEPEC_v0.01.xsd @@ -0,0 +1,267 @@ + + + + + + + + + + Identificador de controle do Lote de envio do Evento. + + + + + + + + + + + + + Evento, um lote pode conter até 20 eventos + + + + + + Grupo de informações do registro do Evento + + + + Código do órgão de recepção do Evento. + + + + + Identificação do Ambiente: 1=Produção /2=Homologação + + + + + Informar o CNPJ / CPF do autor do Evento. + + + + CNPJ + + + + + CPF + + + + + + Para o evento de EPEC, a posição 35 da Chave de Acesso deve ser 4 (tpEmis=4). + + + + + Data e hora do evento no formato AAAA-MM-DDThh:mm:ssTZD (UTC - Universal Coordinated Time). + + + + + Código do evento: 110140 -EPEC + + + + + + + + + + + + Informar o valor "1" para o evento do EPEC. + + + + + + + + + + + Versão do detalhe do evento (grupo detEvento - P17), informação usada pela SEFAZ para validar o grupo detEvento. + + + + + + + Informações de detalhes do evento + + + + "EPEC" + + + + + + + + + + Código do Órgão do Autor do Evento. + + + + + Informar "1=Empresa Emitente" para este evento. + + + + + + + + + + + Versão do aplicativo do Autor do Evento. + + + + + Data e hora no formato UTC (Universal Coordinated Time): "AAAA-MM-DDThh:mm:ss TZD". + + + + + Informar 1=Saída. + + + + + + + + + + + IE do Emitente + + + + + + + + Sigla da UF do destinatário. + + + + + + CNPJ + + + + + CPF + + + + + ID Estrangeiro + + + + + + + + + + + + + + + Valor total da NFC-e + + + + + Valor total do ICMS + + + + + + + + + + Identificador da TAG a ser assinada, a regra de formação do Id é: "ID" + tpEvento + chave da NFC-e + nSeqEvento + + + + + + + + + + + + + + + + + + + + + Versão do Tipo do Evento + + + + + + + + + Tipo Código de orgão (UF da tabela do IBGE + 91 RFB) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/rascunho/Schemas/eventoEPEC_v1.00.xsd b/rascunho/Schemas/eventoEPEC_v1.00.xsd new file mode 100644 index 0000000..0d0a987 --- /dev/null +++ b/rascunho/Schemas/eventoEPEC_v1.00.xsd @@ -0,0 +1,267 @@ + + + + + + + + + + Identificador de controle do Lote de envio do Evento. + + + + + + + + + + + + + Evento, um lote pode conter até 20 eventos + + + + + + Grupo de informações do registro do Evento + + + + Código do órgão de recepção do Evento. + + + + + Identificação do Ambiente: 1=Produção /2=Homologação + + + + + Informar o CNPJ / CPF do autor do Evento. + + + + CNPJ + + + + + CPF + + + + + + Para o evento de EPEC, a posição 35 da Chave de Acesso deve ser 4 (tpEmis=4). + + + + + Data e hora do evento no formato AAAA-MM-DDThh:mm:ssTZD (UTC - Universal Coordinated Time). + + + + + Código do evento: 110140 -EPEC + + + + + + + + + + + + Informar o valor "1" para o evento do EPEC. + + + + + + + + + + + Versão do detalhe do evento (grupo detEvento - P17), informação usada pela SEFAZ para validar o grupo detEvento. + + + + + + + Informações de detalhes do evento + + + + "EPEC" + + + + + + + + + + Código do Órgão do Autor do Evento. + + + + + Informar "1=Empresa Emitente" para este evento. + + + + + + + + + + + Versão do aplicativo do Autor do Evento. + + + + + Data e hora no formato UTC (Universal Coordinated Time): "AAAA-MM-DDThh:mm:ss TZD". + + + + + Informar 1=Saída. + + + + + + + + + + + IE do Emitente + + + + + + + + Sigla da UF do destinatário. + + + + + + CNPJ + + + + + CPF + + + + + ID Estrangeiro + + + + + + + + + + + + + + + Valor total da NFC-e + + + + + Valor total do ICMS + + + + + + + + + + Identificador da TAG a ser assinada, a regra de formação do Id é: "ID" + tpEvento + chave da NFC-e + nSeqEvento + + + + + + + + + + + + + + + + + + + + + Versão do Tipo do Evento + + + + + + + + + Tipo Código de orgão (UF da tabela do IBGE + 91 RFB) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/rascunho/Schemas/eventoEntregaNFe_v1.00.xsd b/rascunho/Schemas/eventoEntregaNFe_v1.00.xsd new file mode 100644 index 0000000..12c5a3d --- /dev/null +++ b/rascunho/Schemas/eventoEntregaNFe_v1.00.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de validação do evento de comprovante de entrega da NF-e + + + diff --git a/rascunho/Schemas/eventoRemIndus_v1.00.xsd b/rascunho/Schemas/eventoRemIndus_v1.00.xsd new file mode 100644 index 0000000..e1bb1e2 --- /dev/null +++ b/rascunho/Schemas/eventoRemIndus_v1.00.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de validação do evento Remessa para Industrializacao + + + diff --git a/rascunho/Schemas/inutNFe_v3.10.xsd b/rascunho/Schemas/inutNFe_v3.10.xsd new file mode 100644 index 0000000..07af488 --- /dev/null +++ b/rascunho/Schemas/inutNFe_v3.10.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de validação do Pedido de Inutilização de Numeração da Nota Fiscal Eletrônica + + + \ No newline at end of file diff --git a/rascunho/Schemas/inutNFe_v4.00.xsd b/rascunho/Schemas/inutNFe_v4.00.xsd new file mode 100644 index 0000000..fc412ed --- /dev/null +++ b/rascunho/Schemas/inutNFe_v4.00.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de validação do Pedido de Inutilização de Numeração da Nota Fiscal Eletrônica + + + diff --git a/rascunho/Schemas/leiauteAverb_v1.00.xsd b/rascunho/Schemas/leiauteAverb_v1.00.xsd new file mode 100644 index 0000000..3006aaf --- /dev/null +++ b/rascunho/Schemas/leiauteAverb_v1.00.xsd @@ -0,0 +1,482 @@ + + + + + + + Tipo Evento + + + + + + + + Código do órgão de recepção do Evento. Para o evento de averbação de exportação será utilizado o valor 91 para o Ambiente Nacional. + + + + + + + + + + + + Identificação do Ambiente: + 1 - Produção + 2 - Homologação + + + + + + CNPJ do autor do evento + + + + + Chave de Acesso da NF-e vinculada ao evento + + + + + Data de emissão no formato UTC. AAAA-MM-DDThh:mm:ssTZD + + + + + Tipo do Evento + + + + + + + + + + + + Seqüencial do evento para o mesmo tipo de evento. Para maioria dos eventos será 1, nos casos em que possa existir mais de um evento, como é o caso dos eventos de averbação, o autor do evento deve numerar de forma seqüencial + + + + + + + + + + + + Versão do Tipo do Evento + + + + + + + + + + + Schema XML de validação do evento de averbação da NFe (e790700) + + + + + + Descrição do Evento - “Averbação para Exportação” + + + + + + + + + + + + Tipo do Autor do Evento (6=RFB) + + + + + + + + + + + Versão do aplicativo do Autor do evento + + + + + Informações dos itens da NF-e do evento. + + + + + + Data do Embarque no formato AAAA-MM-DDThh:mm:ssTZD + + + + + Data da averbação no formato AAAA-MM-DDThh:mm:ssTZD + + + + + Número Identificador da Declaração Única do Comércio Exterior associada + + + + + + + + + + + Número do item da NF-e averbada + + + + + + + + + + + Informação do número do item na Declaração de Exportação associada a averbação. + + + + + + + + + + + Quantidade averbada do item na unidade tributária (campo uTrib) + + + + + + Motivo da Alteração + 1 - Exportação Averbada; + 2 - Retificação da Quantidade Averbada; + 3 - Cancelamento da Exportação; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Identificador da TAG a ser assinada, a regra de formação do Id é: + “ID” + tpEvento + chave da NF-e + nSeqEvento + + + + + + + + + + + + + + + + + Tipo retorno do Evento + + + + + + + + + Identificação do Ambiente: + 1 - Produção + 2 - Homologação + + + + + + Versão do Aplicativo que recebeu o Evento + + + + + Código do órgão de recepção do Evento. Utilizar a Tabela do IBGE extendida, utilizar 91 para identificar o Ambiente Nacional + + + + + Código do status da registro do Evento + + + + + Descrição literal do status do registro do Evento + + + + + Chave de Acesso NF-e vinculada + + + + + Tipo do Evento vinculado + + + + + + + + + + + Descrição do Evento + + + + + + + + + + + Seqüencial do evento + + + + + + + + + + + Identificação do destinatário da NF-e + + + + CNPJ Destinatário + + + + + CPF Destiantário + + + + + + email do destinatário + + + + + + + + + + + Data e Hora de do recebimento do evento ou do registro do evento formato UTC AAAA-MM-DDThh:mm:ssTZD. + + + + + + + + + + + Número do protocolo de registro do evento + + + + + + + + + + + + + + + + + + + Tipo Lote de Envio + + + + + + + + + + + + + + + + + Tipo Retorno de Lote de Envio + + + + + + + + + + + + + + Identificação do Ambiente: + 1 - Produção + 2 - Homologação + + + + + + Versão do Aplicativo que recebeu o Evento + + + + + Código do òrgao que registrou o Evento + + + + + Código do status da registro do Evento + + + + + Descrição literal do status do registro do Evento + + + + + + + + + Tipo procEvento + + + + + + + + + + Tipo Versão do EnvEvento + + + + + + + + + Tipo Versão do Evento + + + + + + + + + Tipo Código de orgão (UF da tabela do IBGE) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/rascunho/Schemas/leiauteCCe_v1.00.xsd b/rascunho/Schemas/leiauteCCe_v1.00.xsd new file mode 100644 index 0000000..3615717 --- /dev/null +++ b/rascunho/Schemas/leiauteCCe_v1.00.xsd @@ -0,0 +1,418 @@ + + + + + + + + + + + + + + + Tipo Evento + + + + + + + + Código do órgão de recepção do Evento. Utilizar a Tabela do IBGE extendida, utilizar 90 para identificar o Ambiente Nacional + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Identificação do autor do evento + + + + CNPJ + + + + + CPF + + + + + + Chave de Acesso da NF-e vinculada ao evento + + + + + Data de emissão no formato UTC. AAAA-MM-DDThh:mm:ssTZD + + + + + Tipo do Evento + + + + + + + + + + + + Seqüencial do evento para o mesmo tipo de evento. Para maioria dos eventos será 1, nos casos em que possa existir mais de um evento, como é o caso da carta de correção, o autor do evento deve numerar de forma seqüencial. + + + + + + + + + + + Versão do Tipo do Evento + + + + + + + + + + + Evento do carta de correção e1101110 + + + + + + Descrição do Evento - “Carta de Correção” + + + + + + + + + + + + Correção a ser considerada + + + + + + + + + + + + + Texto Fixo com as condições de uso da Carta de Correção + + + + + + + + + + + + + + + + + + + + + + + + Identificador da TAG a ser assinada, a regra de formação do Id é: +“ID” + tpEvento + chave da NF-e + nSeqEvento + + + + + + + + + + + + + + + + Tipo retorno do Evento + + + + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Versão do Aplicativo que recebeu o Evento + + + + + Código do órgão de recepção do Evento. Utilizar a Tabela do IBGE extendida, utilizar 90 para identificar o Ambiente Nacional + + + + + Código do status da registro do Evento + + + + + Descrição literal do status do registro do Evento + + + + + Chave de Acesso NF-e vinculada + + + + + Tipo do Evento vinculado + + + + + + + + + + + Descrição do Evento + + + + + + + + + + + Seqüencial do evento + + + + + + + + + + + Identificação do destinatário da NF-e + + + + CNPJ Destinatário + + + + + CPF Destiantário + + + + + + email do destinatário + + + + + + + + + + + Data e Hora de do recebimento do evento ou do registro do evento formato UTC AAAA-MM-DDThh:mm:ssTZD. + + + + + + + + + + + Número do protocolo de registro do evento + + + + + + + + + + + + + + + + + + + Tipo Lote de Envio + + + + + + + + + + + + + + + + + Tipo Retorno de Lote de Envio + + + + + + + + + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Versão do Aplicativo que recebeu o Evento + + + + + Código do òrgao que registrou o Evento + + + + + Código do status da registro do Evento + + + + + Descrição literal do status do registro do Evento + + + + + + + + + Tipo procEvento + + + + + + + + + + Tipo Versão do EnvEvento + + + + + + + + + Tipo Versão do Evento + + + + + + + + + Tipo Código de orgão (UF da tabela do IBGE + 90 RFB) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/rascunho/Schemas/leiauteComprovanteEntregaNFe_v1.00.xsd b/rascunho/Schemas/leiauteComprovanteEntregaNFe_v1.00.xsd new file mode 100644 index 0000000..d410ee3 --- /dev/null +++ b/rascunho/Schemas/leiauteComprovanteEntregaNFe_v1.00.xsd @@ -0,0 +1,487 @@ + + + + + + Tipo Evento + + + + + + + + Código do órgão de recepção do Evento. Utilizar a Tabela do IBGE extendida, utilizar 90 para identificar o Ambiente Nacional + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Identificação do autor do evento + + + + CNPJ + + + + + CPF + + + + + + Chave de Acesso da NF-e vinculada ao evento + + + + + Data de emissão no formato UTC. AAAA-MM-DDThh:mm:ssTZD + + + + + Tipo do Evento + + + + + + + + + + + + + Seqüencial do evento para o mesmo tipo de evento. Para maioria dos eventos será 1, nos casos em que possa existir mais de um evento, como é o caso da carta de correção, o autor do evento deve numerar de forma seqüencial. + + + + + + + + + + + Versão do Tipo do Evento + + + + + + + + + + + Schema XML de validação do evento de Comprovante de Entrega de NF-e + + + + + + + + + + + + + + + 1=Empresa Emitente; 2=Empresa Destinatária; 3=Empresa; 5=Fisco; 6=RFB; 9=Outros; + + + + + + + + + + Versão do Aplicativo do Autor do Evento + + + + + + + + + + + + + + Número do documento de identificação da pessoa que assinou o Comprovante de Entrega da NF-e + + + + + + + + + + Nome da pessoa que assinou o Comprovante de Entrega da NF-e + + + + + + + + + + + + + + + + + + + + + + + + + Hash (SHA1) no formato Base64 resultante da concatenação: Chave de acesso da NFe + Base64 da imagem capturada da entrega (Exemplo: imagem capturada da assinatura eletrônica, digital do recebedor, foto, etc) + O hashCSRT é o resultado das funções SHA-1 e base64 do token CSRT fornecido pelo fisco + chave de acesso do DF-e. (Implementação em futura NT) +Observação: 28 caracteres são representados no schema como 20 bytes do tipo base64Binary + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Identificador da TAG a ser assinada, a regra de formação do Id é: +“ID” + tpEvento + chave da NF-e + nSeqEvento + + + + + + + + + + + + + + + + Tipo Versão do Evento + + + + + + + + + Tipo retorno do Evento + + + + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Versão do Aplicativo que recebeu o Evento + + + + + Código do órgão de recepção do Evento. Utilizar a Tabela do IBGE extendida, utilizar 90 para identificar o Ambiente Nacional + + + + + Código do status da registro do Evento + + + + + Descrição literal do status do registro do Evento + + + + + Chave de Acesso NF-e vinculada + + + + + Tipo do Evento vinculado + + + + + + + + + + + Descrição do Evento + + + + + + + + + + + Seqüencial do evento + + + + + + + + + + + Identificação do destinatário da NF-e + + + + CNPJ Destinatário + + + + + CPF Destiantário + + + + + + email do destinatário + + + + + + + + + + + Data e Hora de do recebimento do evento ou do registro do evento formato UTC AAAA-MM-DDThh:mm:ssTZD. + + + + + + + + + + + Número do protocolo de registro do evento + + + + + + + + + + + + + + + + + + + Tipo Lote de Envio + + + + + + + + + + + + + + + + + Tipo Versão do EnvEvento + + + + + + + + + Tipo Retorno de Lote de Envio + + + + + + + + + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Versão do Aplicativo que recebeu o Evento + + + + + Código do òrgao que registrou o Evento + + + + + Código do status da registro do Evento + + + + + Descrição literal do status do registro do Evento + + + + + + + + + Tipo procEvento + + + + + + + + + + + + + + + + + + + Número do documento de identificação da pessoa que assinou o Comprovante de Entrega da NF-e + + + + + + + + + + Nome da pessoa que assinou o Comprovante de Entrega da NF-e + + + + + + + + + + + + + + + + + + + + + + + + + + Hash SHA-1, no formato Base64, resultante da concatenação de: Chave de Acesso da NF-e + Base64 da imagem capturada do Comprovante de Entrega da NF-e + outras informações da entrega. + + + + + + + + + + + + + + + diff --git a/rascunho/Schemas/leiauteConfRecebto_v1.00.xsd b/rascunho/Schemas/leiauteConfRecebto_v1.00.xsd new file mode 100644 index 0000000..c688fb2 --- /dev/null +++ b/rascunho/Schemas/leiauteConfRecebto_v1.00.xsd @@ -0,0 +1,406 @@ + + + + + + + Tipo Evento + + + + + + + + Código do órgão de recepção do Evento. Utilizar a Tabela do IBGE extendida, utilizar 90 para identificar o Ambiente Nacional + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Identificação do autor do evento + + + + CNPJ + + + + + CPF + + + + + + Chave de Acesso da NF-e vinculada ao evento + + + + + Data e Hora do Evento, formato UTC (AAAA-MM-DDThh:mm:ssTZD, onde TZD = +hh:mm ou -hh:mm) + + + + + Tipo do Evento: +210200 - Confirmacao da Operação +210210 – Ciência da Operação +210220 - Deconhecimento da operacao +210240 - Operação não Realizada + + + + + + + + + + + + + + + Seqüencial do evento para o mesmo tipo de evento. Para maioria dos eventos será 1, nos casos em que possa existir mais de um evento, como é o caso da carta de correção, o autor do evento deve numerar de forma seqüencial. + + + + + + + + + + + Versão do Tipo do Evento + + + + + Evento da confirmação de recebimento e210200 + + + + + + Descrição do Evento: + "Confirmacao da Operacao" + "Ciencia da Operacao" + "Desconhecimento da Operacao" + "Operação não Realizada" + + + + + + + + + + + + + + Justificativa de Operação não Realizada + + + + + + + + + + + + + + + + + + + + + + + + + Identificador da TAG a ser assinada, a regra de formação do Id é: +“ID” + tpEvento + chave da NF-e + nSeqEvento + + + + + + + + + + + + + + + + Tipo retorno do Evento + + + + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Versão do Aplicativo que recebeu o Evento + + + + + Código do órgão de recepção do Evento. Utilizar a Tabela do IBGE extendida, utilizar 91 para identificar o Ambiente Nacional + + + + + Código do status da registro do Evento + + + + + Descrição literal do status do registro do Evento + + + + + Chave de Acesso NF-e vinculada + + + + + Tipo do Evento vinculado + + + + + + + + + + + Descrição do Evento + + + + + + + + + + + Seqüencial do evento + + + + + + + + + + + Identificação do destinatpario da NF-e + + + + CNPJ Destinatário + + + + + CPF Destiantário + + + + + + email do destinatário + + + + + + + + + + + Data e Hora de do recebimento do evento ou do registro do evento formato UTC AAAA-MM-DDThh:mm:ssTZD. + + + + + + + + + + + Número do protocolo de registro do evento + + + + + + + + + + + + + + + + + + + Tipo Lote de Envio + + + + + + + + + + + + + + + + + Tipo Retorno de Lote de Envio + + + + + + + + + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Versão do Aplicativo que recebeu o Evento + + + + + Código do òrgao que registrou o Evento + + + + + Código do status da registro do Evento + + + + + Descrição literal do status do registro do Evento + + + + + + + + + Tipo procEvento + + + + + + + + + + Tipo Versão do EnvEvento + + + + + + + + + Tipo Versão do Evento + + + + + + + + + Tipo Código de orgão (UF da tabela do IBGE + 90 SUFRAMA + 91 - RFB) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/rascunho/Schemas/leiauteConsNFeDest_v1.01.xsd b/rascunho/Schemas/leiauteConsNFeDest_v1.01.xsd new file mode 100644 index 0000000..655c8c2 --- /dev/null +++ b/rascunho/Schemas/leiauteConsNFeDest_v1.01.xsd @@ -0,0 +1,483 @@ + + + + + + + Tipo número sequencial único do AN + + + + + + + + Tipo Pedido de Consulta de Nota Fiscal Eletrônica + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Serviço Solicitado + + + + + + + + + + + CNPJ do destinatário da NF-e + + + + + Indicador de NF-e consultada: +0 – Todas as NF-e; +1 – Somente as NF-e ainda não confirmadas. +2 – Somente as NF-e ainda não confirmadas (inclusive Ciência). + + + + + + + + + + + + + + Indicador do Emissor da NF-e: +0 – Todos os Emitentes; +1 – Somente as NF-e emitidas por emissores que não tenham a mesma raiz do CNPJ (para excluir as notas fiscais de transferência entre filiais). + + + + + + + + + + + + Último NSU recebido. Caso seja informado com zero, a consulta deve ser realizada no universo das notas fiscais tenham sido recepcionadas nos últimos 30 dias. + + + + + + + + + + + + + + Tipo Retorno do pedido de Consulta de Nota Fiscal Eletrônica + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Versão do Aplicativo que processou a NF-e + + + + + Código do status da mensagem enviada. + + + + + Descrição literal do status do serviço solicitado. + + + + + Data e hora da resposta à solicitação, no formato AAAA-MM-DDTHH:MM:SS + + + + + Indicador de continuidade. Indica que o ambiente consultado POSSUI ainda documentos não pesquisados. 0 = NÃO possui documentos. 1 = Possui documentos. + + + + + + + + + + + + último NSU pesquisado, deve ser informado pelo WS, sempre que realizar alguma pesquisa para que o solicitante possa atualizar o último NSU pesquisado. + + + + + + + + + + + Resumo de NF-e ou CC-e + + + + + + Informações resumo da NF-e localizadas + + + + + + Chaves de acesso da NF-e consultada + + + + + + CNPJ do Remetente da NF-e + + + + + CPF do Remetente da NF-e + + + + + + Razão Social ou Nome do Remetente + + + + + + + + + + + IE do Remetente. Valores válidos: vazio (não contribuinte do ICMS), ISENTO (contribuinte do ICMS ISENTO de Inscrição no Cadastro de Contribuintes) ou IE (Contribuinte do ICMS) + + + + + Data de Emissão da NF-e + + + + + Tipo do Documento Fiscal (0 - entrada; 1 - saída) + + + + + + + + + + + + Valor Total da NF-e + + + + + Digest Value da NF-e na base de dados da SEFAZ + + + + + + + + + + + Data e hora de processamento de autorização, no formato AAAA-MM-DDTHH:MM:SS. + + + + + Situação da NF-e +1-Uso autorizado no momento da consulta; +2-Uso denegado; +3-NF-e cancelada; + + + + + + + + + + + + + Situação Confirmação do Destinatário: +0 – sem manifestacao; +1 – confirmada; +2 – desconhecida; +3 – recusada +4 - ciência. + + + + + + + + + + + + + + + + + + + Informações resumo da NF-e canceladas localizadas + + + + + + Chaves de acesso da NF-e consultada + + + + + + CNPJ do Remetente da NF-e + + + + + CPF do Remetente da NF-e + + + + + + Razão Social ou Nome do Remetente + + + + + + + + + + + IE do Remetente. Valores válidos: vazio (não contribuinte do ICMS), ISENTO (contribuinte do ICMS ISENTO de Inscrição no Cadastro de Contribuintes) ou IE (Contribuinte do ICMS) + + + + + Data de Emissão da NF-e + + + + + Tipo do Documento Fiscal (0 - entrada; 1 - saída) + + + + + + + + + + + + Valor Total da NF-e + + + + + Digest Value da NF-e na base de dados da SEFAZ + + + + + + + + + + + Data e hora de processamento de autorização, no formato AAAA-MM-DDTHH:MM:SS. + + + + + Situação da NF-e +3-NF-e cancelada; + + + + + + + + + + + Situação Confirmação do Destinatário: +0 – sem manifestacao; +1 – confirmada; +2 – desconhecida; +3 – recusada +4 - ciência. + + + + + + + + + + + + + + + + + + + Informações da carta de correção da NF-e localizadas + + + + + + Chave de Acesso da NF-e vinculada ao evento + + + + + Data e Hora do Evento, formato UTC (AAAA-MM-DDThh:mm:ssTZD, onde TZD = +hh:mm ou -hh:mm) + + + + + + + + + + + Tipo do Evento + + + + + + + + + + + + Seqüencial do evento para o mesmo tipo de evento. Para maioria dos eventos será 1, nos casos em que possa existir mais de um evento, como é o caso da carta de correção, o autor do evento deve numerar de forma seqüencial. + + + + + + + + + + + Descrição do Evento - “Carta de Correção” + + + + + + + + + + + + Correção a ser considerada + + + + + + + + + + + + + Tipo do Documento Fiscal (0 - entrada; 1 - saída) + + + + + + + + + + + + Data e hora de processamento de autorização, no formato AAAA-MM-DDTHH:MM:SS. + + + + + + + + + + + + + + + Tipo Versão da consultaNFeDest + + + + + + + diff --git a/rascunho/Schemas/leiauteConsSitNFe_v3.10.xsd b/rascunho/Schemas/leiauteConsSitNFe_v3.10.xsd new file mode 100644 index 0000000..49e72f8 --- /dev/null +++ b/rascunho/Schemas/leiauteConsSitNFe_v3.10.xsd @@ -0,0 +1,502 @@ + + + + + + + + + + + + Tipo Pedido de Consulta da Situação Atual da Nota Fiscal Eletrônica + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Serviço Solicitado + + + + + + + + + + Chaves de acesso da NF-e, compostas por: UF do emitente, AAMM da emissão da NFe, CNPJ do emitente, modelo, série e número da NF-e e código numérico + DV. + + + + + + + + Tipo Retorno de Pedido de Consulta da Situação Atual da Nota Fiscal Eletrônica + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Versão do Aplicativo que processou a NF-e + + + + + Código do status da mensagem enviada. + + + + + Descrição literal do status do serviço solicitado. + + + + + código da UF de atendimento + + + + + AAAA-MM-DDTHH:MM:SSTZD + + + + + Chaves de acesso da NF-e consultada + + + + + Protocolo de autorização de uso da NF-e + + + + + Protocolo de homologação de cancelamento de uso da NF-e + + + + + Protocolo de registro de evento da NF-e + + + + + + + + Tipo Protocolo de status resultado do processamento da NF-e + + + + + Dados do protocolo de status + + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Versão do Aplicativo que processou a NF-e + + + + + Chaves de acesso da NF-e, compostas por: UF do emitente, AAMM da emissão da NFe, CNPJ do emitente, modelo, série e número da NF-e e código numérico+DV. + + + + + Data e hora de processamento, no formato AAAA-MM-DDTHH:MM:SS (ou AAAA-MM-DDTHH:MM:SSTZD, de acordo com versão). Deve ser preenchida com data e hora da gravação no Banco em caso de Confirmação. Em caso de Rejeição, com data e hora do recebimento do Lote de NF-e enviado. + + + + + Número do Protocolo de Status da NF-e. 1 posição (1 – Secretaria de Fazenda Estadual 2 – Receita Federal); 2 - códiga da UF - 2 posições ano; 10 seqüencial no ano. + + + + + Digest Value da NF-e processada. Utilizado para conferir a integridade da NF-e original. + + + + + Código do status da mensagem enviada. + + + + + Descrição literal do status do serviço solicitado. + + + + + + + + + + + + + Tipo retorno Pedido de Cancelamento da Nota Fiscal Eletrônica + + + + + Dados do Resultado do Pedido de Cancelamento da Nota Fiscal Eletrônica + + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Versão do Aplicativo que processou o pedido de cancelamento + + + + + Código do status da mensagem enviada. + + + + + Descrição literal do status do serviço solicitado. + + + + + código da UF de atendimento + + + + + Chaves de acesso da NF-e, compostas por: UF do emitente, AAMM da emissão da NFe, CNPJ do emitente, modelo, série e número da NF-e e código numérico + DV. + + + + + Data e hora de recebimento, no formato AAAA-MM-DDTHH:MM:SS. Deve ser preenchida com data e hora da gravação no Banco em caso de Confirmação. + + + + + Número do Protocolo de Status da NF-e. 1 posição (1 – Secretaria de Fazenda Estadual 2 – Receita Federal); 2 - código da UF - 2 posições ano; 10 seqüencial no ano. + + + + + + + + + + + + + Tipo Evento + + + + + + + + Código do órgão de recepção do Evento. Utilizar a Tabela do IBGE extendida, utilizar 90 para identificar o Ambiente Nacional + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Identificação do autor do evento + + + + CNPJ + + + + + CPF + + + + + + Chave de Acesso da NF-e vinculada ao evento + + + + + Data e Hora do Evento, formato UTC (AAAA-MM-DDThh:mm:ssTZD, onde TZD = +hh:mm ou -hh:mm) + + + + + Tipo do Evento + + + + + + + + + + + Seqüencial do evento para o mesmo tipo de evento. Para maioria dos eventos será 1, nos casos em que possa existir mais de um evento, como é o caso da carta de correção, o autor do evento deve numerar de forma seqüencial. + + + + + + + + + + + Versão do Tipo do Evento + + + + + + + + + + Detalhe Específico do Evento + + + + + + + + + + + + Identificador da TAG a ser assinada, a regra de formação do Id é: +“ID” + tpEvento + chave da NF-e + nSeqEvento + + + + + + + + + + + + + + + + Tipo retorno do Evento + + + + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Versão do Aplicativo que recebeu o Evento + + + + + Código do órgão de recepção do Evento. Utilizar a Tabela do IBGE extendida, utilizar 90 para identificar o Ambiente Nacional + + + + + Código do status da registro do Evento + + + + + Descrição literal do status do registro do Evento + + + + + Chave de Acesso NF-e vinculada + + + + + Tipo do Evento vinculado + + + + + + + + + + + Descrição do Evento + + + + + + + + + + + Seqüencial do evento + + + + + + + + + + + Identificação do destinatpario da NF-e + + + + CNPJ Destinatário + + + + + CPF Destiantário + + + + + + email do destinatário + + + + + + + + + + + Data e Hora de registro do evento formato UTC AAAA-MM-DDTHH:MM:SSTZD + + + + + Número do protocolo de registro do evento + + + + + + + + + + + + + + + + + + + Tipo procEvento + + + + + + + + + + Tipo Versão da NF-e + + + + + + + + Tipo Versão do leiaute de Cancelamento de NF-e - 2.00/1.07 + + + + + + + + Tipo Versão do Evento 1.00 + + + + + + + + Tipo Versão do Evento + + + + + + + + Tipo Versão do Leiaute da Cosulta situação NF-e - 3.10 + + + + + + + diff --git a/rascunho/Schemas/leiauteConsSitNFe_v4.00.xsd b/rascunho/Schemas/leiauteConsSitNFe_v4.00.xsd new file mode 100644 index 0000000..ec2a9e6 --- /dev/null +++ b/rascunho/Schemas/leiauteConsSitNFe_v4.00.xsd @@ -0,0 +1,503 @@ + + + + + + + + + + + + + Tipo Pedido de Consulta da Situação Atual da Nota Fiscal Eletrônica + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Serviço Solicitado + + + + + + + + + + Chaves de acesso da NF-e, compostas por: UF do emitente, AAMM da emissão da NFe, CNPJ do emitente, modelo, série e número da NF-e e código numérico + DV. + + + + + + + + Tipo Retorno de Pedido de Consulta da Situação Atual da Nota Fiscal Eletrônica + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Versão do Aplicativo que processou a NF-e + + + + + Código do status da mensagem enviada. + + + + + Descrição literal do status do serviço solicitado. + + + + + código da UF de atendimento + + + + + AAAA-MM-DDTHH:MM:SSTZD + + + + + Chaves de acesso da NF-e consultada + + + + + Protocolo de autorização de uso da NF-e + + + + + Protocolo de homologação de cancelamento de uso da NF-e + + + + + Protocolo de registro de evento da NF-e + + + + + + + + Tipo Protocolo de status resultado do processamento da NF-e + + + + + Dados do protocolo de status + + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Versão do Aplicativo que processou a NF-e + + + + + Chaves de acesso da NF-e, compostas por: UF do emitente, AAMM da emissão da NFe, CNPJ do emitente, modelo, série e número da NF-e e código numérico+DV. + + + + + Data e hora de processamento, no formato AAAA-MM-DDTHH:MM:SS (ou AAAA-MM-DDTHH:MM:SSTZD, de acordo com versão). Deve ser preenchida com data e hora da gravação no Banco em caso de Confirmação. Em caso de Rejeição, com data e hora do recebimento do Lote de NF-e enviado. + + + + + Número do Protocolo de Status da NF-e. 1 posição (1 – Secretaria de Fazenda Estadual 2 – Receita Federal); 2 - códiga da UF - 2 posições ano; 10 seqüencial no ano. + + + + + Digest Value da NF-e processada. Utilizado para conferir a integridade da NF-e original. + + + + + Código do status da mensagem enviada. + + + + + Descrição literal do status do serviço solicitado. + + + + + + + + + + + + + Tipo retorno Pedido de Cancelamento da Nota Fiscal Eletrônica + + + + + Dados do Resultado do Pedido de Cancelamento da Nota Fiscal Eletrônica + + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Versão do Aplicativo que processou o pedido de cancelamento + + + + + Código do status da mensagem enviada. + + + + + Descrição literal do status do serviço solicitado. + + + + + código da UF de atendimento + + + + + Chaves de acesso da NF-e, compostas por: UF do emitente, AAMM da emissão da NFe, CNPJ do emitente, modelo, série e número da NF-e e código numérico + DV. + + + + + Data e hora de recebimento, no formato AAAA-MM-DDTHH:MM:SS. Deve ser preenchida com data e hora da gravação no Banco em caso de Confirmação. + + + + + Número do Protocolo de Status da NF-e. 1 posição (1 – Secretaria de Fazenda Estadual 2 – Receita Federal); 2 - código da UF - 2 posições ano; 10 seqüencial no ano. + + + + + + + + + + + + + Tipo Evento + + + + + + + + Código do órgão de recepção do Evento. Utilizar a Tabela do IBGE extendida, utilizar 90 para identificar o Ambiente Nacional + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Identificação do autor do evento + + + + CNPJ + + + + + CPF + + + + + + Chave de Acesso da NF-e vinculada ao evento + + + + + Data e Hora do Evento, formato UTC (AAAA-MM-DDThh:mm:ssTZD, onde TZD = +hh:mm ou -hh:mm) + + + + + Tipo do Evento + + + + + + + + + + + Seqüencial do evento para o mesmo tipo de evento. Para maioria dos eventos será 1, nos casos em que possa existir mais de um evento, como é o caso da carta de correção, o autor do evento deve numerar de forma seqüencial. + + + + + + + + + + + Versão do Tipo do Evento + + + + + + + + + + Detalhe Específico do Evento + + + + + + + + + + + + Identificador da TAG a ser assinada, a regra de formação do Id é: +“ID” + tpEvento + chave da NF-e + nSeqEvento + + + + + + + + + + + + + + + + Tipo retorno do Evento + + + + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Versão do Aplicativo que recebeu o Evento + + + + + Código do órgão de recepção do Evento. Utilizar a Tabela do IBGE extendida, utilizar 90 para identificar o Ambiente Nacional + + + + + Código do status da registro do Evento + + + + + Descrição literal do status do registro do Evento + + + + + Chave de Acesso NF-e vinculada + + + + + Tipo do Evento vinculado + + + + + + + + + + + Descrição do Evento + + + + + + + + + + + Seqüencial do evento + + + + + + + + + + + Identificação do destinatpario da NF-e + + + + CNPJ Destinatário + + + + + CPF Destiantário + + + + + + email do destinatário + + + + + + + + + + + Data e Hora de registro do evento formato UTC AAAA-MM-DDTHH:MM:SSTZD + + + + + Número do protocolo de registro do evento + + + + + + + + + + + + + + + + + + + Tipo procEvento + + + + + + + + + + Tipo Versão da NF-e + + + + + + + + Tipo Versão do leiaute de Cancelamento de NF-e - 2.00/1.07 + + + + + + + + Tipo Versão do Evento 1.00 + + + + + + + + Tipo Versão do Evento + + + + + + + + Tipo Versão do Leiaute da Cosulta situação NF-e - 4.00 + + + + + + + diff --git a/rascunho/Schemas/leiauteConsStatServ_v3.10.xsd b/rascunho/Schemas/leiauteConsStatServ_v3.10.xsd new file mode 100644 index 0000000..1019009 --- /dev/null +++ b/rascunho/Schemas/leiauteConsStatServ_v3.10.xsd @@ -0,0 +1,98 @@ + + + + + + + Tipo Pedido de Consulta do Status do Serviço + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Sigla da UF consultada + + + + + Serviço Solicitado + + + + + + + + + + + + + Tipo Resultado da Consulta do Status do Serviço + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Versão do Aplicativo que processou a NF-e + + + + + Código do status da mensagem enviada. + + + + + Descrição literal do status do serviço solicitado. + + + + + Código da UF responsável pelo serviço + + + + + Data e hora do recebimento da consulta no formato AAAA-MM-DDTHH:MM:SSTZD + + + + + Tempo médio de resposta do serviço (em segundos) dos últimos 5 minutos + + + + + AAAA-MM-DDTHH:MM:SSDeve ser preenchida com data e hora previstas para o retorno dos serviços prestados. + + + + + Campo observação utilizado para incluir informações ao contribuinte + + + + + + + + Tipo versão do leiuate da Consulta Status do Serviço 3.10 + + + + + + \ No newline at end of file diff --git a/rascunho/Schemas/leiauteConsStatServ_v4.00.xsd b/rascunho/Schemas/leiauteConsStatServ_v4.00.xsd new file mode 100644 index 0000000..93db629 --- /dev/null +++ b/rascunho/Schemas/leiauteConsStatServ_v4.00.xsd @@ -0,0 +1,98 @@ + + + + + + + Tipo Pedido de Consulta do Status do Serviço + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Sigla da UF consultada + + + + + Serviço Solicitado + + + + + + + + + + + + + Tipo Resultado da Consulta do Status do Serviço + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Versão do Aplicativo que processou a NF-e + + + + + Código do status da mensagem enviada. + + + + + Descrição literal do status do serviço solicitado. + + + + + Código da UF responsável pelo serviço + + + + + Data e hora do recebimento da consulta no formato AAAA-MM-DDTHH:MM:SSTZD + + + + + Tempo médio de resposta do serviço (em segundos) dos últimos 5 minutos + + + + + AAAA-MM-DDTHH:MM:SSDeve ser preenchida com data e hora previstas para o retorno dos serviços prestados. + + + + + Campo observação utilizado para incluir informações ao contribuinte + + + + + + + + Tipo versão do leiuate da Consulta Status do Serviço 4.00 + + + + + + diff --git a/rascunho/Schemas/leiauteConsultaCadastro_v2.00.xsd b/rascunho/Schemas/leiauteConsultaCadastro_v2.00.xsd new file mode 100644 index 0000000..95ddb08 --- /dev/null +++ b/rascunho/Schemas/leiauteConsultaCadastro_v2.00.xsd @@ -0,0 +1,404 @@ + + + + + + + + Tipo Pedido de Consulta de cadastro de contribuintes + + + + + Dados do Pedido de Consulta de cadastro de contribuintes + + + + + + Serviço Solicitado + + + + + + + + + + sigla da UF consultada, utilizar SU para SUFRAMA + + + + + argumento de pesquisa + + + + Inscrição Estadual do contribuinte + + + + + CNPJ do contribuinte + + + + + CPF do contribuinte + + + + + + + + + + + + Tipo Retorno Pedido de Consulta de cadastro de contribuintes + + + + + Dados do Resultado doDados do Pedido de Consulta de cadastro de contribuintes + + + + + + Versão do Aplicativo que processou o pedido de consulta de cadastro + + + + + Código do status da mensagem enviada. + + + + + Descrição literal do status do serviço solicitado. + + + + + sigla da UF consultada, utilizar SU para SUFRAMA + + + + + argumento de pesquisa + + + + Inscrição Estadual do contribuinte + + + + + CNPJ do contribuinte + + + + + CPF do contribuinte + + + + + + Data da Consulta + + + + + código da UF de atendimento + + + + + Informações cadastrais do contribuinte consultado + + + + + + Número da Inscrição Estadual do contribuinte + + + + + + Número do CNPJ do contribuinte + + + + + Número do CPF do contribuinte + + + + + + Sigla da UF de localização do contribuinte. Em algumas situações, a UF de localização pode ser diferente da UF consultada. Ex. IE de Substituto Tributário. + + + + + Situação cadastral do contribuinte: +0 - não habilitado +1 - habilitado + + + + + + + + + + + Indicador de contribuinte credenciado a emitir NF-e. +0 - Não credenciado para emissão da NF-e; +1 - Credenciado; +2 - Credenciado com obrigatoriedade para todas operações; +3 - Credenciado com obrigatoriedade parcial; +4 – a SEFAZ não fornece a informação. +Este indicador significa apenas que o contribuinte é credenciado para emitir NF-e na SEFAZ consultada. + + + + + + + + + + + + + + + Indicador de contribuinte credenciado a emitir CT-e. +0 - Não credenciado para emissão da CT-e; +1 - Credenciado; +2 - Credenciado com obrigatoriedade para todas operações; +3 - Credenciado com obrigatoriedade parcial; +4 – a SEFAZ não fornece a informação. +Este indicador significa apenas que o contribuinte é credenciado para emitir CT-e na SEFAZ consultada. + + + + + + + + + + + + + + + Razão Social ou nome do contribuinte + + + + + + + + + + + Razão Social ou nome do contribuinte + + + + + + + + + + + Regime de Apuração do ICMS + + + + + + + + + + + CNAE Fiscal do contribuinte + + + + + + + + + + Data de início de atividades do contribuinte + + + + + Data da última modificação da situação cadastral do contribuinte. + + + + + Data de ocorrência da baixa do contribuinte. + + + + + Inscrição Estadual Única + + + + + Inscrição Estadual atual + + + + + Endereço + + + + + + + + + + + + + + Tipo Dados do Endereço + + + + + Logradouro + + + + + + + + + + + Número + + + + + + + + + + + Complemento + + + + + + + + + + + Bairro + + + + + + + + + + + Código do município (utilizar a tabela do IBGE), informar 9999999 para operações com o exterior. + + + + + Nome do município + + + + + + + + + + + CEP + + + + + + + + + + + + Tipo Sigla da UF consultada + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tipo Versão do Leiaute da Consulta Cadastro 2.00 + + + + + + diff --git a/rascunho/Schemas/leiauteDownloadNFe_v1.00.xsd b/rascunho/Schemas/leiauteDownloadNFe_v1.00.xsd new file mode 100644 index 0000000..0c29698 --- /dev/null +++ b/rascunho/Schemas/leiauteDownloadNFe_v1.00.xsd @@ -0,0 +1,149 @@ + + + + + + + + Tipo Pedido de Download de NF-e + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Serviço Solicitado + + + + + + + + + + + CNPJ do destinatário da NF-e + + + + + Chave de Acesso da NF-e objeto de download + + + + + + + + Tipo Retorno do pedido de Download de NF-e + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Versão do Aplicativo que processou a NF-e + + + + + Código do status da mensagem enviada. + + + + + Descrição literal do status do serviço solicitado. + + + + + Data e hora da resposta à solicitação, no formato AAAA-MM-DDTHH:MM:SS + + + + + Conjunto de informação das NF-e localizadas + + + + + + Chaves de acesso da NF-e consultada + + + + + Código do status da mensagem enviada. + + + + + Descrição literal do status do serviço solicitado. + + + + + + + + + XML NFe compactado no padrão gZIP + + + + + XML protNFe compactado no padrão gZIP + + + + + + + + XML do procNFe compactado no padrão gZIP + + + + + + + + XML do procNFe + + + + + + Identificação do Schema XML de validação do proc, Ex. procNFe_v2.00.xsd. + + + + + + + + + + + + + + Tipo Versão da consultaNFeDest + + + + + + + diff --git a/rascunho/Schemas/leiauteEPEC_v1.00.xsd b/rascunho/Schemas/leiauteEPEC_v1.00.xsd new file mode 100644 index 0000000..a9661f5 --- /dev/null +++ b/rascunho/Schemas/leiauteEPEC_v1.00.xsd @@ -0,0 +1,459 @@ + + + + + + + Tipo Evento + + + + + + + + Código do órgão de recepção do Evento. Utilizar a Tabela do IBGE extendida, utilizar 91 para identificar o Ambiente Nacional + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Identificação do autor do evento + + + + CNPJ + + + + + CPF + + + + + + Chave de Acesso da NF-e vinculada ao evento + + + + + Data e Hora do Evento, formato UTC (AAAA-MM-DDThh:mm:ssTZD, onde TZD = +hh:mm ou -hh:mm) + + + + + Tipo do Evento + + + + + + + + + + + + Seqüencial do evento para o mesmo tipo de evento. + + + + + + + + + + + Versão do Tipo do Evento + + + + + + + + + + + Schema XML de validação do evento de emissão prévia em contingência - 110140 + + + + + + + + + + + + + + + + + + + + Identificador do destinatário, em caso de comprador estrangeiro + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Identificador da TAG a ser assinada, a regra de formação do Id é: +“ID” + tpEvento + chave da NF-e + nSeqEvento + + + + + + + + + + + + + + + + + + + + + + + + Neste evento, aceitar apenas 1. 1=Empresa Emitente; 2=Empresa Destinatária; 3=Empresa; 5=Fisco; 6=RFB; 9=Outros Órgãos + + + + + + + + + + + Versão do Aplicativo do Autor do Evento + + + + + Data de emissão no formato UTC. AAAA-MM-DDThh:mm:ssTZD + + + + + Tipo do Documento Fiscal (0 - entrada; 1 - saída) + + + + + + + + + + + + + Informar a IE. Para IE do destinatário somente quando o contribuinte possuir uma inscrição estadual + + + + + + + + + + + Sigla UF do destinatário. Informar "EX" no caso de operação com o exterior + + + + + Valor total da NF-e + + + + + Valor total do ICMS + + + + + Valor total do ICMS de Substituição Tributária + + + + + Tipo retorno do Evento + + + + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Versão do Aplicativo que recebeu o Evento + + + + + Código do órgão de recepção do Evento. Utilizar a Tabela do IBGE extendida, utilizar 91 para identificar o Ambiente Nacional + + + + + Código do status da registro do Evento + + + + + Descrição literal do status do registro do Evento + + + + + Chave de Acesso NF-e vinculada + + + + + Tipo do Evento vinculado + + + + + + + + + + + Descrição do Evento + + + + + + + + + + + Seqüencial do evento + + + + + + + + + + + + Data e Hora de do recebimento do evento ou do registro do evento formato UTC AAAA-MM-DDThh:mm:ssTZD. + + + + + + + + + + + Número do protocolo de registro do evento + + + + + Relação de Chaves de Acesso de EPEC não conciliados (pendentes de conciliação) existentes no AN. + + + + + + + + + + + + + + + + + + + Tipo Lote de Envio + + + + + + + + + + + + + + + + + Tipo Retorno de Lote de Envio + + + + + + + + + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Versão do Aplicativo que recebeu o Evento + + + + + Código do òrgao que registrou o Evento + + + + + Código do status da registro do Evento + + + + + Descrição literal do status do registro do Evento + + + + + + + + + Tipo procEvento + + + + + + + + + + Tipo Versão do EnvEvento + + + + + + + + + Tipo Versão do Evento + + + + + + + + + Tipo Código de orgão (UF da tabela do IBGE + 91 RFB) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/rascunho/Schemas/leiauteEventoAtorInteressado_v1.00.xsd b/rascunho/Schemas/leiauteEventoAtorInteressado_v1.00.xsd new file mode 100644 index 0000000..e61bdc4 --- /dev/null +++ b/rascunho/Schemas/leiauteEventoAtorInteressado_v1.00.xsd @@ -0,0 +1,384 @@ + + + + + + + + Tipo Evento + + + + + + + + Código do órgão de recepção do Evento. Utilizar a Tabela do IBGE extendida, utilizar 91 para identificar o Ambiente Nacional + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Identificação do autor do evento + + + + CNPJ + + + + + CPF + + + + + + Chave de Acesso da NF-e vinculada ao evento + + + + + Data e Hora do Evento, formato UTC (AAAA-MM-DDThh:mm:ssTZD, onde TZD = +hh:mm ou -hh:mm) + + + + + Tipo do Evento + + + + + + + + + + + + Seqüencial do evento para o mesmo tipo de evento. Para maioria dos eventos será 1, nos casos em que possa existir mais de um evento, como é o caso da carta de correção, o autor do evento deve numerar de forma seqüencial. + + + + + + + + + + + Versão do Tipo do Evento + + + + + + + + + + + Schema XML de validação do evento de Ator Interessado na NF-e - Transportador (110150)” + + + + + + Descrição do Evento - "Ator interessado na NF-e”" + + + + + + + + + + + + Tipo do Órgão Autor do Evento. Informar uma das opções 1=Geração do Evento pelo Emitente; 2=Geração do Evento pelo Destinatário; 3=Geração do Evento pelo Transportador +Outros valores: 1=Empresa Emitente, 2=Empresa destinatária; 3=Empresa; 5=Fisco; 6=RFB; 9=Outros Órgãos; + + + + + + + + + + + + + Versão do aplicativo do Autor do Evento. + + + + + Pessoas autorizadas a acessar o XML da NF-e + + + + + + + + + + + 0 – Não permite; 1 – Permite o transportador autorizado pelo emitente ou destinatário autorizar outros transportadores para ter acesso ao download da NF-e + + + + + + + + + + + + + Texto Fixo com as Condição de uso do tipo de autorização para o transportador: + + + + + + + + + + + + + + + + + + + + + + + Identificador da TAG a ser assinada, a regra de formação do Id é: +“ID” + tpEvento + chave da NF-e + nSeqEvento + + + + + + + + + + + + + + + + Tipo retorno do Evento + + + + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Versão do Aplicativo que recebeu o Evento + + + + + Código do órgão de recepção do Evento. Utilizar a Tabela do IBGE extendida, utilizar 91 para identificar o Ambiente Nacional + + + + + Código do status da registro do Evento + + + + + Descrição literal do status do registro do Evento + + + + + Chave de Acesso NF-e vinculada + + + + + Tipo do Evento vinculado + + + + + + + + + + + + Descrição do Evento + + + + + + + + + + + Seqüencial do evento + + + + + + + + + + + Código do Órgão Autor do Evento. Informar o Código da UF para este Evento. + + + + + Data e Hora de do recebimento do evento ou do registro do evento formato UTC AAAA-MM-DDThh:mm:ssTZD. + + + + + + + + + + + Número do protocolo de registro do evento + + + + + + + + + + + + + + + + + + + Tipo Lote de Envio + + + + + + + + + + + + + + + + + Tipo Retorno de Lote de Envio + + + + + + + + + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Versão do Aplicativo que recebeu o Evento + + + + + Código do òrgao que registrou o Evento + + + + + Código do status da registro do Evento + + + + + Descrição literal do status do registro do Evento + + + + + + + + + Tipo procEvento + + + + + + + + + + Tipo Versão do EnvEvento + + + + + + + + + Tipo Versão do Evento + + + + + + + diff --git a/rascunho/Schemas/leiauteEventoCancEntregaNFe_v1.00.xsd b/rascunho/Schemas/leiauteEventoCancEntregaNFe_v1.00.xsd new file mode 100644 index 0000000..0b934cf --- /dev/null +++ b/rascunho/Schemas/leiauteEventoCancEntregaNFe_v1.00.xsd @@ -0,0 +1,307 @@ + + + + + + + + Tipo Evento + + + + + + + + Código do órgão de recepção do Evento. Utilizar a Tabela do IBGE extendida, utilizar 90 para identificar o Ambiente Nacional + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Identificação do autor do evento + + + + CNPJ + + + + + CPF + + + + + + Chave de Acesso da NF-e vinculada ao evento + + + + + Data de emissão no formato UTC. AAAA-MM-DDThh:mm:ssTZD + + + + + Tipo do Evento + + + + + + + + + + + + Seqüencial do evento para o mesmo tipo de evento. Para maioria dos eventos será 1, nos casos em que possa existir mais de um evento, como é o caso da carta de correção, o autor do evento deve numerar de forma seqüencial. + + + + + + + + + + + Versão do Tipo do Evento + + + + + + + + + + + + + Identificador da TAG a ser assinada, a regra de formação do Id é: +“ID” + tpEvento + chave da NF-e + nSeqEvento + + + + + + + + + + + + + + + + Tipo Versão do Evento + + + + + + + + + Tipo retorno do Evento + + + + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Versão do Aplicativo que recebeu o Evento + + + + + Código do órgão de recepção do Evento. Utilizar a Tabela do IBGE extendida, utilizar 90 para identificar o Ambiente Nacional + + + + + Código do status da registro do Evento + + + + + Descrição literal do status do registro do Evento + + + + + Chave de Acesso NF-e vinculada + + + + + Tipo do Evento vinculado + + + + + + + + + + + Descrição do Evento + + + + + + + + + + + Seqüencial do evento + + + + + + + + + + + email do destinatário + + + + + + + + + + + Data e Hora de do recebimento do evento ou do registro do evento formato UTC AAAA-MM-DDThh:mm:ssTZD. + + + + + + + + + + + Número do protocolo de registro do evento + + + + + + + + + + + + + + + + + + + Tipo Lote de Envio + + + + + + + + + + + + + + + + + Tipo Versão do EnvEvento + + + + + + + + + Tipo Retorno de Lote de Envio + + + + + + + + + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Versão do Aplicativo que recebeu o Evento + + + + + Código do òrgao que registrou o Evento + + + + + Código do status da registro do Evento + + + + + Descrição literal do status do registro do Evento + + + + + + + + + Tipo procEvento + + + + + + + + diff --git a/rascunho/Schemas/leiauteEventoCancNFe_v1.00.xsd b/rascunho/Schemas/leiauteEventoCancNFe_v1.00.xsd new file mode 100644 index 0000000..e2c354a --- /dev/null +++ b/rascunho/Schemas/leiauteEventoCancNFe_v1.00.xsd @@ -0,0 +1,358 @@ + + + + + + + Tipo Evento + + + + + + + + Código do órgão de recepção do Evento. Utilizar a Tabela do IBGE extendida, utilizar 91 para identificar o Ambiente Nacional + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Identificação do autor do evento + + + + CNPJ + + + + + CPF + + + + + + Chave de Acesso da NF-e vinculada ao evento + + + + + Data e Hora do Evento, formato UTC (AAAA-MM-DDThh:mm:ssTZD, onde TZD = +hh:mm ou -hh:mm) + + + + + Tipo do Evento + + + + + + + + + + + + Seqüencial do evento para o mesmo tipo de evento. Para maioria dos eventos será 1, nos casos em que possa existir mais de um evento, como é o caso da carta de correção, o autor do evento deve numerar de forma seqüencial. + + + + + + + + + + + Versão do Tipo do Evento + + + + + + + + + + + Schema XML de validação do evento do cancelamento 1101111 + + + + + + Descrição do Evento - “Cancelamento” + + + + + + + + + + + Número do Protocolo de Status da NF-e. 1 posição (1 – Secretaria de Fazenda Estadual 2 – Receita Federal); 2 posições ano; 10 seqüencial no ano. + + + + + Justificativa do cancelamento + + + + + + + + + + + + + + + + + Identificador da TAG a ser assinada, a regra de formação do Id é: +“ID” + tpEvento + chave da NF-e + nSeqEvento + + + + + + + + + + + + + + + + Tipo retorno do Evento + + + + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Versão do Aplicativo que recebeu o Evento + + + + + Código do órgão de recepção do Evento. Utilizar a Tabela do IBGE extendida, utilizar 91 para identificar o Ambiente Nacional + + + + + Código do status da registro do Evento + + + + + Descrição literal do status do registro do Evento + + + + + Chave de Acesso NF-e vinculada + + + + + Tipo do Evento vinculado + + + + + + + + + + + Descrição do Evento + + + + + + + + + + + Seqüencial do evento + + + + + + + + + + + Identificação do destinatário da NF-e + + + + CNPJ Destinatário + + + + + CPF Destiantário + + + + + + email do destinatário + + + + + + + + + + + Data e Hora de do recebimento do evento ou do registro do evento formato UTC AAAA-MM-DDThh:mm:ssTZD. + + + + + + + + + + + Número do protocolo de registro do evento + + + + + + + + + + + + + + + + + + + Tipo Lote de Envio + + + + + + + + + + + + + + + + + Tipo Retorno de Lote de Envio + + + + + + + + + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Versão do Aplicativo que recebeu o Evento + + + + + Código do òrgao que registrou o Evento + + + + + Código do status da registro do Evento + + + + + Descrição literal do status do registro do Evento + + + + + + + + + Tipo procEvento + + + + + + + + + + Tipo Versão do EnvEvento + + + + + + + + + Tipo Versão do Evento + + + + + + + diff --git a/rascunho/Schemas/leiauteEventoCancSubst_v1.00.xsd b/rascunho/Schemas/leiauteEventoCancSubst_v1.00.xsd new file mode 100644 index 0000000..3157aa8 --- /dev/null +++ b/rascunho/Schemas/leiauteEventoCancSubst_v1.00.xsd @@ -0,0 +1,366 @@ + + + + + + + + Tipo Evento + + + + + + + + Código do órgão de recepção do Evento. Utilizar a Tabela do IBGE extendida, utilizar 91 para identificar o Ambiente Nacional + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Identificação do autor do evento + + + + CNPJ + + + + + CPF + + + + + + Chave de Acesso da NF-e vinculada ao evento + + + + + Data e Hora do Evento, formato UTC (AAAA-MM-DDThh:mm:ssTZD, onde TZD = +hh:mm ou -hh:mm) + + + + + Tipo do Evento + + + + + + + + + + + + Seqüencial do evento para o mesmo tipo de evento. Para maioria dos eventos será 1, nos casos em que possa existir mais de um evento, como é o caso da carta de correção, o autor do evento deve numerar de forma seqüencial. + + + + + + + + + + + Versão do Tipo do Evento + + + + + + + + + + + Schema XML de validação do evento do cancelamento por substituição 110112 + + + + + + Descrição do Evento - “Cancelamento por substituição” + + + + + + + + + + + Código do Órgão Autor do Evento. Informar o Código da UF para este Evento. + + + + + Autor do Evento de Irregularidade FiscalInformar 5=Fisco para este Evento. + Valores: 1=Empresa Emitente, 2=Empresa destinatária; 3=Empresa; 5=Fisco;6=RFB; 9=Outros Órgãos; + + + + + + + + + + + Versão do Aplicativo que recebeu o Evento + + + + + Número do Protocolo de Status da NF-e. 1 posição (1 – Secretaria de Fazenda Estadual 2 – Receita Federal); 2 posições ano; 10 seqüencial no ano. + + + + + Justificativa do cancelamento + + + + + Chave de Acesso NF-e vinculada + + + + + + + + + + + + + + + + + Identificador da TAG a ser assinada, a regra de formação do Id é: +“ID” + tpEvento + chave da NF-e + nSeqEvento + + + + + + + + + + + + + + + + Tipo retorno do Evento + + + + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Versão do Aplicativo que recebeu o Evento + + + + + Código do órgão de recepção do Evento. Utilizar a Tabela do IBGE extendida, utilizar 91 para identificar o Ambiente Nacional + + + + + Código do status da registro do Evento + + + + + Descrição literal do status do registro do Evento + + + + + Chave de Acesso NF-e vinculada + + + + + Tipo do Evento vinculado + + + + + + + + + + + + Descrição do Evento + + + + + + + + + + + Seqüencial do evento + + + + + + + + + + + Código do Órgão Autor do Evento. Informar o Código da UF para este Evento. + + + + + Data e Hora de do recebimento do evento ou do registro do evento formato UTC AAAA-MM-DDThh:mm:ssTZD. + + + + + + + + + + + Número do protocolo de registro do evento + + + + + + + + + + + + + + + + + + + Tipo Lote de Envio + + + + + + + + + + + + + + + + + Tipo Retorno de Lote de Envio + + + + + + + + + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Versão do Aplicativo que recebeu o Evento + + + + + Código do òrgao que registrou o Evento + + + + + Código do status da registro do Evento + + + + + Descrição literal do status do registro do Evento + + + + + + + + + Tipo procEvento + + + + + + + + + + Tipo Versão do EnvEvento + + + + + + + + + Tipo Versão do Evento + + + + + + + diff --git a/rascunho/Schemas/leiauteEventoEntregaNFe_v1.00.xsd b/rascunho/Schemas/leiauteEventoEntregaNFe_v1.00.xsd new file mode 100644 index 0000000..5274c30 --- /dev/null +++ b/rascunho/Schemas/leiauteEventoEntregaNFe_v1.00.xsd @@ -0,0 +1,321 @@ + + + + + + + Tipo Evento + + + + + + + + Código do órgão de recepção do Evento. Utilizar a Tabela do IBGE extendida, utilizar 90 para identificar o Ambiente Nacional + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Identificação do autor do evento + + + + CNPJ + + + + + CPF + + + + + + Chave de Acesso da NF-e vinculada ao evento + + + + + Data de emissão no formato UTC. AAAA-MM-DDThh:mm:ssTZD + + + + + Tipo do Evento + + + + + + + + + + + + Seqüencial do evento para o mesmo tipo de evento. Para maioria dos eventos será 1, nos casos em que possa existir mais de um evento, como é o caso da carta de correção, o autor do evento deve numerar de forma seqüencial. + + + + + + + + + + + Versão do Tipo do Evento + + + + + + + + + + + + + Identificador da TAG a ser assinada, a regra de formação do Id é: +“ID” + tpEvento + chave da NF-e + nSeqEvento + + + + + + + + + + + + + + + + Tipo Versão do Evento + + + + + + + + + Tipo retorno do Evento + + + + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Versão do Aplicativo que recebeu o Evento + + + + + Código do órgão de recepção do Evento. Utilizar a Tabela do IBGE extendida, utilizar 90 para identificar o Ambiente Nacional + + + + + Código do status da registro do Evento + + + + + Descrição literal do status do registro do Evento + + + + + Chave de Acesso NF-e vinculada + + + + + Tipo do Evento vinculado + + + + + + + + + + + Descrição do Evento + + + + + + + + + + + Seqüencial do evento + + + + + + + + + + + Identificação do destinatário da NF-e + + + + CNPJ Destinatário + + + + + CPF Destiantário + + + + + + email do destinatário + + + + + + + + + + + Data e Hora de do recebimento do evento ou do registro do evento formato UTC AAAA-MM-DDThh:mm:ssTZD. + + + + + + + + + + + Número do protocolo de registro do evento + + + + + + + + + + + + + + + + + + + Tipo Lote de Envio + + + + + + + + + + + + + + + + + Tipo Versão do EnvEvento + + + + + + + + + Tipo Retorno de Lote de Envio + + + + + + + + + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Versão do Aplicativo que recebeu o Evento + + + + + Código do òrgao que registrou o Evento + + + + + Código do status da registro do Evento + + + + + Descrição literal do status do registro do Evento + + + + + + + + + Tipo procEvento + + + + + + + + diff --git a/rascunho/Schemas/leiauteEvento_v1.00.xsd b/rascunho/Schemas/leiauteEvento_v1.00.xsd new file mode 100644 index 0000000..b5bfea5 --- /dev/null +++ b/rascunho/Schemas/leiauteEvento_v1.00.xsd @@ -0,0 +1,379 @@ + + + + + + + Tipo Evento + + + + + + + + Código do órgão de recepção do Evento. Utilizar a Tabela do IBGE extendida, utilizar 90 para identificar o Ambiente Nacional + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Identificação do autor do evento + + + + CNPJ + + + + + CPF + + + + + + Chave de Acesso da NF-e vinculada ao evento + + + + + Data e Hora do Evento, formato UTC (AAAA-MM-DDThh:mm:ssTZD, onde TZD = +hh:mm ou -hh:mm) + + + + + Tipo do Evento + + + + + + + + + + + Seqüencial do evento para o mesmo tipo de evento. Para maioria dos eventos será 1, nos casos em que possa existir mais de um evento, como é o caso da carta de correção, o autor do evento deve numerar de forma seqüencial. + + + + + + + + + + + Versão do Tipo do Evento + + + + + + + + + + + + + informações específicas do evento + + + + + + + + + + Identificador da TAG a ser assinada, a regra de formação do Id é: +“ID” + tpEvento + chave da NF-e + nSeqEvento + + + + + + + + + + + + + + + + Tipo retorno do Evento + + + + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Versão do Aplicativo que recebeu o Evento + + + + + Código do órgão de recepção do Evento. Utilizar a Tabela do IBGE extendida, utilizar 90 para identificar o Ambiente Nacional + + + + + Código do status da registro do Evento + + + + + Descrição literal do status do registro do Evento + + + + + Chave de Acesso NF-e vinculada + + + + + Tipo do Evento vinculado + + + + + + + + + + + Descrição do Evento + + + + + + + + + + + Seqüencial do evento + + + + + + + + + + + Código do órgão de autor do Evento. Utilizar a Tabela do IBGE extendida, utilizar 90 para identificar o Ambiente Nacional + + + + + Identificação do destinatpario da NF-e + + + + CNPJ Destinatário + + + + + CPF Destiantário + + + + + + email do destinatário + + + + + + + + + + + Data e Hora de registro do evento formato UTC AAAA-MM-DDTHH:MM:SSTZD + + + + + + + + + + + Número do protocolo de registro do evento + + + + + + + + + + + + + + + + + + + Tipo Lote de Envio + + + + + + + + + + + + + + + + + Tipo Retorno de Lote de Envio + + + + + + + + + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Versão do Aplicativo que recebeu o Evento + + + + + Código do òrgao que registrou o Evento + + + + + Código do status da registro do Evento + + + + + Descrição literal do status do registro do Evento + + + + + + + + + Tipo procEvento + + + + + + + + + + Tipo Versão do EnvEvento + + + + + + + + + Tipo Versão do Evento + + + + + + + + + + diff --git a/rascunho/Schemas/leiauteInutNFe_v3.10.xsd b/rascunho/Schemas/leiauteInutNFe_v3.10.xsd new file mode 100644 index 0000000..93bb93a --- /dev/null +++ b/rascunho/Schemas/leiauteInutNFe_v3.10.xsd @@ -0,0 +1,193 @@ + + + + + + + + + Tipo Pedido de Inutilização de Numeração da Nota Fiscal Eletrônica + + + + + Dados do Pedido de Inutilização de Numeração da Nota Fiscal Eletrônica + + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Serviço Solicitado + + + + + + + + + + Código da UF do emitente + + + + + Ano de inutilização da numeração + + + + + CNPJ do emitente + + + + + Modelo da NF-e (55, 65 etc.) + + + + + Série da NF-e + + + + + Número da NF-e inicial + + + + + Número da NF-e final + + + + + Justificativa do pedido de inutilização + + + + + + + + + + + + + + + + + + + Tipo retorno do Pedido de Inutilização de Numeração da Nota Fiscal Eletrônica + + + + + Dados do Retorno do Pedido de Inutilização de Numeração da Nota Fiscal Eletrônica + + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Versão do Aplicativo que processou a NF-e + + + + + Código do status da mensagem enviada. + + + + + Descrição literal do status do serviço solicitado. + + + + + Código da UF que atendeu a solicitação + + + + + Ano de inutilização da numeração + + + + + CNPJ do emitente + + + + + Modelo da NF-e (55, etc.) + + + + + Série da NF-e + + + + + Número da NF-e inicial + + + + + Número da NF-e final + + + + + Data e hora de recebimento, no formato AAAA-MM-DDTHH:MM:SS. Deve ser preenchida com data e hora da gravação no Banco em caso de Confirmação. Em caso de Rejeição, com data e hora do recebimento do Pedido de Inutilização. + + + + + Número do Protocolo de Status da NF-e. 1 posição (1 – Secretaria de Fazenda Estadual 2 – Receita Federal); 2 - código da UF - 2 posições ano; 10 seqüencial no ano. + + + + + + + + + + + + + Tipo Pedido de inutilzação de númeração de NF-e processado + + + + + + + + + + Tipo Versão do leiaute de Inutilização 3.10 + + + + + + \ No newline at end of file diff --git a/rascunho/Schemas/leiauteInutNFe_v4.00.xsd b/rascunho/Schemas/leiauteInutNFe_v4.00.xsd new file mode 100644 index 0000000..fd2b1a5 --- /dev/null +++ b/rascunho/Schemas/leiauteInutNFe_v4.00.xsd @@ -0,0 +1,193 @@ + + + + + + + + + Tipo Pedido de Inutilização de Numeração da Nota Fiscal Eletrônica + + + + + Dados do Pedido de Inutilização de Numeração da Nota Fiscal Eletrônica + + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Serviço Solicitado + + + + + + + + + + Código da UF do emitente + + + + + Ano de inutilização da numeração + + + + + CNPJ do emitente + + + + + Modelo da NF-e (55, 65 etc.) + + + + + Série da NF-e + + + + + Número da NF-e inicial + + + + + Número da NF-e final + + + + + Justificativa do pedido de inutilização + + + + + + + + + + + + + + + + + + + Tipo retorno do Pedido de Inutilização de Numeração da Nota Fiscal Eletrônica + + + + + Dados do Retorno do Pedido de Inutilização de Numeração da Nota Fiscal Eletrônica + + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Versão do Aplicativo que processou a NF-e + + + + + Código do status da mensagem enviada. + + + + + Descrição literal do status do serviço solicitado. + + + + + Código da UF que atendeu a solicitação + + + + + Ano de inutilização da numeração + + + + + CNPJ do emitente + + + + + Modelo da NF-e (55, etc.) + + + + + Série da NF-e + + + + + Número da NF-e inicial + + + + + Número da NF-e final + + + + + Data e hora de recebimento, no formato AAAA-MM-DDTHH:MM:SS. Deve ser preenchida com data e hora da gravação no Banco em caso de Confirmação. Em caso de Rejeição, com data e hora do recebimento do Pedido de Inutilização. + + + + + Número do Protocolo de Status da NF-e. 1 posição (1 – Secretaria de Fazenda Estadual 2 – Receita Federal); 2 - código da UF - 2 posições ano; 10 seqüencial no ano. + + + + + + + + + + + + + Tipo Pedido de inutilzação de númeração de NF-e processado + + + + + + + + + + Tipo Versão do leiaute de Inutilização 4.00 + + + + + + diff --git a/rascunho/Schemas/leiauteNFe_v3.10.xsd b/rascunho/Schemas/leiauteNFe_v3.10.xsd new file mode 100644 index 0000000..fdd83f3 --- /dev/null +++ b/rascunho/Schemas/leiauteNFe_v3.10.xsd @@ -0,0 +1,6060 @@ + + + + + + + + + + + Tipo Nota Fiscal Eletrônica + + + + + Informações da Nota Fiscal eletrônica + + + + + + identificação da NF-e + + + + + + Código da UF do emitente do Documento Fiscal. Utilizar a Tabela do IBGE. + + + + + Código numérico que compõe a Chave de Acesso. Número aleatório gerado pelo emitente para cada NF-e. + + + + + + + + + + + Descrição da Natureza da Operação + + + + + + + + + + + Indicador da forma de pagamento: +0 – pagamento à vista; +1 – pagamento à prazo; +2 – outros. + + + + + + + + + + + + + Código do modelo do Documento Fiscal. 55 = NF-e; 65 = NFC-e. + + + + + Série do Documento Fiscal +série normal 0-889 +Avulsa Fisco 890-899 +SCAN 900-999 + + + + + Número do Documento Fiscal + + + + + Data e Hora de emissão do Documento Fiscal (AAAA-MM-DDThh:mm:ssTZD) ex.: 2012-09-01T13:00:00-03:00 + + + + + Data e Hora da saída ou de entrada da mercadoria / produto (AAAA-MM-DDTHH:mm:ssTZD) + + + + + Tipo do Documento Fiscal (0 - entrada; 1 - saída) + + + + + + + + + + + + Identificador de Local de destino da operação (1-Interna;2-Interestadual;3-Exterior) + + + + + + + + + + + + + Código do Município de Ocorrência do Fato Gerador (utilizar a tabela do IBGE) + + + + + Formato de impressão do DANFE (0-sem DANFE;1-DANFe Retrato; 2-DANFe Paisagem;3-DANFe Simplificado; + 4-DANFe NFC-e;5-DANFe NFC-e em mensagem eletrônica) + + + + + + + + + + + + + + + + + Forma de emissão da NF-e +1 - Normal; +2 - Contingência FS +3 - Contingência SCAN +4 - Contingência DPEC +5 - Contingência FSDA +6 - Contingência SVC - AN +7 - Contingência SVC - RS +9 - Contingência off-line NFC-e + + + + + + + + + + + + + + + + + + Digito Verificador da Chave de Acesso da NF-e + + + + + + + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Finalidade da emissão da NF-e: +1 - NFe normal +2 - NFe complementar +3 - NFe de ajuste +4 - Devolução/Retorno + + + + + Indica operação com consumidor final (0-Não;1-Consumidor Final) + + + + + + + + + + + + Indicador de presença do comprador no estabelecimento comercial no momento da oepração + (0-Não se aplica (ex.: Nota Fiscal complementar ou de ajuste;1-Operação presencial;2-Não presencial, internet;3-Não presencial, teleatendimento;4-NFC-e entrega em domicílio;9-Não presencial, outros) + + + + + + + + + + + + + + + + Processo de emissão utilizado com a seguinte codificação: +0 - emissão de NF-e com aplicativo do contribuinte; +1 - emissão de NF-e avulsa pelo Fisco; +2 - emissão de NF-e avulsa, pelo contribuinte com seu certificado digital, através do site +do Fisco; +3- emissão de NF-e pelo contribuinte com aplicativo fornecido pelo Fisco. + + + + + versão do aplicativo utilizado no processo de +emissão + + + + + + + + + + + Informar apenas +para tpEmis diferente de 1 + + + + Informar a data e hora de entrada em contingência contingência no formato (AAAA-MM-DDThh:mm:ssTZD) ex.: 2012-09-01T13:00:00-03:00. + + + + + Informar a Justificativa da entrada + + + + + + + + + + + + Grupo de infromações da NF referenciada + + + + + + Chave de acesso das NF-e referenciadas. Chave de acesso compostas por Código da UF (tabela do IBGE) + AAMM da emissão + CNPJ do Emitente + modelo, série e número da NF-e Referenciada + Código Numérico + DV. + + + + + Dados da NF modelo 1/1A referenciada + + + + + + Código da UF do emitente do Documento Fiscal. Utilizar a Tabela do IBGE. + + + + + AAMM da emissão + + + + + + + + + + + CNPJ do emitente do documento fiscal referenciado + + + + + Código do modelo do Documento Fiscal. Utilizar 01 para NF modelo 1/1A + + + + + + + + + + + Série do Documento Fiscal, informar zero se inexistente + + + + + Número do Documento Fiscal + + + + + + + + Grupo com as informações NF de produtor referenciada + + + + + + Código da UF do emitente do Documento FiscalUtilizar a Tabela do IBGE (Anexo IV - Tabela de UF, Município e País) + + + + + AAMM da emissão da NF de produtor + + + + + + + + + + + + CNPJ do emitente da NF de produtor + + + + + CPF do emitente da NF de produtor + + + + + + IE do emitente da NF de Produtor + + + + + Código do modelo do Documento Fiscal - utilizar 04 para NF de produtor ou 01 para NF Avulsa + + + + + + + + + + + + Série do Documento Fiscal, informar zero se inexistentesérie + + + + + Número do Documento Fiscal - 1 – 999999999 + + + + + + + + Utilizar esta TAG para referenciar um CT-e emitido anteriormente, vinculada a NF-e atual + + + + + Grupo do Cupom Fiscal vinculado à NF-e + + + + + + Código do modelo do Documento Fiscal +Preencher com "2B", quando se tratar de Cupom Fiscal emitido por máquina registradora (não ECF), com "2C", quando se tratar de Cupom Fiscal PDV, ou "2D", quando se tratar de Cupom Fiscal (emitido por ECF) + + + + + + + + + + + + + Informar o número de ordem seqüencial do ECF que emitiu o Cupom Fiscal vinculado à NF-e + + + + + + + + + + + Informar o Número do Contador de Ordem de Operação - COO vinculado à NF-e + + + + + + + + + + + + + + + + + + + + Identificação do emitente + + + + + + + Número do CNPJ do emitente + + + + + Número do CPF do emitente + + + + + + Razão Social ou Nome do emitente + + + + + + + + + + + Nome fantasia + + + + + + + + + + + Endereço do emitente + + + + + Inscrição Estadual do Emitente + + + + + Inscricao Estadual do Substituto Tributário + + + + + Grupo de informações de interesse da Prefeitura + + + + Inscrição Municipal + + + + + + + + + + + CNAE Fiscal + + + + + + + + + + + + Código de Regime Tributário. +Este campo será obrigatoriamente preenchido com: +1 – Simples Nacional; +2 – Simples Nacional – excesso de sublimite de receita bruta; +3 – Regime Normal. + + + + + + + + + + + + + + + + + Emissão de avulsa, informar os dados do Fisco emitente + + + + + + CNPJ do Órgão emissor + + + + + Órgão emitente + + + + + + + + + + + Matrícula do agente + + + + + + + + + + + Nome do agente + + + + + + + + + + + Telefone + + + + + + + + + + + Sigla da Unidade da Federação + + + + + Número do Documento de Arrecadação de Receita + + + + + + + + + + + Data de emissão do DAR (AAAA-MM-DD) + + + + + Valor Total constante no DAR + + + + + Repartição Fiscal emitente + + + + + + + + + + + Data de pagamento do DAR (AAAA-MM-DD) + + + + + + + + Identificação do Destinatário + + + + + + + Número do CNPJ + + + + + Número do CPF + + + + + Identificador do destinatário, em caso de comprador estrangeiro + + + + + + + + + + + + Razão Social ou nome do destinatário + + + + + + + + + + + Dados do endereço + + + + + Indicador da IE do destinatário: +1 – Contribuinte ICMSpagamento à vista; +2 – Contribuinte isento de inscrição; +9 – Não Contribuinte + + + + + + + + + + + + + Inscrição Estadual (obrigatório nas operações com contribuintes do ICMS) + + + + + Inscrição na SUFRAMA (Obrigatório nas operações com as áreas com benefícios de incentivos fiscais sob controle da SUFRAMA) PL_005d - 11/08/09 - alterado para aceitar 8 ou 9 dígitos + + + + + + + + + + + Inscrição Municipal do tomador do serviço + + + + + + + + + + + Informar o e-mail do destinatário. O campo pode ser utilizado para informar o e-mail +de recepção da NF-e indicada pelo destinatário + + + + + + + + + + + + + + + Identificação do Local de Retirada (informar apenas quando for diferente do endereço do remetente) + + + + + Identificação do Local de Entrega (informar apenas quando for diferente do endereço do destinatário) + + + + + Pessoas autorizadas para o download do XML da NF-e + + + + + + CNPJ Autorizado + + + + + CPF Autorizado + + + + + + + + Dados dos detalhes da NF-e + + + + + + Dados dos produtos e serviços da NF-e + + + + + + Código do produto ou serviço. Preencher com CFOP caso se trate de itens não relacionados com mercadorias/produto e que o contribuinte não possua codificação própria +Formato ”CFOP9999”. + + + + + + + + + + + GTIN (Global Trade Item Number) do produto, antigo código EAN ou código de barras + + + + + + + + + + + Descrição do produto ou serviço + + + + + + + + + + + Código NCM (8 posições), será permitida a informação do gênero (posição do capítulo do NCM) quando a operação não for de comércio exterior (importação/exportação) ou o produto não seja tributado pelo IPI. Em caso de item de serviço ou item que não tenham produto (Ex. transferência de crédito, crédito do ativo imobilizado, etc.), informar o código 00 (zeros) (v2.0) + + + + + + + + + + + Nomenclatura de Valor aduaneio e Estatístico + + + + + + + + + + + Codigo especificador da Substuicao Tributaria - CEST, que identifica a mercadoria sujeita aos regimes de substituicao tributária e de antecipação do recolhimento do imposto + + + + + + + + + + + + Código EX TIPI (3 posições) + + + + + + + + + + + Cfop + + + + + + + + + + + Unidade comercial + + + + + + + + + + + Quantidade Comercial do produto, alterado para aceitar de 0 a 4 casas decimais e 11 inteiros. + + + + + Valor unitário de comercialização - alterado para aceitar 0 a 10 casas decimais e 11 inteiros + + + + + Valor bruto do produto ou serviço. + + + + + GTIN (Global Trade Item Number) da unidade tributável, antigo código EAN ou código de barras + + + + + + + + + + + Unidade Tributável + + + + + + + + + + + Quantidade Tributável - alterado para aceitar de 0 a 4 casas decimais e 11 inteiros + + + + + Valor unitário de tributação - - alterado para aceitar 0 a 10 casas decimais e 11 inteiros + + + + + Valor Total do Frete + + + + + Valor Total do Seguro + + + + + Valor do Desconto + + + + + Outras despesas acessórias + + + + + Este campo deverá ser preenchido com: + 0 – o valor do item (vProd) não compõe o valor total da NF-e (vProd) + 1 – o valor do item (vProd) compõe o valor total da NF-e (vProd) + + + + + + + + + + + + + Delcaração de Importação +(NT 2011/004) + + + + + + Numero do Documento de Importação DI/DSI/DA/DRI-E (DI/DSI/DA/DRI-E) (NT2011/004) + + + + + + + + + + + Data de registro da DI/DSI/DA (AAAA-MM-DD) + + + + + Local do desembaraço aduaneiro + + + + + + + + + + + UF onde ocorreu o desembaraço aduaneiro + + + + + Data do desembaraço aduaneiro (AAAA-MM-DD) + + + + + Via de transporte internacional informada na DI + 1-Maritima;2-Fluvial;3-Lacustre;4-Aerea;5-Postal;6-Ferroviaria;7-Rodoviaria;8-Conduto;9-Meios Proprios;10-Entrada/Saida Ficta. + + + + + + + + + + + + + + + + + + + + + + Valor Adicional ao frete para renovação de marinha mercante + + + + + Forma de Importação quanto a intermediação + 1-por conta propria;2-por conta e ordem;3-encomenda + + + + + + + + + + + + + CNPJ do adquirente ou do encomendante + + + + + Sigla da UF do adquirente ou do encomendante + + + + + Código do exportador (usado nos sistemas internos de informação do emitente da NF-e) + + + + + + + + + + + Adições (NT 2011/004) + + + + + + Número da Adição + + + + + + + + + + + Número seqüencial do item dentro da Adição + + + + + + + + + + + Código do fabricante estrangeiro (usado nos sistemas internos de informação do emitente da NF-e) + + + + + + + + + + + Valor do desconto do item da DI – adição + + + + + Número do ato concessório de Drawback + + + + + + + + + + + + + + + + + Detalhe da exportação + + + + + + Número do ato concessório de Drawback + + + + + + + + + + + Exportação indireta + + + + + + Registro de exportação + + + + + + + + + + + Chave de acesso da NF-e recebida para exportação + + + + + Quantidade do item efetivamente exportado + + + + + + + + + + + pedido de compra - Informação de interesse do emissor para controle do B2B. + + + + + + + + + + + Número do Item do Pedido de Compra - Identificação do número do item do pedido de Compra + + + + + + + + + + + Número de controle da FCI - Ficha de Conteúdo de Importação. + + + + + Informações específicas de produtos e serviços + + + + Veículos novos + + + + + + Tipo da Operação (1 - Venda concessionária; 2 - Faturamento direto; 3 - Venda direta; 0 - Outros) + + + + + + + + + + + + + + Chassi do veículo - VIN (código-identificação-veículo) + + + + + + + + + + + + Cor do veículo (código de cada montadora) + + + + + + + + + + + Descrição da cor + + + + + + + + + + + Potência máxima do motor do veículo em cavalo vapor (CV). (potência-veículo) + + + + + + + + + + + Capacidade voluntária do motor expressa em centímetros cúbicos (CC). (cilindradas) + + + + + + + + + + + Peso líquido + + + + + + + + + + + Peso bruto + + + + + + + + + + + Serial (série) + + + + + + + + + + + Tipo de combustível-Tabela RENAVAM: 01-Álcool; 02-Gasolina; 03-Diesel; 16-Álcool/Gas.; 17-Gas./Álcool/GNV; 18-Gasolina/Elétrico + + + + + + + + + + + Número do motor + + + + + + + + + + + CMT-Capacidade Máxima de Tração - em Toneladas 4 casas decimais + + + + + + + + + + + Distância entre eixos + + + + + + + + + + + Ano Modelo de Fabricação + + + + + + + + + + + Ano de Fabricação + + + + + + + + + + + Tipo de pintura + + + + + + + + + + Tipo de veículo (utilizar tabela RENAVAM) + + + + + + + + + + + Espécie de veículo (utilizar tabela RENAVAM) + + + + + + + + + + + Informa-se o veículo tem VIN (chassi) remarcado. +R-Remarcado +N-NormalVIN + + + + + + + + + + + + Condição do veículo (1 - acabado; 2 - inacabado; 3 - semi-acabado) + + + + + + + + + + + + + Código Marca Modelo (utilizar tabela RENAVAM) + + + + + + + + + + + Código da Cor Segundo as regras de pré-cadastro do DENATRAN: 01-AMARELO;02-AZUL;03-BEGE;04-BRANCA;05-CINZA;06-DOURADA;07-GRENA +08-LARANJA;09-MARROM;10-PRATA;11-PRETA;12-ROSA;13-ROXA;14-VERDE;15-VERMELHA;16-FANTASIA + + + + + + + + + + + + + Quantidade máxima de permitida de passageiros sentados, inclusive motorista. + + + + + + + + + + + + + Restrição +0 - Não há; +1 - Alienação Fiduciária; +2 - Arrendamento Mercantil; +3 - Reserva de Domínio; +4 - Penhor de Veículos; +9 - outras. + + + + + + + + + + + + + + + + + + + grupo do detalhamento de Medicamentos e de matérias-primas farmacêuticas + + + + + + Número do lote do medicamento + + + + + + + + + + + Quantidade de produtos no lote + + + + + Data de Fabricação do medicamento (AAAA-MM-DD) + + + + + Data de validade do medicamento (AAAA-MM-DD) + + + + + Preço Máximo ao Consumidor + + + + + + + + Armamentos + + + + + + Indicador do tipo de arma de fogo (0 - Uso permitido; 1 - Uso restrito) + + + + + + + + + + + + Número de série da arma + + + + + + + + + + + Número de série do cano + + + + + + + + + + + Descrição completa da arma, compreendendo: calibre, marca, capacidade, tipo de funcionamento, comprimento e demais elementos que permitam a sua perfeita identificação. + + + + + + + + + + + + + + Informar apenas para operações com combustíveis líquidos + + + + + + Código de produto da ANP. codificação de produtos do SIMP (http://www.anp.gov.br) + + + + + + + + + + + Percentual de gas natural para o produto GLP + + + + + Código de autorização / registro do CODIF. Informar apenas quando a UF utilizar o CODIF (Sistema de Controle do Diferimento do Imposto nas Operações com AEAC - Álcool Etílico Anidro Combustível). + + + + + + + + + + + Quantidade de combustível +faturada à temperatura ambiente. +Informar quando a quantidade +faturada informada no campo +qCom (I10) tiver sido ajustada para +uma temperatura diferente da +ambiente. + + + + + Sigla da UF de Consumo + + + + + CIDE Combustíveis + + + + + + BC do CIDE ( Quantidade comercializada) + + + + + Alíquota do CIDE (em reais) + + + + + Valor do CIDE + + + + + + + + Informações do grupo de "encerrante" + + + + + + Numero de identificação do Bico utilizado no abastecimento + + + + + + + + + + + Numero de identificação da bomba ao qual o bico está interligado + + + + + + + + + + + Numero de identificação do tanque ao qual o bico está interligado + + + + + + + + + + + Valor do Encerrante no ínicio do abastecimento + + + + + Valor do Encerrante no final do abastecimento + + + + + + + + + + + Número do RECOPI + + + + + + + + + + + + + + + + Tributos incidentes nos produtos ou serviços da NF-e + + + + + + Valor estimado total de impostos federais, estaduais e municipais + + + + + + + Dados do ICMS Normal e ST + + + + + + Tributação pelo ICMS +00 - Tributada integralmente + + + + + + origem da mercadoria: 0 - Nacional +1 - Estrangeira - Importação direta +2 - Estrangeira - Adquirida no mercado interno + + + + + + Tributção pelo ICMS +00 - Tributada integralmente + + + + + + + + + + + + Modalidade de determinação da BC do ICMS: +0 - Margem Valor Agregado (%); +1 - Pauta (valor); +2 - Preço Tabelado Máximo (valor); +3 - Valor da Operação. + + + + + + + + + + + + + + Valor da BC do ICMS + + + + + Alíquota do ICMS + + + + + Valor do ICMS + + + + + + + + Tributação pelo ICMS +10 - Tributada e com cobrança do ICMS por substituição tributária + + + + + + origem da mercadoria: 0 - Nacional +1 - Estrangeira - Importação direta +2 - Estrangeira - Adquirida no mercado interno + + + + + + 10 - Tributada e com cobrança do ICMS por substituição tributária + + + + + + + + + + + Modalidade de determinação da BC do ICMS: +0 - Margem Valor Agregado (%); +1 - Pauta (valor); +2 - Preço Tabelado Máximo (valor); +3 - Valor da Operação. + + + + + + + + + + + + + + Valor da BC do ICMS + + + + + Alíquota do ICMS + + + + + Valor do ICMS + + + + + Modalidade de determinação da BC do ICMS ST: +0 – Preço tabelado ou máximo sugerido; +1 - Lista Negativa (valor); +2 - Lista Positiva (valor); +3 - Lista Neutra (valor); +4 - Margem Valor Agregado (%); +5 - Pauta (valor); + + + + + + + + + + + + + + + + Percentual da Margem de Valor Adicionado ICMS ST + + + + + Percentual de redução da BC ICMS ST + + + + + Valor da BC do ICMS ST + + + + + Alíquota do ICMS ST + + + + + Valor do ICMS ST + + + + + + + + Tributção pelo ICMS +20 - Com redução de base de cálculo + + + + + + origem da mercadoria: 0 - Nacional +1 - Estrangeira - Importação direta +2 - Estrangeira - Adquirida no mercado interno + + + + + + Tributção pelo ICMS +20 - Com redução de base de cálculo + + + + + + + + + + + Modalidade de determinação da BC do ICMS: +0 - Margem Valor Agregado (%); +1 - Pauta (valor); +2 - Preço Tabelado Máximo (valor); +3 - Valor da Operação. + + + + + + + + + + + + + + Percentual de redução da BC + + + + + Valor da BC do ICMS + + + + + Alíquota do ICMS + + + + + Valor do ICMS + + + + + Grupo desoneração + + + + Valor do ICMS de desoneração + + + + + Motivo da desoneração do ICMS:3-Uso na agropecuária;9-Outros;12-Fomento agropecuário + + + + + + + + + + + + + + + + + Tributação pelo ICMS +30 - Isenta ou não tributada e com cobrança do ICMS por substituição tributária + + + + + + origem da mercadoria: 0 - Nacional +1 - Estrangeira - Importação direta +2 - Estrangeira - Adquirida no mercado interno + + + + + + Tributção pelo ICMS +30 - Isenta ou não tributada e com cobrança do ICMS por substituição tributária + + + + + + + + + + + Modalidade de determinação da BC do ICMS ST: +0 – Preço tabelado ou máximo sugerido; +1 - Lista Negativa (valor); +2 - Lista Positiva (valor); +3 - Lista Neutra (valor); +4 - Margem Valor Agregado (%); +5 - Pauta (valor). + + + + + + + + + + + + + + + + Percentual da Margem de Valor Adicionado ICMS ST + + + + + Percentual de redução da BC ICMS ST + + + + + Valor da BC do ICMS ST + + + + + Alíquota do ICMS ST + + + + + Valor do ICMS ST + + + + + Grupo desoneração + + + + Valor do ICMS de desoneração + + + + + Motivo da desoneração do ICMS:6-Utilitários Motocicleta AÁrea Livre;7-SUFRAMA;9-Outros + + + + + + + + + + + + + + + + + Tributação pelo ICMS +40 - Isenta +41 - Não tributada +50 - Suspensão + + + + + + origem da mercadoria: 0 - Nacional +1 - Estrangeira - Importação direta +2 - Estrangeira - Adquirida no mercado interno + + + + + + Tributação pelo ICMS +40 - Isenta +41 - Não tributada +50 - Suspensão +51 - Diferimento + + + + + + + + + + + + + + O valor do ICMS será informado apenas nas operações com veículos beneficiados com a desoneração condicional do ICMS. + + + + + Este campo será preenchido quando o campo anterior estiver preenchido. +Informar o motivo da desoneração: +1 – Táxi; +3 – Produtor Agropecuário; +4 – Frotista/Locadora; +5 – Diplomático/Consular; +6 – Utilitários e Motocicletas da Amazônia Ocidental e Áreas de Livre Comércio (Resolução 714/88 e 790/94 – CONTRAN e suas alterações); +7 – SUFRAMA; +8 - Venda a órgão Público; +9 – Outros +10- Deficiente Condutor +11- Deficiente não condutor +16 - Olimpíadas Rio 2016 + + + + + + + + + + + + + + + + + + + + + + + + + + Tributção pelo ICMS +51 - Diferimento +A exigência do preenchimento das informações do ICMS diferido fica à critério de cada UF. + + + + + + origem da mercadoria: 0 - Nacional +1 - Estrangeira - Importação direta +2 - Estrangeira - Adquirida no mercado interno + + + + + + Tributção pelo ICMS +20 - Com redução de base de cálculo + + + + + + + + + + + Modalidade de determinação da BC do ICMS: +0 - Margem Valor Agregado (%); +1 - Pauta (valor); +2 - Preço Tabelado Máximo (valor); +3 - Valor da Operação. + + + + + + + + + + + + + + Percentual de redução da BC + + + + + Valor da BC do ICMS + + + + + Alíquota do ICMS + + + + + Valor do ICMS da Operação + + + + + Percentual do diferemento + + + + + Valor do ICMS da diferido + + + + + Valor do ICMS + + + + + + + + Tributação pelo ICMS +60 - ICMS cobrado anteriormente por substituição tributária + + + + + + origem da mercadoria: 0 - Nacional +1 - Estrangeira - Importação direta +2 - Estrangeira - Adquirida no mercado interno + + + + + + Tributação pelo ICMS +60 - ICMS cobrado anteriormente por substituição tributária + + + + + + + + + + + NT2010/004 + + + + Valor da BC do ICMS ST retido anteriormente + + + + + Valor do ICMS ST retido anteriormente + + + + + + + + + Tributação pelo ICMS +70 - Com redução de base de cálculo e cobrança do ICMS por substituição tributária + + + + + + origem da mercadoria: 0 - Nacional +1 - Estrangeira - Importação direta +2 - Estrangeira - Adquirida no mercado interno + + + + + + Tributção pelo ICMS +70 - Com redução de base de cálculo e cobrança do ICMS por substituição tributária + + + + + + + + + + + Modalidade de determinação da BC do ICMS: +0 - Margem Valor Agregado (%); +1 - Pauta (valor); +2 - Preço Tabelado Máximo (valor); +3 - Valor da Operação. + + + + + + + + + + + + + + Percentual de redução da BC + + + + + Valor da BC do ICMS + + + + + Alíquota do ICMS + + + + + Valor do ICMS + + + + + Modalidade de determinação da BC do ICMS ST: +0 – Preço tabelado ou máximo sugerido; +1 - Lista Negativa (valor); +2 - Lista Positiva (valor); +3 - Lista Neutra (valor); +4 - Margem Valor Agregado (%); +5 - Pauta (valor). + + + + + + + + + + + + + + + + Percentual da Margem de Valor Adicionado ICMS ST + + + + + Percentual de redução da BC ICMS ST + + + + + Valor da BC do ICMS ST + + + + + Alíquota do ICMS ST + + + + + Valor do ICMS ST + + + + + Grupo desoneração + + + + Valor do ICMS de desoneração + + + + + Motivo da desoneração do ICMS:3-Uso na agropecuária;9-Outros;12-Fomento agropecuário + + + + + + + + + + + + + + + + + Tributação pelo ICMS +90 - Outras + + + + + + origem da mercadoria: 0 - Nacional +1 - Estrangeira - Importação direta +2 - Estrangeira - Adquirida no mercado interno + + + + + + Tributção pelo ICMS +90 - Outras + + + + + + + + + + + + Modalidade de determinação da BC do ICMS: +0 - Margem Valor Agregado (%); +1 - Pauta (valor); +2 - Preço Tabelado Máximo (valor); +3 - Valor da Operação. + + + + + + + + + + + + + + Valor da BC do ICMS + + + + + Percentual de redução da BC + + + + + Alíquota do ICMS + + + + + Valor do ICMS + + + + + + + Modalidade de determinação da BC do ICMS ST: +0 – Preço tabelado ou máximo sugerido; +1 - Lista Negativa (valor); +2 - Lista Positiva (valor); +3 - Lista Neutra (valor); +4 - Margem Valor Agregado (%); +5 - Pauta (valor). + + + + + + + + + + + + + + + + Percentual da Margem de Valor Adicionado ICMS ST + + + + + Percentual de redução da BC ICMS ST + + + + + Valor da BC do ICMS ST + + + + + Alíquota do ICMS ST + + + + + Valor do ICMS ST + + + + + + Grupo desoneração + + + + Valor do ICMS de desoneração + + + + + Motivo da desoneração do ICMS:3-Uso na agropecuária;9-Outros;12-Fomento agropecuário + + + + + + + + + + + + + + + + + Partilha do ICMS entre a UF de origem e UF de destino ou a UF definida na legislação +Operação interestadual para consumidor final com partilha do ICMS devido na operação entre a UF de origem e a UF do destinatário ou ou a UF definida na legislação. (Ex. UF da concessionária de entrega do veículos) + + + + + + origem da mercadoria: 0 - Nacional +1 - Estrangeira - Importação direta +2 - Estrangeira - Adquirida no mercado interno + + + + + + Tributação pelo ICMS +10 - Tributada e com cobrança do ICMS por substituição tributária; +90 – Outros. + + + + + + + + + + + + Modalidade de determinação da BC do ICMS: +0 - Margem Valor Agregado (%); +1 - Pauta (valor); +2 - Preço Tabelado Máximo (valor); +3 - Valor da Operação. + + + + + + + + + + + + + + Valor da BC do ICMS + + + + + Percentual de redução da BC + + + + + Alíquota do ICMS + + + + + Valor do ICMS + + + + + Modalidade de determinação da BC do ICMS ST: +0 – Preço tabelado ou máximo sugerido; +1 - Lista Negativa (valor); +2 - Lista Positiva (valor); +3 - Lista Neutra (valor); +4 - Margem Valor Agregado (%); +5 - Pauta (valor). + + + + + + + + + + + + + + + + Percentual da Margem de Valor Adicionado ICMS ST + + + + + Percentual de redução da BC ICMS ST + + + + + Valor da BC do ICMS ST + + + + + Alíquota do ICMS ST + + + + + Valor do ICMS ST + + + + + Percentual para determinação do valor da Base de Cálculo da operação própria. + + + + + Sigla da UF para qual é devido o ICMS ST da operação. + + + + + + + + Grupo de informação do ICMSST devido para a UF de destino, nas operações interestaduais de produtos que tiveram retenção antecipada de ICMS por ST na UF do remetente. Repasse via Substituto Tributário. + + + + + + origem da mercadoria: 0 - Nacional +1 - Estrangeira - Importação direta +2 - Estrangeira - Adquirida no mercado interno + + + + + + Tributção pelo ICMS +41-Não Tributado + + + + + + + + + + + Informar o valor da BC do ICMS ST retido na UF remetente + + + + + Informar o valor do ICMS ST retido na UF remetente (iv2.0)) + + + + + Informar o valor da BC do ICMS ST da UF destino + + + + + Informar o valor da BC do ICMS ST da UF destino (v2.0) + + + + + + + + Tributação do ICMS pelo SIMPLES NACIONAL e CSOSN=101 (v.2.0) + + + + + + origem da mercadoria: 0 - Nacional +1 - Estrangeira - Importação direta +2 - Estrangeira - Adquirida no mercado interno +(v2.0) + + + + + 101- Tributada pelo Simples Nacional com permissão de crédito. (v.2.0) + + + + + + + + + + + Alíquota aplicável de cálculo do crédito (Simples Nacional). (v2.0) + + + + + Valor crédito do ICMS que pode ser aproveitado nos termos do art. 23 da LC 123 (Simples Nacional) (v2.0) + + + + + + + + Tributação do ICMS pelo SIMPLES NACIONAL e CSOSN=102, 103, 300 ou 400 (v.2.0)) + + + + + + origem da mercadoria: 0 - Nacional +1 - Estrangeira - Importação direta +2 - Estrangeira - Adquirida no mercado interno +(v2.0) + + + + + 102- Tributada pelo Simples Nacional sem permissão de crédito. +103 – Isenção do ICMS no Simples Nacional para faixa de receita bruta. +300 – Imune. +400 – Não tributda pelo Simples Nacional (v.2.0) (v.2.0) + + + + + + + + + + + + + + + + + Tributação do ICMS pelo SIMPLES NACIONAL e CSOSN=201 (v.2.0) + + + + + + Origem da mercadoria: +0 – Nacional; +1 – Estrangeira – Importação direta; +2 – Estrangeira – Adquirida no mercado interno. (v2.0) + + + + + 201- Tributada pelo Simples Nacional com permissão de crédito e com cobrança do ICMS por Substituição Tributária (v.2.0) + + + + + + + + + + + Modalidade de determinação da BC do ICMS ST: +0 – Preço tabelado ou máximo sugerido; +1 - Lista Negativa (valor); +2 - Lista Positiva (valor); +3 - Lista Neutra (valor); +4 - Margem Valor Agregado (%); +5 - Pauta (valor). (v2.0) + + + + + + + + + + + + + + + + Percentual da Margem de Valor Adicionado ICMS ST (v2.0) + + + + + Percentual de redução da BC ICMS ST (v2.0) + + + + + Valor da BC do ICMS ST (v2.0) + + + + + Alíquota do ICMS ST (v2.0) + + + + + Valor do ICMS ST (v2.0) + + + + + Alíquota aplicável de cálculo do crédito (Simples Nacional). (v2.0) + + + + + Valor crédito do ICMS que pode ser aproveitado nos termos do art. 23 da LC 123 (Simples Nacional) (v2.0) + + + + + + + + Tributação do ICMS pelo SIMPLES NACIONAL e CSOSN=202 ou 203 (v.2.0) + + + + + + Origem da mercadoria: +0 – Nacional; +1 – Estrangeira – Importação direta; +2 – Estrangeira – Adquirida no mercado interno. (v2.0) + + + + + 202- Tributada pelo Simples Nacional sem permissão de crédito e com cobrança do ICMS por Substituição Tributária; +203- Isenção do ICMS nos Simples Nacional para faixa de receita bruta e com cobrança do ICMS por Substituição Tributária (v.2.0) + + + + + + + + + + + + Modalidade de determinação da BC do ICMS ST: +0 – Preço tabelado ou máximo sugerido; +1 - Lista Negativa (valor); +2 - Lista Positiva (valor); +3 - Lista Neutra (valor); +4 - Margem Valor Agregado (%); +5 - Pauta (valor). (v2.0) + + + + + + + + + + + + + + + + Percentual da Margem de Valor Adicionado ICMS ST (v2.0) + + + + + Percentual de redução da BC ICMS ST (v2.0) + + + + + Valor da BC do ICMS ST (v2.0) + + + + + Alíquota do ICMS ST (v2.0) + + + + + Valor do ICMS ST (v2.0) + + + + + + + + Tributação do ICMS pelo SIMPLES NACIONAL,CRT=1 – Simples Nacional e CSOSN=500 (v.2.0) + + + + + + origem da mercadoria: 0 - Nacional +1 - Estrangeira - Importação direta +2 - Estrangeira - Adquirida no mercado interno + + + + + + 500 – ICMS cobrado anterirmente por substituição tributária (substituído) ou por antecipação +(v.2.0) + + + + + + + + + + + + + + + Valor da BC do ICMS ST retido anteriormente (v2.0) + + + + + Valor do ICMS ST retido anteriormente (v2.0) + + + + + + + + + Tributação do ICMS pelo SIMPLES NACIONAL, CRT=1 – Simples Nacional e CSOSN=900 (v2.0) + + + + + + origem da mercadoria: 0 - Nacional +1 - Estrangeira - Importação direta +2 - Estrangeira - Adquirida no mercado interno + + + + + + Tributação pelo ICMS 900 - Outros(v2.0) + + + + + + + + + + + + Modalidade de determinação da BC do ICMS: +0 - Margem Valor Agregado (%); +1 - Pauta (valor); +2 - Preço Tabelado Máximo (valor); +3 - Valor da Operação. + + + + + + + + + + + + + + Valor da BC do ICMS + + + + + Percentual de redução da BC + + + + + Alíquota do ICMS + + + + + Valor do ICMS + + + + + + + Modalidade de determinação da BC do ICMS ST: +0 – Preço tabelado ou máximo sugerido; +1 - Lista Negativa (valor); +2 - Lista Positiva (valor); +3 - Lista Neutra (valor); +4 - Margem Valor Agregado (%); +5 - Pauta (valor). + + + + + + + + + + + + + + + + Percentual da Margem de Valor Adicionado ICMS ST + + + + + Percentual de redução da BC ICMS ST + + + + + Valor da BC do ICMS ST + + + + + Alíquota do ICMS ST + + + + + Valor do ICMS ST + + + + + + + Alíquota aplicável de cálculo do crédito (Simples Nacional). (v2.0) + + + + + Valor crédito do ICMS que pode ser aproveitado nos termos do art. 23 da LC 123 (Simples Nacional) (v2.0) + + + + + + + + + + + + + Dados do Imposto de Importação + + + + + + Base da BC do Imposto de Importação + + + + + Valor das despesas aduaneiras + + + + + Valor do Imposto de Importação + + + + + Valor do Imposto sobre Operações Financeiras + + + + + + + + + + + ISSQN + + + + + + Valor da BC do ISSQN + + + + + Alíquota do ISSQN + + + + + Valor da do ISSQN + + + + + Informar o município de ocorrência do fato gerador do ISSQN. Utilizar a Tabela do IBGE (Anexo VII - Tabela de UF, Município e País). “Atenção, não vincular com os campos B12, C10 ou E10” v2.0 + + + + + Informar o Item da lista de serviços da LC 116/03 em que se classifica o serviço. + + + + + Valor dedução para redução da base de cálculo + + + + + Valor outras retenções + + + + + Valor desconto incondicionado + + + + + Valor desconto condicionado + + + + + Valor Retenção ISS + + + + + Exibilidade do ISS:1-Exigível;2-Não incidente;3-Isenção;4-Exportação;5-Imunidade;6-Exig.Susp. Judicial;7-Exig.Susp. ADM + + + + + + + + + + + + + + + + + Código do serviço prestado dentro do município + + + + + + + + + + + + Código do Município de Incidência do Imposto + + + + + Código de Pais + + + + + + + + + + + Número do Processo administrativo ou judicial de suspenção do processo + + + + + + + + + + + + Indicador de Incentivo Fiscal. 1=Sim; 2=Não + + + + + + + + + + + + + + + + + Dados do PIS + + + + + + Código de Situação Tributária do PIS. + 01 – Operação Tributável - Base de Cálculo = Valor da Operação Alíquota Normal (Cumulativo/Não Cumulativo); +02 - Operação Tributável - Base de Calculo = Valor da Operação (Alíquota Diferenciada); + + + + + + Código de Situação Tributária do PIS. + 01 – Operação Tributável - Base de Cálculo = Valor da Operação Alíquota Normal (Cumulativo/Não Cumulativo); +02 - Operação Tributável - Base de Calculo = Valor da Operação (Alíquota Diferenciada); + + + + + + + + + + + + Valor da BC do PIS + + + + + Alíquota do PIS (em percentual) + + + + + Valor do PIS + + + + + + + + Código de Situação Tributária do PIS. +03 - Operação Tributável - Base de Calculo = Quantidade Vendida x Alíquota por Unidade de Produto; + + + + + + Código de Situação Tributária do PIS. +03 - Operação Tributável - Base de Calculo = Quantidade Vendida x Alíquota por Unidade de Produto; + + + + + + + + + + + Quantidade Vendida (NT2011/004) + + + + + Alíquota do PIS (em reais) (NT2011/004) + + + + + Valor do PIS + + + + + + + + Código de Situação Tributária do PIS. +04 - Operação Tributável - Tributação Monofásica - (Alíquota Zero); +06 - Operação Tributável - Alíquota Zero; +07 - Operação Isenta da contribuição; +08 - Operação Sem Incidência da contribuição; +09 - Operação com suspensão da contribuição; + + + + + + Código de Situação Tributária do PIS. +04 - Operação Tributável - Tributação Monofásica - (Alíquota Zero); +05 - Operação Tributável (ST); +06 - Operação Tributável - Alíquota Zero; +07 - Operação Isenta da contribuição; +08 - Operação Sem Incidência da contribuição; +09 - Operação com suspensão da contribuição; + + + + + + + + + + + + + + + + + + + Código de Situação Tributária do PIS. +99 - Outras Operações. + + + + + + Código de Situação Tributária do PIS. +99 - Outras Operações. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Valor da BC do PIS + + + + + Alíquota do PIS (em percentual) + + + + + + + Quantidade Vendida (NT2011/004) + + + + + Alíquota do PIS (em reais) (NT2011/004) + + + + + + + Valor do PIS + + + + + + + + + + + Dados do PIS Substituição Tributária + + + + + + + + Valor da BC do PIS ST + + + + + Alíquota do PIS ST (em percentual) + + + + + + + Quantidade Vendida + + + + + Alíquota do PIS ST (em reais) + + + + + + + Valor do PIS ST + + + + + + + + Dados do COFINS + + + + + + Código de Situação Tributária do COFINS. + 01 – Operação Tributável - Base de Cálculo = Valor da Operação Alíquota Normal (Cumulativo/Não Cumulativo); +02 - Operação Tributável - Base de Calculo = Valor da Operação (Alíquota Diferenciada); + + + + + + Código de Situação Tributária do COFINS. + 01 – Operação Tributável - Base de Cálculo = Valor da Operação Alíquota Normal (Cumulativo/Não Cumulativo); +02 - Operação Tributável - Base de Calculo = Valor da Operação (Alíquota Diferenciada); + + + + + + + + + + + + Valor da BC do COFINS + + + + + Alíquota do COFINS (em percentual) + + + + + Valor do COFINS + + + + + + + + Código de Situação Tributária do COFINS. +03 - Operação Tributável - Base de Calculo = Quantidade Vendida x Alíquota por Unidade de Produto; + + + + + + Código de Situação Tributária do COFINS. +03 - Operação Tributável - Base de Calculo = Quantidade Vendida x Alíquota por Unidade de Produto; + + + + + + + + + + Quantidade Vendida (NT2011/004) + + + + + Alíquota do COFINS (em reais) (NT2011/004) + + + + + Valor do COFINS + + + + + + + + Código de Situação Tributária do COFINS: +04 - Operação Tributável - Tributação Monofásica - (Alíquota Zero); +06 - Operação Tributável - Alíquota Zero; +07 - Operação Isenta da contribuição; +08 - Operação Sem Incidência da contribuição; +09 - Operação com suspensão da contribuição; + + + + + + Código de Situação Tributária do COFINS: +04 - Operação Tributável - Tributação Monofásica - (Alíquota Zero); +05 - Operação Tributável (ST); +06 - Operação Tributável - Alíquota Zero; +07 - Operação Isenta da contribuição; +08 - Operação Sem Incidência da contribuição; +09 - Operação com suspensão da contribuição; + + + + + + + + + + + + + + + + + + + Código de Situação Tributária do COFINS: +49 - Outras Operações de Saída +50 - Operação com Direito a Crédito - Vinculada Exclusivamente a Receita Tributada no Mercado Interno +51 - Operação com Direito a Crédito – Vinculada Exclusivamente a Receita Não Tributada no Mercado Interno +52 - Operação com Direito a Crédito - Vinculada Exclusivamente a Receita de Exportação +53 - Operação com Direito a Crédito - Vinculada a Receitas Tributadas e Não-Tributadas no Mercado Interno +54 - Operação com Direito a Crédito - Vinculada a Receitas Tributadas no Mercado Interno e de Exportação +55 - Operação com Direito a Crédito - Vinculada a Receitas Não-Tributadas no Mercado Interno e de Exportação +56 - Operação com Direito a Crédito - Vinculada a Receitas Tributadas e Não-Tributadas no Mercado Interno, e de Exportação +60 - Crédito Presumido - Operação de Aquisição Vinculada Exclusivamente a Receita Tributada no Mercado Interno +61 - Crédito Presumido - Operação de Aquisição Vinculada Exclusivamente a Receita Não-Tributada no Mercado Interno +62 - Crédito Presumido - Operação de Aquisição Vinculada Exclusivamente a Receita de Exportação +63 - Crédito Presumido - Operação de Aquisição Vinculada a Receitas Tributadas e Não-Tributadas no Mercado Interno +64 - Crédito Presumido - Operação de Aquisição Vinculada a Receitas Tributadas no Mercado Interno e de Exportação +65 - Crédito Presumido - Operação de Aquisição Vinculada a Receitas Não-Tributadas no Mercado Interno e de Exportação +66 - Crédito Presumido - Operação de Aquisição Vinculada a Receitas Tributadas e Não-Tributadas no Mercado Interno, e de Exportação +67 - Crédito Presumido - Outras Operações +70 - Operação de Aquisição sem Direito a Crédito +71 - Operação de Aquisição com Isenção +72 - Operação de Aquisição com Suspensão +73 - Operação de Aquisição a Alíquota Zero +74 - Operação de Aquisição sem Incidência da Contribuição +75 - Operação de Aquisição por Substituição Tributária +98 - Outras Operações de Entrada +99 - Outras Operações. + + + + + + Código de Situação Tributária do COFINS: +49 - Outras Operações de Saída +50 - Operação com Direito a Crédito - Vinculada Exclusivamente a Receita Tributada no Mercado Interno +51 - Operação com Direito a Crédito – Vinculada Exclusivamente a Receita Não Tributada no Mercado Interno +52 - Operação com Direito a Crédito - Vinculada Exclusivamente a Receita de Exportação +53 - Operação com Direito a Crédito - Vinculada a Receitas Tributadas e Não-Tributadas no Mercado Interno +54 - Operação com Direito a Crédito - Vinculada a Receitas Tributadas no Mercado Interno e de Exportação +55 - Operação com Direito a Crédito - Vinculada a Receitas Não-Tributadas no Mercado Interno e de Exportação +56 - Operação com Direito a Crédito - Vinculada a Receitas Tributadas e Não-Tributadas no Mercado Interno, e de Exportação +60 - Crédito Presumido - Operação de Aquisição Vinculada Exclusivamente a Receita Tributada no Mercado Interno +61 - Crédito Presumido - Operação de Aquisição Vinculada Exclusivamente a Receita Não-Tributada no Mercado Interno +62 - Crédito Presumido - Operação de Aquisição Vinculada Exclusivamente a Receita de Exportação +63 - Crédito Presumido - Operação de Aquisição Vinculada a Receitas Tributadas e Não-Tributadas no Mercado Interno +64 - Crédito Presumido - Operação de Aquisição Vinculada a Receitas Tributadas no Mercado Interno e de Exportação +65 - Crédito Presumido - Operação de Aquisição Vinculada a Receitas Não-Tributadas no Mercado Interno e de Exportação +66 - Crédito Presumido - Operação de Aquisição Vinculada a Receitas Tributadas e Não-Tributadas no Mercado Interno, e de Exportação +67 - Crédito Presumido - Outras Operações +70 - Operação de Aquisição sem Direito a Crédito +71 - Operação de Aquisição com Isenção +72 - Operação de Aquisição com Suspensão +73 - Operação de Aquisição a Alíquota Zero +74 - Operação de Aquisição sem Incidência da Contribuição +75 - Operação de Aquisição por Substituição Tributária +98 - Outras Operações de Entrada +99 - Outras Operações. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Valor da BC do COFINS + + + + + Alíquota do COFINS (em percentual) + + + + + + + Quantidade Vendida (NT2011/004) + + + + + Alíquota do COFINS (em reais) (NT2011/004) + + + + + + + Valor do COFINS + + + + + + + + + + + Dados do COFINS da +Substituição Tributaria; + + + + + + + + Valor da BC do COFINS ST + + + + + Alíquota do COFINS ST(em percentual) + + + + + + + Quantidade Vendida + + + + + Alíquota do COFINS ST(em reais) + + + + + + + Valor do COFINS ST + + + + + + + + Grupo a ser informado nas vendas interestarduais para consumidor final, não contribuinte de ICMS + + + + + + Valor da Base de Cálculo do ICMS na UF do destinatário. + + + + + Percentual adicional inserido na alíquota interna da UF de destino, relativo ao Fundo de Combate à Pobreza (FCP) naquela UF. + + + + + Alíquota adotada nas operações internas na UF do destinatário para o produto / mercadoria. + + + + + Alíquota interestadual das UF envolvidas: - 4% alíquota interestadual para produtos importados; - 7% para os Estados de origem do Sul e Sudeste (exceto ES), destinado para os Estados do Norte e Nordeste ou ES; - 12% para os demais casos. + + + + + + + + + + + + + Percentual de partilha para a UF do destinatário: - 40% em 2016; - 60% em 2017; - 80% em 2018; - 100% a partir de 2019. + + + + + Valor do ICMS relativo ao Fundo de Combate à Pobreza (FCP) da UF de destino. + + + + + Valor do ICMS de partilha para a UF do destinatário. + + + + + Valor do ICMS de partilha para a UF do remetente. Nota: A partir de 2019, este valor será zero. + + + + + + + + + + + + + + Percentual de mercadoria devolvida + + + + + Informação de IPI devolvido + + + + + + Valor do IPI devolvido + + + + + + + + + + + Informações adicionais do produto (norma referenciada, informações complementares, etc) + + + + + + + + + + + + Número do item do NF + + + + + + + + + + + + + Dados dos totais da NF-e + + + + + + Totais referentes ao ICMS + + + + + + BC do ICMS + + + + + Valor Total do ICMS + + + + + Valor Total do ICMS desonerado + + + + + Valor total do ICMS relativo ao Fundo de Combate à Pobreza (FCP) para a UF de destino. + + + + + Valor total do ICMS de partilha para a UF do destinatário + + + + + Valor total do ICMS de partilha para a UF do remetente + + + + + BC do ICMS ST + + + + + Valor Total do ICMS ST + + + + + Valor Total dos produtos e serviços + + + + + Valor Total do Frete + + + + + Valor Total do Seguro + + + + + Valor Total do Desconto + + + + + Valor Total do II + + + + + Valor Total do IPI + + + + + Valor do PIS + + + + + Valor do COFINS + + + + + Outras Despesas acessórias + + + + + Valor Total da NF-e + + + + + Valor estimado total de impostos federais, estaduais e municipais + + + + + + + + Totais referentes ao ISSQN + + + + + + Valor Total dos Serviços sob não-incidência ou não tributados pelo ICMS + + + + + Base de Cálculo do ISS + + + + + Valor Total do ISS + + + + + Valor do PIS sobre serviços + + + + + Valor do COFINS sobre serviços + + + + + Data da prestação do serviço (AAAA-MM-DD) + + + + + Valor dedução para redução da base de cálculo + + + + + Valor outras retenções + + + + + Valor desconto incondicionado + + + + + Valor desconto condicionado + + + + + Valor Total Retenção ISS + + + + + Código do regime especial de tributação + + + + + + + + + + + + + + + + + + + Retenção de Tributos Federais + + + + + + Valor Retido de PIS + + + + + Valor Retido de COFINS + + + + + Valor Retido de CSLL + + + + + Base de Cálculo do IRRF + + + + + Valor Retido de IRRF + + + + + Base de Cálculo da Retenção da Previdêncica Social + + + + + Valor da Retenção da Previdêncica Social + + + + + + + + + + + Dados dos transportes da NF-e + + + + + + Modalidade do frete +0- Por conta do emitente; +1- Por conta do destinatário/remetente; +2- Por conta de terceiros; +9- Sem frete (v2.0) + + + + + + + + + + + + + + Dados do transportador + + + + + + + CNPJ do transportador + + + + + CPF do transportador + + + + + + Razão Social ou nome do transportador + + + + + + + + + + + Inscrição Estadual (v2.0) + + + + + Endereço completo + + + + + + + + + + + Nome do munícipio + + + + + + + + + + + Sigla da UF + + + + + + + + Dados da retenção ICMS do Transporte + + + + + + Valor do Serviço + + + + + BC da Retenção do ICMS + + + + + Alíquota da Retenção + + + + + Valor do ICMS Retido + + + + + Código Fiscal de Operações e Prestações + + + + + + + + + + + Código do Município de Ocorrência do Fato Gerador (utilizar a tabela do IBGE) + + + + + + + + + + Dados do veículo + + + + + Dados do reboque/Dolly (v2.0) + + + + + + Identificação do vagão (v2.0) + + + + + + + + + + + Identificação da balsa (v2.0) + + + + + + + + + + + + Dados dos volumes + + + + + + Quantidade de volumes transportados + + + + + + + + + + + Espécie dos volumes transportados + + + + + + + + + + + Marca dos volumes transportados + + + + + + + + + + + Numeração dos volumes transportados + + + + + + + + + + + Peso líquido (em kg) + + + + + Peso bruto (em kg) + + + + + + + + Número dos Lacres + + + + + + + + + + + + + + + + + + + + Dados da cobrança da NF-e + + + + + + Dados da fatura + + + + + + Número da fatura + + + + + + + + + + + Valor original da fatura + + + + + Valor do desconto da fatura + + + + + Valor líquido da fatura + + + + + + + + Dados das duplicatas NT 2011/004 + + + + + + Número da duplicata + + + + + + + + + + + Data de vencimento da duplicata (AAAA-MM-DD) + + + + + Valor da duplicata + + + + + + + + + + + Dados de Pagamento. Obrigatório apenas para (NFC-e) NT 2012/004 + + + + + + Forma de Pagamento:01-Dinheiro;02-Cheque;03-Cartão de Crédito;04-Cartão de Débito;05-Crédito Loja;10-Vale Alimentação;11-Vale Refeição;12-Vale Presente;13-Vale Combustível;99 - Outros + + + + + + + + + + + + + + + + + + + + Valor do Pagamento + + + + + Grupo de Cartões + + + + + + Tipo de Integração do processo de pagamento com o sistema de automação da empresa/ + 1=Pagamento integrado com o sistema de automação da empresa Ex. equipamento TEF , Comercio Eletronico + 2=Pagamento não integrado com o sistema de automação da empresa Ex: equipamento POS + + + + + + + + + + + + + CNPJ da credenciadora de cartão de crédito/débito + + + + + Bandeira da operadora de cartão de crédito/débito:01–Visa; 02–Mastercard; 03–American Express; 04–Sorocred; 99–Outros + + + + + + + + + + + + + + + Número de autorização da operação cartão de crédito/débito + + + + + + + + + + + + + + + + + Informações adicionais da NF-e + + + + + + Informações adicionais de interesse do Fisco (v2.0) + + + + + + + + + + + Informações complementares de interesse do Contribuinte + + + + + + + + + + + Campo de uso livre do contribuinte +informar o nome do campo no atributo xCampo +e o conteúdo do campo no xTexto + + + + + + + + + + + + + + + + + + + + + + + + + Campo de uso exclusivo do Fisco +informar o nome do campo no atributo xCampo +e o conteúdo do campo no xTexto + + + + + + + + + + + + + + + + + + + + + + + + + Grupo de informações do processo referenciado + + + + + + Indentificador do processo ou ato +concessório + + + + + + + + + + + Origem do processo, informar com: +0 - SEFAZ; +1 - Justiça Federal; +2 - Justiça Estadual; +3 - Secex/RFB; +9 - Outros + + + + + + + + + + + + + + + + + + + + + Informações de exportação + + + + + + Sigla da UF de Embarque ou de transposição de fronteira + + + + + Local de Embarque ou de transposição de fronteira + + + + + + + + + + + Descrição do local de despacho + + + + + + + + + + + + + + Informações de compras (Nota de Empenho, Pedido e Contrato) + + + + + + Informação da Nota de Empenho de compras públicas (NT2011/004) + + + + + + + + + + + Informação do pedido + + + + + + + + + + + Informação do contrato + + + + + + + + + + + + + + Informações de registro aquisições de cana + + + + + + Identificação da safra + + + + + + + + + + + Mês e Ano de Referência, formato: MM/AAAA + + + + + + + + + + + Fornecimentos diários + + + + + + Quantidade em quilogramas - peso líquido + + + + + + Número do dia + + + + + + + + + + + + + + + + + Total do mês + + + + + Total Anterior + + + + + Total Geral + + + + + Deduções - Taxas e Contribuições + + + + + + Descrição da Dedução + + + + + + + + + + + valor da dedução + + + + + + + + Valor dos fornecimentos + + + + + Valor Total das Deduções + + + + + Valor Líquido dos fornecimentos + + + + + + + + + Versão do leiaute (v2.0) + + + + + PL_005d - 11/08/09 - validação do Id + + + + + + + + + + + + + + + + Informações suplementares Nota Fiscal + + + + + + Texto com o QR-Code impresso no DANFE NFC-e + + + + + + + + + + + + + + + + + + + Tipo Protocolo de status resultado do processamento da NF-e + + + + + Dados do protocolo de status + + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Versão do Aplicativo que processou a NF-e + + + + + Chaves de acesso da NF-e, compostas por: UF do emitente, AAMM da emissão da NFe, CNPJ do emitente, modelo, série e número da NF-e e código numérico+DV. + + + + + Data e hora de processamento, no formato AAAA-MM-DDTHH:MM:SSTZD. Deve ser preenchida com data e hora da gravação no Banco em caso de Confirmação. Em caso de Rejeição, com data e hora do recebimento do Lote de NF-e enviado. + + + + + Número do Protocolo de Status da NF-e. 1 posição (1 – Secretaria de Fazenda Estadual 2 – Receita Federal); 2 - códiga da UF - 2 posições ano; 10 seqüencial no ano. + + + + + Digest Value da NF-e processada. Utilizado para conferir a integridade da NF-e original. + + + + + Código do status da mensagem enviada. + + + + + Descrição literal do status do serviço solicitado. + + + + + + + + + + + + + Tipo Pedido de Concessão de Autorização da Nota Fiscal Eletrônica + + + + + + Indicador de processamento síncrono. 0=NÃO; 1=SIM=Síncrono + + + + + + + + + + + + + + + + Tipo Retorno do Pedido de Autorização da Nota Fiscal Eletrônica + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Versão do Aplicativo que recebeu o Lote. + + + + + Código do status da mensagem enviada. + + + + + Descrição literal do status do serviço solicitado. + + + + + código da UF de atendimento + + + + + Data e hora do recebimento, no formato AAAA-MM-DDTHH:MM:SSTZD + + + + + + Dados do Recibo do Lote + + + + + + Número do Recibo + + + + + Tempo médio de resposta do serviço (em segundos) dos últimos 5 minutos + + + + + + + + Protocolo de status resultado do processamento sincrono da NFC-e + + + + + + + + + Tipo Pedido de Consulta do Recido do Lote de Notas Fiscais Eletrônicas + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Número do Recibo + + + + + + + + Tipo Retorno do Pedido de Consulta do Recido do Lote de Notas Fiscais Eletrônicas + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Versão do Aplicativo que processou a NF-e + + + + + Número do Recibo Consultado + + + + + Código do status da mensagem enviada. + + + + + Descrição literal do status do serviço solicitado. + + + + + código da UF de atendimento + + + + + Data e hora de processamento, no formato AAAA-MM-DDTHH:MM:SSTZD. Em caso de Rejeição, com data e hora do recebimento do Lote de NF-e enviado. + + + + + + + Código da Mensagem (v2.0) +alterado para tamanho variavel 1-4. (NT2011/004) + + + + + + + + + + + Mensagem da SEFAZ para o emissor. (v2.0) + + + + + + + + + + + + Protocolo de status resultado do processamento da NF-e + + + + + + + + Tipo da NF-e processada + + + + + + + + + + Tipo Dados do Endereço // 24/10/08 - tamanho mínimo + + + + + Logradouro + + + + + + + + + + + Número + + + + + + + + + + + Complemento + + + + + + + + + + + Bairro + + + + + + + + + + + Código do município (utilizar a tabela do IBGE), informar 9999999 para operações com o exterior. + + + + + Nome do município, informar EXTERIOR para operações com o exterior. + + + + + + + + + + + Sigla da UF, informar EX para operações com o exterior. + + + + + CEP + + + + + + + + + + + Código de Pais + + + + + + + + + + + Nome do país + + + + + + + + + + + Telefone, preencher com Código DDD + número do telefone , nas operações com exterior é permtido informar o código do país + código da localidade + número do telefone + + + + + + + + + + + + + Tipo Dados do Endereço do Emitente // 24/10/08 - desmembrado / tamanho mínimo + + + + + Logradouro + + + + + + + + + + + Número + + + + + + + + + + + Complemento + + + + + + + + + + + Bairro + + + + + + + + + + + Código do município + + + + + Nome do município + + + + + + + + + + + Sigla da UF + + + + + CEP - NT 2011/004 + + + + + + + + + + + Código do país + + + + + + + + + + Nome do país + + + + + + + + + + + Preencher com Código DDD + número do telefone (v.2.0) + + + + + + + + + + + + + Tipo Dados do Local de Retirada ou Entrega // 24/10/08 - tamanho mínimo // v2.0 + + + + + + CNPJ + + + + + CPF (v2.0) + + + + + + Logradouro + + + + + + + + + + + Número + + + + + + + + + + + Complemento + + + + + + + + + + + Bairro + + + + + + + + + + + Código do município (utilizar a tabela do IBGE) + + + + + Nome do município + + + + + + + + + + + Sigla da UF + + + + + + + Tipo Dados do Veículo + + + + + Placa do veículo (NT2011/004) + + + + + + + + + + + Sigla da UF + + + + + Registro Nacional de Transportador de Carga (ANTT) + + + + + + + + + + + + + Tipo Origem da mercadoria CST ICMS origem da mercadoria: 0-Nacional exceto as indicadas nos códigos 3, 4, 5 e 8; +1-Estrangeira - Importação direta; 2-Estrangeira - Adquirida no mercado interno; 3-Nacional, conteudo superior 40% e inferior ou igual a 70%; 4-Nacional, processos produtivos básicos; 5-Nacional, conteudo inferior 40%; 6-Estrangeira - Importação direta, com similar nacional, lista CAMEX; 7-Estrangeira - mercado interno, sem simular,lista CAMEX;8-Nacional, Conteúdo de Importação superior a 70%. + + + + + + + + + + + + + + + + + Tipo Finalidade da NF-e (1=Normal; 2=Complementar; 3=Ajuste; 4=Devolução/Retorno) + + + + + + + + + + + + Tipo processo de emissão da NF-e + + + + + + + + + + + + Tipo Código da Lista de Serviços LC 116/2003 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tipo Identificação de Lote + + + + + + + + + Tipo Versão da NF-e - 3.10 + + + + + + + + + Identificador único (Globally Unique Identifier) + + + + + + + + + Tipo: Dados do IPI + + + + + Classe de Enquadramento do IPI para Cigarros e Bebidas + + + + + + + + + + + CNPJ do produtor da mercadoria, quando diferente do emitente. Somente para os casos de exportação direta ou indireta. + + + + + Código do selo de controle do IPI + + + + + + + + + + + Quantidade de selo de controle do IPI + + + + + + + + + + + Código de Enquadramento Legal do IPI (tabela a ser criada pela RFB) + + + + + + + + + + + + + + + Código da Situação Tributária do IPI: +00-Entrada com recuperação de crédito +49 - Outras entradas +50-Saída tributada +99-Outras saídas + + + + + + + + + + + + + + + + Valor da BC do IPI + + + + + Alíquota do IPI + + + + + + + Quantidade total na unidade padrão para tributação + + + + + Valor por Unidade Tributável. Informar o valor do imposto Pauta por unidade de medida. + + + + + + + Valor do IPI + + + + + + + + + + + Código da Situação Tributária do IPI: +01-Entrada tributada com alíquota zero +02-Entrada isenta +03-Entrada não-tributada +04-Entrada imune +05-Entrada com suspensão +51-Saída tributada com alíquota zero +52-Saída isenta +53-Saída não-tributada +54-Saída imune +55-Saída com suspensão + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/rascunho/Schemas/leiauteNFe_v4.00.xsd b/rascunho/Schemas/leiauteNFe_v4.00.xsd new file mode 100644 index 0000000..8cecd55 --- /dev/null +++ b/rascunho/Schemas/leiauteNFe_v4.00.xsd @@ -0,0 +1,6874 @@ + + + + + + + + + + + + + + + + + + + + + Tipo Nota Fiscal Eletrônica + + + + + Informações da Nota Fiscal eletrônica + + + + + + identificação da NF-e + + + + + + Código da UF do emitente do Documento Fiscal. Utilizar a Tabela do IBGE. + + + + + Código numérico que compõe a Chave de Acesso. Número aleatório gerado pelo emitente para cada NF-e. + + + + + + + + + + + Descrição da Natureza da Operação + + + + + + + + + + + Código do modelo do Documento Fiscal. 55 = NF-e; 65 = NFC-e. + + + + + Série do Documento Fiscal +série normal 0-889 +Avulsa Fisco 890-899 +SCAN 900-999 + + + + + Número do Documento Fiscal + + + + + Data e Hora de emissão do Documento Fiscal (AAAA-MM-DDThh:mm:ssTZD) ex.: 2012-09-01T13:00:00-03:00 + + + + + Data e Hora da saída ou de entrada da mercadoria / produto (AAAA-MM-DDTHH:mm:ssTZD) + + + + + Tipo do Documento Fiscal (0 - entrada; 1 - saída) + + + + + + + + + + + + Identificador de Local de destino da operação (1-Interna;2-Interestadual;3-Exterior) + + + + + + + + + + + + + Código do Município de Ocorrência do Fato Gerador (utilizar a tabela do IBGE) + + + + + Formato de impressão do DANFE (0-sem DANFE;1-DANFe Retrato; 2-DANFe Paisagem;3-DANFe Simplificado; + 4-DANFe NFC-e;5-DANFe NFC-e em mensagem eletrônica) + + + + + + + + + + + + + + + + Forma de emissão da NF-e +1 - Normal; +2 - Contingência FS +3 - Regime Especial NFF (NT 2021.002) +4 - Contingência DPEC +5 - Contingência FSDA +6 - Contingência SVC - AN +7 - Contingência SVC - RS +9 - Contingência off-line NFC-e + + + + + + + + + + + + + + + + + + Digito Verificador da Chave de Acesso da NF-e + + + + + + + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Finalidade da emissão da NF-e: +1 - NFe normal +2 - NFe complementar +3 - NFe de ajuste +4 - Devolução/Retorno + + + + + Indica operação com consumidor final (0-Não;1-Consumidor Final) + + + + + + + + + + + + Indicador de presença do comprador no estabelecimento comercial no momento da oepração + (0-Não se aplica (ex.: Nota Fiscal complementar ou de ajuste;1-Operação presencial;2-Não presencial, internet;3-Não presencial, teleatendimento;4-NFC-e entrega em domicílio;5-Operação presencial, fora do estabelecimento;9-Não presencial, outros) + + + + + + + + + + + + + + + + + Indicador de intermediador/marketplace + 0=Operação sem intermediador (em site ou plataforma própria) + 1=Operação em site ou plataforma de terceiros (intermediadores/marketplace) + + + + + + + + + + + + Processo de emissão utilizado com a seguinte codificação: +0 - emissão de NF-e com aplicativo do contribuinte; +1 - emissão de NF-e avulsa pelo Fisco; +2 - emissão de NF-e avulsa, pelo contribuinte com seu certificado digital, através do site +do Fisco; +3- emissão de NF-e pelo contribuinte com aplicativo fornecido pelo Fisco. + + + + + versão do aplicativo utilizado no processo de +emissão + + + + + + + + + + + Informar apenas +para tpEmis diferente de 1 + + + + Informar a data e hora de entrada em contingência contingência no formato (AAAA-MM-DDThh:mm:ssTZD) ex.: 2012-09-01T13:00:00-03:00. + + + + + Informar a Justificativa da entrada + + + + + + + + + + + + Grupo de infromações da NF referenciada + + + + + + Chave de acesso das NF-e referenciadas. Chave de acesso compostas por Código da UF (tabela do IBGE) + AAMM da emissão + CNPJ do Emitente + modelo, série e número da NF-e Referenciada + Código Numérico + DV. + + + + + Dados da NF modelo 1/1A referenciada ou NF modelo 2 referenciada + + + + + + Código da UF do emitente do Documento Fiscal. Utilizar a Tabela do IBGE. + + + + + AAMM da emissão + + + + + + + + + + + CNPJ do emitente do documento fiscal referenciado + + + + + Código do modelo do Documento Fiscal. Utilizar 01 para NF modelo 1/1A e 02 para NF modelo 02 + + + + + + + + + + + + Série do Documento Fiscal, informar zero se inexistente + + + + + Número do Documento Fiscal + + + + + + + + Grupo com as informações NF de produtor referenciada + + + + + + Código da UF do emitente do Documento FiscalUtilizar a Tabela do IBGE (Anexo IV - Tabela de UF, Município e País) + + + + + AAMM da emissão da NF de produtor + + + + + + + + + + + + CNPJ do emitente da NF de produtor + + + + + CPF do emitente da NF de produtor + + + + + + IE do emitente da NF de Produtor + + + + + Código do modelo do Documento Fiscal - utilizar 04 para NF de produtor ou 01 para NF Avulsa + + + + + + + + + + + + Série do Documento Fiscal, informar zero se inexistentesérie + + + + + Número do Documento Fiscal - 1 – 999999999 + + + + + + + + Utilizar esta TAG para referenciar um CT-e emitido anteriormente, vinculada a NF-e atual + + + + + Grupo do Cupom Fiscal vinculado à NF-e + + + + + + Código do modelo do Documento Fiscal +Preencher com "2B", quando se tratar de Cupom Fiscal emitido por máquina registradora (não ECF), com "2C", quando se tratar de Cupom Fiscal PDV, ou "2D", quando se tratar de Cupom Fiscal (emitido por ECF) + + + + + + + + + + + + + Informar o número de ordem seqüencial do ECF que emitiu o Cupom Fiscal vinculado à NF-e + + + + + + + + + + + Informar o Número do Contador de Ordem de Operação - COO vinculado à NF-e + + + + + + + + + + + + + + + + + + + + Identificação do emitente + + + + + + + Número do CNPJ do emitente + + + + + Número do CPF do emitente + + + + + + Razão Social ou Nome do emitente + + + + + + + + + + + Nome fantasia + + + + + + + + + + + Endereço do emitente + + + + + Inscrição Estadual do Emitente + + + + + Inscricao Estadual do Substituto Tributário + + + + + Grupo de informações de interesse da Prefeitura + + + + Inscrição Municipal + + + + + + + + + + + CNAE Fiscal + + + + + + + + + + + + Código de Regime Tributário. +Este campo será obrigatoriamente preenchido com: +1 – Simples Nacional; +2 – Simples Nacional – excesso de sublimite de receita bruta; +3 – Regime Normal. + + + + + + + + + + + + + + + + Emissão de avulsa, informar os dados do Fisco emitente + + + + + + CNPJ do Órgão emissor + + + + + Órgão emitente + + + + + + + + + + + Matrícula do agente + + + + + + + + + + + Nome do agente + + + + + + + + + + + Telefone + + + + + + + + + + + Sigla da Unidade da Federação + + + + + Número do Documento de Arrecadação de Receita + + + + + + + + + + + Data de emissão do DAR (AAAA-MM-DD) + + + + + Valor Total constante no DAR + + + + + Repartição Fiscal emitente + + + + + + + + + + + Data de pagamento do DAR (AAAA-MM-DD) + + + + + + + + Identificação do Destinatário + + + + + + + Número do CNPJ + + + + + Número do CPF + + + + + Identificador do destinatário, em caso de comprador estrangeiro + + + + + + + + + + + + Razão Social ou nome do destinatário + + + + + + + + + + + Dados do endereço + + + + + Indicador da IE do destinatário: +1 – Contribuinte ICMSpagamento à vista; +2 – Contribuinte isento de inscrição; +9 – Não Contribuinte + + + + + + + + + + + + + Inscrição Estadual (obrigatório nas operações com contribuintes do ICMS) + + + + + Inscrição na SUFRAMA (Obrigatório nas operações com as áreas com benefícios de incentivos fiscais sob controle da SUFRAMA) PL_005d - 11/08/09 - alterado para aceitar 8 ou 9 dígitos + + + + + + + + + + + Inscrição Municipal do tomador do serviço + + + + + + + + + + + Informar o e-mail do destinatário. O campo pode ser utilizado para informar o e-mail +de recepção da NF-e indicada pelo destinatário + + + + + + + + + + + + + + + Identificação do Local de Retirada (informar apenas quando for diferente do endereço do remetente) + + + + + Identificação do Local de Entrega (informar apenas quando for diferente do endereço do destinatário) + + + + + Pessoas autorizadas para o download do XML da NF-e + + + + + + CNPJ Autorizado + + + + + CPF Autorizado + + + + + + + + Dados dos detalhes da NF-e + + + + + + Dados dos produtos e serviços da NF-e + + + + + + Código do produto ou serviço. Preencher com CFOP caso se trate de itens não relacionados com mercadorias/produto e que o contribuinte não possua codificação própria +Formato ”CFOP9999”. + + + + + + + + + + + GTIN (Global Trade Item Number) do produto, antigo código EAN ou código de barras + + + + + + + + + + + Codigo de barras diferente do padrão GTIN + + + + + + + + + + + Descrição do produto ou serviço + + + + + + + + + + + Código NCM (8 posições), será permitida a informação do gênero (posição do capítulo do NCM) quando a operação não for de comércio exterior (importação/exportação) ou o produto não seja tributado pelo IPI. Em caso de item de serviço ou item que não tenham produto (Ex. transferência de crédito, crédito do ativo imobilizado, etc.), informar o código 00 (zeros) (v2.0) + + + + + + + + + + + Nomenclatura de Valor aduaneio e Estatístico + + + + + + + + + + + + Codigo especificador da Substuicao Tributaria - CEST, que identifica a mercadoria sujeita aos regimes de substituicao tributária e de antecipação do recolhimento do imposto + + + + + + + + + + + + + + + + + + + CNPJ do Fabricante da Mercadoria, obrigatório para produto em escala NÃO relevante. + + + + + + + + + + + + + + Código EX TIPI (3 posições) + + + + + + + + + + + Cfop + + + + + + + + + + + Unidade comercial + + + + + + + + + + + Quantidade Comercial do produto, alterado para aceitar de 0 a 4 casas decimais e 11 inteiros. + + + + + Valor unitário de comercialização - alterado para aceitar 0 a 10 casas decimais e 11 inteiros + + + + + Valor bruto do produto ou serviço. + + + + + GTIN (Global Trade Item Number) da unidade tributável, antigo código EAN ou código de barras + + + + + + + + + + + Código de barras da unidade tributável diferente do padrão GTIN + + + + + + + + + + + Unidade Tributável + + + + + + + + + + + Quantidade Tributável - alterado para aceitar de 0 a 4 casas decimais e 11 inteiros + + + + + Valor unitário de tributação - - alterado para aceitar 0 a 10 casas decimais e 11 inteiros + + + + + Valor Total do Frete + + + + + Valor Total do Seguro + + + + + Valor do Desconto + + + + + Outras despesas acessórias + + + + + Este campo deverá ser preenchido com: + 0 – o valor do item (vProd) não compõe o valor total da NF-e (vProd) + 1 – o valor do item (vProd) compõe o valor total da NF-e (vProd) + + + + + + + + + + + + Delcaração de Importação +(NT 2011/004) + + + + + + Numero do Documento de Importação DI/DSI/DA/DRI-E (DI/DSI/DA/DRI-E) (NT2011/004) + + + + + + + + + + + Data de registro da DI/DSI/DA (AAAA-MM-DD) + + + + + Local do desembaraço aduaneiro + + + + + + + + + + + UF onde ocorreu o desembaraço aduaneiro + + + + + Data do desembaraço aduaneiro (AAAA-MM-DD) + + + + + Via de transporte internacional informada na DI + 1-Maritima;2-Fluvial;3-Lacustre;4-Aerea;5-Postal;6-Ferroviaria;7-Rodoviaria;8-Conduto;9-Meios Proprios;10-Entrada/Saida Ficta; + 11-Courier;12-Em maos;13-Por reboque. + + + + + + + + + + + + + + + + + + + + + + + Valor Adicional ao frete para renovação de marinha mercante + + + + + Forma de Importação quanto a intermediação + 1-por conta propria;2-por conta e ordem;3-encomenda + + + + + + + + + + + + + CNPJ do adquirente ou do encomendante + + + + + Sigla da UF do adquirente ou do encomendante + + + + + Código do exportador (usado nos sistemas internos de informação do emitente da NF-e) + + + + + + + + + + + Adições (NT 2011/004) + + + + + + Número da Adição + + + + + + + + + + + Número seqüencial do item dentro da Adição + + + + + + + + + + + Código do fabricante estrangeiro (usado nos sistemas internos de informação do emitente da NF-e) + + + + + + + + + + + Valor do desconto do item da DI – adição + + + + + Número do ato concessório de Drawback + + + + + + + + + + + + + + + + + Detalhe da exportação + + + + + + Número do ato concessório de Drawback + + + + + + + + + + + Exportação indireta + + + + + + Registro de exportação + + + + + + + + + + + Chave de acesso da NF-e recebida para exportação + + + + + Quantidade do item efetivamente exportado + + + + + + + + + + + pedido de compra - Informação de interesse do emissor para controle do B2B. + + + + + + + + + + + Número do Item do Pedido de Compra - Identificação do número do item do pedido de Compra + + + + + + + + + + + Número de controle da FCI - Ficha de Conteúdo de Importação. + + + + + + + + Número do lote do produto. + + + + + + + + + + + Quantidade de produto no lote. + + + + + Data de fabricação/produção. Formato "AAAA-MM-DD". + + + + + Data de validade. Informar o último dia do mês caso a validade não especifique o dia. Formato "AAAA-MM-DD". + + + + + + + + + + + + + + + + Informações mais detalhadas do produto (usada na NFF) + + + + + + Código Fiscal do Produto + + + + + + + + + + Código da operação selecionada na NFF e relacionada ao item + + + + + + + + + + + + + + Informações mais detalhadas do produto (usada na NFF) + + + + + + Embalagem do produto + + + + + + + + + + + Volume do produto na embalagem + + + + + Unidade de Medida da Embalagem + + + + + + + + + + + + + + Informações específicas de produtos e serviços + + + + Veículos novos + + + + + + Tipo da Operação (1 - Venda concessionária; 2 - Faturamento direto; 3 - Venda direta; 0 - Outros) + + + + + + + + + + + + + + Chassi do veículo - VIN (código-identificação-veículo) + + + + + + + + + + + + Cor do veículo (código de cada montadora) + + + + + + + + + + + Descrição da cor + + + + + + + + + + + Potência máxima do motor do veículo em cavalo vapor (CV). (potência-veículo) + + + + + + + + + + + Capacidade voluntária do motor expressa em centímetros cúbicos (CC). (cilindradas) + + + + + + + + + + + Peso líquido + + + + + + + + + + + Peso bruto + + + + + + + + + + + Serial (série) + + + + + + + + + + + Tipo de combustível-Tabela RENAVAM: 01-Álcool; 02-Gasolina; 03-Diesel; 16-Álcool/Gas.; 17-Gas./Álcool/GNV; 18-Gasolina/Elétrico + + + + + + + + + + + Número do motor + + + + + + + + + + + CMT-Capacidade Máxima de Tração - em Toneladas 4 casas decimais + + + + + + + + + + + Distância entre eixos + + + + + + + + + + + Ano Modelo de Fabricação + + + + + + + + + + + Ano de Fabricação + + + + + + + + + + + Tipo de pintura + + + + + + + + + + Tipo de veículo (utilizar tabela RENAVAM) + + + + + + + + + + + Espécie de veículo (utilizar tabela RENAVAM) + + + + + + + + + + + Informa-se o veículo tem VIN (chassi) remarcado. +R-Remarcado +N-NormalVIN + + + + + + + + + + + + Condição do veículo (1 - acabado; 2 - inacabado; 3 - semi-acabado) + + + + + + + + + + + + + Código Marca Modelo (utilizar tabela RENAVAM) + + + + + + + + + + + Código da Cor Segundo as regras de pré-cadastro do DENATRAN: 01-AMARELO;02-AZUL;03-BEGE;04-BRANCA;05-CINZA;06-DOURADA;07-GRENA +08-LARANJA;09-MARROM;10-PRATA;11-PRETA;12-ROSA;13-ROXA;14-VERDE;15-VERMELHA;16-FANTASIA + + + + + + + + + + + + + Quantidade máxima de permitida de passageiros sentados, inclusive motorista. + + + + + + + + + + + + + Restrição +0 - Não há; +1 - Alienação Fiduciária; +2 - Arrendamento Mercantil; +3 - Reserva de Domínio; +4 - Penhor de Veículos; +9 - outras. + + + + + + + + + + + + + + + + + + + grupo do detalhamento de Medicamentos e de matérias-primas farmacêuticas + + + + + + Utilizar o número do registro ANVISA ou preencher com o literal “ISENTO”, no caso de medicamento isento de registro na ANVISA. + + + + + + + + + + Obs.: Para medicamento isento de registro na ANVISA, informar o número da decisão que o isenta, como por exemplo o número da Resolução da Diretoria Colegiada da ANVISA (RDC). + + + + + + + + + + + Preço Máximo ao Consumidor. + + + + + + + + Armamentos + + + + + + Indicador do tipo de arma de fogo (0 - Uso permitido; 1 - Uso restrito) + + + + + + + + + + + + Número de série da arma + + + + + + + + + + + Número de série do cano + + + + + + + + + + + Descrição completa da arma, compreendendo: calibre, marca, capacidade, tipo de funcionamento, comprimento e demais elementos que permitam a sua perfeita identificação. + + + + + + + + + + + + + + Informar apenas para operações com combustíveis líquidos + + + + + + Código de produto da ANP. codificação de produtos do SIMP (http://www.anp.gov.br) + + + + + + + + + + + Descrição do Produto conforme ANP. Utilizar a descrição de produtos do Sistema de Informações de Movimentação de Produtos - SIMP (http://www.anp.gov.br/simp/). + + + + + + + + + + + Percentual do GLP derivado do petróleo no produto GLP (cProdANP=210203001). Informar em número decimal o percentual do GLP derivado de petróleo no produto GLP. Valores 0 a 100. + + + + + Percentual de gás natural nacional - GLGNn para o produto GLP (cProdANP=210203001). Informar em número decimal o percentual do Gás Natural Nacional - GLGNn para o produto GLP. Valores de 0 a 100. + + + + + Percentual de gás natural importado GLGNi para o produto GLP (cProdANP=210203001). Informar em número deciaml o percentual do Gás Natural Importado - GLGNi para o produto GLP. Valores de 0 a 100. + + + + + Valor de partida (cProdANP=210203001). Deve ser informado neste campo o valor por quilograma sem ICMS. + + + + + Código de autorização / registro do CODIF. Informar apenas quando a UF utilizar o CODIF (Sistema de Controle do Diferimento do Imposto nas Operações com AEAC - Álcool Etílico Anidro Combustível). + + + + + + + + + + + Quantidade de combustível +faturada à temperatura ambiente. +Informar quando a quantidade +faturada informada no campo +qCom (I10) tiver sido ajustada para +uma temperatura diferente da +ambiente. + + + + + Sigla da UF de Consumo + + + + + CIDE Combustíveis + + + + + + BC do CIDE ( Quantidade comercializada) + + + + + Alíquota do CIDE (em reais) + + + + + Valor do CIDE + + + + + + + + Informações do grupo de "encerrante" + + + + + + Numero de identificação do Bico utilizado no abastecimento + + + + + + + + + + + Numero de identificação da bomba ao qual o bico está interligado + + + + + + + + + + + Numero de identificação do tanque ao qual o bico está interligado + + + + + + + + + + + Valor do Encerrante no ínicio do abastecimento + + + + + Valor do Encerrante no final do abastecimento + + + + + + + + + + + Número do RECOPI + + + + + + + + + + + + + + + + Tributos incidentes nos produtos ou serviços da NF-e + + + + + + Valor estimado total de impostos federais, estaduais e municipais + + + + + + + Dados do ICMS Normal e ST + + + + + + Tributação pelo ICMS +00 - Tributada integralmente + + + + + + origem da mercadoria: 0 - Nacional +1 - Estrangeira - Importação direta +2 - Estrangeira - Adquirida no mercado interno + + + + + Tributção pelo ICMS +00 - Tributada integralmente + + + + + + + + + + + Modalidade de determinação da BC do ICMS: +0 - Margem Valor Agregado (%); +1 - Pauta (valor); +2 - Preço Tabelado Máximo (valor); +3 - Valor da Operação. + + + + + + + + + + + + + + Valor da BC do ICMS + + + + + Alíquota do ICMS + + + + + Valor do ICMS + + + + + + Percentual de ICMS relativo ao Fundo de Combate à Pobreza (FCP). + + + + + Valor do ICMS relativo ao Fundo de Combate à Pobreza (FCP). + + + + + + + + + Tributação pelo ICMS +10 - Tributada e com cobrança do ICMS por substituição tributária + + + + + + origem da mercadoria: 0 - Nacional +1 - Estrangeira - Importação direta +2 - Estrangeira - Adquirida no mercado interno + + + + + 10 - Tributada e com cobrança do ICMS por substituição tributária + + + + + + + + + + + Modalidade de determinação da BC do ICMS: +0 - Margem Valor Agregado (%); +1 - Pauta (valor); +2 - Preço Tabelado Máximo (valor); +3 - Valor da Operação. + + + + + + + + + + + + + + Valor da BC do ICMS + + + + + Alíquota do ICMS + + + + + Valor do ICMS + + + + + + Valor da Base de cálculo do FCP. + + + + + Percentual de ICMS relativo ao Fundo de Combate à Pobreza (FCP). + + + + + Valor do ICMS relativo ao Fundo de Combate à Pobreza (FCP). + + + + + + Modalidade de determinação da BC do ICMS ST: +0 – Preço tabelado ou máximo sugerido; +1 - Lista Negativa (valor); +2 - Lista Positiva (valor); +3 - Lista Neutra (valor); +4 - Margem Valor Agregado (%); +5 - Pauta (valor) +6-Valor da Operação; + + + + + + + + + + + + + + + + + Percentual da Margem de Valor Adicionado ICMS ST + + + + + Percentual de redução da BC ICMS ST + + + + + Valor da BC do ICMS ST + + + + + Alíquota do ICMS ST + + + + + Valor do ICMS ST + + + + + + Valor da Base de cálculo do FCP retido por substituicao tributaria. + + + + + Percentual de FCP retido por substituição tributária. + + + + + Valor do FCP retido por substituição tributária. + + + + + + + Valor do ICMS-ST desonerado. + + + + + Motivo da desoneração do ICMS-ST: 3-Uso na agropecuária; 9-Outros; 12-Fomento agropecuário. + + + + + + + + + + + + + + + + + Tributção pelo ICMS +20 - Com redução de base de cálculo + + + + + + origem da mercadoria: 0 - Nacional +1 - Estrangeira - Importação direta +2 - Estrangeira - Adquirida no mercado interno + + + + + Tributção pelo ICMS +20 - Com redução de base de cálculo + + + + + + + + + + + Modalidade de determinação da BC do ICMS: +0 - Margem Valor Agregado (%); +1 - Pauta (valor); +2 - Preço Tabelado Máximo (valor); +3 - Valor da Operação. + + + + + + + + + + + + + + Percentual de redução da BC + + + + + Valor da BC do ICMS + + + + + Alíquota do ICMS + + + + + Valor do ICMS + + + + + + Valor da Base de cálculo do FCP. + + + + + Percentual de ICMS relativo ao Fundo de Combate à Pobreza (FCP). + + + + + Valor do ICMS relativo ao Fundo de Combate à Pobreza (FCP). + + + + + + Grupo desoneração + + + + Valor do ICMS de desoneração + + + + + Motivo da desoneração do ICMS:3-Uso na agropecuária;9-Outros;12-Fomento agropecuário + + + + + + + + + + + + + + + + + Tributação pelo ICMS +30 - Isenta ou não tributada e com cobrança do ICMS por substituição tributária + + + + + + origem da mercadoria: 0 - Nacional +1 - Estrangeira - Importação direta +2 - Estrangeira - Adquirida no mercado interno + + + + + Tributção pelo ICMS +30 - Isenta ou não tributada e com cobrança do ICMS por substituição tributária + + + + + + + + + + + Modalidade de determinação da BC do ICMS ST: +0 – Preço tabelado ou máximo sugerido; +1 - Lista Negativa (valor); +2 - Lista Positiva (valor); +3 - Lista Neutra (valor); +4 - Margem Valor Agregado (%); +5 - Pauta (valor). +6 - Valor da Operação + + + + + + + + + + + + + + + + + Percentual da Margem de Valor Adicionado ICMS ST + + + + + Percentual de redução da BC ICMS ST + + + + + Valor da BC do ICMS ST + + + + + Alíquota do ICMS ST + + + + + Valor do ICMS ST + + + + + + Valor da Base de cálculo do FCP. + + + + + Percentual de FCP retido por substituição tributária. + + + + + Valor do FCP retido por substituição tributária. + + + + + + Grupo desoneração + + + + Valor do ICMS de desoneração + + + + + Motivo da desoneração do ICMS:6-Utilitários Motocicleta AÁrea Livre;7-SUFRAMA;9-Outros + + + + + + + + + + + + + + + + + Tributação pelo ICMS +40 - Isenta +41 - Não tributada +50 - Suspensão + + + + + + origem da mercadoria: 0 - Nacional +1 - Estrangeira - Importação direta +2 - Estrangeira - Adquirida no mercado interno + + + + + Tributação pelo ICMS +40 - Isenta +41 - Não tributada +50 - Suspensão +51 - Diferimento + + + + + + + + + + + + + + O valor do ICMS será informado apenas nas operações com veículos beneficiados com a desoneração condicional do ICMS. + + + + + Este campo será preenchido quando o campo anterior estiver preenchido. +Informar o motivo da desoneração: +1 – Táxi; +3 – Produtor Agropecuário; +4 – Frotista/Locadora; +5 – Diplomático/Consular; +6 – Utilitários e Motocicletas da Amazônia Ocidental e Áreas de Livre Comércio (Resolução 714/88 e 790/94 – CONTRAN e suas alterações); +7 – SUFRAMA; +8 - Venda a órgão Público; +9 – Outros +10- Deficiente Condutor +11- Deficiente não condutor +16 - Olimpíadas Rio 2016 +90 - Solicitado pelo Fisco + + + + + + + + + + + + + + + + + + + + + + + + + + Tributção pelo ICMS +51 - Diferimento +A exigência do preenchimento das informações do ICMS diferido fica à critério de cada UF. + + + + + + origem da mercadoria: 0 - Nacional +1 - Estrangeira - Importação direta +2 - Estrangeira - Adquirida no mercado interno + + + + + Tributção pelo ICMS +20 - Com redução de base de cálculo + + + + + + + + + + + Modalidade de determinação da BC do ICMS: +0 - Margem Valor Agregado (%); +1 - Pauta (valor); +2 - Preço Tabelado Máximo (valor); +3 - Valor da Operação. + + + + + + + + + + + + + + Percentual de redução da BC + + + + + Valor da BC do ICMS + + + + + Alíquota do imposto + + + + + Valor do ICMS da Operação + + + + + Percentual do diferemento + + + + + Valor do ICMS da diferido + + + + + Valor do ICMS + + + + + + Valor da Base de cálculo do FCP. + + + + + Percentual de ICMS relativo ao Fundo de Combate à Pobreza (FCP). + + + + + Valor do ICMS relativo ao Fundo de Combate à Pobreza (FCP). + + + + + + + Percentual do diferimento do ICMS relativo ao Fundo de Combate à Pobreza (FCP). + + + + + Valor do ICMS relativo ao Fundo de Combate à Pobreza (FCP) diferido. + + + + + Valor efetivo do ICMS relativo ao Fundo de Combate à Pobreza (FCP). + + + + + + + + + Tributação pelo ICMS +60 - ICMS cobrado anteriormente por substituição tributária + + + + + + origem da mercadoria: 0 - Nacional +1 - Estrangeira - Importação direta +2 - Estrangeira - Adquirida no mercado interno + + + + + Tributação pelo ICMS +60 - ICMS cobrado anteriormente por substituição tributária + + + + + + + + + + + NT2010/004 + + + + Valor da BC do ICMS ST retido anteriormente + + + + + Aliquota suportada pelo consumidor final. + + + + + Valor do ICMS Próprio do Substituto cobrado em operação anterior + + + + + Valor do ICMS ST retido anteriormente + + + + + + + Valor da Base de cálculo do FCP retido anteriormente por ST. + + + + + Percentual de FCP retido anteriormente por substituição tributária. + + + + + Valor do FCP retido por substituição tributária. + + + + + + + Percentual de redução da base de cálculo efetiva. + + + + + Valor da base de cálculo efetiva. + + + + + Alíquota do ICMS efetiva. + + + + + Valor do ICMS efetivo. + + + + + + + + + Tributação pelo ICMS +70 - Com redução de base de cálculo e cobrança do ICMS por substituição tributária + + + + + + origem da mercadoria: 0 - Nacional +1 - Estrangeira - Importação direta +2 - Estrangeira - Adquirida no mercado interno + + + + + Tributção pelo ICMS +70 - Com redução de base de cálculo e cobrança do ICMS por substituição tributária + + + + + + + + + + + Modalidade de determinação da BC do ICMS: +0 - Margem Valor Agregado (%); +1 - Pauta (valor); +2 - Preço Tabelado Máximo (valor); +3 - Valor da Operação. + + + + + + + + + + + + + + Percentual de redução da BC + + + + + Valor da BC do ICMS + + + + + Alíquota do ICMS + + + + + Valor do ICMS + + + + + + Valor da Base de cálculo do FCP. + + + + + Percentual de ICMS relativo ao Fundo de Combate à Pobreza (FCP). + + + + + Valor do ICMS relativo ao Fundo de Combate à Pobreza (FCP). + + + + + + Modalidade de determinação da BC do ICMS ST: +0 – Preço tabelado ou máximo sugerido; +1 - Lista Negativa (valor); +2 - Lista Positiva (valor); +3 - Lista Neutra (valor); +4 - Margem Valor Agregado (%); +5 - Pauta (valor); +6 - Valor da Operação. + + + + + + + + + + + + + + + + + Percentual da Margem de Valor Adicionado ICMS ST + + + + + Percentual de redução da BC ICMS ST + + + + + Valor da BC do ICMS ST + + + + + Alíquota do ICMS ST + + + + + Valor do ICMS ST + + + + + + Valor da Base de cálculo do FCP retido por substituição tributária. + + + + + Percentual de FCP retido por substituição tributária. + + + + + Valor do FCP retido por substituição tributária. + + + + + + Grupo desoneração + + + + Valor do ICMS de desoneração + + + + + Motivo da desoneração do ICMS:3-Uso na agropecuária;9-Outros;12-Fomento agropecuário + + + + + + + + + + + + + + + Valor do ICMS-ST desonerado. + + + + + Motivo da desoneração do ICMS-ST: 3-Uso na agropecuária; 9-Outros; 12-Fomento agropecuário. + + + + + + + + + + + + + + + + + Tributação pelo ICMS +90 - Outras + + + + + + origem da mercadoria: 0 - Nacional +1 - Estrangeira - Importação direta +2 - Estrangeira - Adquirida no mercado interno + + + + + Tributção pelo ICMS +90 - Outras + + + + + + + + + + + + Modalidade de determinação da BC do ICMS: +0 - Margem Valor Agregado (%); +1 - Pauta (valor); +2 - Preço Tabelado Máximo (valor); +3 - Valor da Operação. + + + + + + + + + + + + + + Valor da BC do ICMS + + + + + Percentual de redução da BC + + + + + Alíquota do ICMS + + + + + Valor do ICMS + + + + + + Valor da Base de cálculo do FCP. + + + + + Percentual de ICMS relativo ao Fundo de Combate à Pobreza (FCP). + + + + + Valor do ICMS relativo ao Fundo de Combate à Pobreza (FCP). + + + + + + + + Modalidade de determinação da BC do ICMS ST: +0 – Preço tabelado ou máximo sugerido; +1 - Lista Negativa (valor); +2 - Lista Positiva (valor); +3 - Lista Neutra (valor); +4 - Margem Valor Agregado (%); +5 - Pauta (valor); +6 - Valor da Operação. + + + + + + + + + + + + + + + + + Percentual da Margem de Valor Adicionado ICMS ST + + + + + Percentual de redução da BC ICMS ST + + + + + Valor da BC do ICMS ST + + + + + Alíquota do ICMS ST + + + + + Valor do ICMS ST + + + + + + Valor da Base de cálculo do FCP. + + + + + Percentual de FCP retido por substituição tributária. + + + + + Valor do FCP retido por substituição tributária. + + + + + + + Grupo desoneração + + + + Valor do ICMS de desoneração + + + + + Motivo da desoneração do ICMS:3-Uso na agropecuária;9-Outros;12-Fomento agropecuário + + + + + + + + + + + + + + + Valor do ICMS-ST desonerado. + + + + + Motivo da desoneração do ICMS-ST: 3-Uso na agropecuária; 9-Outros; 12-Fomento agropecuário. + + + + + + + + + + + + + + + + + Partilha do ICMS entre a UF de origem e UF de destino ou a UF definida na legislação +Operação interestadual para consumidor final com partilha do ICMS devido na operação entre a UF de origem e a UF do destinatário ou ou a UF definida na legislação. (Ex. UF da concessionária de entrega do veículos) + + + + + + origem da mercadoria: 0 - Nacional +1 - Estrangeira - Importação direta +2 - Estrangeira - Adquirida no mercado interno + + + + + Tributação pelo ICMS +10 - Tributada e com cobrança do ICMS por substituição tributária; +90 – Outros. + + + + + + + + + + + + Modalidade de determinação da BC do ICMS: +0 - Margem Valor Agregado (%); +1 - Pauta (valor); +2 - Preço Tabelado Máximo (valor); +3 - Valor da Operação. + + + + + + + + + + + + + + Valor da BC do ICMS + + + + + Percentual de redução da BC + + + + + Alíquota do ICMS + + + + + Valor do ICMS + + + + + Modalidade de determinação da BC do ICMS ST: +0 – Preço tabelado ou máximo sugerido; +1 - Lista Negativa (valor); +2 - Lista Positiva (valor); +3 - Lista Neutra (valor); +4 - Margem Valor Agregado (%); +5 - Pauta (valor). +6 - Valor da Operação + + + + + + + + + + + + + + + + + Percentual da Margem de Valor Adicionado ICMS ST + + + + + Percentual de redução da BC ICMS ST + + + + + Valor da BC do ICMS ST + + + + + Alíquota do ICMS ST + + + + + Valor do ICMS ST + + + + + + Valor da Base de cálculo do FCP retido por substituicao tributaria. + + + + + Percentual de FCP retido por substituição tributária. + + + + + Valor do FCP retido por substituição tributária. + + + + + + Percentual para determinação do valor da Base de Cálculo da operação própria. + + + + + Sigla da UF para qual é devido o ICMS ST da operação. + + + + + + + + Grupo de informação do ICMSST devido para a UF de destino, nas operações interestaduais de produtos que tiveram retenção antecipada de ICMS por ST na UF do remetente. Repasse via Substituto Tributário. + + + + + + origem da mercadoria: 0 - Nacional +1 - Estrangeira - Importação direta +2 - Estrangeira - Adquirida no mercado interno + + + + + Tributção pelo ICMS +41-Não Tributado. +60-Cobrado anteriormente por substituição tributária. + + + + + + + + + + + + Informar o valor da BC do ICMS ST retido na UF remetente + + + + + Aliquota suportada pelo consumidor final. + + + + + Valor do ICMS Próprio do Substituto cobrado em operação anterior + + + + + Informar o valor do ICMS ST retido na UF remetente (iv2.0)) + + + + + + Informar o valor da Base de Cálculo do FCP retido anteriormente por ST. + + + + + Percentual relativo ao Fundo de Combate à Pobreza (FCP) retido por substituição tributária. + + + + + Valor do ICMS relativo ao Fundo de Combate à Pobreza (FCP) retido por substituição tributária. + + + + + + Informar o valor da BC do ICMS ST da UF destino + + + + + Informar o valor da BC do ICMS ST da UF destino (v2.0) + + + + + + Percentual de redução da base de cálculo efetiva. + + + + + Valor da base de cálculo efetiva. + + + + + Alíquota do ICMS efetivo. + + + + + Valor do ICMS efetivo. + + + + + + + + + Tributação do ICMS pelo SIMPLES NACIONAL e CSOSN=101 (v.2.0) + + + + + + origem da mercadoria: 0 - Nacional +1 - Estrangeira - Importação direta +2 - Estrangeira - Adquirida no mercado interno +(v2.0) + + + + + 101- Tributada pelo Simples Nacional com permissão de crédito. (v.2.0) + + + + + + + + + + + Alíquota aplicável de cálculo do crédito (Simples Nacional). (v2.0) + + + + + Valor crédito do ICMS que pode ser aproveitado nos termos do art. 23 da LC 123 (Simples Nacional) (v2.0) + + + + + + + + Tributação do ICMS pelo SIMPLES NACIONAL e CSOSN=102, 103, 300 ou 400 (v.2.0)) + + + + + + origem da mercadoria: 0 - Nacional +1 - Estrangeira - Importação direta +2 - Estrangeira - Adquirida no mercado interno +(v2.0) + + + + + 102- Tributada pelo Simples Nacional sem permissão de crédito. +103 – Isenção do ICMS no Simples Nacional para faixa de receita bruta. +300 – Imune. +400 – Não tributda pelo Simples Nacional (v.2.0) (v.2.0) + + + + + + + + + + + + + + + + + Tributação do ICMS pelo SIMPLES NACIONAL e CSOSN=201 (v.2.0) + + + + + + Origem da mercadoria: +0 – Nacional; +1 – Estrangeira – Importação direta; +2 – Estrangeira – Adquirida no mercado interno. (v2.0) + + + + + 201- Tributada pelo Simples Nacional com permissão de crédito e com cobrança do ICMS por Substituição Tributária (v.2.0) + + + + + + + + + + + Modalidade de determinação da BC do ICMS ST: +0 – Preço tabelado ou máximo sugerido; +1 - Lista Negativa (valor); +2 - Lista Positiva (valor); +3 - Lista Neutra (valor); +4 - Margem Valor Agregado (%); +5 - Pauta (valor). (v2.0) +6 - Valor da Operação + + + + + + + + + + + + + + + + + Percentual da Margem de Valor Adicionado ICMS ST (v2.0) + + + + + Percentual de redução da BC ICMS ST (v2.0) + + + + + Valor da BC do ICMS ST (v2.0) + + + + + Alíquota do ICMS ST (v2.0) + + + + + Valor do ICMS ST (v2.0) + + + + + + Valor da Base de cálculo do FCP. + + + + + Percentual de FCP retido por substituição tributária. + + + + + Valor do FCP retido por substituição tributária. + + + + + + Alíquota aplicável de cálculo do crédito (Simples Nacional). (v2.0) + + + + + Valor crédito do ICMS que pode ser aproveitado nos termos do art. 23 da LC 123 (Simples Nacional) (v2.0) + + + + + + + + Tributação do ICMS pelo SIMPLES NACIONAL e CSOSN=202 ou 203 (v.2.0) + + + + + + Origem da mercadoria: +0 – Nacional; +1 – Estrangeira – Importação direta; +2 – Estrangeira – Adquirida no mercado interno. (v2.0) + + + + + 202- Tributada pelo Simples Nacional sem permissão de crédito e com cobrança do ICMS por Substituição Tributária; +203- Isenção do ICMS nos Simples Nacional para faixa de receita bruta e com cobrança do ICMS por Substituição Tributária (v.2.0) + + + + + + + + + + + + Modalidade de determinação da BC do ICMS ST: +0 – Preço tabelado ou máximo sugerido; +1 - Lista Negativa (valor); +2 - Lista Positiva (valor); +3 - Lista Neutra (valor); +4 - Margem Valor Agregado (%); +5 - Pauta (valor). (v2.0) +6 - Valor da Operação + + + + + + + + + + + + + + + + + Percentual da Margem de Valor Adicionado ICMS ST (v2.0) + + + + + Percentual de redução da BC ICMS ST (v2.0) + + + + + Valor da BC do ICMS ST (v2.0) + + + + + Alíquota do ICMS ST (v2.0) + + + + + Valor do ICMS ST (v2.0) + + + + + + Valor da Base de cálculo do FCP. + + + + + Percentual de FCP retido por substituição tributária. + + + + + Valor do FCP retido por substituição tributária. + + + + + + + + + Tributação do ICMS pelo SIMPLES NACIONAL,CRT=1 – Simples Nacional e CSOSN=500 (v.2.0) + + + + + + origem da mercadoria: 0 - Nacional +1 - Estrangeira - Importação direta +2 - Estrangeira - Adquirida no mercado interno + + + + + 500 – ICMS cobrado anterirmente por substituição tributária (substituído) ou por antecipação +(v.2.0) + + + + + + + + + + + + Valor da BC do ICMS ST retido anteriormente (v2.0) + + + + + Aliquota suportada pelo consumidor final. + + + + + Valor do ICMS próprio do substituto + + + + + Valor do ICMS ST retido anteriormente (v2.0) + + + + + + + Valor da Base de cálculo do FCP retido anteriormente. + + + + + Percentual de FCP retido anteriormente por substituição tributária. + + + + + Valor do FCP retido por substituição tributária. + + + + + + + Percentual de redução da base de cálculo efetiva. + + + + + Valor da base de cálculo efetiva. + + + + + Alíquota do ICMS efetiva. + + + + + Valor do ICMS efetivo. + + + + + + + + + Tributação do ICMS pelo SIMPLES NACIONAL, CRT=1 – Simples Nacional e CSOSN=900 (v2.0) + + + + + + origem da mercadoria: 0 - Nacional +1 - Estrangeira - Importação direta +2 - Estrangeira - Adquirida no mercado interno + + + + + Tributação pelo ICMS 900 - Outros(v2.0) + + + + + + + + + + + + Modalidade de determinação da BC do ICMS: +0 - Margem Valor Agregado (%); +1 - Pauta (valor); +2 - Preço Tabelado Máximo (valor); +3 - Valor da Operação. + + + + + + + + + + + + + + Valor da BC do ICMS + + + + + Percentual de redução da BC + + + + + Alíquota do ICMS + + + + + Valor do ICMS + + + + + + + Modalidade de determinação da BC do ICMS ST: +0 – Preço tabelado ou máximo sugerido; +1 - Lista Negativa (valor); +2 - Lista Positiva (valor); +3 - Lista Neutra (valor); +4 - Margem Valor Agregado (%); +5 - Pauta (valor). +6 - Valor da Operação + + + + + + + + + + + + + + + + + Percentual da Margem de Valor Adicionado ICMS ST + + + + + Percentual de redução da BC ICMS ST + + + + + Valor da BC do ICMS ST + + + + + Alíquota do ICMS ST + + + + + Valor do ICMS ST + + + + + + Valor da Base de cálculo do FCP. + + + + + Percentual de FCP retido por substituição tributária. + + + + + Valor do FCP retido por substituição tributária. + + + + + + + + Alíquota aplicável de cálculo do crédito (Simples Nacional). (v2.0) + + + + + Valor crédito do ICMS que pode ser aproveitado nos termos do art. 23 da LC 123 (Simples Nacional) (v2.0) + + + + + + + + + + + + + Dados do Imposto de Importação + + + + + + Base da BC do Imposto de Importação + + + + + Valor das despesas aduaneiras + + + + + Valor do Imposto de Importação + + + + + Valor do Imposto sobre Operações Financeiras + + + + + + + + + + + ISSQN + + + + + + Valor da BC do ISSQN + + + + + Alíquota do ISSQN + + + + + Valor da do ISSQN + + + + + Informar o município de ocorrência do fato gerador do ISSQN. Utilizar a Tabela do IBGE (Anexo VII - Tabela de UF, Município e País). “Atenção, não vincular com os campos B12, C10 ou E10” v2.0 + + + + + Informar o Item da lista de serviços da LC 116/03 em que se classifica o serviço. + + + + + Valor dedução para redução da base de cálculo + + + + + Valor outras retenções + + + + + Valor desconto incondicionado + + + + + Valor desconto condicionado + + + + + Valor Retenção ISS + + + + + Exibilidade do ISS:1-Exigível;2-Não incidente;3-Isenção;4-Exportação;5-Imunidade;6-Exig.Susp. Judicial;7-Exig.Susp. ADM + + + + + + + + + + + + + + + + + Código do serviço prestado dentro do município + + + + + + + + + + + + Código do Município de Incidência do Imposto + + + + + Código de Pais + + + + + + + + + + + Número do Processo administrativo ou judicial de suspenção do processo + + + + + + + + + + + + Indicador de Incentivo Fiscal. 1=Sim; 2=Não + + + + + + + + + + + + + + + + + Dados do PIS + + + + + + Código de Situação Tributária do PIS. + 01 – Operação Tributável - Base de Cálculo = Valor da Operação Alíquota Normal (Cumulativo/Não Cumulativo); +02 - Operação Tributável - Base de Calculo = Valor da Operação (Alíquota Diferenciada); + + + + + + Código de Situação Tributária do PIS. + 01 – Operação Tributável - Base de Cálculo = Valor da Operação Alíquota Normal (Cumulativo/Não Cumulativo); +02 - Operação Tributável - Base de Calculo = Valor da Operação (Alíquota Diferenciada); + + + + + + + + + + + + Valor da BC do PIS + + + + + Alíquota do PIS (em percentual) + + + + + Valor do PIS + + + + + + + + Código de Situação Tributária do PIS. +03 - Operação Tributável - Base de Calculo = Quantidade Vendida x Alíquota por Unidade de Produto; + + + + + + Código de Situação Tributária do PIS. +03 - Operação Tributável - Base de Calculo = Quantidade Vendida x Alíquota por Unidade de Produto; + + + + + + + + + + + Quantidade Vendida (NT2011/004) + + + + + Alíquota do PIS (em reais) (NT2011/004) + + + + + Valor do PIS + + + + + + + + Código de Situação Tributária do PIS. +04 - Operação Tributável - Tributação Monofásica - (Alíquota Zero); +06 - Operação Tributável - Alíquota Zero; +07 - Operação Isenta da contribuição; +08 - Operação Sem Incidência da contribuição; +09 - Operação com suspensão da contribuição; + + + + + + Código de Situação Tributária do PIS. +04 - Operação Tributável - Tributação Monofásica - (Alíquota Zero); +05 - Operação Tributável (ST); +06 - Operação Tributável - Alíquota Zero; +07 - Operação Isenta da contribuição; +08 - Operação Sem Incidência da contribuição; +09 - Operação com suspensão da contribuição; + + + + + + + + + + + + + + + + + + + Código de Situação Tributária do PIS. +99 - Outras Operações. + + + + + + Código de Situação Tributária do PIS. +99 - Outras Operações. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Valor da BC do PIS + + + + + Alíquota do PIS (em percentual) + + + + + + + Quantidade Vendida (NT2011/004) + + + + + Alíquota do PIS (em reais) (NT2011/004) + + + + + + + Valor do PIS + + + + + + + + + + + Dados do PIS Substituição Tributária + + + + + + + + Valor da BC do PIS ST + + + + + Alíquota do PIS ST (em percentual) + + + + + + + Quantidade Vendida + + + + + Alíquota do PIS ST (em reais) + + + + + + + Valor do PIS ST + + + + + Indica se o valor do PISST compõe o valor total da NF-e + + + + + + + + + + + + + + + Dados do COFINS + + + + + + Código de Situação Tributária do COFINS. + 01 – Operação Tributável - Base de Cálculo = Valor da Operação Alíquota Normal (Cumulativo/Não Cumulativo); +02 - Operação Tributável - Base de Calculo = Valor da Operação (Alíquota Diferenciada); + + + + + + Código de Situação Tributária do COFINS. + 01 – Operação Tributável - Base de Cálculo = Valor da Operação Alíquota Normal (Cumulativo/Não Cumulativo); +02 - Operação Tributável - Base de Calculo = Valor da Operação (Alíquota Diferenciada); + + + + + + + + + + + + Valor da BC do COFINS + + + + + Alíquota do COFINS (em percentual) + + + + + Valor do COFINS + + + + + + + + Código de Situação Tributária do COFINS. +03 - Operação Tributável - Base de Calculo = Quantidade Vendida x Alíquota por Unidade de Produto; + + + + + + Código de Situação Tributária do COFINS. +03 - Operação Tributável - Base de Calculo = Quantidade Vendida x Alíquota por Unidade de Produto; + + + + + + + + + + Quantidade Vendida (NT2011/004) + + + + + Alíquota do COFINS (em reais) (NT2011/004) + + + + + Valor do COFINS + + + + + + + + Código de Situação Tributária do COFINS: +04 - Operação Tributável - Tributação Monofásica - (Alíquota Zero); +06 - Operação Tributável - Alíquota Zero; +07 - Operação Isenta da contribuição; +08 - Operação Sem Incidência da contribuição; +09 - Operação com suspensão da contribuição; + + + + + + Código de Situação Tributária do COFINS: +04 - Operação Tributável - Tributação Monofásica - (Alíquota Zero); +05 - Operação Tributável (ST); +06 - Operação Tributável - Alíquota Zero; +07 - Operação Isenta da contribuição; +08 - Operação Sem Incidência da contribuição; +09 - Operação com suspensão da contribuição; + + + + + + + + + + + + + + + + + + + Código de Situação Tributária do COFINS: +49 - Outras Operações de Saída +50 - Operação com Direito a Crédito - Vinculada Exclusivamente a Receita Tributada no Mercado Interno +51 - Operação com Direito a Crédito – Vinculada Exclusivamente a Receita Não Tributada no Mercado Interno +52 - Operação com Direito a Crédito - Vinculada Exclusivamente a Receita de Exportação +53 - Operação com Direito a Crédito - Vinculada a Receitas Tributadas e Não-Tributadas no Mercado Interno +54 - Operação com Direito a Crédito - Vinculada a Receitas Tributadas no Mercado Interno e de Exportação +55 - Operação com Direito a Crédito - Vinculada a Receitas Não-Tributadas no Mercado Interno e de Exportação +56 - Operação com Direito a Crédito - Vinculada a Receitas Tributadas e Não-Tributadas no Mercado Interno, e de Exportação +60 - Crédito Presumido - Operação de Aquisição Vinculada Exclusivamente a Receita Tributada no Mercado Interno +61 - Crédito Presumido - Operação de Aquisição Vinculada Exclusivamente a Receita Não-Tributada no Mercado Interno +62 - Crédito Presumido - Operação de Aquisição Vinculada Exclusivamente a Receita de Exportação +63 - Crédito Presumido - Operação de Aquisição Vinculada a Receitas Tributadas e Não-Tributadas no Mercado Interno +64 - Crédito Presumido - Operação de Aquisição Vinculada a Receitas Tributadas no Mercado Interno e de Exportação +65 - Crédito Presumido - Operação de Aquisição Vinculada a Receitas Não-Tributadas no Mercado Interno e de Exportação +66 - Crédito Presumido - Operação de Aquisição Vinculada a Receitas Tributadas e Não-Tributadas no Mercado Interno, e de Exportação +67 - Crédito Presumido - Outras Operações +70 - Operação de Aquisição sem Direito a Crédito +71 - Operação de Aquisição com Isenção +72 - Operação de Aquisição com Suspensão +73 - Operação de Aquisição a Alíquota Zero +74 - Operação de Aquisição sem Incidência da Contribuição +75 - Operação de Aquisição por Substituição Tributária +98 - Outras Operações de Entrada +99 - Outras Operações. + + + + + + Código de Situação Tributária do COFINS: +49 - Outras Operações de Saída +50 - Operação com Direito a Crédito - Vinculada Exclusivamente a Receita Tributada no Mercado Interno +51 - Operação com Direito a Crédito – Vinculada Exclusivamente a Receita Não Tributada no Mercado Interno +52 - Operação com Direito a Crédito - Vinculada Exclusivamente a Receita de Exportação +53 - Operação com Direito a Crédito - Vinculada a Receitas Tributadas e Não-Tributadas no Mercado Interno +54 - Operação com Direito a Crédito - Vinculada a Receitas Tributadas no Mercado Interno e de Exportação +55 - Operação com Direito a Crédito - Vinculada a Receitas Não-Tributadas no Mercado Interno e de Exportação +56 - Operação com Direito a Crédito - Vinculada a Receitas Tributadas e Não-Tributadas no Mercado Interno, e de Exportação +60 - Crédito Presumido - Operação de Aquisição Vinculada Exclusivamente a Receita Tributada no Mercado Interno +61 - Crédito Presumido - Operação de Aquisição Vinculada Exclusivamente a Receita Não-Tributada no Mercado Interno +62 - Crédito Presumido - Operação de Aquisição Vinculada Exclusivamente a Receita de Exportação +63 - Crédito Presumido - Operação de Aquisição Vinculada a Receitas Tributadas e Não-Tributadas no Mercado Interno +64 - Crédito Presumido - Operação de Aquisição Vinculada a Receitas Tributadas no Mercado Interno e de Exportação +65 - Crédito Presumido - Operação de Aquisição Vinculada a Receitas Não-Tributadas no Mercado Interno e de Exportação +66 - Crédito Presumido - Operação de Aquisição Vinculada a Receitas Tributadas e Não-Tributadas no Mercado Interno, e de Exportação +67 - Crédito Presumido - Outras Operações +70 - Operação de Aquisição sem Direito a Crédito +71 - Operação de Aquisição com Isenção +72 - Operação de Aquisição com Suspensão +73 - Operação de Aquisição a Alíquota Zero +74 - Operação de Aquisição sem Incidência da Contribuição +75 - Operação de Aquisição por Substituição Tributária +98 - Outras Operações de Entrada +99 - Outras Operações. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Valor da BC do COFINS + + + + + Alíquota do COFINS (em percentual) + + + + + + + Quantidade Vendida (NT2011/004) + + + + + Alíquota do COFINS (em reais) (NT2011/004) + + + + + + + Valor do COFINS + + + + + + + + + + + Dados do COFINS da +Substituição Tributaria; + + + + + + + + Valor da BC do COFINS ST + + + + + Alíquota do COFINS ST(em percentual) + + + + + + + Quantidade Vendida + + + + + Alíquota do COFINS ST(em reais) + + + + + + + Valor do COFINS ST + + + + + Indica se o valor da COFINS ST compõe o valor total da NFe + + + + + + + + + + + + + + + Grupo a ser informado nas vendas interestarduais para consumidor final, não contribuinte de ICMS + + + + + + Valor da Base de Cálculo do ICMS na UF do destinatário. + + + + + Valor da Base de Cálculo do FCP na UF do destinatário. + + + + + Percentual adicional inserido na alíquota interna da UF de destino, relativo ao Fundo de Combate à Pobreza (FCP) naquela UF. + + + + + Alíquota adotada nas operações internas na UF do destinatário para o produto / mercadoria. + + + + + Alíquota interestadual das UF envolvidas: - 4% alíquota interestadual para produtos importados; - 7% para os Estados de origem do Sul e Sudeste (exceto ES), destinado para os Estados do Norte e Nordeste ou ES; - 12% para os demais casos. + + + + + + + + + + + + + Percentual de partilha para a UF do destinatário: - 40% em 2016; - 60% em 2017; - 80% em 2018; - 100% a partir de 2019. + + + + + Valor do ICMS relativo ao Fundo de Combate à Pobreza (FCP) da UF de destino. + + + + + Valor do ICMS de partilha para a UF do destinatário. + + + + + Valor do ICMS de partilha para a UF do remetente. Nota: A partir de 2019, este valor será zero. + + + + + + + + + + + + + + Percentual de mercadoria devolvida + + + + + Informação de IPI devolvido + + + + + + Valor do IPI devolvido + + + + + + + + + + + Informações adicionais do produto (norma referenciada, informações complementares, etc) + + + + + + + + + + + Grupo de observações de uso livre (para o item da NF-e) + + + + + + Grupo de observações de uso livre (para o item da NF-e) + + + + + + + + + + + + + + + + + + + + + + + + + Grupo de observações de uso livre (para o item da NF-e) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Número do item do NF + + + + + + + + + + + + + Dados dos totais da NF-e + + + + + + Totais referentes ao ICMS + + + + + + BC do ICMS + + + + + Valor Total do ICMS + + + + + Valor Total do ICMS desonerado + + + + + Valor total do ICMS relativo ao Fundo de Combate à Pobreza (FCP) para a UF de destino. + + + + + Valor total do ICMS de partilha para a UF do destinatário + + + + + Valor total do ICMS de partilha para a UF do remetente + + + + + Valor Total do FCP (Fundo de Combate à Pobreza). + + + + + BC do ICMS ST + + + + + Valor Total do ICMS ST + + + + + Valor Total do FCP (Fundo de Combate à Pobreza) retido por substituição tributária. + + + + + Valor Total do FCP (Fundo de Combate à Pobreza) retido anteriormente por substituição tributária. + + + + + Valor Total dos produtos e serviços + + + + + Valor Total do Frete + + + + + Valor Total do Seguro + + + + + Valor Total do Desconto + + + + + Valor Total do II + + + + + Valor Total do IPI + + + + + Valor Total do IPI devolvido. Deve ser informado quando preenchido o Grupo Tributos Devolvidos na emissão de nota finNFe=4 (devolução) nas operações com não contribuintes do IPI. Corresponde ao total da soma dos campos id: UA04. + + + + + Valor do PIS + + + + + Valor do COFINS + + + + + Outras Despesas acessórias + + + + + Valor Total da NF-e + + + + + Valor estimado total de impostos federais, estaduais e municipais + + + + + + + + Totais referentes ao ISSQN + + + + + + Valor Total dos Serviços sob não-incidência ou não tributados pelo ICMS + + + + + Base de Cálculo do ISS + + + + + Valor Total do ISS + + + + + Valor do PIS sobre serviços + + + + + Valor do COFINS sobre serviços + + + + + Data da prestação do serviço (AAAA-MM-DD) + + + + + Valor dedução para redução da base de cálculo + + + + + Valor outras retenções + + + + + Valor desconto incondicionado + + + + + Valor desconto condicionado + + + + + Valor Total Retenção ISS + + + + + Código do regime especial de tributação + + + + + + + + + + + + + + + + + + + Retenção de Tributos Federais + + + + + + Valor Retido de PIS + + + + + Valor Retido de COFINS + + + + + Valor Retido de CSLL + + + + + Base de Cálculo do IRRF + + + + + Valor Retido de IRRF + + + + + Base de Cálculo da Retenção da Previdêncica Social + + + + + Valor da Retenção da Previdêncica Social + + + + + + + + + + + Dados dos transportes da NF-e + + + + + + Modalidade do frete +0- Contratação do Frete por conta do Remetente (CIF); +1- Contratação do Frete por conta do destinatário/remetente (FOB); +2- Contratação do Frete por conta de terceiros; +3- Transporte próprio por conta do remetente; +4- Transporte próprio por conta do destinatário; +9- Sem Ocorrência de transporte. + + + + + + + + + + + + + + + + Dados do transportador + + + + + + + CNPJ do transportador + + + + + CPF do transportador + + + + + + Razão Social ou nome do transportador + + + + + + + + + + + Inscrição Estadual (v2.0) + + + + + Endereço completo + + + + + + + + + + + Nome do munícipio + + + + + + + + + + + Sigla da UF + + + + + + + + Dados da retenção ICMS do Transporte + + + + + + Valor do Serviço + + + + + BC da Retenção do ICMS + + + + + Alíquota da Retenção + + + + + Valor do ICMS Retido + + + + + Código Fiscal de Operações e Prestações + + + + + + + + + + + Código do Município de Ocorrência do Fato Gerador (utilizar a tabela do IBGE) + + + + + + + + + + Dados do veículo + + + + + Dados do reboque/Dolly (v2.0) + + + + + + Identificação do vagão (v2.0) + + + + + + + + + + + Identificação da balsa (v2.0) + + + + + + + + + + + + Dados dos volumes + + + + + + Quantidade de volumes transportados + + + + + + + + + + + Espécie dos volumes transportados + + + + + + + + + + + Marca dos volumes transportados + + + + + + + + + + + Numeração dos volumes transportados + + + + + + + + + + + Peso líquido (em kg) + + + + + Peso bruto (em kg) + + + + + + + + Número dos Lacres + + + + + + + + + + + + + + + + + + + + Dados da cobrança da NF-e + + + + + + Dados da fatura + + + + + + Número da fatura + + + + + + + + + + + Valor original da fatura + + + + + Valor do desconto da fatura + + + + + Valor líquido da fatura + + + + + + + + Dados das duplicatas NT 2011/004 + + + + + + Número da duplicata + + + + + + + + + + + Data de vencimento da duplicata (AAAA-MM-DD) + + + + + Valor da duplicata + + + + + + + + + + + Dados de Pagamento. Obrigatório apenas para (NFC-e) NT 2012/004 + + + + + + Grupo de detalhamento da forma de pagamento. + + + + + + Indicador da Forma de Pagamento:0-Pagamento à Vista;1-Pagamento à Prazo; + + + + + + + + + + + + Forma de Pagamento: + + + + + + + + + + + Descrição do Meio de Pagamento + + + + + + + + + + + Valor do Pagamento. Esta tag poderá ser omitida quando a tag tPag=90 (Sem Pagamento), caso contrário deverá ser preenchida. + + + + + Grupo de Cartões + + + + + + Tipo de Integração do processo de pagamento com o sistema de automação da empresa/ + 1=Pagamento integrado com o sistema de automação da empresa Ex. equipamento TEF , Comercio Eletronico + 2=Pagamento não integrado com o sistema de automação da empresa Ex: equipamento POS + + + + + + + + + + + + CNPJ da instituição de pagamento + + + + + Bandeira da operadora de cartão + + + + + + + + + + + Número de autorização da operação cartão de crédito/débito + + + + + + + + + + + + + + + + + Valor do Troco. + + + + + + + + Grupo de Informações do Intermediador da Transação + + + + + + CNPJ do Intermediador da Transação (agenciador, plataforma de delivery, marketplace e similar) de serviços e de negócios. + + + + + Identificador cadastrado no intermediador + + + + + + + + + + + + + + Informações adicionais da NF-e + + + + + + Informações adicionais de interesse do Fisco (v2.0) + + + + + + + + + + + Informações complementares de interesse do Contribuinte + + + + + + + + + + + Campo de uso livre do contribuinte +informar o nome do campo no atributo xCampo +e o conteúdo do campo no xTexto + + + + + + + + + + + + + + + + + + + + + + + + + Campo de uso exclusivo do Fisco +informar o nome do campo no atributo xCampo +e o conteúdo do campo no xTexto + + + + + + + + + + + + + + + + + + + + + + + + + Grupo de informações do processo referenciado + + + + + + Indentificador do processo ou ato +concessório + + + + + + + + + + + Origem do processo, informar com: +0 - SEFAZ; +1 - Justiça Federal; +2 - Justiça Estadual; +3 - Secex/RFB; +9 - Outros + + + + + + + + + + + + + + + Tipo do ato concessório + Para origem do Processo na SEFAZ (indProc=0), informar o +tipo de ato concessório: +08=Termo de Acordo; +10=Regime Especial; +12=Autorização específica; + + + + + + + + + + + + + + + + + + + Informações de exportação + + + + + + Sigla da UF de Embarque ou de transposição de fronteira + + + + + Local de Embarque ou de transposição de fronteira + + + + + + + + + + + Descrição do local de despacho + + + + + + + + + + + + + + Informações de compras (Nota de Empenho, Pedido e Contrato) + + + + + + Informação da Nota de Empenho de compras públicas (NT2011/004) + + + + + + + + + + + Informação do pedido + + + + + + + + + + + Informação do contrato + + + + + + + + + + + + + + Informações de registro aquisições de cana + + + + + + Identificação da safra + + + + + + + + + + + Mês e Ano de Referência, formato: MM/AAAA + + + + + + + + + + + Fornecimentos diários + + + + + + Quantidade em quilogramas - peso líquido + + + + + + Número do dia + + + + + + + + + + + + + + + + + Total do mês + + + + + Total Anterior + + + + + Total Geral + + + + + Deduções - Taxas e Contribuições + + + + + + Descrição da Dedução + + + + + + + + + + + valor da dedução + + + + + + + + Valor dos fornecimentos + + + + + Valor Total das Deduções + + + + + Valor Líquido dos fornecimentos + + + + + + + + Informações do Responsável Técnico pela emissão do DF-e + + + + + Grupo para informações da solicitação da NFF + + + + + + Solicitação do pedido de emissão da NFF + + + + + + + + + + + + + + + Versão do leiaute (v4.00) + + + + + PL_005d - 11/08/09 - validação do Id + + + + + + + + + + + + + + + + Informações suplementares Nota Fiscal + + + + + + Texto com o QR-Code impresso no DANFE NFC-e + + + + + + + + + + + + + Informar a URL da "Consulta por chave de acesso da NFC-e". A mesma URL que deve estar informada no DANFE NFC-e para consulta por chave de acesso. + + + + + + + + + + + + + + + + + Tipo Protocolo de status resultado do processamento da NF-e + + + + + Dados do protocolo de status + + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Versão do Aplicativo que processou a NF-e + + + + + Chaves de acesso da NF-e, compostas por: UF do emitente, AAMM da emissão da NFe, CNPJ do emitente, modelo, série e número da NF-e e código numérico+DV. + + + + + Data e hora de processamento, no formato AAAA-MM-DDTHH:MM:SSTZD. Deve ser preenchida com data e hora da gravação no Banco em caso de Confirmação. Em caso de Rejeição, com data e hora do recebimento do Lote de NF-e enviado. + + + + + Número do Protocolo de Status da NF-e. 1 posição (1 – Secretaria de Fazenda Estadual 2 – Receita Federal); 2 - códiga da UF - 2 posições ano; 10 seqüencial no ano. + + + + + Digest Value da NF-e processada. Utilizado para conferir a integridade da NF-e original. + + + + + Código do status da mensagem enviada. + + + + + Descrição literal do status do serviço solicitado. + + + + + + Código da Mensagem. + + + + + + + + + + + Mensagem da SEFAZ para o emissor. + + + + + + + + + + + + + + + + + + + + Tipo Pedido de Concessão de Autorização da Nota Fiscal Eletrônica + + + + + + Indicador de processamento síncrono. 0=NÃO; 1=SIM=Síncrono + + + + + + + + + + + + + + + + Tipo Retorno do Pedido de Autorização da Nota Fiscal Eletrônica + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Versão do Aplicativo que recebeu o Lote. + + + + + Código do status da mensagem enviada. + + + + + Descrição literal do status do serviço solicitado. + + + + + código da UF de atendimento + + + + + Data e hora do recebimento, no formato AAAA-MM-DDTHH:MM:SSTZD + + + + + + Dados do Recibo do Lote + + + + + + Número do Recibo + + + + + Tempo médio de resposta do serviço (em segundos) dos últimos 5 minutos + + + + + + + + Protocolo de status resultado do processamento sincrono da NFC-e + + + + + + + + + Tipo Pedido de Consulta do Recido do Lote de Notas Fiscais Eletrônicas + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Número do Recibo + + + + + + + + Tipo Retorno do Pedido de Consulta do Recido do Lote de Notas Fiscais Eletrônicas + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Versão do Aplicativo que processou a NF-e + + + + + Número do Recibo Consultado + + + + + Código do status da mensagem enviada. + + + + + Descrição literal do status do serviço solicitado. + + + + + código da UF de atendimento + + + + + Data e hora de processamento, no formato AAAA-MM-DDTHH:MM:SSTZD. Em caso de Rejeição, com data e hora do recebimento do Lote de NF-e enviado. + + + + + + Código da Mensagem (v2.0) +alterado para tamanho variavel 1-4. (NT2011/004) + + + + + + + + + + + Mensagem da SEFAZ para o emissor. (v2.0) + + + + + + + + + + + + Protocolo de status resultado do processamento da NF-e + + + + + + + + Tipo da NF-e processada + + + + + + + + + + Tipo Dados do Endereço // 24/10/08 - tamanho mínimo + + + + + Logradouro + + + + + + + + + + + Número + + + + + + + + + + + Complemento + + + + + + + + + + + Bairro + + + + + + + + + + + Código do município (utilizar a tabela do IBGE), informar 9999999 para operações com o exterior. + + + + + Nome do município, informar EXTERIOR para operações com o exterior. + + + + + + + + + + + Sigla da UF, informar EX para operações com o exterior. + + + + + CEP + + + + + + + + + + + Código de Pais + + + + + + + + + + + Nome do país + + + + + + + + + + + Telefone, preencher com Código DDD + número do telefone , nas operações com exterior é permtido informar o código do país + código da localidade + número do telefone + + + + + + + + + + + + + Tipo Dados do Endereço do Emitente // 24/10/08 - desmembrado / tamanho mínimo + + + + + Logradouro + + + + + + + + + + + Número + + + + + + + + + + + Complemento + + + + + + + + + + + Bairro + + + + + + + + + + + Código do município + + + + + Nome do município + + + + + + + + + + + Sigla da UF + + + + + CEP - NT 2011/004 + + + + + + + + + + + Código do país + + + + + + + + + + Nome do país + + + + + + + + + + + Preencher com Código DDD + número do telefone (v.2.0) + + + + + + + + + + + + + Tipo Dados do Local de Retirada ou Entrega // 24/10/08 - tamanho mínimo // v2.0 + + + + + + CNPJ + + + + + CPF (v2.0) + + + + + + Razão Social ou Nome do Expedidor/Recebedor + + + + + + + + + + + Logradouro + + + + + + + + + + + Número + + + + + + + + + + + Complemento + + + + + + + + + + + Bairro + + + + + + + + + + + Código do município (utilizar a tabela do IBGE) + + + + + Nome do município + + + + + + + + + + + Sigla da UF + + + + + CEP + + + + + + + + + + + Código de Pais + + + + + + + + + + + Nome do país + + + + + + + + + + + Telefone, preencher com Código DDD + número do telefone , nas operações com exterior é permtido informar o código do país + código da localidade + número do telefone + + + + + + + + + + + Informar o e-mail do expedidor/Recebedor. O campo pode ser utilizado para informar o e-mail de recepção da NF-e indicada pelo expedidor + + + + + + + + + + + + Inscrição Estadual (v2.0) + + + + + + + Grupo de informações do responsável técnico pelo sistema de emissão de DF-e + + + + + CNPJ + + + + + Informar o nome da pessoa a ser contatada na empresa desenvolvedora do sistema utilizado na emissão do documento fiscal eletrônico. + + + + + + + + + + + Informar o e-mail da pessoa a ser contatada na empresa desenvolvedora do sistema. + + + + + + + + + + + + Informar o telefone da pessoa a ser contatada na empresa desenvolvedora do sistema. Preencher com o Código DDD + número do telefone. + + + + + + + + + + + + Identificador do CSRT utilizado para montar o hash do CSRT + + + + + + + + + + + O hashCSRT é o resultado da função hash (SHA-1 – Base64) do CSRT fornecido pelo fisco mais a Chave de Acesso da NFe. + + + + + + + + + + + + + Tipo Dados do Veículo + + + + + Placa do veículo (NT2011/004) + + + + + + + + + + + Sigla da UF + + + + + Registro Nacional de Transportador de Carga (ANTT) + + + + + + + + + + + + + Tipo Origem da mercadoria CST ICMS origem da mercadoria: 0-Nacional exceto as indicadas nos códigos 3, 4, 5 e 8; +1-Estrangeira - Importação direta; 2-Estrangeira - Adquirida no mercado interno; 3-Nacional, conteudo superior 40% e inferior ou igual a 70%; 4-Nacional, processos produtivos básicos; 5-Nacional, conteudo inferior 40%; 6-Estrangeira - Importação direta, com similar nacional, lista CAMEX; 7-Estrangeira - mercado interno, sem simular,lista CAMEX;8-Nacional, Conteúdo de Importação superior a 70%. + + + + + + + + + + + + + + + + + Tipo Finalidade da NF-e (1=Normal; 2=Complementar; 3=Ajuste; 4=Devolução/Retorno) + + + + + + + + + + + + Tipo processo de emissão da NF-e + + + + + + + + + + + + Tipo Código da Lista de Serviços LC 116/2003 + + + + + + + + + Tipo Identificação de Lote + + + + + + + + + Tipo Versão da NF-e - 4.00 + + + + + + + + + Identificador único (Globally Unique Identifier) + + + + + + + + + Tipo: Dados do IPI + + + + + CNPJ do produtor da mercadoria, quando diferente do emitente. Somente para os casos de exportação direta ou indireta. + + + + + Código do selo de controle do IPI + + + + + + + + + + + Quantidade de selo de controle do IPI + + + + + + + + + + + Código de Enquadramento Legal do IPI (tabela a ser criada pela RFB) + + + + + + + + + + + + + + + Código da Situação Tributária do IPI: +00-Entrada com recuperação de crédito +49 - Outras entradas +50-Saída tributada +99-Outras saídas + + + + + + + + + + + + + + + + Valor da BC do IPI + + + + + Alíquota do IPI + + + + + + + Quantidade total na unidade padrão para tributação + + + + + Valor por Unidade Tributável. Informar o valor do imposto Pauta por unidade de medida. + + + + + + + Valor do IPI + + + + + + + + + + + Código da Situação Tributária do IPI: +01-Entrada tributada com alíquota zero +02-Entrada isenta +03-Entrada não-tributada +04-Entrada imune +05-Entrada com suspensão +51-Saída tributada com alíquota zero +52-Saída isenta +53-Saída não-tributada +54-Saída imune +55-Saída com suspensão + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/rascunho/Schemas/leiauteRemIndus_v1.00.xsd b/rascunho/Schemas/leiauteRemIndus_v1.00.xsd new file mode 100644 index 0000000..d8cb9e6 --- /dev/null +++ b/rascunho/Schemas/leiauteRemIndus_v1.00.xsd @@ -0,0 +1,382 @@ + + + + + + + Tipo Evento + + + + + + + + Código do órgão de recepção do Evento. Utilizar a Tabela do IBGE extendida, utilizar 90 para identificar o Ambiente Nacional + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Identificação do autor do evento + + + + CNPJ + + + + + CPF + + + + + + Chave de Acesso da NF-e vinculada ao evento + + + + + Data e Hora do Evento, formato UTC (AAAA-MM-DDThh:mm:ssTZD, onde TZD = +hh:mm ou -hh:mm) + + + + + Tipo do Evento: + 111500 - Pedido de Prorrogação Primeiro Prazo + 111501 - Pedido de Prorrogação Segundo Prazo + 111502 - Pedido de Cancelamento Primeiro Prazo + 111503 - Pedido de Cancelamento Segundo Prazo + + + + + + + + + + + + + + + + Seqüencial do evento para o mesmo tipo de evento. Para maioria dos eventos será 1, nos casos em que possa existir mais de um evento, como é o caso da carta de correção, o autor do evento deve numerar de forma seqüencial. + + + + + + + + + + + Versão do Tipo do Evento + + + + + + + + + + + + + informações específicas do evento + + + + + + + + + + Identificador da TAG a ser assinada, a regra de formação do Id é: +“ID” + tpEvento + chave da NF-e + nSeqEvento + + + + + + + + + + + + + + + + Tipo retorno do Evento + + + + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Versão do Aplicativo que recebeu o Evento + + + + + Código do órgão de recepção do Evento. Utilizar a Tabela do IBGE extendida, utilizar 90 para identificar o Ambiente Nacional + + + + + Código do status da registro do Evento + + + + + Descrição literal do status do registro do Evento + + + + + Chave de Acesso NF-e vinculada + + + + + Tipo do Evento vinculado + + + + + + + + + + + Descrição do Evento + + + + + + + + + + + Seqüencial do evento + + + + + + + + + + + Código do órgão de autor do Evento. Utilizar a Tabela do IBGE extendida, utilizar 90 para identificar o Ambiente Nacional + + + + + Identificação do destinatpario da NF-e + + + + CNPJ Destinatário + + + + + CPF Destiantário + + + + + + email do destinatário + + + + + + + + + + + Data e Hora de registro do evento formato UTC AAAA-MM-DDTHH:MM:SSTZD + + + + + + + + + + + Número do protocolo de registro do evento + + + + + + + + + + + + + + + + + + + Tipo Lote de Envio + + + + + + + + + + + + + + + + + Tipo Retorno de Lote de Envio + + + + + + + + + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Versão do Aplicativo que recebeu o Evento + + + + + Código do òrgao que registrou o Evento + + + + + Código do status da registro do Evento + + + + + Descrição literal do status do registro do Evento + + + + + + + + + Tipo procEvento + + + + + + + + + + Tipo Versão do EnvEvento + + + + + + + + + Tipo Versão do Evento + + + + + + + + + Tipo Código de orgão (UF da tabela do IBGE + 90 RFB) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/rascunho/Schemas/leiauteSuframaInternaliza_v1.00.xsd b/rascunho/Schemas/leiauteSuframaInternaliza_v1.00.xsd new file mode 100644 index 0000000..4c806a5 --- /dev/null +++ b/rascunho/Schemas/leiauteSuframaInternaliza_v1.00.xsd @@ -0,0 +1,642 @@ + + + + + + Tipo Evento + + + + + + + + Código do órgão de recepção do Evento. Utilizar a Tabela do IBGE extendida, utilizar 90 para identificar o Ambiente Nacional + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Identificação do autor do evento + + + + CNPJ + + + + + CPF + + + + + + Chave de Acesso da NF-e vinculada ao evento + + + + + Data de emissão no formato UTC. AAAA-MM-DDThh:mm:ssTZD + + + + + Tipo do Evento + + + + + + + + + + + + Seqüencial do evento para o mesmo tipo de evento. Para maioria dos eventos será 1, nos casos em que possa existir mais de um evento, como é o caso da carta de correção, o autor do evento deve numerar de forma seqüencial. + + + + + + + + + + + Versão do Tipo do Evento + + + + + + + + + + + Schema XML de validação do evento do Confirmação de Internalização da Mercadoria na SUFRAMA 990910 + + + + + + Descrição do Evento - “Confirmação de Internalização da Mercadoria na SUFRAMA” + + + + + + + + + + + Número do PIN-e - Protocolo de Internalização de Mercadoria Nacional eletronico + + + + + + + + + + + Data de ocorrência da vistoria, formato UTC (AAAA-MM-DDThh:mm:ssTZD, onde TZD = +hh:mm ou -hh:mm) + + + + + Localidade onde ocorreu a vistoria + + + + + + + + + + + Nome Posto do ponto onde ocorreu a vistoria + + + + + + + + + + + Histórico da ocorrência, se existir. + + + + + + + + + + + + + + + + + + + + + + + Identificador da TAG a ser assinada, a regra de formação do Id é: +“ID” + tpEvento + chave da NF-e + nSeqEvento + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tipo Versão do Evento + + + + + + + + + Tipo retorno do Evento + + + + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Versão do Aplicativo que recebeu o Evento + + + + + Código do órgão de recepção do Evento. Utilizar a Tabela do IBGE extendida, utilizar 90 para identificar o Ambiente Nacional + + + + + Código do status da registro do Evento + + + + + Descrição literal do status do registro do Evento + + + + + Chave de Acesso NF-e vinculada + + + + + Tipo do Evento vinculado + + + + + + + + + + + Descrição do Evento + + + + + + + + + + + Seqüencial do evento + + + + + + + + + + + Identificação do destinatário da NF-e + + + + CNPJ Destinatário + + + + + CPF Destiantário + + + + + + email do destinatário + + + + + + + + + + + Data e Hora de do recebimento do evento ou do registro do evento formato UTC AAAA-MM-DDThh:mm:ssTZD. + + + + + + + + + + + Número do protocolo de registro do evento + + + + + + + + + + + + + + + + + + + Tipo Lote de Envio + + + + + + + + + + + + + + + + + Tipo Versão do EnvEvento + + + + + + + + + Tipo Retorno de Lote de Envio + + + + + + + + + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Versão do Aplicativo que recebeu o Evento + + + + + Código do òrgao que registrou o Evento + + + + + Código do status da registro do Evento + + + + + Descrição literal do status do registro do Evento + + + + + + + + + Tipo procEvento + + + + + + + + + + Tipo Código de orgão (UF da tabela do IBGE + 90 RFB) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/rascunho/Schemas/leiauteSuframaVistoria_v1.00.xsd b/rascunho/Schemas/leiauteSuframaVistoria_v1.00.xsd new file mode 100644 index 0000000..3b7d81e --- /dev/null +++ b/rascunho/Schemas/leiauteSuframaVistoria_v1.00.xsd @@ -0,0 +1,648 @@ + + + + + + Tipo Evento + + + + + + + + Código do órgão de recepção do Evento. Utilizar a Tabela do IBGE extendida, utilizar 90 para identificar o Ambiente Nacional + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Identificação do autor do evento + + + + CNPJ + + + + + CPF + + + + + + Chave de Acesso da NF-e vinculada ao evento + + + + + Data de emissão no formato UTC. AAAA-MM-DDThh:mm:ssTZD + + + + + Tipo do Evento + + + + + + + + + + + + Seqüencial do evento para o mesmo tipo de evento. Para maioria dos eventos será 1, nos casos em que possa existir mais de um evento, como é o caso da carta de correção, o autor do evento deve numerar de forma seqüencial. + + + + + + + + + + + Versão do Tipo do Evento + + + + + + + + + + + Schema XML de validação do evento doVistoria SUFRAMA 990900 + + + + + + Descrição do Evento - “Vistoria SUFRAMA” + + + + + + + + + + + Número do PIN-e - Protocolo de Internalização de Mercadoria Nacional eletronico + + + + + + + + + + + Data de ocorrência da vistoria, formato UTC (AAAA-MM-DDThh:mm:ssTZD, onde TZD = +hh:mm ou -hh:mm) + + + + + + + + + + + Localidade onde ocorreu a vistoria + + + + + + + + + + + Nome Posto do ponto onde ocorreu a vistoria + + + + + + + + + + + Histórico da ocorrência, se existir. + + + + + + + + + + + + + + + + + + + + + + + Identificador da TAG a ser assinada, a regra de formação do Id é: +“ID” + tpEvento + chave da NF-e + nSeqEvento + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tipo Versão do Evento + + + + + + + + + Tipo retorno do Evento + + + + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Versão do Aplicativo que recebeu o Evento + + + + + Código do órgão de recepção do Evento. Utilizar a Tabela do IBGE extendida, utilizar 90 para identificar o Ambiente Nacional + + + + + Código do status da registro do Evento + + + + + Descrição literal do status do registro do Evento + + + + + Chave de Acesso NF-e vinculada + + + + + Tipo do Evento vinculado + + + + + + + + + + + Descrição do Evento + + + + + + + + + + + Seqüencial do evento + + + + + + + + + + + Identificação do destinatário da NF-e + + + + CNPJ Destinatário + + + + + CPF Destiantário + + + + + + email do destinatário + + + + + + + + + + + Data e Hora de do recebimento do evento ou do registro do evento formato UTC AAAA-MM-DDThh:mm:ssTZD. + + + + + + + + + + + Número do protocolo de registro do evento + + + + + + + + + + + + + + + + + + + Tipo Lote de Envio + + + + + + + + + + + + + + + + + Tipo Versão do EnvEvento + + + + + + + + + Tipo Retorno de Lote de Envio + + + + + + + + + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Versão do Aplicativo que recebeu o Evento + + + + + Código do òrgao que registrou o Evento + + + + + Código do status da registro do Evento + + + + + Descrição literal do status do registro do Evento + + + + + + + + + Tipo procEvento + + + + + + + + + + Tipo Código de orgão (UF da tabela do IBGE + 90 RFB) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/rascunho/Schemas/nfe_v3.10.xsd b/rascunho/Schemas/nfe_v3.10.xsd new file mode 100644 index 0000000..9e435ee --- /dev/null +++ b/rascunho/Schemas/nfe_v3.10.xsd @@ -0,0 +1,9 @@ + + + + + + Nota Fiscal Eletrônica + + + \ No newline at end of file diff --git a/rascunho/Schemas/nfe_v4.00.xsd b/rascunho/Schemas/nfe_v4.00.xsd new file mode 100644 index 0000000..389c95d --- /dev/null +++ b/rascunho/Schemas/nfe_v4.00.xsd @@ -0,0 +1,9 @@ + + + + + + Nota Fiscal Eletrônica + + + diff --git a/rascunho/Schemas/procAverbNFe_v1.00.xsd b/rascunho/Schemas/procAverbNFe_v1.00.xsd new file mode 100644 index 0000000..d17a1ad --- /dev/null +++ b/rascunho/Schemas/procAverbNFe_v1.00.xsd @@ -0,0 +1,10 @@ + + + + + + + Schema XML de validação do proc do evento de averbação + + + diff --git a/rascunho/Schemas/procCCeNFe_v1.00.xsd b/rascunho/Schemas/procCCeNFe_v1.00.xsd new file mode 100644 index 0000000..19e27f1 --- /dev/null +++ b/rascunho/Schemas/procCCeNFe_v1.00.xsd @@ -0,0 +1,10 @@ + + + + + + + Schema XML de validação do proc Carta de Correção da NFe + + + diff --git a/rascunho/Schemas/procComprovanteEntregaNFe_v1.00.xsd b/rascunho/Schemas/procComprovanteEntregaNFe_v1.00.xsd new file mode 100644 index 0000000..74d2b24 --- /dev/null +++ b/rascunho/Schemas/procComprovanteEntregaNFe_v1.00.xsd @@ -0,0 +1,10 @@ + + + + + + + Schema XML de validação do proc Comprovante de Entrega de NFe + + + diff --git a/rascunho/Schemas/procConfRecebtoNFe_v1.00.xsd b/rascunho/Schemas/procConfRecebtoNFe_v1.00.xsd new file mode 100644 index 0000000..76bd712 --- /dev/null +++ b/rascunho/Schemas/procConfRecebtoNFe_v1.00.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de validação do proc Confirmação de Recebimento + + + diff --git a/rascunho/Schemas/procEPEC_v1.00.xsd b/rascunho/Schemas/procEPEC_v1.00.xsd new file mode 100644 index 0000000..474c578 --- /dev/null +++ b/rascunho/Schemas/procEPEC_v1.00.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de validação do proc Evento de emissão prévia em contingência + + + \ No newline at end of file diff --git a/rascunho/Schemas/procEventoAtorInteressado_v1.00.xsd b/rascunho/Schemas/procEventoAtorInteressado_v1.00.xsd new file mode 100644 index 0000000..28b9460 --- /dev/null +++ b/rascunho/Schemas/procEventoAtorInteressado_v1.00.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de validação do proc evento Ator Interessado + + + diff --git a/rascunho/Schemas/procEventoCancEntregaNFe_v1.00.xsd b/rascunho/Schemas/procEventoCancEntregaNFe_v1.00.xsd new file mode 100644 index 0000000..99e4def --- /dev/null +++ b/rascunho/Schemas/procEventoCancEntregaNFe_v1.00.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de validação do proc do evento de Cancelamento do Comprovante de Entrega da NFe + + + diff --git a/rascunho/Schemas/procEventoCancNFe_v1.00.xsd b/rascunho/Schemas/procEventoCancNFe_v1.00.xsd new file mode 100644 index 0000000..2533308 --- /dev/null +++ b/rascunho/Schemas/procEventoCancNFe_v1.00.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de validação do proc Cancelamento + + + diff --git a/rascunho/Schemas/procEventoCancSubst_v1.00.xsd b/rascunho/Schemas/procEventoCancSubst_v1.00.xsd new file mode 100644 index 0000000..6cd6de6 --- /dev/null +++ b/rascunho/Schemas/procEventoCancSubst_v1.00.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de validação do proc Cancelamento + + + diff --git a/rascunho/Schemas/procEventoEntregaNFe_v1.00.xsd b/rascunho/Schemas/procEventoEntregaNFe_v1.00.xsd new file mode 100644 index 0000000..fdaa0f6 --- /dev/null +++ b/rascunho/Schemas/procEventoEntregaNFe_v1.00.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de validação do proc Comprovante de Entrega da NFe + + + diff --git a/rascunho/Schemas/procEventoNFe_v1.00.xsd b/rascunho/Schemas/procEventoNFe_v1.00.xsd new file mode 100644 index 0000000..fc6cf6a --- /dev/null +++ b/rascunho/Schemas/procEventoNFe_v1.00.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de validação do proc Evento NFe + + + diff --git a/rascunho/Schemas/procEventoNFe_v99.99.xsd b/rascunho/Schemas/procEventoNFe_v99.99.xsd new file mode 100644 index 0000000..4a20231 --- /dev/null +++ b/rascunho/Schemas/procEventoNFe_v99.99.xsd @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + Versão do leiaute + + + + + + + + + + + diff --git a/rascunho/Schemas/procInutNFe_v3.10.xsd b/rascunho/Schemas/procInutNFe_v3.10.xsd new file mode 100644 index 0000000..d15d657 --- /dev/null +++ b/rascunho/Schemas/procInutNFe_v3.10.xsd @@ -0,0 +1,9 @@ + + + + + + Pedido de inutilização de númeração de NF-e processado + + + \ No newline at end of file diff --git a/rascunho/Schemas/procInutNFe_v4.00.xsd b/rascunho/Schemas/procInutNFe_v4.00.xsd new file mode 100644 index 0000000..e987b12 --- /dev/null +++ b/rascunho/Schemas/procInutNFe_v4.00.xsd @@ -0,0 +1,9 @@ + + + + + + Pedido de inutilização de númeração de NF-e processado + + + diff --git a/rascunho/Schemas/procNFe_v3.10.xsd b/rascunho/Schemas/procNFe_v3.10.xsd new file mode 100644 index 0000000..214ef36 --- /dev/null +++ b/rascunho/Schemas/procNFe_v3.10.xsd @@ -0,0 +1,9 @@ + + + + + + NF-e processada + + + \ No newline at end of file diff --git a/rascunho/Schemas/procNFe_v4.00.xsd b/rascunho/Schemas/procNFe_v4.00.xsd new file mode 100644 index 0000000..0ab7830 --- /dev/null +++ b/rascunho/Schemas/procNFe_v4.00.xsd @@ -0,0 +1,9 @@ + + + + + + NF-e processada + + + diff --git a/rascunho/Schemas/procRemIndus_v1.00.xsd b/rascunho/Schemas/procRemIndus_v1.00.xsd new file mode 100644 index 0000000..5f7586e --- /dev/null +++ b/rascunho/Schemas/procRemIndus_v1.00.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de validacao do proc de eventos de remessa para industrializacao + + + diff --git a/rascunho/Schemas/resEvento_v1.00.xsd b/rascunho/Schemas/resEvento_v1.00.xsd new file mode 100644 index 0000000..6491cb3 --- /dev/null +++ b/rascunho/Schemas/resEvento_v1.00.xsd @@ -0,0 +1,94 @@ + + + + + + + Schema da estrutura XML gerada pelo Ambiente Nacional com o conjunto de informações resumidas de um evento de NF-e + + + + + + Código do órgão de recepção do Evento. Utilizar a Tabela do IBGE extendida, utilizar 91 para identificar o Ambiente Nacional + + + + + + CNPJ do Emitente + + + + + CPF do Emitente + + + + + + Chave de acesso da NF-e + + + + + Data e Hora do Evento, formato UTC (AAAA-MM-DDThh:mm:ssTZD, onde TZD = +hh:mm ou -hh:mm) + + + + + Tipo do Evento + + + + + + + + + + + Seqüencial do evento para o mesmo tipo de evento. Para maioria dos eventos será 1, nos casos em que possa existir mais de um evento, como é o caso da carta de correção, o autor do evento deve numerar de forma seqüencial + + + + + + + + + + + Descrição do Evento + + + + + + + + + + + Data e hora de autorização do evento no formato AAAA-MM-DDTHH:MM:SSTZD + + + + + Número do Protocolo do evento. 1 posição (1 – Secretaria de Fazenda Estadual 2 – Receita Federal); 2 - códiga da UF - 2 posições ano; 10 seqüencial no ano + + + + + + + + + Tipo Versão do leiate resNFe + + + + + + + diff --git a/rascunho/Schemas/resEvento_v1.01.xsd b/rascunho/Schemas/resEvento_v1.01.xsd new file mode 100644 index 0000000..e2e39ac --- /dev/null +++ b/rascunho/Schemas/resEvento_v1.01.xsd @@ -0,0 +1,95 @@ + + + + + + + Schema da estrutura XML gerada pelo Ambiente Nacional com o conjunto de informações resumidas de um evento de NF-e + + + + + + Código do órgão de recepção do Evento. Utilizar a Tabela do IBGE extendida, utilizar 91 para identificar o Ambiente Nacional + + + + + + CNPJ do Emitente + + + + + CPF do Emitente + + + + + + Chave de acesso da NF-e + + + + + Data e Hora do Evento, formato UTC (AAAA-MM-DDThh:mm:ssTZD, onde TZD = +hh:mm ou -hh:mm) + + + + + Tipo do Evento + + + + + + + + + + + Seqüencial do evento para o mesmo tipo de evento. Para maioria dos eventos será 1, nos casos em que possa existir mais de um evento, como é o caso da carta de correção, o autor do evento deve numerar de forma seqüencial + + + + + + + + + + + Descrição do Evento + + + + + + + + + + + Data e hora de autorização do evento no formato AAAA-MM-DDTHH:MM:SSTZD + + + + + Número do Protocolo do evento. 1 posição (1 – Secretaria de Fazenda Estadual 2 – Receita Federal); 2 - códiga da UF - 2 posições ano; 10 seqüencial no ano + + + + + + + + + Tipo Versão do leiate resNFe + + + + + + + + diff --git a/rascunho/Schemas/resNFe_v1.00.xsd b/rascunho/Schemas/resNFe_v1.00.xsd new file mode 100644 index 0000000..de135ed --- /dev/null +++ b/rascunho/Schemas/resNFe_v1.00.xsd @@ -0,0 +1,110 @@ + + + + + + + Schema da estrutura XML gerada pelo Ambiente Nacional com o conjunto de informações resumidas de uma NF-e + + + + + + Chave de acesso da NF-e + + + + + + CNPJ do Emitente + + + + + CPF do Emitente + + + + + + Razão Social ou Nome do emitente + + + + + + + + + + + Inscrição Estadual do Emitente + + + + + Data e Hora de emissão do Documento Fiscal (AAAA-MM-DDThh:mm:ssTZD) ex.: 2012-09-01T13:00:00-03:00 + + + + + Tipo do Documento Fiscal (0 - entrada; 1 - saída) + + + + + + + + + + + + Valor Total da NF-e + + + + + Digest Value da NF-e processada. Utilizado para conferir a integridade da NF-e original + + + + + Data e hora de autorização da NF-e, no formato AAAA-MM-DDTHH:MM:SSTZD + + + + + Número do Protocolo de Status da NF-e. 1 posição (1 – Secretaria de Fazenda Estadual 2 – Receita Federal); 2 - códiga da UF - 2 posições ano; 10 seqüencial no ano + + + + + + Situação da NF-e + 1-Uso autorizado no momento da consulta; + 2-Uso denegado; + + + + + + + + + + + + + + + + + Tipo Versão do leiate resNFe + + + + + + + diff --git a/rascunho/Schemas/resNFe_v1.01.xsd b/rascunho/Schemas/resNFe_v1.01.xsd new file mode 100644 index 0000000..bbec922 --- /dev/null +++ b/rascunho/Schemas/resNFe_v1.01.xsd @@ -0,0 +1,113 @@ + + + + + + + Schema da estrutura XML gerada pelo Ambiente Nacional com o conjunto de informações resumidas de uma NF-e + + + + + + Chave de acesso da NF-e + + + + + + CNPJ do Emitente + + + + + CPF do Emitente + + + + + + Razão Social ou Nome do emitente + + + + + + + + + + + Inscrição Estadual do Emitente + + + + + Data e Hora de emissão do Documento Fiscal (AAAA-MM-DDThh:mm:ssTZD) ex.: 2012-09-01T13:00:00-03:00 + + + + + Tipo do Documento Fiscal (0 - entrada; 1 - saída) + + + + + + + + + + + + Valor Total da NF-e + + + + + Digest Value da NF-e processada. Utilizado para conferir a integridade da NF-e original + + + + + Data e hora de autorização da NF-e, no formato AAAA-MM-DDTHH:MM:SSTZD + + + + + Número do Protocolo de Status da NF-e. 1 posição (1 – Secretaria de Fazenda Estadual 2 – Receita Federal); 2 - códiga da UF - 2 posições ano; 10 seqüencial no ano + + + + + + Situação da NF-e + 1-Uso autorizado no momento da consulta; + 2-Uso denegado; + + + + + + + + + + + + + + + + + + Tipo Versão do leiate resNFe + + + + + + + + + diff --git a/rascunho/Schemas/retComprovanteEntregaNFe_v1.00.xsd b/rascunho/Schemas/retComprovanteEntregaNFe_v1.00.xsd new file mode 100644 index 0000000..7b63c1b --- /dev/null +++ b/rascunho/Schemas/retComprovanteEntregaNFe_v1.00.xsd @@ -0,0 +1,10 @@ + + + + + + + Schema XML de Retorno da envio do Evento MDF-e + + + diff --git a/rascunho/Schemas/retConsReciNFe_v3.10.xsd b/rascunho/Schemas/retConsReciNFe_v3.10.xsd new file mode 100644 index 0000000..4761060 --- /dev/null +++ b/rascunho/Schemas/retConsReciNFe_v3.10.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de validação do retorno do Pedido de Consulta do Recido do Lote de Notas Fiscais Eletrônicas + + + \ No newline at end of file diff --git a/rascunho/Schemas/retConsReciNFe_v4.00.xsd b/rascunho/Schemas/retConsReciNFe_v4.00.xsd new file mode 100644 index 0000000..e0de8d3 --- /dev/null +++ b/rascunho/Schemas/retConsReciNFe_v4.00.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de validação do retorno do Pedido de Consulta do Recido do Lote de Notas Fiscais Eletrônicas + + + diff --git a/rascunho/Schemas/retConsSitNFe_v3.10.xsd b/rascunho/Schemas/retConsSitNFe_v3.10.xsd new file mode 100644 index 0000000..dd2f3f8 --- /dev/null +++ b/rascunho/Schemas/retConsSitNFe_v3.10.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de validação do retorno da consulta da situação atual da NF-e + + + \ No newline at end of file diff --git a/rascunho/Schemas/retConsSitNFe_v4.00.xsd b/rascunho/Schemas/retConsSitNFe_v4.00.xsd new file mode 100644 index 0000000..b55f3e0 --- /dev/null +++ b/rascunho/Schemas/retConsSitNFe_v4.00.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de validação do retorno da consulta da situação atual da NF-e + + + diff --git a/rascunho/Schemas/retConsStatServ_v3.10.xsd b/rascunho/Schemas/retConsStatServ_v3.10.xsd new file mode 100644 index 0000000..6b0eb38 --- /dev/null +++ b/rascunho/Schemas/retConsStatServ_v3.10.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de validação do Resultado da Consulta do Status do Serviço + + + \ No newline at end of file diff --git a/rascunho/Schemas/retConsStatServ_v4.00.xsd b/rascunho/Schemas/retConsStatServ_v4.00.xsd new file mode 100644 index 0000000..5a50c7a --- /dev/null +++ b/rascunho/Schemas/retConsStatServ_v4.00.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de validação do Resultado da Consulta do Status do Serviço + + + diff --git a/rascunho/Schemas/retDistDFeInt_v1.00.xsd b/rascunho/Schemas/retDistDFeInt_v1.00.xsd new file mode 100644 index 0000000..eaa1cd5 --- /dev/null +++ b/rascunho/Schemas/retDistDFeInt_v1.00.xsd @@ -0,0 +1,84 @@ + + + + + + Schema do resultado do pedido de distribuição de DF-e de interesse + + + + + + + Identificação do Ambiente: + 1 - Produção + 2 - Homologação + + + + + + Versão do Web Service NFeDistribuicaoDFe + + + + + Código do status de processamento da requisição + + + + + Descrição literal do status do processamento da requisição + + + + + Data e Hora de processamento da requisição no formato AAAA-MM-DDTHH:MM:SS + + + + + Último NSU pesquisado no Ambiente Nacional. Se for o caso, o solicitante pode continuar a consulta a partir deste NSU para obter novos resultados. + + + + + Maior NSU existente no Ambiente Nacional para o CNPJ/CPF informado + + + + + Conjunto de informações resumidas e documentos fiscais eletrônicos de interesse da pessoa ou empresa. + + + + + + Informação resumida ou documento fiscal eletrônico de interesse da pessoa ou empresa. O conteúdo desta tag estará compactado no padrão gZip. O tipo do campo é base64Binary. + + + + + + + NSU do documento fiscal + + + + + Identificação do Schema XML que será utilizado para validar o XML existente no conteúdo da tag docZip. Vai identificar o tipo do documento e sua versão. Exemplos: resNFe_v1.00.xsd, procNFe_v3.10.xsd, resEvento_1.00.xsd, procEventoNFe_v1.00.xsd + + + + + + + + + + + + + + + diff --git a/rascunho/Schemas/retDistDFeInt_v1.01.xsd b/rascunho/Schemas/retDistDFeInt_v1.01.xsd new file mode 100644 index 0000000..021d9a4 --- /dev/null +++ b/rascunho/Schemas/retDistDFeInt_v1.01.xsd @@ -0,0 +1,86 @@ + + + + + + Schema do resultado do pedido de distribuição de DF-e de interesse + + + + + + + Identificação do Ambiente: + 1 - Produção + 2 - Homologação + + + + + + Versão do Web Service NFeDistribuicaoDFe + + + + + Código do status de processamento da requisição + + + + + Descrição literal do status do processamento da requisição + + + + + Data e Hora de processamento da requisição no formato AAAA-MM-DDTHH:MM:SSTZD + + + + + Último NSU pesquisado no Ambiente Nacional. Se for o caso, o solicitante pode continuar a consulta a partir deste NSU para obter novos resultados. + + + + + Maior NSU existente no Ambiente Nacional para o CNPJ/CPF informado + + + + + Conjunto de informações resumidas e documentos fiscais eletrônicos de interesse da pessoa ou empresa. + + + + + + Informação resumida ou documento fiscal eletrônico de interesse da pessoa ou empresa. O conteúdo desta tag estará compactado no padrão gZip. O tipo do campo é base64Binary. + + + + + + + NSU do documento fiscal + + + + + Identificação do Schema XML que será utilizado para validar o XML existente no conteúdo da tag docZip. Vai identificar o tipo do documento e sua versão. Exemplos: resNFe_v1.00.xsd, procNFe_v3.10.xsd, resEvento_1.00.xsd, procEventoNFe_v1.00.xsd + + + + + + + + + + + + + + + + + diff --git a/rascunho/Schemas/retDownloadNFe_v1.00.xsd b/rascunho/Schemas/retDownloadNFe_v1.00.xsd new file mode 100644 index 0000000..8b2c8c1 --- /dev/null +++ b/rascunho/Schemas/retDownloadNFe_v1.00.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de validação do retorno do pedido de download das NF-e + + + diff --git a/rascunho/Schemas/retEnvAverb_v1.00.xsd b/rascunho/Schemas/retEnvAverb_v1.00.xsd new file mode 100644 index 0000000..37528a3 --- /dev/null +++ b/rascunho/Schemas/retEnvAverb_v1.00.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de Retorno da envio do Evento de averbação + + + diff --git a/rascunho/Schemas/retEnvCCe_v1.00.xsd b/rascunho/Schemas/retEnvCCe_v1.00.xsd new file mode 100644 index 0000000..725a652 --- /dev/null +++ b/rascunho/Schemas/retEnvCCe_v1.00.xsd @@ -0,0 +1,10 @@ + + + + + + + Schema XML de Retorno da envio do Evento Carta de Correção + + + diff --git a/rascunho/Schemas/retEnvCancelPProrrogNFe_v1.0.xsd b/rascunho/Schemas/retEnvCancelPProrrogNFe_v1.0.xsd new file mode 100644 index 0000000..a8ca47f --- /dev/null +++ b/rascunho/Schemas/retEnvCancelPProrrogNFe_v1.0.xsd @@ -0,0 +1,231 @@ + + + + + + + TAG raiz do Resultado do Envio do Evento + + + + + + Identificador de controle do Lote de envio do Evento. Número sequencial autoincremental único para identificação do Lote. + + + + + + + + + + + Identificação do Ambiente: 1 - Produção, 2 – Homologação + + + + + Versão da aplicação que processou o evento. + + + + + Código da UF que registrou o Evento. Utilizar 90 para o Ambiente Nacional. + + + + + Código do status da resposta + + + + + Descrição do status da resposta + + + + + TAG de grupo do resultado do processamento do Evento + + + + + + Grupo de informações do registro do Evento + + + + + + Identificação do Ambiente: 1 – Produção / 2 – Homologação + + + + + Versão da aplicação que registrou o Evento, utilizar literal que permita a identificação do órgão, como a sigla da UF ou + do órgão. + + + + + Código da UF que registrou o Evento. Utilizar 90 para o Ambiente Nacional. + + + + + Código do status da resposta. + + + + + Descrição do status da resposta. + + + + + Chave de Acesso da NF-e vinculada ao evento. + + + + + Código do Tipo do Evento. + + + + + + + + + + + + + Descrição do Evento – “Cancelamento de Pedido de Prorrogação registrado” + + + + + + + + + + Sequencial do evento para o mesmo tipo de evento. + + + + + + + + + + + Informar o CNPJ do destinatário da NF-e. + + + + + email do destinatário informado na NF-e. + + + + + + + + + + + Data e hora de registro do evento no formato AAAA-MMDDTHH:MM:SSTZD (formato UTC, onde TZD é +HH:MM ou + –HH:MM), se o evento for rejeitado informar a data e hora de recebimento do evento. + + + + + Número do Protocolo do Evento 1 posição (1-Secretaria da Fazenda Estadual, 2-RFB), 2 posições para o código da UF, 2 posições para o ano e 10 posições para o sequencial no ano. + + + + + + Identificador da TAG a ser assinada, somente deve ser informado se o órgão de registro assinar a resposta. + Em caso de assinatura da resposta pelo órgão de registro, preencher com o número do protocolo, precedido pela literal “ID + ” + + + + + + + + + + + + + + Versão do leiaute + + + + + + + + + + + + + + Versão do leiaute + + + + + + + + + + + + + Tipo Código de orgão (UF da tabela do IBGE + 91 RFB) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/rascunho/Schemas/retEnvConfRecebto_v1.00.xsd b/rascunho/Schemas/retEnvConfRecebto_v1.00.xsd new file mode 100644 index 0000000..f63eaac --- /dev/null +++ b/rascunho/Schemas/retEnvConfRecebto_v1.00.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de Retorno da envio do Evento Confirmao de Recebimento + + + diff --git a/rascunho/Schemas/retEnvEPEC_v1.00.xsd b/rascunho/Schemas/retEnvEPEC_v1.00.xsd new file mode 100644 index 0000000..d56756b --- /dev/null +++ b/rascunho/Schemas/retEnvEPEC_v1.00.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de Retorno da envio do Evento Emissão Prévia em Contingência + + + diff --git a/rascunho/Schemas/retEnvEventoAtorInteressado_v1.00.xsd b/rascunho/Schemas/retEnvEventoAtorInteressado_v1.00.xsd new file mode 100644 index 0000000..8b075c3 --- /dev/null +++ b/rascunho/Schemas/retEnvEventoAtorInteressado_v1.00.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de Retorno da envio do Evento Ator Interessado na NF-e + + + diff --git a/rascunho/Schemas/retEnvEventoCancNFe_v1.00.xsd b/rascunho/Schemas/retEnvEventoCancNFe_v1.00.xsd new file mode 100644 index 0000000..218a5e1 --- /dev/null +++ b/rascunho/Schemas/retEnvEventoCancNFe_v1.00.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de Retorno da envio do Evento Cancelamento + + + diff --git a/rascunho/Schemas/retEnvEventoCancSubst_v1.00.xsd b/rascunho/Schemas/retEnvEventoCancSubst_v1.00.xsd new file mode 100644 index 0000000..14090df --- /dev/null +++ b/rascunho/Schemas/retEnvEventoCancSubst_v1.00.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de Retorno da envio do Evento Cancelamento + + + diff --git a/rascunho/Schemas/retEnvEvento_v1.00.xsd b/rascunho/Schemas/retEnvEvento_v1.00.xsd new file mode 100644 index 0000000..b60790f --- /dev/null +++ b/rascunho/Schemas/retEnvEvento_v1.00.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de Retorno da envio do Evento + + + diff --git a/rascunho/Schemas/retEnvFiscoNFe_v1.0.xsd b/rascunho/Schemas/retEnvFiscoNFe_v1.0.xsd new file mode 100644 index 0000000..a77fff0 --- /dev/null +++ b/rascunho/Schemas/retEnvFiscoNFe_v1.0.xsd @@ -0,0 +1,234 @@ + + + + + + + TAG raiz do Resultado do Envio do Evento + + + + + + Identificador de controle do Lote de envio do Evento. Número sequencial autoincremental único para identificação do Lote. + + + + + + + + + + + Identificação do Ambiente: 1 - Produção, 2 – Homologação + + + + + Versão da aplicação que processou o evento. + + + + + Código da UF que registrou o Evento. Utilizar 90 para o Ambiente Nacional. + + + + + Código do status da resposta + + + + + Descrição do status da resposta + + + + + TAG de grupo do resultado do processamento do Evento + + + + + + Grupo de informações do registro do Evento + + + + + + Identificação do Ambiente: 1 – Produção / 2 – Homologação + + + + + Versão da aplicação que registrou o Evento, utilizar literal que permita a identificação do órgão, como a sigla da UF ou + do órgão. + + + + + Código da UF que registrou o Evento. Utilizar 90 para o Ambiente Nacional. + + + + + Código do status da resposta. + + + + + Descrição do status da resposta. + + + + + Chave de Acesso da NF-e vinculada ao evento. + + + + + Código do Tipo do Evento. + + + + + + + + + + + + + + + Descrição do Evento – “Cancelamento de Pedido de Prorrogação registrado” + + + + + + + + + + + Sequencial do evento para o mesmo tipo de evento. + + + + + + + + + + + Informar o CNPJ do destinatário da NF-e. + + + + + email do destinatário informado na NF-e. + + + + + + + + + + + Data e hora de registro do evento no formato AAAA-MMDDTHH:MM:SSTZD (formato UTC, onde TZD é +HH:MM ou + – HH:MM), se o evento for rejeitado informar a data e hora de recebimento do evento. + + + + + Número do Protocolo do Evento 1 posição (1-Secretaria da Fazenda Estadual, 2-RFB), 2 posições para o código da UF, 2 posições para o ano e 10 posições para o sequencial no ano. + + + + + + Identificador da TAG a ser assinada, somente deve ser informado se o órgão de registro assinar a resposta. + Em caso de assinatura da resposta pelo órgão de registro, preencher com o número do protocolo, precedido pela literal “ID + ” + + + + + + + + + + + + + + Versão do leiaute + + + + + + + + + + + + + + Versão do leiaute + + + + + + + + + + + + + Tipo Código de orgão (UF da tabela do IBGE + 91 RFB) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/rascunho/Schemas/retEnvRemIndus_v1.00.xsd b/rascunho/Schemas/retEnvRemIndus_v1.00.xsd new file mode 100644 index 0000000..2958917 --- /dev/null +++ b/rascunho/Schemas/retEnvRemIndus_v1.00.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de Retorno do envio de evento de pedido de prorrogacao de remessa para industrializacao + + + diff --git a/rascunho/Schemas/retEnvSuframaInternaliza_v1.00.xsd b/rascunho/Schemas/retEnvSuframaInternaliza_v1.00.xsd new file mode 100644 index 0000000..edd20fe --- /dev/null +++ b/rascunho/Schemas/retEnvSuframaInternaliza_v1.00.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de Retorno da envio do evento do Internalizacao SUFRAMA 990910 + + + diff --git a/rascunho/Schemas/retEnvSuframaVistoria_v1.00.xsd b/rascunho/Schemas/retEnvSuframaVistoria_v1.00.xsd new file mode 100644 index 0000000..1b9b68d --- /dev/null +++ b/rascunho/Schemas/retEnvSuframaVistoria_v1.00.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de Retorno da envio do evento do Vistoria SUFRAMA 990900 + + + diff --git a/rascunho/Schemas/retEnviNFe_v3.10.xsd b/rascunho/Schemas/retEnviNFe_v3.10.xsd new file mode 100644 index 0000000..4c60f52 --- /dev/null +++ b/rascunho/Schemas/retEnviNFe_v3.10.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de validação do retorno do Pedido de Concessão de Autorização da Nota Fiscal Eletrônica + + + \ No newline at end of file diff --git a/rascunho/Schemas/retEnviNFe_v4.00.xsd b/rascunho/Schemas/retEnviNFe_v4.00.xsd new file mode 100644 index 0000000..aafef39 --- /dev/null +++ b/rascunho/Schemas/retEnviNFe_v4.00.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de validação do retorno do Pedido de Concessão de Autorização da Nota Fiscal Eletrônica + + + diff --git a/rascunho/Schemas/retEventoCancEntregaNFe_v1.00.xsd b/rascunho/Schemas/retEventoCancEntregaNFe_v1.00.xsd new file mode 100644 index 0000000..215130f --- /dev/null +++ b/rascunho/Schemas/retEventoCancEntregaNFe_v1.00.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de Retorno da envio do evento de Comprovante de Entrega da NFe + + + diff --git a/rascunho/Schemas/retEventoEPEC_v0.01.xsd b/rascunho/Schemas/retEventoEPEC_v0.01.xsd new file mode 100644 index 0000000..5489272 --- /dev/null +++ b/rascunho/Schemas/retEventoEPEC_v0.01.xsd @@ -0,0 +1,207 @@ + + + + + + + + + + Identificador de controle do Lote de envio do Evento, conforme informado na mensagem de entrada. + + + + + + + + + + + Identificação do Ambiente: 1=Produção /2=Homologação + + + + + Versão da aplicação que processou o evento. + + + + + Código da UF que registrou o Evento. + + + + + Código do status da resposta + + + + + Descrição do status da resposta + + + + + + + TAG de grupo do resultado do processamento do Evento + + + + + + Grupo de informações do registro do Evento + + + + Identificação do Ambiente: 1=Produção /2=Homologação + + + + + Versão da aplicação que registrou o Evento, utilizar literal que permita a identificação do órgão, como a sigla da UF ou do órgão. + + + + + Código da UF que registrou o Evento. + + + + + Código do status da resposta. + + + + + Descrição do status da resposta. + + + + + Chave de Acesso da NFC-e vinculada ao evento. + + + + + 110140 – EPEC + + + + + + + + + + + + “EPEC autorizado” + + + + + + + + + + + Sequencial do evento, conforme a mensagem de entrada. + + + + + + + + + + + Idem a mensagem de entrada. + + + + + Data e hora de registro do evento no formato AAAA-MM-DDTHH:MM:SSTZD (formato UTC, onde TZD é +HH:MM ou –HH:MM). Se o evento for rejeitado informar a data e hora de recebimento do evento. + + + + + Número do Protocolo do Evento + + + + + Relação de Chaves de Acesso de EPEC pendentes de + + + + + + + Identificador da TAG a ser assinada, somente deve ser informado se o órgão de registro assinar a resposta. + + + + + + + + + + + + + + + + + + + + Tipo Versão do Evento + + + + + + + + + Tipo Código de orgão (UF da tabela do IBGE + 91 RFB) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/rascunho/Schemas/retEventoEntregaNFe_v1.00.xsd b/rascunho/Schemas/retEventoEntregaNFe_v1.00.xsd new file mode 100644 index 0000000..f63f30e --- /dev/null +++ b/rascunho/Schemas/retEventoEntregaNFe_v1.00.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de Retorno da envio do evento de Comprovante de Entrega da NFe + + + diff --git a/rascunho/Schemas/retInutNFe_v3.10.xsd b/rascunho/Schemas/retInutNFe_v3.10.xsd new file mode 100644 index 0000000..1c911fc --- /dev/null +++ b/rascunho/Schemas/retInutNFe_v3.10.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de validação do retorno do Pedido de Inutilização de Numeração da Nota Fiscal Eletrônica + + + \ No newline at end of file diff --git a/rascunho/Schemas/retInutNFe_v4.00.xsd b/rascunho/Schemas/retInutNFe_v4.00.xsd new file mode 100644 index 0000000..d5f4f32 --- /dev/null +++ b/rascunho/Schemas/retInutNFe_v4.00.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de validação do retorno do Pedido de Inutilização de Numeração da Nota Fiscal Eletrônica + + + diff --git a/rascunho/Schemas/retPProrrogNFe_v1.0.xsd b/rascunho/Schemas/retPProrrogNFe_v1.0.xsd new file mode 100644 index 0000000..a500344 --- /dev/null +++ b/rascunho/Schemas/retPProrrogNFe_v1.0.xsd @@ -0,0 +1,233 @@ + + + + + + + TAG raiz do Resultado do Envio do Evento + + + + + + Identificador de controle do Lote de envio do Evento. Número sequencial autoincremental único para identificação do Lote. + + + + + + + + + + + Identificação do Ambiente: 1 - Produção, 2 – Homologação + + + + + Versão da aplicação que processou o evento. + + + + + Código da UF que registrou o Evento. Utilizar 90 para o Ambiente Nacional. + + + + + Código do status da resposta + + + + + Descrição do status da resposta + + + + + TAG de grupo do resultado do processamento do Evento + + + + + + Grupo de informações do registro do Evento + + + + + + Identificação do Ambiente: 1 – Produção / 2 – Homologação + + + + + Versão da aplicação que registrou o Evento, utilizar literal que permita a identificação do órgão, como a sigla da UF ou + do órgão. + + + + + Código da UF que registrou o Evento. Utilizar 90 para o Ambiente Nacional. + + + + + Código do status da resposta. + + + + + Descrição do status da resposta. + + + + + Chave de Acesso da NF-e vinculada ao evento. + + + + + Código do Tipo do Evento. + + + + + + + + + + + + + Descrição do Evento – “Cancelamento de Pedido de Prorrogação registrado” + + + + + + + + + + + Sequencial do evento para o mesmo tipo de evento. + + + + + + + + + + + Informar o CNPJ do destinatário da NF-e. + + + + + email do destinatário informado na NF-e. + + + + + + + + + + + Data e hora de registro do evento no formato AAAA-MMDDTHH:MM:SSTZD (formato UTC, onde TZD é +HH:MM ou + – HH:MM), se o evento for rejeitado informar a data e hora de recebimento do evento. + + + + + Número do Protocolo do Evento 1 posição (1-Secretaria da Fazenda Estadual, 2-RFB), 2 posições para o código da UF, 2 posições para o ano e 10 posições para o sequencial no ano. + + + + + + Identificador da TAG a ser assinada, somente deve ser informado se o órgão de registro assinar a resposta. + Em caso de assinatura da resposta pelo órgão de registro, preencher com o número do protocolo, precedido pela literal “ID + ” + + + + + + + + + + + + + + Versão do leiaute + + + + + + + + + + + + + + Versão do leiaute + + + + + + + + + + + + + + Tipo Código de orgão (UF da tabela do IBGE + 91 RFB) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/rascunho/Schemas/retconsNFeDest_v1.01.xsd b/rascunho/Schemas/retconsNFeDest_v1.01.xsd new file mode 100644 index 0000000..5c8f580 --- /dev/null +++ b/rascunho/Schemas/retconsNFeDest_v1.01.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de validação do retorno de resumo das NF-e encontradas + + + diff --git a/rascunho/Schemas/tiposBasico_v1.03.xsd b/rascunho/Schemas/tiposBasico_v1.03.xsd new file mode 100644 index 0000000..9554f67 --- /dev/null +++ b/rascunho/Schemas/tiposBasico_v1.03.xsd @@ -0,0 +1,872 @@ + + + + + + + + + + + + + + + Tipo Código da UF da tabela do IBGE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tipo Código do Município da tabela do IBGE + + + + + + + + + Tipo Chave da Nota Fiscal Eletrônica + + + + + + + + + Tipo Número do Protocolo de Status + + + + + + + + + Tipo Número do Recibo do envio de lote de NF-e + + + + + + + + + Tipo Código da Mensagem enviada + + + + + + + + + Tipo Número do CNPJ + + + + + + + + + Tipo Número do CNPJ tmanho varíavel (3-14) + + + + + + + + + Tipo Número do CNPJ Opcional + + + + + + + + + + Tipo Número do CPF + + + + + + + + + Tipo Número do CPF de tamanho variável (3-11) + + + + + + + + + Tipo Decimal com 5 dígitos, sendo 3 de corpo e 2 decimais + + + + + + + + + Tipo Decimal com 5 dígitos, sendo 3 de corpo e 2 decimais, utilizado em tags opcionais + + + + + + + + + Tipo Decimal com 11 dígitos, sendo 8 de corpo e 3 decimais + + + + + + + + + Tipo Decimal com 11 dígitos, sendo 8 de corpo e 3 decimais utilizado em tags opcionais + + + + + + + + + Tipo Decimal com 12 dígitos, sendo 8 de corpo e 4decimais + + + + + + + + + Tipo Decimal com 12 dígitos, sendo 8 de corpo e 4 decimais, utilizado em tags opcionais + + + + + + + + + Tipo Decimal com 15 dígitos, sendo 11 de corpo e 4 decimais + + + + + + + + + Tipo Decimal com 15 dígitos, sendo 11 de corpo e 4 decimais, utilizado em tags opcionais + + + + + + + + + Tipo Decimal com 15 dígitos, sendo 12 de corpo e 3 decimais + + + + + + + + + Tipo Decimal com 15 dígitos, sendo 12 de corpo e 3 decimais, utilizado em tags opcionais + + + + + + + + + Tipo Decimal com 16 dígitos, sendo 12 de corpo e 4 decimais + + + + + + + + + Tipo Decimal com 16 dígitos, sendo 12 de corpo e 4 decimais, utilizado em tags opcionais + + + + + + + + + Tipo Decimal com 15 dígitos, sendo 13 de corpo e 2 decimais + + + + + + + + + Tipo Decimal com 15 dígitos, sendo 13 de corpo e 2 decimais, utilizado em tags opcionais + + + + + + + + + Tipo Decimal com até 21 dígitos, sendo 11 de corpo e até 10 decimais // aperfeiçoamento v2.0 + + + + + + + + + Tipo Decimal com até 15 dígitos, sendo 11 de corpo e até 4 decimais // aperfeiçoamento v2.0 + + + + + + + + + Tipo Inscrição Estadual do Destinatário // alterado para aceitar vazio ou ISENTO - maio/2010 v2.0 + + + + + + + + + Tipo Inscrição Estadual do ST // acrescentado EM 24/10/08 + + + + + + + + + Tipo Inscrição Estadual do Emitente // alterado EM 24/10/08 para aceitar ISENTO + + + + + + + + + Tipo Modelo Documento Fiscal + + + + + + + + + Tipo Número do Documento Fiscal + + + + + + + + + Tipo Série do Documento Fiscal + + + + + + + + + Tipo Código do Pais +// PL_005d - 11/08/09 +eliminado: + 4235-LEBUAN, ILHAS - +acrescentado: +7200 SAO TOME E PRINCIPE, ILHAS, +8958 ZONA DO CANAL DO PANAMA +9903 PROVISAO DE NAVIOS E AERONAVES +9946 A DESIGNAR +9950 BANCOS CENTRAIS +9970 ORGANIZACOES INTERNACIONAIS + // PL_005b - 24/10/08 + // Acrescentado: + 4235 - LEBUAN,ILHAS + 4885 - MAYOTTE (ILHAS FRANCESAS) +// NT2011/004 + acrescentado a tabela de paises +//PL_006t - 21/03/2014 +acrescentado: +5780 - Palestina +7600 - Sudão do Sul + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tipo Sigla da UF + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tipo Sigla da UF de emissor // acrescentado em 24/10/08 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tipo Ambiente + + + + + + + + + + Tipo Versão do Aplicativo + + + + + + + + + Tipo Motivo + + + + + + + + + Tipo Justificativa + + + + + + + + + Tipo Serviço solicitado + + + + + + Tipo ano + + + + + + + + + Tipo temp médio em segundos + + + + + + + + + Tipo string genérico + + + + + + + + + Tipo data AAAA-MM-DD + + + + + + + + + Tipo hora HH:MM:SS // tipo acrescentado na v2.0 + + + + + + + + + Data e Hora, formato UTC (AAAA-MM-DDThh:mm:ssTZD, onde TZD = +hh:mm ou -hh:mm) + + + + + + + + + + + + + + + Tipo Código de orgão (UF da tabela do IBGE + 90 RFB) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Coordenada geográfica Latitude + + + + + + + + Coordenada geográfica Longitude + + + + + + diff --git a/rascunho/Schemas/tiposBasico_v3.10.xsd b/rascunho/Schemas/tiposBasico_v3.10.xsd new file mode 100644 index 0000000..8f4447f --- /dev/null +++ b/rascunho/Schemas/tiposBasico_v3.10.xsd @@ -0,0 +1,571 @@ + + + + + + Tipo Código da UF da tabela do IBGE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tipo Código do Município da tabela do IBGE + + + + + + + + + Tipo Chave da Nota Fiscal Eletrônica + + + + + + + + + + Tipo Número do Protocolo de Status + + + + + + + + + + Tipo Número do Recibo do envio de lote de NF-e + + + + + + + + + + Tipo Código da Mensagem enviada + + + + + + + + + + Tipo Número do CNPJ + + + + + + + + + + Tipo Número do CNPJ tmanho varíavel (3-14) + + + + + + + + + + Tipo Número do CNPJ Opcional + + + + + + + + + + Tipo Número do CPF + + + + + + + + + + Tipo Número do CPF de tamanho variável (3-11) + + + + + + + + + + Tipo Decimal com até 2 dígitos inteiros, podendo ter de 1 até 4 decimais + + + + + + + + + Tipo Decimal com até 3 dígitos inteiros, podendo ter de 2 até 4 decimais + + + + + + + + + Tipo Decimal com até 3 dígitos inteiros e 2 até 4 decimais. Utilizados em TAGs opcionais, não aceita valor zero. + + + + + + + + + Tipo Decimal com 3 inteiros (no máximo 100), com 2 decimais + + + + + + + + + Tipo Decimal com 3 inteiros (no máximo 100), com até 4 decimais + + + + + + + + + Tipo Decimal com 8 inteiros, podendo ter de 1 até 3 decimais + + + + + + + + + Tipo Decimal com 11 inteiros, podendo ter 4 decimais + + + + + + + + + Tipo Decimal com 11 inteiros, podendo ter de 1 até 4 decimais + + + + + + + + + Tipo Decimal com 11 inteiros, podendo ter 4 decimais (utilizado em tags opcionais) + + + + + + + + + Tipo Decimal com 11 inteiros, podendo ter de 1 até 10 decimais + + + + + + + + + Tipo Decimal com 12 inteiros, podendo ter 3 decimais + + + + + + + + + Tipo Decimal com 12 inteiros e 4 decimais + + + + + + + + + Tipo Decimal com 12 inteiros de 1 até 4 decimais + + + + + + + + + Tipo Decimal com 12 inteiros com 1 até 4 decimais + + + + + + + + + Tipo Decimal com 12 inteiros, 1 a 4 decimais + + + + + + + + + Tipo Decimal com 15 dígitos, sendo 13 de corpo e 2 decimais + + + + + + + + + Tipo Decimal com 15 dígitos, sendo 13 de corpo e 2 decimais, utilizado em tags opcionais + + + + + + + + + Tipo Inscrição Estadual do Destinatário // alterado para aceitar vazio ou ISENTO - maio/2010 v2.0 + + + + + + + + + + Tipo Inscrição Estadual do Destinatário // alterado para aceitar vazio ou ISENTO - maio/2010 v2.0 + + + + + + + + + + Tipo Inscrição Estadual do ST // acrescentado EM 24/10/08 + + + + + + + + + + Tipo Inscrição Estadual do Emitente // alterado EM 24/10/08 para aceitar ISENTO + + + + + + + + + + Tipo Modelo Documento Fiscal + + + + + + + + + + Tipo Número do Documento Fiscal + + + + + + + + + Tipo Série do Documento Fiscal + + + + + + + + + Tipo Sigla da UF + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tipo Sigla da UF de emissor // acrescentado em 24/10/08 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tipo Ambiente + + + + + + + + + + Tipo Versão do Aplicativo + + + + + + + + + Tipo Motivo + + + + + + + + + Tipo Justificativa + + + + + + + + + Tipo Serviço solicitado + + + + + + Tipo ano + + + + + + + + + Tipo temp médio em segundos + + + + + + + + + Tipo string genérico + + + + + + + + + Tipo data AAAA-MM-DD + + + + + + + + + Tipo hora HH:MM:SS // tipo acrescentado na v2.0 + + + + + + + + + Data e Hora, formato UTC (AAAA-MM-DDThh:mm:ssTZD, onde TZD = +hh:mm ou -hh:mm) + + + + + + + + + + + + + + + Tipo Código de orgão (UF da tabela do IBGE + 90 RFB) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/rascunho/Schemas/tiposBasico_v4.00.xsd b/rascunho/Schemas/tiposBasico_v4.00.xsd new file mode 100644 index 0000000..7200ca7 --- /dev/null +++ b/rascunho/Schemas/tiposBasico_v4.00.xsd @@ -0,0 +1,589 @@ + + + + + + Tipo Código da UF da tabela do IBGE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tipo Código do Município da tabela do IBGE + + + + + + + + + Tipo Chave da Nota Fiscal Eletrônica + + + + + + + + + + Tipo Número do Protocolo de Status + + + + + + + + + + Tipo Número do Recibo do envio de lote de NF-e + + + + + + + + + + Tipo Código da Mensagem enviada + + + + + + + + + + Tipo Número do CNPJ + + + + + + + + + + Tipo Número do CNPJ tmanho varíavel (3-14) + + + + + + + + + + Tipo Número do CNPJ Opcional + + + + + + + + + + Tipo Número do CPF + + + + + + + + + + Tipo Número do CPF de tamanho variável (3-11) + + + + + + + + + + Tipo Decimal com até 1 dígitos inteiros, podendo ter de 1 até 4 decimais + + + + + + + + + Tipo Decimal com até 2 dígitos inteiros, podendo ter de 1 até 4 decimais + + + + + + + + + Tipo Decimal com até 3 dígitos inteiros, podendo ter de 2 até 4 decimais + + + + + + + + + Tipo Decimal com até 3 dígitos inteiros e 2 até 4 decimais. Utilizados em TAGs opcionais, não aceita valor zero. + + + + + + + + + Tipo Decimal com 3 inteiros (no máximo 100), com 2 decimais + + + + + + + + + Tipo Decimal com 3 inteiros (no máximo 100), com 4 decimais + + + + + + + + + Tipo Decimal com 3 inteiros (no máximo 100), com até 4 decimais + + + + + + + + + Tipo Decimal com 8 inteiros, podendo ter de 1 até 3 decimais + + + + + + + + + Tipo Decimal com 11 inteiros, podendo ter 4 decimais + + + + + + + + + Tipo Decimal com 11 inteiros, podendo ter de 1 até 4 decimais + + + + + + + + + Tipo Decimal com 11 inteiros, podendo ter 4 decimais (utilizado em tags opcionais) + + + + + + + + + Tipo Decimal com 11 inteiros, podendo ter de 1 até 10 decimais + + + + + + + + + Tipo Decimal com 12 inteiros, podendo ter 3 decimais + + + + + + + + + Tipo Decimal com 12 inteiros e 4 decimais + + + + + + + + + Tipo Decimal com 12 inteiros de 1 até 4 decimais + + + + + + + + + Tipo Decimal com 12 inteiros com 1 até 4 decimais + + + + + + + + + Tipo Decimal com 12 inteiros, 1 a 4 decimais + + + + + + + + + Tipo Decimal com 15 dígitos, sendo 13 de corpo e 2 decimais + + + + + + + + + Tipo Decimal com 15 dígitos, sendo 13 de corpo e 2 decimais, utilizado em tags opcionais + + + + + + + + + Tipo Inscrição Estadual do Destinatário // alterado para aceitar vazio ou ISENTO - maio/2010 v2.0 + + + + + + + + + + Tipo Inscrição Estadual do Destinatário // alterado para aceitar vazio ou ISENTO - maio/2010 v2.0 + + + + + + + + + + Tipo Inscrição Estadual do ST // acrescentado EM 24/10/08 + + + + + + + + + + Tipo Inscrição Estadual do Emitente // alterado EM 24/10/08 para aceitar ISENTO + + + + + + + + + + Tipo Modelo Documento Fiscal + + + + + + + + + + Tipo Número do Documento Fiscal + + + + + + + + + Tipo Série do Documento Fiscal + + + + + + + + + Tipo Sigla da UF + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tipo Sigla da UF de emissor // acrescentado em 24/10/08 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tipo Ambiente + + + + + + + + + + Tipo Versão do Aplicativo + + + + + + + + + Tipo Motivo + + + + + + + + + Tipo Justificativa + + + + + + + + + Tipo Serviço solicitado + + + + + + Tipo ano + + + + + + + + + Tipo temp médio em segundos + + + + + + + + + Tipo string genérico + + + + + + + + + Tipo data AAAA-MM-DD + + + + + + + + + Tipo hora HH:MM:SS // tipo acrescentado na v2.0 + + + + + + + + + Data e Hora, formato UTC (AAAA-MM-DDThh:mm:ssTZD, onde TZD = +hh:mm ou -hh:mm) + + + + + + + + + + + + + + + Tipo Código de orgão (UF da tabela do IBGE + 90 RFB) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/rascunho/Schemas/tiposDistDFe_v1.00.xsd b/rascunho/Schemas/tiposDistDFe_v1.00.xsd new file mode 100644 index 0000000..613ba7b --- /dev/null +++ b/rascunho/Schemas/tiposDistDFe_v1.00.xsd @@ -0,0 +1,217 @@ + + + + + Tipo número sequencial único + + + + + + + + Tipo quantidade de NSU + + + + + + + + + Tipo Versão dos leiautes do Web Service NFeDistribuicaoDFe + + + + + + + + + Tipo Ambiente + + + + + + + + + + Tipo Código da UF da tabela do IBGE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tipo Código de orgão (UF da tabela do IBGE + 90 RFB) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tipo Número do CNPJ + + + + + + + + + + Tipo Número do CPF + + + + + + + + + + Tipo Versão do Aplicativo + + + + + + + + + Tipo Código da Mensagem enviada + + + + + + + + + + Tipo Motivo + + + + + + + + + Tipo string genérico + + + + + + + + + Tipo Chave da Nota Fiscal Eletrônica + + + + + + + + + + Tipo Número do Protocolo de Status + + + + + + + + + + Data e Hora, formato UTC (AAAA-MM-DDThh:mm:ssTZD, onde TZD = +hh:mm ou -hh:mm) + + + + + + + + + Tipo Inscrição Estadual do Emitente // alterado EM 24/10/08 para aceitar ISENTO + + + + + + + + + + Tipo Decimal com 15 dígitos, sendo 13 de corpo e 2 decimais + + + + + + + diff --git a/rascunho/Schemas/tiposDistDFe_v1.01.xsd b/rascunho/Schemas/tiposDistDFe_v1.01.xsd new file mode 100644 index 0000000..513390a --- /dev/null +++ b/rascunho/Schemas/tiposDistDFe_v1.01.xsd @@ -0,0 +1,218 @@ + + + + + Tipo número sequencial único + + + + + + + + Tipo quantidade de NSU + + + + + + + + + Tipo Versão dos leiautes do Web Service NFeDistribuicaoDFe + + + + + + + + + Tipo Ambiente + + + + + + + + + + Tipo Código da UF da tabela do IBGE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tipo Código de orgão (UF da tabela do IBGE + 90 RFB) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tipo Número do CNPJ + + + + + + + + + + Tipo Número do CPF + + + + + + + + + + Tipo Versão do Aplicativo + + + + + + + + + Tipo Código da Mensagem enviada + + + + + + + + + + Tipo Motivo + + + + + + + + + Tipo string genérico + + + + + + + + + Tipo Chave da Nota Fiscal Eletrônica + + + + + + + + + + Tipo Número do Protocolo de Status + + + + + + + + + + Data e Hora, formato UTC (AAAA-MM-DDThh:mm:ssTZD, onde TZD = +hh:mm ou -hh:mm) + + + + + + + + + Tipo Inscrição Estadual do Emitente // alterado EM 24/10/08 para aceitar ISENTO + + + + + + + + + + Tipo Decimal com 15 dígitos, sendo 13 de corpo e 2 decimais + + + + + + + + diff --git a/rascunho/Schemas/xmldsig-core-schema_v1.01.xsd b/rascunho/Schemas/xmldsig-core-schema_v1.01.xsd new file mode 100644 index 0000000..f7dc8dc --- /dev/null +++ b/rascunho/Schemas/xmldsig-core-schema_v1.01.xsd @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/rascunho/lote-envio.xml b/rascunho/lote-envio.xml new file mode 100644 index 0000000..11ce78e --- /dev/null +++ b/rascunho/lote-envio.xml @@ -0,0 +1,186 @@ + + 544825801842804 + 1 + + + + 31 + 83854922 + VENDA + 55 + 20 + 302 + 2022-04-28T22:44:57-03:00 + 1 + 1 + 3106200 + 0 + 1 + 4 + 2 + 1 + 1 + 2 + 0 + 0 + NODE-NFE TEST 1.0 + + + 00453160000196 + TESTE + TESTE + + Rua Teste + 123 + Bairro Teste + 3106200 + Belo Horizonte + MG + 31535510 + 1058 + BRASIL + 999999999 + + 0010104790032 + 1 + + + 34493536837 + NF-E EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL + + RUA A + 1 + CENTRO + 3106200 + Belo Horizonte + MG + 30180090 + + 9 + + + + 84233 + 7898221456293 + NOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL + 85164000 + 2104400 + 5102 + SAC + 1.0000 + 31.80 + 31.80 + 7898221456293 + SAC + 1.0000 + 31.80 + 1 + 123 + 1 + + + 0 + + + 0 + 400 + + + + + 01 + 0 + 0.17 + 0 + + + + + 01 + 0 + 0.81 + 0 + + + + + + + 0 + 0 + 0.00 + 0.00 + 0.00 + 0.00 + 0.00 + 0.00 + 31.80 + 0.00 + 0.00 + 0.00 + 0.00 + 0.00 + 0.00 + 0.00 + 0.00 + 0.00 + 31.80 + + + + 0 + + Transportadora teste Ltda + + + + + 20202704-01 + 31.80 + 0.00 + 31.80 + + + 001 + 2022-05-05 + 15.90 + + + 002 + 2022-05-19 + 15.90 + + + + + 1 + 14 + 31.80 + + + + TESTE NFE 55 + + + + + + + + + + + + + S6MzBvk5tL3xTNvz1gd8GHmdWOg= + + + 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 + + + + + \ No newline at end of file diff --git a/rascunho/nf.xml b/rascunho/nf.xml new file mode 100644 index 0000000..d6a99b5 --- /dev/null +++ b/rascunho/nf.xml @@ -0,0 +1 @@ +19955770093972813139095548VENDA551115352022-03-15T10:18:26-03:00113106200116211202.11.3.1000453160000196OMNI SOFTWARE LTDAOMNISOFTRUA JOSE ALVES DA SILVA140CAICARAS3106200BELO HORIZONTEMG307753901058BRASIL0010104790032345590206634NF-E EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCALRUA ANTONIO CESARIO DA ROCHA155101CAICARA3106200BELO HORIZONTEMG30750170319751868649141217896855901421NOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL2204210002024005102UNI1.0000204.01204.0117896855901421UNI1.0000204.01100003204.0118.0036.7201204.010001204.010014137896855901424VINHO BRANCO SECO SELECAO LITRO - UND2204210002024005102UNI1.000017.8517.857896855901424UNI1.000017.8510000317.8518.003.210117.85000117.850013837896931611438VINHO BRANCO SECO CAIXA 12 UND 750 ML2204210002024005102UNI1.00001000.001000.007896931611438UNI1.00001000.001000031000.0018.00180.0001100000011000001221.86219.930.000.000.000.000.000.000.000.000.001221.860.000.000.000.000.000.000.000.000.001221.860.0011141221.86Trib. aprox. R$ 197.58 Federal,R$ 329.90 Estadual Fonte: IBPT/empresometro.com.br D529CB. nullYz3MM/4RvNl9AtYqRXtpfshWCw8=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 \ No newline at end of file diff --git a/rascunho/xml-51778.xml b/rascunho/xml-51778.xml new file mode 100644 index 0000000..d627853 --- /dev/null +++ b/rascunho/xml-51778.xml @@ -0,0 +1 @@ +3185773743VENDA551116682022-04-22T10:34:31-03:001231062001112112002.11.3.100453160000196OMNI SOFTWARE LTDAOMNISOFTRUA DESEMB ONOFRE MENDES JUNIOR13CAICARAS3106200BELO HORIZONTEMG315355101058BRASIL0010104790032314050467755NF-E EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCALRUA JOAO EUGENIO ERTHAL64BEM TE VI3300506BOM JARDIMRJ286600002281840156914137896855901424NOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL2204210002024006108UNI2.000017.8535.707896855901424UNI2.000017.855.001.00115.41000339.7012.004.760134.700.000.000134.700.000.0039.7039.702.0020.0012.00100.000.793.180.0039.704.760.000.793.180.0000.000.000.000.0035.705.000.001.000.000.000.000.000.000.0039.7015.4101VOLUMESDIVERSAS0011439.70Trib. aprox. R$ 5.77 Federal,R$ 9.64 Estadual Fonte: IBPT/empresometro.com.br D529CB. Venda Destinada a Consumidor Final conforme pedido 00 atravez de sistema E-Commerce, conf. CONVENIO ICMS 190/17. Lei no 6.763/75 art 9o RICMS(Dec. 43.080/02). PTA 45.000016075-11 // MERCADORIA DESTINADA A USO E CONSUMO VEDADO O APROVEITAMENTO DO CREDITO NOS TERMOS DO INCISO III ART. 70 DO RICMSkdvfFqoLR/UyOYAjO2QIXFBU45k=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.4.66-OR3312204004531600001965500100001166818577374312022-04-22T10:34:33-03:00131220145472091kdvfFqoLR/UyOYAjO2QIXFBU45k=100Autorizado o uso da NF-e \ No newline at end of file From c1637159ddc31506ea5ec42e4fab339a67f5263e Mon Sep 17 00:00:00 2001 From: gestefane Date: Thu, 19 May 2022 12:59:50 -0300 Subject: [PATCH 07/11] testes NFC-e --- .gitignore | 2 + lib/factory/processor/enviaProcessor.js | 4 +- lib/factory/processor/retornoProcessor.js | 142 +++--- lib/factory/webservices/sefazNfce.js | 532 +++++++++++++++------- rascunho/lote-envio.xml | 186 -------- rascunho/nf.xml | 1 - rascunho/xml-51778.xml | 1 - src/factory/webservices/sefazNfce.ts | 4 +- 8 files changed, 446 insertions(+), 426 deletions(-) delete mode 100644 rascunho/lote-envio.xml delete mode 100644 rascunho/nf.xml delete mode 100644 rascunho/xml-51778.xml diff --git a/.gitignore b/.gitignore index df5e4c7..a360943 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,6 @@ omni-nfetest.js +omni-nfetest2.js +rascunho/* .gitignore #ide vs diff --git a/lib/factory/processor/enviaProcessor.js b/lib/factory/processor/enviaProcessor.js index 3233bea..98a4314 100644 --- a/lib/factory/processor/enviaProcessor.js +++ b/lib/factory/processor/enviaProcessor.js @@ -203,6 +203,7 @@ class EnviaProcessor { nfe: nfeObj, }; try { + console.log(xmlLote); let retEnviNFe = null; if (!nfeObj) { let xmlObj = xmlHelper_1.XmlHelper.deserializeXml(xmlLote, { @@ -212,6 +213,7 @@ class EnviaProcessor { } this.configuraUrlsSefaz(); let retornoEnvio = await this.enviarNF(xmlLote); + console.log(retornoEnvio); try { log( jsonOneLevel({ @@ -223,7 +225,7 @@ class EnviaProcessor { ); log(jsonOneLevel(retornoEnvio), "retornoEnvio.full"); } catch (e) { - log(`ja deu erro pra logar.......${e.toString()}`, "retornoEnvio"); + log(`ja deu erro pra logar(2).......${e.toString()}`, "retornoEnvio"); } if (retornoEnvio && retornoEnvio.data) { const data = Object(retornoEnvio.data); diff --git a/lib/factory/processor/retornoProcessor.js b/lib/factory/processor/retornoProcessor.js index 52ce07a..5ec55d2 100644 --- a/lib/factory/processor/retornoProcessor.js +++ b/lib/factory/processor/retornoProcessor.js @@ -9,7 +9,7 @@ const sefazNfce_1 = require("../webservices/sefazNfce"); const sefazNfe_1 = require("../webservices/sefazNfe"); /** * Classe para processamento do Retorno da NFe -*/ + */ let soapRetAutorizacao = null; // FStatusServico: TNFeStatusServico; // OK FEnviar: TNFeRecepcao; @@ -20,66 +20,90 @@ let soapRetAutorizacao = null; // FConsultaCadastro: TNFeConsultaCadastro; // FEnvEvento: TNFeEnvEvento; class RetornoProcessor { - constructor(configuracoes) { - this.configuracoes = configuracoes; - if (!this.configuracoes.geral.versao) - this.configuracoes.geral.versao = '4.00'; - if (!this.configuracoes.webservices) - this.configuracoes.webservices = { tentativas: 3, aguardarConsultaRetorno: 1000 }; - if (!this.configuracoes.webservices.tentativas) - this.configuracoes.webservices.tentativas = 3; - if (!this.configuracoes.webservices.aguardarConsultaRetorno) - this.configuracoes.webservices.aguardarConsultaRetorno = 1000; - } - async executar(recibo, nfeObj) { - let result = { - success: false, - }; + constructor(configuracoes) { + this.configuracoes = configuracoes; + if (!this.configuracoes.geral.versao) + this.configuracoes.geral.versao = "4.00"; + if (!this.configuracoes.webservices) + this.configuracoes.webservices = { + tentativas: 3, + aguardarConsultaRetorno: 1000, + }; + if (!this.configuracoes.webservices.tentativas) + this.configuracoes.webservices.tentativas = 3; + if (!this.configuracoes.webservices.aguardarConsultaRetorno) + this.configuracoes.webservices.aguardarConsultaRetorno = 1000; + } + async executar(recibo, nfeObj) { + let result = { + success: false, + }; + try { + let xmlConRecNFe = this.gerarXmlConsultaProc(recibo); + let retornoConsulta = null; + let cStat = "105"; + let _tentativa = 0; + const { tentativas, aguardarConsultaRetorno } = + this.configuracoes.webservices; + do { + await Utils.timeout(aguardarConsultaRetorno); + retornoConsulta = await this.consultarProc(xmlConRecNFe); try { - let xmlConRecNFe = this.gerarXmlConsultaProc(recibo); - let retornoConsulta = null; - let cStat = '105'; - let _tentativa = 0; - const { tentativas, aguardarConsultaRetorno } = this.configuracoes.webservices; - do { - await Utils.timeout(aguardarConsultaRetorno); - retornoConsulta = await this.consultarProc(xmlConRecNFe); - try { - Utils.log(Utils.jsonOneLevel({ - retornoConsulta: !!retornoConsulta, - data: !retornoConsulta ? false : !!retornoConsulta.data - }), 'retornoConsulta.exists'); - Utils.log(Utils.jsonOneLevel(retornoConsulta), 'retornoConsulta.data'); - } - catch (e) { - Utils.log('retornoProcessor.envir: ja deu erro pra logar.......', 'retornoConsulta'); - } - cStat = Object(retornoConsulta.data).retConsReciNFe.cStat; - _tentativa++; - } while (cStat == '105' && (_tentativa < tentativas)); // nota em processamento, realiza a consulta novamente até obter um status diferente. - if (retornoConsulta) - result = retornoConsulta; - } - catch (ex) { - result.success = false; - result.error = ex; + Utils.log( + Utils.jsonOneLevel({ + retornoConsulta: !!retornoConsulta, + data: !retornoConsulta ? false : !!retornoConsulta.data, + }), + "retornoConsulta.exists" + ); + Utils.log( + Utils.jsonOneLevel(retornoConsulta), + "retornoConsulta.data" + ); + } catch (e) { + Utils.log( + "retornoProcessor.envir: ja deu erro pra logar.......", + "retornoConsulta" + ); } - return result; - } - async consultarProc(xml) { - const { empresa, geral: { ambiente, modelo }, webProxy, certificado } = this.configuracoes; - let Sefaz = modelo == '65' ? sefazNfce_1.SefazNFCe : sefazNfe_1.SefazNFe; - soapRetAutorizacao = Sefaz.getSoapInfo(empresa.endereco.uf, ambiente, nfe_1.ServicosSefaz.retAutorizacao); - return await webserviceHelper_1.WebServiceHelper.makeSoapRequest(xml, certificado, soapRetAutorizacao, webProxy); - } - gerarXmlConsultaProc(recibo) { - const { versao, ambiente } = this.configuracoes.geral; - let consulta = { - $: { versao, xmlns: 'http://www.portalfiscal.inf.br/nfe' }, - tpAmb: ambiente, - nRec: recibo - }; - return xmlHelper_1.XmlHelper.serializeXml(consulta, 'consReciNFe'); + cStat = Object(retornoConsulta.data).retConsReciNFe.cStat; + _tentativa++; + } while (cStat == "105" && _tentativa < tentativas); // nota em processamento, realiza a consulta novamente até obter um status diferente. + if (retornoConsulta) result = retornoConsulta; + } catch (ex) { + result.success = false; + result.error = ex; } + return result; + } + async consultarProc(xml) { + const { + empresa, + geral: { ambiente, modelo }, + webProxy, + certificado, + } = this.configuracoes; + let Sefaz = modelo == "65" ? sefazNfce_1.SefazNFCe : sefazNfe_1.SefazNFe; + soapRetAutorizacao = Sefaz.getSoapInfo( + empresa.endereco.uf, + ambiente, + nfe_1.ServicosSefaz.retAutorizacao + ); + return await webserviceHelper_1.WebServiceHelper.makeSoapRequest( + xml, + certificado, + soapRetAutorizacao, + webProxy + ); + } + gerarXmlConsultaProc(recibo) { + const { versao, ambiente } = this.configuracoes.geral; + let consulta = { + $: { versao, xmlns: "http://www.portalfiscal.inf.br/nfe" }, + tpAmb: ambiente, + nRec: recibo, + }; + return xmlHelper_1.XmlHelper.serializeXml(consulta, "consReciNFe"); + } } exports.RetornoProcessor = RetornoProcessor; diff --git a/lib/factory/webservices/sefazNfce.js b/lib/factory/webservices/sefazNfce.js index 369afdf..85b475f 100644 --- a/lib/factory/webservices/sefazNfce.js +++ b/lib/factory/webservices/sefazNfce.js @@ -4,185 +4,365 @@ exports.SefazNFCe = void 0; const nfe_1 = require("../interface/nfe"); const functions_1 = require("./functions"); const Utils = require("../utils/utils"); -const servicos = require('../../../servicos.json'); -const autorizadores = require('../../../autorizadores.json'); +const servicos = require("../../../servicos.json"); +const autorizadores = require("../../../autorizadores.json"); class SefazNFCe { - static getAutorizadorByUF(uf) { - switch (uf) { - case 'AM': - return autorizadores.AM; - case 'CE': - return autorizadores.CE; - case 'GO': - return autorizadores.GO; - case 'MT': - return autorizadores.MT; - case 'MS': - return autorizadores.MS; - case 'MG': - return autorizadores.MG; - case 'PR': - return autorizadores.PR; - case 'RS': - return autorizadores.RS; - case 'SP': - return autorizadores.SP; - case 'AC': - case 'AL': - case 'AP': - case 'BA': - case 'DF': - case 'ES': - case 'MA': - case 'PA': - case 'PB': - case 'PE': - case 'PI': - case 'RJ': - case 'RN': - case 'RO': - case 'RR': - case 'SE': - case 'TO': - return autorizadores.SVRS; - default: - throw new Error('Autorizador não encontrado!'); - } + static getAutorizadorByUF(uf) { + switch (uf) { + case "AM": + return autorizadores.AM; + case "CE": + return autorizadores.CE; + case "GO": + return autorizadores.GO; + case "MT": + return autorizadores.MT; + case "MS": + return autorizadores.MS; + case "MG": + return autorizadores.MG; + case "PR": + return autorizadores.PR; + case "RS": + return autorizadores.RS; + case "SP": + return autorizadores.SP; + case "AC": + case "AL": + case "AP": + case "BA": + case "DF": + case "ES": + case "MA": + case "PA": + case "PB": + case "PE": + case "PI": + case "RJ": + case "RN": + case "RO": + case "RR": + case "SE": + case "TO": + return autorizadores.SVRS; + default: + throw new Error("Autorizador não encontrado!"); } - static getInfoQRCodeByUF(uf, amb) { - if (amb == '1') { - switch (uf) { - case 'AC': - return { urlChave: 'www.sefaznet.ac.gov.br/nfce/consulta', urlQRCode: 'http://www.sefaznet.ac.gov.br/nfce/qrcode' }; - case 'AL': - return { urlChave: 'www.sefaz.al.gov.br/nfce/consulta', urlQRCode: 'http://nfce.sefaz.al.gov.br/QRCode/consultarNFCe.jsp' }; - case 'AP': - return { urlChave: 'www.sefaz.ap.gov.br/nfce/consulta', urlQRCode: 'https://www.sefaz.ap.gov.br/nfce/nfcep.php' }; - case 'AM': - return { urlChave: 'www.sefaz.am.gov.br/nfce/consulta', urlQRCode: 'http://sistemas.sefaz.am.gov.br/nfceweb/consultarNFCe.jsp' }; - case 'BA': - return { urlChave: 'www.sefaz.ba.gov.br/nfce/consulta', urlQRCode: 'http://nfe.sefaz.ba.gov.br/servicos/nfce/modulos/geral/NFCEC_consulta_chave_acesso.aspx' }; - case 'CE': - return { urlChave: 'www.sefaz.ce.gov.br/nfce/consulta', urlQRCode: 'http://nfce.sefaz.ce.gov.br/pages/ShowNFCe.html' }; - case 'DF': - return { urlChave: 'www.fazenda.df.gov.br/nfce/consulta', urlQRCode: 'http://dec.fazenda.df.gov.br/ConsultarNFCe.aspx' }; - case 'ES': - return { urlChave: 'www.sefaz.es.gov.br/nfce/consulta', urlQRCode: 'http://app.sefaz.es.gov.br/ConsultaNFCe/qrcode.aspx' }; - case 'GO': - return { urlChave: 'www.sefaz.go.gov.br/nfce/consulta', urlQRCode: 'http://nfe.sefaz.go.gov.br/nfeweb/sites/nfce/danfeNFCe' }; - case 'MA': - return { urlChave: 'www.sefaz.ma.gov.br/nfce/consulta', urlQRCode: 'http://www.nfce.sefaz.ma.gov.br/portal/consultarNFCe.jsp' }; - case 'MG': - return { urlChave: 'http://nfce.fazenda.mg.gov.br/portalnfce', urlQRCode: 'https://nfce.fazenda.mg.gov.br/portalnfce/sistema/qrcode.xhtml' }; - case 'MS': - return { urlChave: 'http://www.dfe.ms.gov.br/nfce/consulta', urlQRCode: 'http://www.dfe.ms.gov.br/nfce/qrcode' }; - case 'MT': - return { urlChave: 'http://www.sefaz.mt.gov.br/nfce/consultanfce', urlQRCode: 'http://www.sefaz.mt.gov.br/nfce/consultanfce' }; - case 'PA': - return { urlChave: 'www.sefa.pa.gov.br/nfce/consulta', urlQRCode: 'https://appnfc.sefa.pa.gov.br/portal/view/consultas/nfce/nfceForm.seam' }; - case 'PB': - return { urlChave: 'www.receita.pb.gov.br/nfce/consulta', urlQRCode: 'http://www.receita.pb.gov.br/nfce' }; - case 'PE': - return { urlChave: 'nfce.sefaz.pe.gov.br/nfce/consulta', urlQRCode: 'http://nfce.sefaz.pe.gov.br/nfce-web/consultarNFCe' }; - case 'PI': - return { urlChave: 'www.sefaz.pi.gov.br/nfce/consulta', urlQRCode: 'http://www.sefaz.pi.gov.br/nfce/qrcode' }; - case 'PR': - return { urlChave: 'http://www.fazenda.pr.gov.br/nfce/consulta', urlQRCode: 'http://www.fazenda.pr.gov.br/nfce/qrcode/' }; - case 'RJ': - return { urlChave: 'www.fazenda.rj.gov.br/nfce/consulta', urlQRCode: 'http://www4.fazenda.rj.gov.br/consultaNFCe/QRCode' }; - case 'RN': - return { urlChave: 'www.set.rn.gov.br/nfce/consulta', urlQRCode: 'http://nfce.set.rn.gov.br/consultarNFCe.aspx' }; - case 'RO': - return { urlChave: 'www.sefin.ro.gov.br/nfce/consulta', urlQRCode: 'http://www.nfce.sefin.ro.gov.br/consultanfce/consulta.jsp' }; - case 'RS': - return { urlChave: 'www.sefaz.rs.gov.br/nfce/consulta', urlQRCode: 'https://www.sefaz.rs.gov.br/NFCE/NFCE-COM.aspx' }; - case 'RR': - return { urlChave: 'www.sefaz.rr.gov.br/nfce/consulta', urlQRCode: 'https://www.sefaz.rr.gov.br/nfce/servlet/qrcode' }; - case 'SE': - return { urlChave: 'http://www.nfce.se.gov.br/nfce/consulta', urlQRCode: 'http://www.nfce.se.gov.br/portal/consultarNFCe.jsp' }; - case 'SP': - return { urlChave: 'https://www.nfce.fazenda.sp.gov.br/consulta', urlQRCode: 'https://www.nfce.fazenda.sp.gov.br/qrcode' }; - case 'TO': - return { urlChave: 'www.sefaz.to.gov.br/nfce/consulta', urlQRCode: 'http://www.sefaz.to.gov.br/nfce/qrcode' }; - default: - throw new Error('URL do QRCode não encontrada pelo UF (' + uf + ') informado.'); - } - } - else { - switch (uf) { - case 'AC': - return { urlChave: 'www.sefaznet.ac.gov.br/nfce/consulta', urlQRCode: 'http://hml.sefaznet.ac.gov.br/nfce/qrcode' }; - case 'AL': - return { urlChave: 'www.sefaz.al.gov.br/nfce/consulta', urlQRCode: 'http://nfce.sefaz.al.gov.br/QRCode/consultarNFCe.jsp' }; - case 'AP': - return { urlChave: 'www.sefaz.ap.gov.br/nfce/consulta', urlQRCode: 'https://www.sefaz.ap.gov.br/nfcehml/nfce.php' }; - case 'AM': - return { urlChave: 'https://sistemas.sefaz.am.gov.br/nfceweb-hom/formConsulta.do', urlQRCode: 'https://sistemas.sefaz.am.gov.br/nfceweb-hom/consultarNFCe.jsp' }; - case 'BA': - return { urlChave: 'http://hinternet.sefaz.ba.gov.br/nfce/consulta', urlQRCode: 'http://hnfe.sefaz.ba.gov.br/servicos/nfce/modulos/geral/NFCEC_consulta_chave_acesso.aspx' }; - case 'CE': - return { urlChave: 'www.sefaz.ce.gov.br/nfce/consulta', urlQRCode: 'http://nfceh.sefaz.ce.gov.br/pages/ShowNFCe.html' }; - case 'DF': - return { urlChave: 'www.fazenda.df.gov.br/nfce/consulta', urlQRCode: 'http://dec.fazenda.df.gov.br/ConsultarNFCe.aspx' }; - case 'ES': - return { urlChave: 'www.sefaz.es.gov.br/nfce/consulta', urlQRCode: 'http://homologacao.sefaz.es.gov.br/ConsultaNFCe/qrcode.aspx' }; - case 'GO': - return { urlChave: 'http://www.nfce.go.gov.br/post/ver/214413/consulta-nfc-e-homologacao', urlQRCode: 'http://homolog.sefaz.go.gov.br/nfeweb/sites/nfce/danfeNFCe' }; - case 'MA': - return { urlChave: 'www.sefaz.ma.gov.br/nfce/consulta', urlQRCode: 'http://www.hom.nfce.sefaz.ma.gov.br/portal/consultarNFCe.jsp' }; - case 'MG': - return { urlChave: 'http://hnfce.fazenda.mg.gov.br/portalnfce', urlQRCode: 'https://nfce.fazenda.mg.gov.br/portalnfce/sistema/qrcode.xhtml' }; - case 'MS': - return { urlChave: 'http://www.dfe.ms.gov.br/nfce/consulta', urlQRCode: 'http://www.dfe.ms.gov.br/nfce/qrcode' }; - case 'MT': - return { urlChave: 'http://homologacao.sefaz.mt.gov.br/nfce/consultanfce', urlQRCode: 'http://homologacao.sefaz.mt.gov.br/nfce/consultanfce' }; - case 'PA': - return { urlChave: 'www.sefa.pa.gov.br/nfce/consulta', urlQRCode: 'https://appnfc.sefa.pa.gov.br/portal-homologacao/view/consultas/nfce/nfceForm.seam' }; - case 'PB': - return { urlChave: 'www.receita.pb.gov.br/nfcehom', urlQRCode: 'http://www.receita.pb.gov.br/nfcehom' }; - case 'PE': - return { urlChave: 'nfce.sefaz.pe.gov.br/nfce/consulta', urlQRCode: 'http://nfcehomolog.sefaz.pe.gov.br/nfce-web/consultarNFCe' }; - case 'PI': - return { urlChave: 'www.sefaz.pi.gov.br/nfce/consulta', urlQRCode: 'http://www.sefaz.pi.gov.br/nfce/qrcode' }; - case 'PR': - return { urlChave: 'http://www.fazenda.pr.gov.br/nfce/consulta', urlQRCode: 'http://www.fazenda.pr.gov.br/nfce/qrcode/' }; - case 'RJ': - return { urlChave: 'www.fazenda.rj.gov.br/nfce/consulta', urlQRCode: 'http://www4.fazenda.rj.gov.br/consultaNFCe/QRCode' }; - case 'RN': - return { urlChave: 'www.set.rn.gov.br/nfce/consulta', urlQRCode: 'http://hom.nfce.set.rn.gov.br/consultarNFCe.aspx' }; - case 'RO': - return { urlChave: 'www.sefin.ro.gov.br/nfce/consulta', urlQRCode: 'http://www.nfce.sefin.ro.gov.br/consultanfce/consulta.jsp' }; - case 'RS': - return { urlChave: 'www.sefaz.rs.gov.br/nfce/consulta', urlQRCode: 'https://www.sefaz.rs.gov.br/NFCE/NFCE-COM.aspx' }; - case 'RR': - return { urlChave: 'www.sefaz.rr.gov.br/nfce/consulta', urlQRCode: 'http://200.174.88.103:8080/nfce/servlet/qrcode' }; - case 'SE': - return { urlChave: 'http://www.hom.nfe.se.gov.br/nfce/consulta', urlQRCode: 'http://www.hom.nfe.se.gov.br/portal/consultarNFCe.jsp' }; - case 'SP': - return { urlChave: 'https://www.homologacao.nfce.fazenda.sp.gov.br/consulta', urlQRCode: 'https://www.homologacao.nfce.fazenda.sp.gov.br/qrcode' }; - case 'TO': - return { urlChave: 'http://homologacao.sefaz.to.gov.br/nfce/consulta.jsf', urlQRCode: 'http://homologacao.sefaz.to.gov.br/nfce/qrcode' }; - default: - throw new Error('URL do QRCode não encontrada pelo UF (' + uf + ') informado.'); - } - } + } + static getInfoQRCodeByUF(uf, amb) { + if (amb == "1") { + switch (uf) { + case "AC": + return { + urlChave: "www.sefaznet.ac.gov.br/nfce/consulta", + urlQRCode: "http://www.sefaznet.ac.gov.br/nfce/qrcode", + }; + case "AL": + return { + urlChave: "www.sefaz.al.gov.br/nfce/consulta", + urlQRCode: "http://nfce.sefaz.al.gov.br/QRCode/consultarNFCe.jsp", + }; + case "AP": + return { + urlChave: "www.sefaz.ap.gov.br/nfce/consulta", + urlQRCode: "https://www.sefaz.ap.gov.br/nfce/nfcep.php", + }; + case "AM": + return { + urlChave: "www.sefaz.am.gov.br/nfce/consulta", + urlQRCode: + "http://sistemas.sefaz.am.gov.br/nfceweb/consultarNFCe.jsp", + }; + case "BA": + return { + urlChave: "www.sefaz.ba.gov.br/nfce/consulta", + urlQRCode: + "http://nfe.sefaz.ba.gov.br/servicos/nfce/modulos/geral/NFCEC_consulta_chave_acesso.aspx", + }; + case "CE": + return { + urlChave: "www.sefaz.ce.gov.br/nfce/consulta", + urlQRCode: "http://nfce.sefaz.ce.gov.br/pages/ShowNFCe.html", + }; + case "DF": + return { + urlChave: "www.fazenda.df.gov.br/nfce/consulta", + urlQRCode: "http://dec.fazenda.df.gov.br/ConsultarNFCe.aspx", + }; + case "ES": + return { + urlChave: "www.sefaz.es.gov.br/nfce/consulta", + urlQRCode: "http://app.sefaz.es.gov.br/ConsultaNFCe/qrcode.aspx", + }; + case "GO": + return { + urlChave: "www.sefaz.go.gov.br/nfce/consulta", + urlQRCode: "http://nfe.sefaz.go.gov.br/nfeweb/sites/nfce/danfeNFCe", + }; + case "MA": + return { + urlChave: "www.sefaz.ma.gov.br/nfce/consulta", + urlQRCode: + "http://www.nfce.sefaz.ma.gov.br/portal/consultarNFCe.jsp", + }; + case "MG": + return { + urlChave: "http://nfce.fazenda.mg.gov.br/portalnfce", + urlQRCode: + "https://portalsped.fazenda.mg.gov.br/portalnfce/sistema/qrcode.xhtml", + }; + case "MS": + return { + urlChave: "http://www.dfe.ms.gov.br/nfce/consulta", + urlQRCode: "http://www.dfe.ms.gov.br/nfce/qrcode", + }; + case "MT": + return { + urlChave: "http://www.sefaz.mt.gov.br/nfce/consultanfce", + urlQRCode: "http://www.sefaz.mt.gov.br/nfce/consultanfce", + }; + case "PA": + return { + urlChave: "www.sefa.pa.gov.br/nfce/consulta", + urlQRCode: + "https://appnfc.sefa.pa.gov.br/portal/view/consultas/nfce/nfceForm.seam", + }; + case "PB": + return { + urlChave: "www.receita.pb.gov.br/nfce/consulta", + urlQRCode: "http://www.receita.pb.gov.br/nfce", + }; + case "PE": + return { + urlChave: "nfce.sefaz.pe.gov.br/nfce/consulta", + urlQRCode: "http://nfce.sefaz.pe.gov.br/nfce-web/consultarNFCe", + }; + case "PI": + return { + urlChave: "www.sefaz.pi.gov.br/nfce/consulta", + urlQRCode: "http://www.sefaz.pi.gov.br/nfce/qrcode", + }; + case "PR": + return { + urlChave: "http://www.fazenda.pr.gov.br/nfce/consulta", + urlQRCode: "http://www.fazenda.pr.gov.br/nfce/qrcode/", + }; + case "RJ": + return { + urlChave: "www.fazenda.rj.gov.br/nfce/consulta", + urlQRCode: "http://www4.fazenda.rj.gov.br/consultaNFCe/QRCode", + }; + case "RN": + return { + urlChave: "www.set.rn.gov.br/nfce/consulta", + urlQRCode: "http://nfce.set.rn.gov.br/consultarNFCe.aspx", + }; + case "RO": + return { + urlChave: "www.sefin.ro.gov.br/nfce/consulta", + urlQRCode: + "http://www.nfce.sefin.ro.gov.br/consultanfce/consulta.jsp", + }; + case "RS": + return { + urlChave: "www.sefaz.rs.gov.br/nfce/consulta", + urlQRCode: "https://www.sefaz.rs.gov.br/NFCE/NFCE-COM.aspx", + }; + case "RR": + return { + urlChave: "www.sefaz.rr.gov.br/nfce/consulta", + urlQRCode: "https://www.sefaz.rr.gov.br/nfce/servlet/qrcode", + }; + case "SE": + return { + urlChave: "http://www.nfce.se.gov.br/nfce/consulta", + urlQRCode: "http://www.nfce.se.gov.br/portal/consultarNFCe.jsp", + }; + case "SP": + return { + urlChave: "https://www.nfce.fazenda.sp.gov.br/consulta", + urlQRCode: "https://www.nfce.fazenda.sp.gov.br/qrcode", + }; + case "TO": + return { + urlChave: "www.sefaz.to.gov.br/nfce/consulta", + urlQRCode: "http://www.sefaz.to.gov.br/nfce/qrcode", + }; + default: + throw new Error( + "URL do QRCode não encontrada pelo UF (" + uf + ") informado." + ); + } + } else { + switch (uf) { + case "AC": + return { + urlChave: "www.sefaznet.ac.gov.br/nfce/consulta", + urlQRCode: "http://hml.sefaznet.ac.gov.br/nfce/qrcode", + }; + case "AL": + return { + urlChave: "www.sefaz.al.gov.br/nfce/consulta", + urlQRCode: "http://nfce.sefaz.al.gov.br/QRCode/consultarNFCe.jsp", + }; + case "AP": + return { + urlChave: "www.sefaz.ap.gov.br/nfce/consulta", + urlQRCode: "https://www.sefaz.ap.gov.br/nfcehml/nfce.php", + }; + case "AM": + return { + urlChave: + "https://sistemas.sefaz.am.gov.br/nfceweb-hom/formConsulta.do", + urlQRCode: + "https://sistemas.sefaz.am.gov.br/nfceweb-hom/consultarNFCe.jsp", + }; + case "BA": + return { + urlChave: "http://hinternet.sefaz.ba.gov.br/nfce/consulta", + urlQRCode: + "http://hnfe.sefaz.ba.gov.br/servicos/nfce/modulos/geral/NFCEC_consulta_chave_acesso.aspx", + }; + case "CE": + return { + urlChave: "www.sefaz.ce.gov.br/nfce/consulta", + urlQRCode: "http://nfceh.sefaz.ce.gov.br/pages/ShowNFCe.html", + }; + case "DF": + return { + urlChave: "www.fazenda.df.gov.br/nfce/consulta", + urlQRCode: "http://dec.fazenda.df.gov.br/ConsultarNFCe.aspx", + }; + case "ES": + return { + urlChave: "www.sefaz.es.gov.br/nfce/consulta", + urlQRCode: + "http://homologacao.sefaz.es.gov.br/ConsultaNFCe/qrcode.aspx", + }; + case "GO": + return { + urlChave: + "http://www.nfce.go.gov.br/post/ver/214413/consulta-nfc-e-homologacao", + urlQRCode: + "http://homolog.sefaz.go.gov.br/nfeweb/sites/nfce/danfeNFCe", + }; + case "MA": + return { + urlChave: "www.sefaz.ma.gov.br/nfce/consulta", + urlQRCode: + "http://www.hom.nfce.sefaz.ma.gov.br/portal/consultarNFCe.jsp", + }; + case "MG": + return { + urlChave: "http://hnfce.fazenda.mg.gov.br/portalnfce", + urlQRCode: + "https://portalsped.fazenda.mg.gov.br/portalnfce/sistema/qrcode.xhtml", + }; + case "MS": + return { + urlChave: "http://www.dfe.ms.gov.br/nfce/consulta", + urlQRCode: "http://www.dfe.ms.gov.br/nfce/qrcode", + }; + case "MT": + return { + urlChave: "http://homologacao.sefaz.mt.gov.br/nfce/consultanfce", + urlQRCode: "http://homologacao.sefaz.mt.gov.br/nfce/consultanfce", + }; + case "PA": + return { + urlChave: "www.sefa.pa.gov.br/nfce/consulta", + urlQRCode: + "https://appnfc.sefa.pa.gov.br/portal-homologacao/view/consultas/nfce/nfceForm.seam", + }; + case "PB": + return { + urlChave: "www.receita.pb.gov.br/nfcehom", + urlQRCode: "http://www.receita.pb.gov.br/nfcehom", + }; + case "PE": + return { + urlChave: "nfce.sefaz.pe.gov.br/nfce/consulta", + urlQRCode: + "http://nfcehomolog.sefaz.pe.gov.br/nfce-web/consultarNFCe", + }; + case "PI": + return { + urlChave: "www.sefaz.pi.gov.br/nfce/consulta", + urlQRCode: "http://www.sefaz.pi.gov.br/nfce/qrcode", + }; + case "PR": + return { + urlChave: "http://www.fazenda.pr.gov.br/nfce/consulta", + urlQRCode: "http://www.fazenda.pr.gov.br/nfce/qrcode/", + }; + case "RJ": + return { + urlChave: "www.fazenda.rj.gov.br/nfce/consulta", + urlQRCode: "http://www4.fazenda.rj.gov.br/consultaNFCe/QRCode", + }; + case "RN": + return { + urlChave: "www.set.rn.gov.br/nfce/consulta", + urlQRCode: "http://hom.nfce.set.rn.gov.br/consultarNFCe.aspx", + }; + case "RO": + return { + urlChave: "www.sefin.ro.gov.br/nfce/consulta", + urlQRCode: + "http://www.nfce.sefin.ro.gov.br/consultanfce/consulta.jsp", + }; + case "RS": + return { + urlChave: "www.sefaz.rs.gov.br/nfce/consulta", + urlQRCode: "https://www.sefaz.rs.gov.br/NFCE/NFCE-COM.aspx", + }; + case "RR": + return { + urlChave: "www.sefaz.rr.gov.br/nfce/consulta", + urlQRCode: "http://200.174.88.103:8080/nfce/servlet/qrcode", + }; + case "SE": + return { + urlChave: "http://www.hom.nfe.se.gov.br/nfce/consulta", + urlQRCode: "http://www.hom.nfe.se.gov.br/portal/consultarNFCe.jsp", + }; + case "SP": + return { + urlChave: "https://www.homologacao.nfce.fazenda.sp.gov.br/consulta", + urlQRCode: "https://www.homologacao.nfce.fazenda.sp.gov.br/qrcode", + }; + case "TO": + return { + urlChave: "http://homologacao.sefaz.to.gov.br/nfce/consulta.jsf", + urlQRCode: "http://homologacao.sefaz.to.gov.br/nfce/qrcode", + }; + default: + throw new Error( + "URL do QRCode não encontrada pelo UF (" + uf + ") informado." + ); + } } - static getSoapInfo(uf, amb, servico) { - let soap = {}; - let autorizador = this.getAutorizadorByUF(uf); - if (amb == '1') - soap.url = Utils.validaUrlWsdl(autorizador.servicos[servico].url_producao); - else - soap.url = Utils.validaUrlWsdl(autorizador.servicos[servico].url_homologacao); - if (servico == nfe_1.ServicosSefaz.autorizacao) { - let infoQRCode = this.getInfoQRCodeByUF(uf, amb); - soap.urlQRCode = infoQRCode.urlQRCode; - soap.urlChave = infoQRCode.urlChave; - } - soap.contentType = functions_1.getContentType(uf); - soap.method = servicos[servico].method; - soap.action = servicos[servico].action; - return soap; + } + static getSoapInfo(uf, amb, servico) { + let soap = {}; + let autorizador = this.getAutorizadorByUF(uf); + if (amb == "1") + soap.url = Utils.validaUrlWsdl( + autorizador.servicos[servico].url_producao + ); + else + soap.url = Utils.validaUrlWsdl( + autorizador.servicos[servico].url_homologacao + ); + if (servico == nfe_1.ServicosSefaz.autorizacao) { + let infoQRCode = this.getInfoQRCodeByUF(uf, amb); + soap.urlQRCode = infoQRCode.urlQRCode; + soap.urlChave = infoQRCode.urlChave; } + soap.contentType = functions_1.getContentType(uf); + soap.method = servicos[servico].method; + soap.action = servicos[servico].action; + return soap; + } } exports.SefazNFCe = SefazNFCe; diff --git a/rascunho/lote-envio.xml b/rascunho/lote-envio.xml deleted file mode 100644 index 11ce78e..0000000 --- a/rascunho/lote-envio.xml +++ /dev/null @@ -1,186 +0,0 @@ - - 544825801842804 - 1 - - - - 31 - 83854922 - VENDA - 55 - 20 - 302 - 2022-04-28T22:44:57-03:00 - 1 - 1 - 3106200 - 0 - 1 - 4 - 2 - 1 - 1 - 2 - 0 - 0 - NODE-NFE TEST 1.0 - - - 00453160000196 - TESTE - TESTE - - Rua Teste - 123 - Bairro Teste - 3106200 - Belo Horizonte - MG - 31535510 - 1058 - BRASIL - 999999999 - - 0010104790032 - 1 - - - 34493536837 - NF-E EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL - - RUA A - 1 - CENTRO - 3106200 - Belo Horizonte - MG - 30180090 - - 9 - - - - 84233 - 7898221456293 - NOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL - 85164000 - 2104400 - 5102 - SAC - 1.0000 - 31.80 - 31.80 - 7898221456293 - SAC - 1.0000 - 31.80 - 1 - 123 - 1 - - - 0 - - - 0 - 400 - - - - - 01 - 0 - 0.17 - 0 - - - - - 01 - 0 - 0.81 - 0 - - - - - - - 0 - 0 - 0.00 - 0.00 - 0.00 - 0.00 - 0.00 - 0.00 - 31.80 - 0.00 - 0.00 - 0.00 - 0.00 - 0.00 - 0.00 - 0.00 - 0.00 - 0.00 - 31.80 - - - - 0 - - Transportadora teste Ltda - - - - - 20202704-01 - 31.80 - 0.00 - 31.80 - - - 001 - 2022-05-05 - 15.90 - - - 002 - 2022-05-19 - 15.90 - - - - - 1 - 14 - 31.80 - - - - TESTE NFE 55 - - - - - - - - - - - - - S6MzBvk5tL3xTNvz1gd8GHmdWOg= - - - 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 - - - - - \ No newline at end of file diff --git a/rascunho/nf.xml b/rascunho/nf.xml deleted file mode 100644 index d6a99b5..0000000 --- a/rascunho/nf.xml +++ /dev/null @@ -1 +0,0 @@ -19955770093972813139095548VENDA551115352022-03-15T10:18:26-03:00113106200116211202.11.3.1000453160000196OMNI SOFTWARE LTDAOMNISOFTRUA JOSE ALVES DA SILVA140CAICARAS3106200BELO HORIZONTEMG307753901058BRASIL0010104790032345590206634NF-E EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCALRUA ANTONIO CESARIO DA ROCHA155101CAICARA3106200BELO HORIZONTEMG30750170319751868649141217896855901421NOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL2204210002024005102UNI1.0000204.01204.0117896855901421UNI1.0000204.01100003204.0118.0036.7201204.010001204.010014137896855901424VINHO BRANCO SECO SELECAO LITRO - UND2204210002024005102UNI1.000017.8517.857896855901424UNI1.000017.8510000317.8518.003.210117.85000117.850013837896931611438VINHO BRANCO SECO CAIXA 12 UND 750 ML2204210002024005102UNI1.00001000.001000.007896931611438UNI1.00001000.001000031000.0018.00180.0001100000011000001221.86219.930.000.000.000.000.000.000.000.000.001221.860.000.000.000.000.000.000.000.000.001221.860.0011141221.86Trib. aprox. R$ 197.58 Federal,R$ 329.90 Estadual Fonte: IBPT/empresometro.com.br D529CB. nullYz3MM/4RvNl9AtYqRXtpfshWCw8=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 \ No newline at end of file diff --git a/rascunho/xml-51778.xml b/rascunho/xml-51778.xml deleted file mode 100644 index d627853..0000000 --- a/rascunho/xml-51778.xml +++ /dev/null @@ -1 +0,0 @@ -3185773743VENDA551116682022-04-22T10:34:31-03:001231062001112112002.11.3.100453160000196OMNI SOFTWARE LTDAOMNISOFTRUA DESEMB ONOFRE MENDES JUNIOR13CAICARAS3106200BELO HORIZONTEMG315355101058BRASIL0010104790032314050467755NF-E EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCALRUA JOAO EUGENIO ERTHAL64BEM TE VI3300506BOM JARDIMRJ286600002281840156914137896855901424NOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL2204210002024006108UNI2.000017.8535.707896855901424UNI2.000017.855.001.00115.41000339.7012.004.760134.700.000.000134.700.000.0039.7039.702.0020.0012.00100.000.793.180.0039.704.760.000.793.180.0000.000.000.000.0035.705.000.001.000.000.000.000.000.000.0039.7015.4101VOLUMESDIVERSAS0011439.70Trib. aprox. R$ 5.77 Federal,R$ 9.64 Estadual Fonte: IBPT/empresometro.com.br D529CB. Venda Destinada a Consumidor Final conforme pedido 00 atravez de sistema E-Commerce, conf. CONVENIO ICMS 190/17. Lei no 6.763/75 art 9o RICMS(Dec. 43.080/02). PTA 45.000016075-11 // MERCADORIA DESTINADA A USO E CONSUMO VEDADO O APROVEITAMENTO DO CREDITO NOS TERMOS DO INCISO III ART. 70 DO RICMSkdvfFqoLR/UyOYAjO2QIXFBU45k=asQvi7m3ZZh7MXY/NIAwj6ONF0/6sva84bawb2DHEhOKza9ao5qlxW/1xjPL88bhOmWbA6Fk0z6zjx4acXuvwDeFJBolB2FXStqYI6spdrTy1arK2gymzW6cyr4c24FeU7G7ZskDLYxVmK95LJxwQUr/yyHzoUNr0/Y3l3cz+0wUuw/FpkwNJK3rkkmh79Z25sLpPtdk5KFj+ntgatxlQuGN6S1slK/BvyfMfjNlmBJaWn8MN3OzRJYQ5AtTS4mE5JN8DmEmZt+wf0izeCS8ZVS/sEsQ54mAz5Zfa6vI4Hk8fifeish7+QCpk1H10S1uAk+SBY0UyE2ZCJoZRCWV4g==MIIHkTCCBXmgAwIBAgIISQgRr+ZcrCcwDQYJKoZIhvcNAQELBQAwczELMAkGA1UEBhMCQlIxEzARBgNVBAoTCklDUC1CcmFzaWwxNjA0BgNVBAsTLVNlY3JldGFyaWEgZGEgUmVjZWl0YSBGZWRlcmFsIGRvIEJyYXNpbCAtIFJGQjEXMBUGA1UEAxMOQUMgTElOSyBSRkIgdjIwHhcNMjExMTE5MjEwODMzWhcNMjIxMTE5MjEwODMzWjCB+DELMAkGA1UEBhMCQlIxEzARBgNVBAoTCklDUC1CcmFzaWwxCzAJBgNVBAgTAk1HMRcwFQYDVQQHEw5CRUxPIEhPUklaT05URTEXMBUGA1UECxMONDI3NzA2MjgwMDAxMTYxNjA0BgNVBAsTLVNlY3JldGFyaWEgZGEgUmVjZWl0YSBGZWRlcmFsIGRvIEJyYXNpbCAtIFJGQjEWMBQGA1UECxMNUkZCIGUtQ05QSiBBMTEZMBcGA1UECxMQdmlkZW9jb25mZXJlbmNpYTEqMCgGA1UEAxMhT01OSSBTT0ZUV0FSRSBMVERBOjAwNDUzMTYwMDAwMTk2MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxieYc1sabBWkIj9G/X3zA3TLrDsopEprxVY1HYTRU+VA/XMb4qW9OBpl5+nkHkTT0IdfJB5Fk/eC8Aa/0WlJGTxQ+/E4yB4mai5zw9J6tSCDSZsgyBDLiH+lRwGPLxNTvB/iali2uotep8iOxK1bKGkC6j7yUsI/+akSTVjE0wmrBZDBjmR+hFka1XTqQLObTQylmclyB1rmgy/25lylWh267gq9+ziBWfyw6ZUpMct/MuFLaGqqy43fLW3wjXWui/Mc81V+UAZoBoaGN7NlZk9dz6l0xvbGuC56KOv9D9SgKqYWQpHWss6//6J7/RnvV2wGjxy3WWLoejNod9MMJQIDAQABo4ICoTCCAp0wHwYDVR0jBBgwFoAUDd/WR/QTTuUiWDIsZqbnLuRXvAIwDgYDVR0PAQH/BAQDAgXgMG4GA1UdIARnMGUwYwYGYEwBAgE7MFkwVwYIKwYBBQUHAgEWS2h0dHA6Ly9yZXBvc2l0b3Jpby5saW5rY2VydGlmaWNhY2FvLmNvbS5ici9hYy1saW5rcmZiL2FjLWxpbmstcmZiLXBjLWExLnBkZjCBsAYDVR0fBIGoMIGlMFCgTqBMhkpodHRwOi8vcmVwb3NpdG9yaW8ubGlua2NlcnRpZmljYWNhby5jb20uYnIvYWMtbGlua3JmYi9sY3ItYWMtbGlua3JmYnY1LmNybDBRoE+gTYZLaHR0cDovL3JlcG9zaXRvcmlvMi5saW5rY2VydGlmaWNhY2FvLmNvbS5ici9hYy1saW5rcmZiL2xjci1hYy1saW5rcmZidjUuY3JsMGIGCCsGAQUFBwEBBFYwVDBSBggrBgEFBQcwAoZGaHR0cDovL3JlcG9zaXRvcmlvLmxpbmtjZXJ0aWZpY2FjYW8uY29tLmJyL2FjLWxpbmtyZmIvYWMtbGlua3JmYnY1LnA3YjCBuAYDVR0RBIGwMIGtgRdNQUlMLk9NTklTT0ZUQEdNQUlMLkNPTaAkBgVgTAEDAqAbExlHRVNURUZBTkUgUkFCQkkgTUFHQUxIQUVToBkGBWBMAQMDoBATDjAwNDUzMTYwMDAwMTk2oDgGBWBMAQMEoC8TLTA0MDIxOTcxNjA5NjIzMDU2MzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMKAXBgVgTAEDB6AOEwwwMDAwMDAwMDAwMDAwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMEMAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggIBAAKyAD+th5DuwgtcKWDMaQglq744V73GIke/EjTzt+SmGz6gR0+dGDQzLKQ2OMM92TYn1JaQmUuDjYNUh4s1JVYaOtF9ROUYQb+X6aKLFe8vIgvjACqqX1iwI4eiJtMJJSH8lGlqt7NXIOD2c2OKGd/pwoUlJ30SQwyNTJO/Gd6WpDcthUeGtCiBXjSMXKfFMqv/mQVrwSdtUxPCwaGH0SQoa0LXY/LRkkTT3CmaMRQYPevdcqKESJ3tVVSEigZfqiDN0akTe7FUtRw1+S+7A62ohW4tTtuprblT/cltaewz+GFFkzbEIamLlBQN/vhoIq+p0rRkCv6+fKkM4p5BlOW+bgCb6Hg5cAhOBADMBGmZlE/ZDNTMMbfNjT9CiI+f5ZcJjEbl922xJjnd2ERpimjGAU8dTWNa4qJaQys8c+biNMmw4oClfsbJjfOgWx7IiqO7TTM4sNE6sViGcClvvQfTtOHeeTKqzO9CYQeZbF4xQuzeACb8ciagCyY7VaS2VqhHpj2Po9WYU0aTMowZ7yhbadMRz5ZTjXMM8L/1IABueGyFGKFtZQlAlDN22OTGWp6jxvhrferFlGBD+UNO7mqdS8cVJt4xJAYgOADW1yzhMTz1r7bHs4iOBjLyS2zz3qfg159yeZAOieLJivK1Bjhe15S8gR3ycGuNE3HQuaTZ214.4.66-OR3312204004531600001965500100001166818577374312022-04-22T10:34:33-03:00131220145472091kdvfFqoLR/UyOYAjO2QIXFBU45k=100Autorizado o uso da NF-e \ No newline at end of file diff --git a/src/factory/webservices/sefazNfce.ts b/src/factory/webservices/sefazNfce.ts index 2936a0a..48cfae2 100644 --- a/src/factory/webservices/sefazNfce.ts +++ b/src/factory/webservices/sefazNfce.ts @@ -73,7 +73,7 @@ export abstract class SefazNFCe { case 'MA': return { urlChave: 'www.sefaz.ma.gov.br/nfce/consulta', urlQRCode: 'http://www.nfce.sefaz.ma.gov.br/portal/consultarNFCe.jsp' }; case 'MG': - return { urlChave: 'http://nfce.fazenda.mg.gov.br/portalnfce', urlQRCode: 'https://nfce.fazenda.mg.gov.br/portalnfce/sistema/qrcode.xhtml' }; + return { urlChave: 'http://nfce.fazenda.mg.gov.br/portalnfce', urlQRCode: 'https://portalsped.fazenda.mg.gov.br/portalnfce/sistema/qrcode.xhtml' }; case 'MS': return { urlChave: 'http://www.dfe.ms.gov.br/nfce/consulta', urlQRCode: 'http://www.dfe.ms.gov.br/nfce/qrcode' }; case 'MT': @@ -130,7 +130,7 @@ export abstract class SefazNFCe { case 'MA': return { urlChave: 'www.sefaz.ma.gov.br/nfce/consulta', urlQRCode: 'http://www.hom.nfce.sefaz.ma.gov.br/portal/consultarNFCe.jsp' }; case 'MG': - return { urlChave: 'http://hnfce.fazenda.mg.gov.br/portalnfce', urlQRCode: 'https://nfce.fazenda.mg.gov.br/portalnfce/sistema/qrcode.xhtml' }; + return { urlChave: 'http://hnfce.fazenda.mg.gov.br/portalnfce', urlQRCode: 'https://portalsped.fazenda.mg.gov.br/portalnfce/sistema/qrcode.xhtml' }; case 'MS': return { urlChave: 'http://www.dfe.ms.gov.br/nfce/consulta', urlQRCode: 'http://www.dfe.ms.gov.br/nfce/qrcode' }; case 'MT': From dce6d7aa2b4e085b9d1a4fd0623eb71c4b0b578e Mon Sep 17 00:00:00 2001 From: gestefane Date: Mon, 23 May 2022 23:11:04 -0300 Subject: [PATCH 08/11] correcao de erro 415 (unsupported media type) nas requisicoes de NFCe para MG --- lib/factory/webservices/functions.js | 14 ++++++++------ src/factory/webservices/functions.ts | 2 ++ 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/lib/factory/webservices/functions.js b/lib/factory/webservices/functions.js index f0c69d0..b9f0786 100644 --- a/lib/factory/webservices/functions.js +++ b/lib/factory/webservices/functions.js @@ -2,11 +2,13 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.getContentType = void 0; function getContentType(uf) { - switch (uf) { - case 'GO': - return "application/soap+xml"; - default: - return "text/xml;charset=utf-8"; - } + switch (uf) { + case "GO": + return "application/soap+xml"; + case "MG": + return "application/soap+xml"; + default: + return "text/xml;charset=utf-8"; + } } exports.getContentType = getContentType; diff --git a/src/factory/webservices/functions.ts b/src/factory/webservices/functions.ts index b23106c..c48973a 100644 --- a/src/factory/webservices/functions.ts +++ b/src/factory/webservices/functions.ts @@ -2,6 +2,8 @@ export function getContentType(uf: string): string { switch (uf) { case 'GO': return "application/soap+xml"; + case 'MG': + return "application/soap+xml"; default: return "text/xml;charset=utf-8"; } From 58f6ba00764cb0ae0f33d2847c27fd99f777cb27 Mon Sep 17 00:00:00 2001 From: gestefane Date: Wed, 22 Jun 2022 10:01:33 -0300 Subject: [PATCH 09/11] NFC-e - correcao na interpretacao do retorno de envio - nomes de chaves SOAP --- lib/factory/processor/enviaProcessor.js | 1 + lib/factory/processor/nfeProcessor.d.ts | 1 + lib/factory/webservices/webserviceHelper.js | 8 ++++++-- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/factory/processor/enviaProcessor.js b/lib/factory/processor/enviaProcessor.js index 98a4314..cdb8b38 100644 --- a/lib/factory/processor/enviaProcessor.js +++ b/lib/factory/processor/enviaProcessor.js @@ -227,6 +227,7 @@ class EnviaProcessor { } catch (e) { log(`ja deu erro pra logar(2).......${e.toString()}`, "retornoEnvio"); } + console.log(retornoEnvio || "sem retorno do envio"); if (retornoEnvio && retornoEnvio.data) { const data = Object(retornoEnvio.data); if (data.retEnviNFe) { diff --git a/lib/factory/processor/nfeProcessor.d.ts b/lib/factory/processor/nfeProcessor.d.ts index 4ed9ebe..22bf42c 100644 --- a/lib/factory/processor/nfeProcessor.d.ts +++ b/lib/factory/processor/nfeProcessor.d.ts @@ -18,6 +18,7 @@ export declare class NFeProcessor { * @param documento Array de documentos modelo 55 ou 1 documento modelo 65 */ processarDocumentoAsync(documento: NFeDocumento | NFCeDocumento): Promise; + obterXmlLoteAssinado(documento: NFeBase); private configuraUrlsSefaz; private appendQRCodeXML; transmitirXml(xmlLote: string, modelo: string, ambiente: string, nfeObj: Object): Promise; diff --git a/lib/factory/webservices/webserviceHelper.js b/lib/factory/webservices/webserviceHelper.js index b8e9fa9..3a72af0 100644 --- a/lib/factory/webservices/webserviceHelper.js +++ b/lib/factory/webservices/webserviceHelper.js @@ -109,8 +109,12 @@ class WebServiceHelper { let retorno = xmlHelper_1.XmlHelper.deserializeXml(result.xml_recebido, { explicitArray: false }); if (retorno) { //result.data = retorno; - result.data = Object(retorno)['soap:Envelope'] != undefined ? result.data = Object(retorno)['soap:Envelope']['soap:Body']['nfeResultMsg'] : result.data = Object(retorno)['env:Envelope']['env:Body']['nfeResultMsg']; - //console.log(result.data) + // result.data = Object(retorno)['soap:Envelope'] != undefined ? result.data = Object(retorno)['soap:Envelope']['soap:Body']['nfeResultMsg'] : result.data = Object(retorno)['env:Envelope']['env:Body']['nfeResultMsg']; + result.data = Object(retorno)['S:Envelope'] != undefined ? + result.data = Object(retorno)['S:Envelope']['S:Body']['nfeResultMsg'] : + result.data = Object(retorno)['env:Envelope']['env:Body']['nfeResultMsg']; + + console.log(result.data) } } console.log('----->', result.success); From abafdf1a28a56c8729b7cae9c8d9ce07ff3c4b11 Mon Sep 17 00:00:00 2001 From: gestefane Date: Wed, 22 Jun 2022 10:31:49 -0300 Subject: [PATCH 10/11] =?UTF-8?q?corre=C3=A7=C3=A3o=20interpretacao=20reto?= =?UTF-8?q?rno=20envio=20para=20nfe=20-=20usando=20chave=20soap=20em=20vez?= =?UTF-8?q?=20de=20env?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/factory/webservices/webserviceHelper.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/factory/webservices/webserviceHelper.js b/lib/factory/webservices/webserviceHelper.js index 3a72af0..98d8370 100644 --- a/lib/factory/webservices/webserviceHelper.js +++ b/lib/factory/webservices/webserviceHelper.js @@ -112,7 +112,7 @@ class WebServiceHelper { // result.data = Object(retorno)['soap:Envelope'] != undefined ? result.data = Object(retorno)['soap:Envelope']['soap:Body']['nfeResultMsg'] : result.data = Object(retorno)['env:Envelope']['env:Body']['nfeResultMsg']; result.data = Object(retorno)['S:Envelope'] != undefined ? result.data = Object(retorno)['S:Envelope']['S:Body']['nfeResultMsg'] : - result.data = Object(retorno)['env:Envelope']['env:Body']['nfeResultMsg']; + result.data = Object(retorno)['soap:Envelope']['soap:Body']['nfeResultMsg']; console.log(result.data) } From 81ef1d3d9019608987f999e405312f0236818b5b Mon Sep 17 00:00:00 2001 From: gestefane Date: Wed, 13 Jul 2022 13:27:24 -0300 Subject: [PATCH 11/11] =?UTF-8?q?For=C3=A7ando=20a=20reconfiguracao=20da?= =?UTF-8?q?=20url=20sefaz=20a=20cada=20novo=20documento.=20Evita=20o=20uso?= =?UTF-8?q?=20de=20=20uma=20unica=20configuracao=20de=20url,=20feita=20no?= =?UTF-8?q?=20inicio=20do=20app=20(por=20exemplo=20para=20mod55)=20e=20se?= =?UTF-8?q?=20preccisar=20fazer=20mod65=20logo=20apos=20um=2055=20ocorrer?= =?UTF-8?q?=20erro=20por=20estar=20configurada=20a=20url=20do=20mod55=20ca?= =?UTF-8?q?rregada=20antes.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/factory/processor/enviaProcessor.js | 30 +++++++++++++------------ lib/factory/processor/nfeProcessor.js | 28 ++++++++++++----------- r | 1 + 3 files changed, 32 insertions(+), 27 deletions(-) create mode 100755 r diff --git a/lib/factory/processor/enviaProcessor.js b/lib/factory/processor/enviaProcessor.js index cdb8b38..76660bd 100644 --- a/lib/factory/processor/enviaProcessor.js +++ b/lib/factory/processor/enviaProcessor.js @@ -136,19 +136,21 @@ class EnviaProcessor { geral: { modelo, ambiente }, empresa, } = this.configuracoes; - if (!soapAutorizacao || !soapRetAutorizacao) { - let Sefaz = modelo == "65" ? sefazNfce_1.SefazNFCe : sefazNfe_1.SefazNFe; - soapAutorizacao = Sefaz.getSoapInfo( - empresa.endereco.uf, - ambiente, - nfe_1.ServicosSefaz.autorizacao - ); - soapRetAutorizacao = Sefaz.getSoapInfo( - empresa.endereco.uf, - ambiente, - nfe_1.ServicosSefaz.retAutorizacao - ); - } + //if (!soapAutorizacao || !soapRetAutorizacao) { + // nao da pra deixar condicionado a ja estar carregado porque senao so recarrega 1x no start da app e durante o uso se for + // preciso alternar entre NFe ou NFC-e da erro por nao localizar a urlSefaz do modelo usado na 2a vez que alternar + let Sefaz = modelo == "65" ? sefazNfce_1.SefazNFCe : sefazNfe_1.SefazNFe; + soapAutorizacao = Sefaz.getSoapInfo( + empresa.endereco.uf, + ambiente, + nfe_1.ServicosSefaz.autorizacao + ); + soapRetAutorizacao = Sefaz.getSoapInfo( + empresa.endereco.uf, + ambiente, + nfe_1.ServicosSefaz.retAutorizacao + ); + // } } appendQRCodeXML(documento, xmlAssinado) { let qrCode = null; @@ -227,7 +229,7 @@ class EnviaProcessor { } catch (e) { log(`ja deu erro pra logar(2).......${e.toString()}`, "retornoEnvio"); } - console.log(retornoEnvio || "sem retorno do envio"); + console.log(retornoEnvio || "sem retorno do envio"); if (retornoEnvio && retornoEnvio.data) { const data = Object(retornoEnvio.data); if (data.retEnviNFe) { diff --git a/lib/factory/processor/nfeProcessor.js b/lib/factory/processor/nfeProcessor.js index b3be263..9bebd07 100644 --- a/lib/factory/processor/nfeProcessor.js +++ b/lib/factory/processor/nfeProcessor.js @@ -128,19 +128,21 @@ class NFeProcessor { return result; } configuraUrlsSefaz(modelo, ambiente) { - if (!soapAutorizacao || !soapRetAutorizacao) { - let Sefaz = modelo == "65" ? sefazNfce_1.SefazNFCe : sefazNfe_1.SefazNFe; - soapAutorizacao = Sefaz.getSoapInfo( - this.empresa.endereco.uf, - ambiente, - nfe_1.ServicosSefaz.autorizacao - ); - soapRetAutorizacao = Sefaz.getSoapInfo( - this.empresa.endereco.uf, - ambiente, - nfe_1.ServicosSefaz.retAutorizacao - ); - } + //if (!soapAutorizacao || !soapRetAutorizacao) { + // nao da pra deixar condicionado a ja estar carregado porque senao so recarrega 1x no start da app e durante o uso se for + // preciso alternar entre NFe ou NFC-e da erro por nao localizar a urlSefaz do modelo usado na 2a vez que alternar + let Sefaz = modelo == "65" ? sefazNfce_1.SefazNFCe : sefazNfe_1.SefazNFe; + soapAutorizacao = Sefaz.getSoapInfo( + this.empresa.endereco.uf, + ambiente, + nfe_1.ServicosSefaz.autorizacao + ); + soapRetAutorizacao = Sefaz.getSoapInfo( + this.empresa.endereco.uf, + ambiente, + nfe_1.ServicosSefaz.retAutorizacao + ); + // } } appendQRCodeXML(documento, xmlAssinado) { let qrCode = null; diff --git a/r b/r new file mode 100755 index 0000000..934e9d1 --- /dev/null +++ b/r @@ -0,0 +1 @@ +node omni-nfetest2.js