Ir para conteúdo
  • Cadastre-se

Painel de líderes

Conteúdo popular

Showing content with the highest reputation on 06-04-2018 em todas as áreas

  1. Boa tarde! A partir de segunda-feira 09/04 (ficará fora do ar das 8:00 as 18:00) o ambiente de produção restrita passará a operacionalizar na versão 2.4.02 do layout. http://portal.esocial.gov.br/noticias/producao-restrita-sera-atualizada-para-a-versao-2-4-02-do-leiaute-em-09-04 Outra notícia importante é que a partir de segunda-feira (09/04) também começa a funcionar o eSocial Web para as as empresas, que poderão consultar os eventos enviados, o conteúdo, os recibos, etc. Também haverá a possibilidade de incluir/alterar/retificar/excluir os eventos diretamente pelo ambiente nas versões futuras. http://portal.esocial.gov.br/noticias/esocial-web-para-empresas-e-regras-de-eventos-extemporaneos-entram-em-producao-em-09-04
    2 pontos
  2. Boa noite, Apenas um ajuste para quem estiver passando pela "Rejeição: Total da NF difere do somatório dos Valores compõe o valor Total da NF." na hora de "ValidarRegrasdeNegocios". Os campos vFCPST e vIPIDevol foram incluídos no somatório dos valores que compõe a valor da NF. function NotaFiscal.ValidarRegrasdeNegocios: Boolean; var Erros: String; I: Integer; Inicio, Agora: TDateTime; fsvTotTrib, fsvBC, fsvICMS, fsvICMSDeson, fsvBCST, fsvST, fsvFCPST, fsvProd, fsvFrete : Currency; fsvSeg, fsvDesc, fsvII, fsvIPI, fsIPIDevol, fsvPIS, fsvCOFINS, fsvOutro, fsvServ, fsvNF, fsvTotPag : Currency; FaturamentoDireto, NFImportacao : Boolean; procedure GravaLog(AString: String); begin //DEBUG //Log := Log + FormatDateTime('hh:nn:ss:zzz',Now) + ' - ' + AString + sLineBreak; end; procedure AdicionaErro(const Erro: String); begin Erros := Erros + Erro + sLineBreak; end; begin Inicio := Now; Agora := IncMinute(Now,5); //Aceita uma tolerância de até 5 minutos, devido ao sincronismo de horário do servidor da Empresa e o servidor da SEFAZ. GravaLog('Inicio da Validação'); with TACBrNFe(TNotasFiscais(Collection).ACBrNFe) do begin Erros := ''; GravaLog('Validar: 701-versão'); if NFe.infNFe.Versao < 3.10 then AdicionaErro('701-Rejeição: Versão inválida'); GravaLog('Validar 512-Chave de acesso'); if not ValidarConcatChave then //A03-10 AdicionaErro( '502-Rejeição: Erro na Chave de Acesso - Campo Id não corresponde à concatenação dos campos correspondentes'); GravaLog('Validar 226-IF'); if copy(IntToStr(NFe.Emit.EnderEmit.cMun), 1, 2) <> IntToStr(Configuracoes.WebServices.UFCodigo) then //B02-10 AdicionaErro('226-Rejeição: Código da UF do Emitente diverge da UF autorizadora'); // 702-Rejeição: NFC-e não é aceita pela UF do Emitente GravaLog('Validar: 503-Serie'); if (NFe.Ide.serie > 899) and //B07-20 (NFe.Ide.tpEmis <> teSCAN) then AdicionaErro('503-Rejeição: Série utilizada fora da faixa permitida no SCAN (900-999)'); GravaLog('Validar: 703-Data hora'); if (NFe.Ide.dEmi > Agora) then //B09-10 AdicionaErro('703-Rejeição: Data-Hora de Emissão posterior ao horário de recebimento'); GravaLog('Validar: 228-Data Emissão'); if ((Agora - NFe.Ide.dEmi) > 30) then //B09-20 AdicionaErro('228-Rejeição: Data de Emissão muito atrasada'); //GB09.02 - Data de Emissão posterior à 31/03/2011 //GB09.03 - Data de Recepção posterior à 31/03/2011 e tpAmb (B24) = 2 GravaLog('Validar: 253-Digito Chave'); if not ValidarChave(NFe.infNFe.ID) then AdicionaErro('253-Rejeição: Digito Verificador da chave de acesso composta inválida'); GravaLog('Validar: 270-Digito Municipio Fato Gerador'); if not ValidarMunicipio(NFe.Ide.cMunFG) then //B12-10 AdicionaErro('270-Rejeição: Código Município do Fato Gerador: dígito inválido'); GravaLog('Validar: 271-Municipio Fato Gerador diferente'); if (UFparaCodigo(NFe.Emit.EnderEmit.UF) <> StrToIntDef( copy(IntToStr(NFe.Ide.cMunFG), 1, 2), 0)) then//GB12.1 AdicionaErro('271-Rejeição: Código Município do Fato Gerador: difere da UF do emitente'); GravaLog('Validar: 570-Tipo de Emissão SCAN/SVC'); if ((NFe.Ide.tpEmis in [teSCAN, teSVCAN, teSVCRS]) and (Configuracoes.Geral.FormaEmissao = teNormal)) then //B22-30 AdicionaErro( '570-Rejeição: Tipo de Emissão 3, 6 ou 7 só é válido nas contingências SCAN/SVC'); GravaLog('Validar: 571-Tipo de Emissão SCAN'); if ((NFe.Ide.tpEmis <> teSCAN) and (Configuracoes.Geral.FormaEmissao = teSCAN)) then //B22-40 AdicionaErro('571-Rejeição: Tipo de Emissão informado diferente de 3 para contingência SCAN'); GravaLog('Validar: 713-Tipo de Emissão SCAN/SVCRS'); if ((Configuracoes.Geral.FormaEmissao in [teSVCAN, teSVCRS]) and (not (NFe.Ide.tpEmis in [teSVCAN, teSVCRS]))) then //B22-60 AdicionaErro('713-Rejeição: Tipo de Emissão diferente de 6 ou 7 para contingência da SVC acessada'); //B23-10 GravaLog('Validar: 252-Ambiente'); if (NFe.Ide.tpAmb <> Configuracoes.WebServices.Ambiente) then //B24-10 AdicionaErro('252-Rejeição: Ambiente informado diverge do Ambiente de recebimento ' + '(Tipo do ambiente da NF-e difere do ambiente do Web Service)'); GravaLog('Validar: 266-Série'); if (not (NFe.Ide.procEmi in [peAvulsaFisco, peAvulsaContribuinte])) and (NFe.Ide.serie > 889) then //B26-10 AdicionaErro('266-Rejeição: Série utilizada fora da faixa permitida no Web Service (0-889)'); GravaLog('Validar: 451-Processo de emissão'); if (NFe.Ide.procEmi in [peAvulsaFisco, peAvulsaContribuinte]) and (NFe.Ide.serie < 890) and (NFe.Ide.serie > 899) then //B26-20 AdicionaErro('451-Rejeição: Processo de emissão informado inválido'); GravaLog('Validar: 370-Tipo de Emissão'); if (NFe.Ide.procEmi in [peAvulsaFisco, peAvulsaContribuinte]) and (NFe.Ide.tpEmis <> teNormal) then //B26-30 AdicionaErro('370-Rejeição: Nota Fiscal Avulsa com tipo de emissão inválido'); GravaLog('Validar: 556-Justificativa Entrada'); if (NFe.Ide.tpEmis = teNormal) and ((NFe.Ide.xJust > '') or (NFe.Ide.dhCont <> 0)) then //B28-10 AdicionaErro( '556-Justificativa de entrada em contingência não deve ser informada para tipo de emissão normal'); GravaLog('Validar: 557-Justificativa Entrada'); if (NFe.Ide.tpEmis in [teContingencia, teFSDA, teOffLine]) and (NFe.Ide.xJust = '') then //B28-20 AdicionaErro('557-A Justificativa de entrada em contingência deve ser informada'); GravaLog('Validar: 558-Data de Entrada'); if (NFe.Ide.dhCont > Agora) then //B28-30 AdicionaErro('558-Rejeição: Data de entrada em contingência posterior a data de recebimento'); GravaLog('Validar: 559-Data Entrada contingência'); if (NFe.Ide.dhCont > 0) and ((Agora - NFe.Ide.dhCont) > 30) then //B28-40 AdicionaErro('559-Rejeição: Data de entrada em contingência muito atrasada'); GravaLog('Validar: 207-CNPJ emitente'); if not ValidarCNPJ(NFe.Emit.CNPJCPF) then AdicionaErro('207-Rejeição: CNPJ do emitente inválido'); GravaLog('Validar: 272-Código Município'); if not ValidarMunicipio(NFe.Emit.EnderEmit.cMun) then AdicionaErro('272-Rejeição: Código Município do Emitente: dígito inválido'); GravaLog('Validar: 273-Código Município difere da UF'); if (UFparaCodigo(NFe.Emit.EnderEmit.UF) <> StrToIntDef( copy(IntToStr(NFe.Emit.EnderEmit.cMun), 1, 2), 0)) then AdicionaErro('273-Rejeição: Código Município do Emitente: difere da UF do emitente'); GravaLog('Validar: 229-IE não informada'); if EstaVazio(NFe.Emit.IE) then AdicionaErro('229-Rejeição: IE do emitente não informada'); GravaLog('Validar: 209-IE inválida'); if not ValidarIE(NFe.Emit.IE,NFe.Emit.EnderEmit.UF) then AdicionaErro('209-Rejeição: IE do emitente inválida '); GravaLog('Validar: 208-CNPJ destinatário'); if (Length(Trim(OnlyNumber(NFe.Dest.CNPJCPF))) >= 14) and not ValidarCNPJ(NFe.Dest.CNPJCPF) then AdicionaErro('208-Rejeição: CNPJ do destinatário inválido'); GravaLog('Validar: 513-EX'); if (NFe.Retirada.UF = 'EX') and (NFe.Retirada.cMun <> 9999999) then AdicionaErro('513-Rejeição: Código Município do Local de Retirada deve ser 9999999 para UF retirada = "EX"'); GravaLog('Validar: 276-Cod Município Retirada inválido'); if (NFe.Retirada.UF <> 'EX') and NaoEstaVazio(NFe.Retirada.xMun) and not ValidarMunicipio(NFe.Retirada.cMun) then AdicionaErro('276-Rejeição: Código Município do Local de Retirada: dígito inválido'); GravaLog('Validar: 277-Cod Município Retirada diferente UF'); if NaoEstaVazio(NFe.Retirada.UF) and (NFe.Retirada.cMun > 0)then if (UFparaCodigo(NFe.Retirada.UF) <> StrToIntDef( copy(IntToStr(NFe.Retirada.cMun), 1, 2), 0)) then AdicionaErro('277-Rejeição: Código Município do Local de Retirada: difere da UF do Local de Retirada'); GravaLog('Validar: 515-Cod Município Entrega EX'); if (NFe.Entrega.UF = 'EX') and (NFe.Entrega.cMun <> 9999999) then AdicionaErro('515-Rejeição: Código Município do Local de Entrega deve ser 9999999 para UF entrega = "EX"'); GravaLog('Validar: 278-Cod Município Entrega inválido'); if (NFe.Entrega.UF <> 'EX') and NaoEstaVazio(NFe.Entrega.xMun) and not ValidarMunicipio(NFe.Entrega.cMun) then AdicionaErro('278-Rejeição: Código Município do Local de Entrega: dígito inválido'); GravaLog('Validar: 279-Cod Município Entrega diferente UF'); if NaoEstaVazio(NFe.Entrega.UF)and (NFe.Entrega.cMun > 0) then if (UFparaCodigo(NFe.Entrega.UF) <> StrToIntDef( copy(IntToStr(NFe.Entrega.cMun), 1, 2), 0)) then AdicionaErro('279-Rejeição: Código Município do Local de Entrega: difere da UF do Local de Entrega'); GravaLog('Validar: 542-CNPJ Transportador'); if NaoEstaVazio(Trim(NFe.Transp.Transporta.CNPJCPF)) and (Length(Trim(OnlyNumber(NFe.Transp.Transporta.CNPJCPF))) >= 14) and not ValidarCNPJ(NFe.Transp.Transporta.CNPJCPF) then AdicionaErro('542-Rejeição: CNPJ do Transportador inválido'); GravaLog('Validar: 543-CPF Transportador'); if NaoEstaVazio(Trim(NFe.Transp.Transporta.CNPJCPF)) and (Length(Trim(OnlyNumber(NFe.Transp.Transporta.CNPJCPF))) <= 11) and not ValidarCPF(NFe.Transp.Transporta.CNPJCPF) then AdicionaErro('543-Rejeição: CPF do Transportador inválido'); GravaLog('Validar: 559-UF do Transportador'); if NaoEstaVazio(Trim(NFe.Transp.Transporta.IE)) and EstaVazio(Trim(NFe.Transp.Transporta.UF)) then AdicionaErro('559-Rejeição: UF do Transportador não informada'); GravaLog('Validar: 544-IE do Transportador'); if NaoEstaVazio(Trim(NFe.Transp.Transporta.IE)) and not ValidarIE(NFe.Transp.Transporta.IE,NFe.Transp.Transporta.UF) then AdicionaErro('544-Rejeição: IE do Transportador inválida'); if (NFe.Ide.modelo = 65) then //Regras válidas apenas para NFC-e - 65 begin GravaLog('Validar: 704-NFCe Data atrasada'); if (NFe.Ide.dEmi < IncMinute(Agora,-10)) and (NFe.Ide.tpEmis in [teNormal, teSCAN, teSVCAN, teSVCRS]) then //B09-40 AdicionaErro('704-Rejeição: NFC-e com Data-Hora de emissão atrasada'); GravaLog('Validar: 705-NFCe Data de entrada/saida'); if (NFe.Ide.dSaiEnt <> 0) then //B10-10 AdicionaErro('705-Rejeição: NFC-e com data de entrada/saída'); GravaLog('Validar: 706-NFCe operação entrada'); if (NFe.Ide.tpNF = tnEntrada) then //B11-10 AdicionaErro('706-Rejeição: NFC-e para operação de entrada'); GravaLog('Validar: 707-NFCe operação interestadual'); if (NFe.Ide.idDest <> doInterna) then //B11-10 AdicionaErro('707-NFC-e para operação interestadual ou com o exterior'); GravaLog('Validar: 709-NFCe formato DANFE'); if (not (NFe.Ide.tpImp in [tiNFCe, tiMsgEletronica])) then //B21-10 AdicionaErro('709-Rejeição: NFC-e com formato de DANFE inválido'); GravaLog('Validar: 712-NFCe contingência off-line'); if (NFe.Ide.tpEmis = teOffLine) and (AnsiIndexStr(NFe.Emit.EnderEmit.UF, ['SP']) <> -1) then //B22-20 AdicionaErro('712-Rejeição: NF-e com contingência off-line'); GravaLog('Validar: 782-NFCe e SCAN'); if (NFe.Ide.tpEmis = teSCAN) then //B22-50 AdicionaErro('782-Rejeição: NFC-e não é autorizada pelo SCAN'); GravaLog('Validar: 783-NFCe e SVC'); if (NFe.Ide.tpEmis in [teSVCAN, teSVCRS]) then //B22-70 AdicionaErro('783-Rejeição: NFC-e não é autorizada pela SVC'); GravaLog('Validar: 715-NFCe finalidade'); if (NFe.Ide.finNFe <> fnNormal) then //B25-20 AdicionaErro('715-Rejeição: Rejeição: NFC-e com finalidade inválida'); GravaLog('Validar: 716-NFCe operação'); if (NFe.Ide.indFinal = cfNao) then //B25a-10 AdicionaErro('716-Rejeição: NFC-e em operação não destinada a consumidor final'); GravaLog('Validar: 717-NFCe entrega'); if (not (NFe.Ide.indPres in [pcPresencial, pcEntregaDomicilio])) then //B25b-20 AdicionaErro('717-Rejeição: NFC-e em operação não presencial'); GravaLog('Validar: 785-NFCe entrega e UF'); if (NFe.Ide.indPres = pcEntregaDomicilio) and (AnsiIndexStr(NFe.Emit.EnderEmit.UF, ['XX']) <> -1) then //B25b-30 Qual estado não permite entrega a domicílio? AdicionaErro('785-Rejeição: NFC-e com entrega a domicílio não permitida pela UF'); GravaLog('Validar: 708-NFCe referenciada'); if (NFe.Ide.NFref.Count > 0) then AdicionaErro('708-Rejeição: NFC-e não pode referenciar documento fiscal'); GravaLog('Validar: 718-NFCe e IE de ST'); if NaoEstaVazio(Trim(NFe.Emit.IEST)) then AdicionaErro('718-Rejeição: NFC-e não deve informar IE de Substituto Tributário'); GravaLog('Validar: 787-NFCe entrega e Identificação'); if (NFe.Ide.indPres = pcEntregaDomicilio) and EstaVazio(Trim(nfe.Entrega.xLgr)) and EstaVazio(Trim(nfe.Dest.EnderDest.xLgr)) then AdicionaErro('787-Rejeição: NFC-e de entrega a domicílio sem a identificação do destinatário'); GravaLog('Validar: 789-NFCe e destinatário'); if (NFe.Dest.indIEDest <> inNaoContribuinte) then AdicionaErro('789-Rejeição: NFC-e para destinatário contribuinte de ICMS'); GravaLog('Validar: 729-NFCe IE destinatário'); if NaoEstaVazio(Trim(NFe.Dest.IE)) then AdicionaErro('729-Rejeição: NFC-e com informação da IE do destinatário'); GravaLog('Validar: 730-NFCe e SUFRAMA'); if NaoEstaVazio(Trim(NFe.Dest.ISUF)) then AdicionaErro('730-Rejeição: NFC-e com Inscrição Suframa'); GravaLog('Validar: 753-NFCe e Frete'); if (NFe.Transp.modFrete <> mfSemFrete) and (NFe.Ide.indPres <> pcEntregaDomicilio)then AdicionaErro('753-Rejeição: NFC-e com Frete'); GravaLog('Validar: 754-NFCe e dados Transporte'); if (NFe.Ide.indPres <> pcEntregaDomicilio) and ((trim(NFe.Transp.Transporta.CNPJCPF) <> '') or (trim(NFe.Transp.Transporta.xNome) <> '') or (trim(NFe.Transp.Transporta.IE) <> '') or (trim(NFe.Transp.Transporta.xEnder) <> '') or (trim(NFe.Transp.Transporta.xMun) <> '') or (trim(NFe.Transp.Transporta.UF) <> '')) then AdicionaErro('754-Rejeição: NFC-e com dados do Transportador'); GravaLog('Validar: 786-NFCe entrega domicilio e dados Transporte'); if (NFe.Ide.indPres = pcEntregaDomicilio) and ((trim(NFe.Transp.Transporta.CNPJCPF) = '') or (trim(NFe.Transp.Transporta.xNome) = '')) then AdicionaErro('786-Rejeição: NFC-e de entrega a domicílio sem dados do Transportador'); GravaLog('Validar: 755-NFCe retenção ICMS Transporte'); if (NFe.Transp.retTransp.vServ > 0) or (NFe.Transp.retTransp.vBCRet > 0) or (NFe.Transp.retTransp.pICMSRet > 0) or (NFe.Transp.retTransp.vICMSRet > 0) or (Trim(NFe.Transp.retTransp.CFOP) <> '') or (NFe.Transp.retTransp.cMunFG > 0) then AdicionaErro('755-Rejeição: NFC-e com dados de Retenção do ICMS no Transporte'); GravaLog('Validar: 756-NFCe dados veiculo Transporte'); if (Trim(NFe.Transp.veicTransp.placa) <> '') or (Trim(NFe.Transp.veicTransp.UF) <> '') or (Trim(NFe.Transp.veicTransp.RNTC) <> '') then AdicionaErro('756-Rejeição: NFC-e com dados do veículo de Transporte'); GravaLog('Validar: 757-NFCe dados reboque Transporte'); if NFe.Transp.Reboque.Count > 0 then AdicionaErro('757-Rejeição: NFC-e com dados de Reboque do veículo de Transporte'); GravaLog('Validar: 758-NFCe dados vagão Transporte'); if NaoEstaVazio(Trim(NFe.Transp.vagao)) then AdicionaErro('758-Rejeição: NFC-e com dados do Vagão de Transporte'); GravaLog('Validar: 759-NFCe dados Balsa Transporte'); if NaoEstaVazio(Trim(NFe.Transp.balsa)) then AdicionaErro('759-Rejeição: NFC-e com dados da Balsa de Transporte'); GravaLog('Validar: 760-NFCe entrega dados cobrança'); if (Trim(nfe.Cobr.Fat.nFat) <> '') or (NFe.Cobr.Fat.vOrig > 0) or (NFe.Cobr.Fat.vDesc > 0) or (NFe.Cobr.Fat.vLiq > 0) or (NFe.Cobr.Dup.Count > 0) then AdicionaErro('760-Rejeição: NFC-e com dados de cobrança (Fatura, Duplicata)'); GravaLog('Validar: 769-NFCe formas pagamento'); if NFe.pag.Count <= 0 then AdicionaErro('769-Rejeição: NFC-e deve possuir o grupo de Formas de Pagamento'); GravaLog('Validar: 762-NFCe dados de compra'); if Trim(NFe.compra.xNEmp) + Trim(NFe.compra.xPed) + Trim(NFe.compra.xCont) <> '' then AdicionaErro('762-Rejeição: NFC-e com dados de compras (Empenho, Pedido, Contrato)'); GravaLog('Validar: 763-NFCe dados cana'); if not(Trim(NFe.cana.safra) = '') or not(Trim(NFe.cana.ref) = '') or (NFe.cana.fordia.Count > 0) or (NFe.cana.deduc.Count > 0) then AdicionaErro('763-Rejeição: NFC-e com dados de aquisição de Cana'); end; if (NFe.Ide.modelo = 55) then //Regras válidas apenas para NF-e - 55 begin GravaLog('Validar: 504-Saida > 30'); if ((NFe.Ide.dSaiEnt - Agora) > 30) then //B10-20 - Facultativo AdicionaErro('504-Rejeição: Data de Entrada/Saída posterior ao permitido'); GravaLog('Validar: 505-Saida < 30'); if (NFe.Ide.dSaiEnt <> 0) and ((Agora - NFe.Ide.dSaiEnt) > 30) then //B10-30 - Facultativo AdicionaErro('505-Rejeição: Data de Entrada/Saída anterior ao permitido'); GravaLog('Validar: 506-Saida < Emissao'); if (NFe.Ide.dSaiEnt <> 0) and (NFe.Ide.dSaiEnt < NFe.Ide.dEmi) then //B10-40 - Facultativo AdicionaErro('506-Rejeição: Data de Saída menor que a Data de Emissão'); GravaLog('Validar: 710-Formato DANFE'); if (NFe.Ide.tpImp in [tiNFCe, tiMsgEletronica]) then //B21-20 AdicionaErro('710-Rejeição: NF-e com formato de DANFE inválido'); GravaLog('Validar: 711-NFe off-line'); if (NFe.Ide.tpEmis = teOffLine) then //B22-10 AdicionaErro('711-Rejeição: NF-e com contingência off-line'); GravaLog('Validar: 254-NFe complementar sem referenciada'); if (NFe.Ide.finNFe = fnComplementar) and (NFe.Ide.NFref.Count = 0) then //B25-30 AdicionaErro('254-Rejeição: NF-e complementar não possui NF referenciada'); GravaLog('Validar: 255-NFe complementar e muitas referenciada'); if (NFe.Ide.finNFe = fnComplementar) and (NFe.Ide.NFref.Count > 1) then //B25-40 AdicionaErro('255-Rejeição: NF-e complementar possui mais de uma NF referenciada'); GravaLog('Validar: 269-CNPJ Emitente NFe complementar'); if (NFe.Ide.finNFe = fnComplementar) and (NFe.Ide.NFref.Count = 1) and (((NFe.Ide.NFref.Items[0].RefNF.CNPJ > '') and (NFe.Ide.NFref.Items[0].RefNF.CNPJ <> NFe.Emit.CNPJCPF)) or ((NFe.Ide.NFref.Items[0].RefNFP.CNPJCPF > '') and (NFe.Ide.NFref.Items[0].RefNFP.CNPJCPF <> NFe.Emit.CNPJCPF))) then //B25-50 AdicionaErro( '269-Rejeição: CNPJ Emitente da NF Complementar difere do CNPJ da NF Referenciada'); GravaLog('Validar: 678-UF NFe referenciada e complementar'); if (NFe.Ide.finNFe = fnComplementar) and (NFe.Ide.NFref.Count = 1) and //Testa pelo número para saber se TAG foi preenchida (((NFe.Ide.NFref.Items[0].RefNF.nNF > 0) and (NFe.Ide.NFref.Items[0].RefNF.cUF <> UFparaCodigo( NFe.Emit.EnderEmit.UF))) or ((NFe.Ide.NFref.Items[0].RefNFP.nNF > 0) and (NFe.Ide.NFref.Items[0].RefNFP.cUF <> UFparaCodigo( NFe.Emit.EnderEmit.UF)))) then //B25-60 - Facultativo AdicionaErro('678-Rejeição: NF referenciada com UF diferente da NF-e complementar'); GravaLog('Validar: 321-NFe devolução sem referenciada'); if (NFe.Ide.finNFe = fnDevolucao) and (NFe.Ide.NFref.Count = 0) then //B25-70 AdicionaErro('321-Rejeição: NF-e devolução não possui NF referenciada'); GravaLog('Validar: 794-NFe e domicício NFCe'); if (NFe.Ide.indPres = pcEntregaDomicilio) then //B25b-10 AdicionaErro('794-Rejeição: NF-e com indicativo de NFC-e com entrega a domicílio'); // GravaLog('Validar: 719-NFe sem ident. destinatário'); // if (NFe.Dest.CNPJCPF = '') and // (NFe.Dest.idEstrangeiro = '') then // AdicionaErro('719-Rejeição: NF-e sem a identificação do destinatário'); GravaLog('Validar: 237-CPF destinatário '); if (Trim(OnlyNumber(NFe.Dest.CNPJCPF)) <> EmptyStr) and (Length(Trim(OnlyNumber(NFe.Dest.CNPJCPF))) <= 11) and not ValidarCPF(NFe.Dest.CNPJCPF) then AdicionaErro('237-Rejeição: CPF do destinatário inválido'); // GravaLog('Validar: 720-idEstrangeiro'); // if (nfe.Ide.idDest = doExterior) and // (EstaVazio(Trim(NFe.Dest.idEstrangeiro))) then // AdicionaErro('720-Rejeição: Na operação com Exterior deve ser informada tag idEstrangeiro'); GravaLog('Validar: 721-Op.Interstadual sem CPF/CNPJ'); if (nfe.Ide.idDest = doInterestadual) and (EstaVazio(Trim(NFe.Dest.CNPJCPF))) then AdicionaErro('721-Rejeição: Operação interestadual deve informar CNPJ ou CPF'); GravaLog('Validar: 723-Op.interna com idEstrangeiro'); if (nfe.Ide.idDest = doInterna) and (NaoEstaVazio(Trim(NFe.Dest.idEstrangeiro))) and (NFe.Ide.indFinal <> cfConsumidorFinal)then AdicionaErro('723-Rejeição: Operação interna com idEstrangeiro informado deve ser para consumidor final'); GravaLog('Validar: 724-Nome destinatário'); if EstaVazio(Trim(NFe.Dest.xNome)) then AdicionaErro('724-Rejeição: NF-e sem o nome do destinatário'); GravaLog('Validar: 726-Sem Endereço destinatário'); if EstaVazio(Trim(NFe.Dest.EnderDest.xLgr)) then AdicionaErro('726-Rejeição: NF-e sem a informação de endereço do destinatário'); GravaLog('Validar: 509-EX e município'); if (NFe.Dest.EnderDest.UF <> 'EX') and not ValidarMunicipio(NFe.Dest.EnderDest.cMun) then AdicionaErro('509-Rejeição: Informado código de município diferente de "9999999" para operação com o exterior'); GravaLog('Validar: 727-Op exterior e UF'); if (nfe.Ide.idDest = doExterior) and (NFe.Dest.EnderDest.UF <> 'EX') then AdicionaErro('727-Rejeição: Operação com Exterior e UF diferente de EX'); GravaLog('Validar: 771-Op.Interstadual e UF EX'); if (nfe.Ide.idDest = doInterestadual) and (NFe.Dest.EnderDest.UF = 'EX') then AdicionaErro('771-Rejeição: Operação Interestadual e UF de destino com EX'); GravaLog('Validar: 772-Op.Interstadual e UF igual'); if (nfe.Ide.idDest = doInterestadual) and (NFe.Dest.EnderDest.UF = NFe.Emit.EnderEmit.UF) then AdicionaErro('772-Rejeição: Operação Interestadual e UF de destino igual à UF do emitente'); GravaLog('Validar: 773-Op.Interna e UF diferente'); if (nfe.Ide.idDest = doInterna) and (NFe.Dest.EnderDest.UF <> NFe.Emit.EnderEmit.UF) and (NFe.Ide.indPres <> pcPresencial) then AdicionaErro('773-Rejeição: Operação Interna e UF de destino difere da UF do emitente - não presencial'); GravaLog('Validar: 790-Op.Exterior e Destinatário ICMS'); if (NFe.Ide.idDest = doExterior) and (NFe.Dest.indIEDest <> inNaoContribuinte) then AdicionaErro('790-Rejeição: Operação com Exterior para destinatário Contribuinte de ICMS'); if NFe.infNFe.Versao < 4 then begin GravaLog('Validar: 768-NFe < 4.0 com formas de pagamento'); if (NFe.pag.Count > 0) then AdicionaErro('768-Rejeição: NF-e não deve possuir o grupo de Formas de Pagamento'); end else begin GravaLog('Validar: 769-NFe >= 4.0 sem formas pagamento'); if (NFe.pag.Count <= 0) then AdicionaErro('769-Rejeição: NF-e deve possuir o grupo de Formas de Pagamento'); end; end; for I:=0 to NFe.autXML.Count-1 do begin GravaLog('Validar: 325-'+IntToStr(I)+'-CPF download'); if (Length(Trim(OnlyNumber(NFe.autXML[I].CNPJCPF))) <= 11) and not ValidarCPF(NFe.autXML[I].CNPJCPF) then AdicionaErro('325-Rejeição: CPF autorizado para download inválido'); GravaLog('Validar: 323-'+IntToStr(I)+'-CNPJ download'); if (Length(Trim(OnlyNumber(NFe.autXML[I].CNPJCPF))) > 11) and not ValidarCNPJ(NFe.autXML[I].CNPJCPF) then AdicionaErro('323-Rejeição: CNPJ autorizado para download inválido'); end; fsvTotTrib := 0; fsvBC := 0; fsvICMS := 0; fsvICMSDeson := 0; fsvBCST := 0; fsvST := 0; fsvFCPST := 0; fsvProd := 0; fsvFrete := 0; fsvSeg := 0; fsvDesc := 0; fsvII := 0; fsvIPI := 0; fsIPIDevol := 0; fsvPIS := 0; fsvCOFINS := 0; fsvOutro := 0; fsvServ := 0; FaturamentoDireto := False; NFImportacao := False; for I:=0 to NFe.Det.Count-1 do begin with NFe.Det[I] do begin if Trim(Prod.NCM) <> '00' then begin // validar NCM completo somente quando não for serviço GravaLog('Validar: 777-'+IntToStr(I)+'-NCM info'); if Length(Trim(Prod.NCM)) < 8 then AdicionaErro('777-Rejeição: Obrigatória a informação do NCM completo'); end; if (NFe.Ide.modelo = 65) then begin GravaLog('Validar: 725-'+IntToStr(I)+'-NFCe CFOP invalido'); if (pos(OnlyNumber(Prod.CFOP), 'XXXX,5101,5102,5103,5104,5115,5401,5403,5405,5653,5656,5667,5933') <= 0) then AdicionaErro('725-Rejeição: NFC-e com CFOP inválido'); GravaLog('Validar: 774-'+IntToStr(I)+'-NFCe indicador Total'); if (Prod.IndTot = itNaoSomaTotalNFe) then AdicionaErro('774-Rejeição: NFC-e com indicador de item não participante do total'); GravaLog('Validar: 736-'+IntToStr(I)+'-NFCe Grupo veiculos novos'); if (NaoEstaVazio(Prod.veicProd.chassi)) then AdicionaErro('736-Rejeição: NFC-e com grupo de Veículos novos'); GravaLog('Validar: 737-'+IntToStr(I)+'-NCM info'); if (Prod.med.Count > 0) then AdicionaErro('737-Rejeição: NFC-e com grupo de Medicamentos'); GravaLog('Validar: 738-'+IntToStr(I)+'-NFCe grupo Armamentos'); if (Prod.arma.Count > 0) then AdicionaErro('738-Rejeição: NFC-e com grupo de Armamentos'); GravaLog('Validar: 348-'+IntToStr(I)+'-NFCe grupo RECOPI'); if (NaoEstaVazio(Prod.nRECOPI)) then AdicionaErro('348-Rejeição: NFC-e com grupo RECOPI'); GravaLog('Validar: 766-'+IntToStr(I)+'-NFCe CST 50'); if (Imposto.ICMS.CST = cst50) then AdicionaErro('766-Rejeição: NFC-e com CST 50-Suspensão'); GravaLog('Validar: 740-'+IntToStr(I)+'-NFCe CST 51'); if (Imposto.ICMS.CST = cst51) then AdicionaErro('740-Rejeição: NFC-e com CST 51-Diferimento'); GravaLog('Validar: 741-'+IntToStr(I)+'-NFCe partilha ICMS'); if (Imposto.ICMS.CST in [cstPart10,cstPart90]) then AdicionaErro('741-Rejeição: NFC-e com Partilha de ICMS entre UF'); GravaLog('Validar: 742-'+IntToStr(I)+'-NFCe grupo IPI'); if ((Imposto.IPI.cEnq <> '') or (Imposto.IPI.vBC <> 0) or (Imposto.IPI.qUnid <> 0) or (Imposto.IPI.vUnid <> 0) or (Imposto.IPI.pIPI <> 0) or (Imposto.IPI.vIPI <> 0)) then AdicionaErro('742-Rejeição: NFC-e com grupo do IPI'); GravaLog('Validar: 743-'+IntToStr(I)+'-NFCe grupo II'); if (Imposto.II.vBc > 0) or (Imposto.II.vDespAdu > 0) or (Imposto.II.vII > 0) or (Imposto.II.vIOF > 0) or (Copy(Prod.CFOP,1,1) = '3') then AdicionaErro('743-Rejeição: NFC-e com grupo do II'); GravaLog('Validar: 746-'+IntToStr(I)+'-NFCe grupo PIS-ST'); if (Imposto.PISST.vBc > 0) or (Imposto.PISST.pPis > 0) or (Imposto.PISST.qBCProd > 0) or (Imposto.PISST.vAliqProd > 0) or (Imposto.PISST.vPIS > 0) then AdicionaErro('746-Rejeição: NFC-e com grupo do PIS-ST'); GravaLog('Validar: 749-'+IntToStr(I)+'-NFCe grupo COFINS-ST'); if (Imposto.COFINSST.vBC > 0) or (Imposto.COFINSST.pCOFINS > 0) or (Imposto.COFINSST.qBCProd > 0) or (Imposto.COFINSST.vAliqProd > 0) or (Imposto.COFINSST.vCOFINS > 0) then AdicionaErro('749-Rejeição: NFC-e com grupo da COFINS-ST'); end; GravaLog('Validar: 528-'+IntToStr(I)+'-ICMS BC e Aliq'); if (Imposto.ICMS.CST in [cst00,cst10,cst20,cst70]) and (NFe.Ide.finNFe = fnNormal) and (ComparaValor(Imposto.ICMS.vICMS, Imposto.ICMS.vBC * (Imposto.ICMS.pICMS/100), 0.01) <> 0) then AdicionaErro('528-Rejeição: Valor do ICMS difere do produto BC e Alíquota'); GravaLog('Validar: 625-'+IntToStr(I)+'-Insc.SUFRAMA'); if (Imposto.ICMS.motDesICMS = mdiSuframa) and (EstaVazio(NFe.Dest.ISUF))then AdicionaErro('625-Rejeição: Inscrição SUFRAMA deve ser informada na venda com isenção para ZFM'); GravaLog('Validar: 530-'+IntToStr(I)+'-ISSQN e IM'); if EstaVazio(NFe.Emit.IM) and ((Imposto.ISSQN.vBC > 0) or (Imposto.ISSQN.vAliq > 0) or (Imposto.ISSQN.vISSQN > 0) or (Imposto.ISSQN.cMunFG > 0) or (Imposto.ISSQN.cListServ <> '')) then AdicionaErro('530-Rejeição: Operação com tributação de ISSQN sem informar a Inscrição Municipal'); GravaLog('Validar: 287-'+IntToStr(I)+'-Cod.Município FG'); if (Imposto.ISSQN.cMunFG > 0) and not ValidarMunicipio(Imposto.ISSQN.cMunFG) then AdicionaErro('287-Rejeição: Código Município do FG - ISSQN: dígito inválido'); if Prod.IndTot = itSomaTotalNFe then begin fsvTotTrib := fsvTotTrib + Imposto.vTotTrib; fsvBC := fsvBC + Imposto.ICMS.vBC; fsvICMS := fsvICMS + Imposto.ICMS.vICMS; fsvICMSDeson := fsvICMSDeson + Imposto.ICMS.vICMSDeson; fsvBCST := fsvBCST + Imposto.ICMS.vBCST; fsvST := fsvST + Imposto.ICMS.vICMSST; fsvFCPST := fsvFCPST + Imposto.ICMS.vFCPST; fsvFrete := fsvFrete + Prod.vFrete; fsvSeg := fsvSeg + Prod.vSeg; fsvDesc := fsvDesc + Prod.vDesc; fsvII := fsvII + Imposto.II.vII; fsvIPI := fsvIPI + Imposto.IPI.vIPI; fsIPIDevol := fsIPIDevol + vIPIDevol; fsvPIS := fsvPIS + Imposto.PIS.vPIS; fsvCOFINS := fsvCOFINS + Imposto.COFINS.vCOFINS; fsvOutro := fsvOutro + Prod.vOutro; fsvServ := fsvServ + Imposto.ISSQN.vBC; //VERIFICAR // quando for serviço o produto não soma do total de produtos, quando for nota de ajuste também irá somar if (Prod.NCM <> '00') or ((Prod.NCM = '00') and (NFe.Ide.finNFe = fnAjuste)) then fsvProd := fsvProd + Prod.vProd; end; if Prod.veicProd.tpOP = toFaturamentoDireto then FaturamentoDireto := True; if Copy(Prod.CFOP,1,1) = '3'then NFImportacao := True; end; end; if FaturamentoDireto then fsvNF := (fsvProd+fsvFrete+fsvSeg+fsvOutro+fsvII+fsvIPI+fsvServ)-(fsvDesc+fsvICMSDeson) else fsvNF := (fsvProd+fsvST+fsvFCPST+fsvFrete+fsvSeg+fsvOutro+fsvII+fsvIPI+fsIPIDevol+fsvServ)-(fsvDesc+fsvICMSDeson); GravaLog('Validar: 531-Total BC ICMS'); if (NFe.Total.ICMSTot.vBC <> fsvBC) then AdicionaErro('531-Rejeição: Total da BC ICMS difere do somatório dos itens'); GravaLog('Validar: 532-Total ICMS'); if (NFe.Total.ICMSTot.vICMS <> fsvICMS) then AdicionaErro('532-Rejeição: Total do ICMS difere do somatório dos itens'); GravaLog('Validar: 795-Total ICMS desonerado'); if (NFe.Total.ICMSTot.vICMSDeson <> fsvICMSDeson) then AdicionaErro('795-Rejeição: Total do ICMS desonerado difere do somatório dos itens'); GravaLog('Validar: 533-Total BC ICMS-ST'); if (NFe.Total.ICMSTot.vBCST <> fsvBCST) then AdicionaErro('533-Rejeição: Total da BC ICMS-ST difere do somatório dos itens'); GravaLog('Validar: 534-Total ICMS-ST'); if (NFe.Total.ICMSTot.vST <> fsvST) then AdicionaErro('534-Rejeição: Total do ICMS-ST difere do somatório dos itens'); GravaLog('Validar: 564-Total Produto/Serviço'); if (NFe.Total.ICMSTot.vProd <> fsvProd) then AdicionaErro('564-Rejeição: Total do Produto / Serviço difere do somatório dos itens'); GravaLog('Validar: 535-Total Frete'); if (NFe.Total.ICMSTot.vFrete <> fsvFrete) then AdicionaErro('535-Rejeição: Total do Frete difere do somatório dos itens'); GravaLog('Validar: 536-Total Seguro'); if (NFe.Total.ICMSTot.vSeg <> fsvSeg) then AdicionaErro('536-Rejeição: Total do Seguro difere do somatório dos itens'); GravaLog('Validar: 537-Total Desconto'); if (NFe.Total.ICMSTot.vDesc <> fsvDesc) then AdicionaErro('537-Rejeição: Total do Desconto difere do somatório dos itens'); GravaLog('Validar: 601-Total II'); if (NFe.Total.ICMSTot.vII <> fsvII) then AdicionaErro('601-Rejeição: Total do II difere do somatório dos itens'); GravaLog('Validar: 538-Total IPI'); if (NFe.Total.ICMSTot.vIPI <> fsvIPI) then AdicionaErro('538-Rejeição: Total do IPI difere do somatório dos itens'); GravaLog('Validar: 602-Total PIS'); if (NFe.Total.ICMSTot.vPIS <> fsvPIS) then AdicionaErro('602-Rejeição: Total do PIS difere do somatório dos itens sujeitos ao ICMS'); GravaLog('Validar: 603-Total COFINS'); if (NFe.Total.ICMSTot.vCOFINS <> fsvCOFINS) then AdicionaErro('603-Rejeição: Total da COFINS difere do somatório dos itens sujeitos ao ICMS'); GravaLog('Validar: 604-Total vOutro'); if (NFe.Total.ICMSTot.vOutro <> fsvOutro) then AdicionaErro('604-Rejeição: Total do vOutro difere do somatório dos itens'); GravaLog('Validar: 610-Total NF'); if not NFImportacao and (NFe.Total.ICMSTot.vNF <> fsvNF) then begin if (NFe.Total.ICMSTot.vNF <> (fsvNF+fsvICMSDeson)) then AdicionaErro('610-Rejeição: Total da NF difere do somatório dos Valores compõe o valor Total da NF.'); end; GravaLog('Validar: 685-Total Tributos'); if (NFe.Total.ICMSTot.vTotTrib <> fsvTotTrib) then AdicionaErro('685-Rejeição: Total do Valor Aproximado dos Tributos difere do somatório dos itens'); if (NFe.Ide.modelo = 65) and (NFe.infNFe.Versao < 4) then begin GravaLog('Validar: 767-NFCe soma pagamentos'); fsvTotPag := 0; for I := 0 to NFe.pag.Count-1 do begin fsvTotPag := fsvTotPag + NFe.pag[I].vPag; end; if (NFe.Total.ICMSTot.vNF <> fsvTotPag) then AdicionaErro('767-Rejeição: NFC-e com somatório dos pagamentos diferente do total da Nota Fiscal'); end; //TODO: Regrar W01. Total da NF-e / ISSQN end; Result := EstaVazio(Erros); if not Result then begin Erros := ACBrStr('Erro(s) nas Regras de negócios da nota: '+ IntToStr(NFe.Ide.nNF) + sLineBreak + Erros); end; GravaLog('Fim da Validação. Tempo: '+FormatDateTime('hh:nn:ss:zzz', Now - Inicio)+sLineBreak+ 'Erros:' + Erros); //DEBUG //WriteToTXT('c:\temp\Notafiscal.txt', Log); FErroRegrasdeNegocios := Erros; end;
    1 ponto
  3. Esse erro geralmente indica IdCSC ou CSC errados. Então é preciso verificar se estão sendo informados corretamente, e se foram criados para o ambiente em que está sendo enviada a NFCe, produção ou homologação. Também acontece de alguns formatos de CSC virem corrompidos por algum motivo, verificar pelo debug se isso não está acontecendo.
    1 ponto
  4. Enviei um possível ajustes para o SVN... e vários novos Casos de Teste...
    1 ponto
  5. Boa tarde. Atualizei o componente, alterei https para http e funcionou. Atenciosamente
    1 ponto
  6. Ola Neste caso em especial deste cliente Ele mesmo vai transportar rejeição: grupos transportador, veiculo transporte e reboque não devem ser informado Compreendi já que ele mesmo deve emitir o MDFe! Eu até queria ter o mesmo erro no ambiente de testes. Porém coloquei o transportador, e operação fora do estado. A nota transmitiu. Só da rejeição em produção. Deveria da erro também em homologação (Mas isto e e de menos) Mas obrigado pela resposta! Creio que esteja já claro !!! Na hora assustei porque soltei a versão da nfe 4.0 agora. Ai emiti no ambiente de teste e passou normalmente. Meio bizarro isto, eu sinceramente entendi a ideia deles. Porém quando o cara e o proprio transportador e um trabalho so pra dificultar mais os usuarios que muita das vezes já nao ajuda. (Trem ta ficando e cada dia mais feio). Tomara e que nao inventem do cara ter de fazer o MDFe para operação interna também.
    1 ponto
  7. @Curitiba Computer Ltda e @Alisson Souza Pereira, muito obrigado pelas respostas, esclareceram minhas dúvidas. @Alisson Souza Pereira, no seu ultimo exemplo (Alteração(2018-02 - ' ') CodIncCp 91 (Informa que a rubrica na verdade é isenta por decisão judicial)), neste caso a {inivalid} deverá ser preenchida com o valor 2018-02, que se refere a {nova validade} do evento anteriormente enviado? Obrigado.
    1 ponto
  8. Boa tarde, Muito obrigado pela correção, já enviei para o repositório.
    1 ponto
  9. Bom dia Marcílio, Favor anexar os XMLs de envio e de retorno.
    1 ponto
  10. Bom dia Doidopb, Quando executamos o método DistribuicaoDFe ou DistribuicaoDFePorUltNSU é retornado um lote de até 50 documentos, documentos estes já informados na minha postagem anterior. Nesse retorno temos os campo ultNSU (último Numero Sequencial Único) e maxNSU (máximo Numero Sequencial Único). Suponha que na SEFAZ consta 70 documentos e que eles estejam numerados (NSU) de 101 a 170. Ao executar um dos métodos acima, como dito, será retornado um lote com até 50 documentos. Logo nesse retorno terei os documentos de 101 até 150, você concorda? Nesse retorno o valor de ultNSU será 150, pois é o numero de NSU do último NSU que consta no lote. E o valor de maxNSU será 170, pois é o numero NSU do último documento na SEFAZ, supondo que não entrou mais nenhum documento da base de dados da SEFAZ. Ao executar novamente um dos métodos acima (informando no terceiro campo o valor 150), teremos os documentos cujo NSU vai de 151 até 170, ou seja os 20 restantes. Nesse retorno os valores de ultNSU é 170 e de maxNSU é 170. Quando os valores de ultNSU é igual a maxNSU significa que você baixou todos os documentos disponíveis na base de dados da SEFAZ. Neste caso você deve aguardar algumas horas para realizar uma nova consulta. No meu entendimento você deve se manifestar sobre todos os resumos de notas retornados. Caso você não deseja ficar baixando os documentos até que apareça o XML completo da nota manifestada, basta usar o método que o André lhe mostrou. Resumindo: 1. Loop - Executar DistribuicaoDFePorUltNSU até que os valores de ultNSU e maxNSU sejam iguais; 2. Manifestar sobre cada resumo de nota que conste no grid; 3. Aguardar algumas horas e retornar ao passo 1. Observação: No passo 1 identificar os tipos de documentos retornados, se for resumo de nota, montar um grid, se for uma nota salvar em disco ou no banco de dados o XML da mesma.
    1 ponto
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.