Skip to content

Commit

Permalink
Contingência epec 4.00 (#668)
Browse files Browse the repository at this point in the history
* Criação de Model's para envio e retorno EPEC

* Validação xml and xsd EPEC

* criação estrutura do arquivo e webservices

* remoção StringValidador.tamanho5a60() para atender evento EPEC

* criação autorizador

* inserção/alteração novas rejeições EPEC

* Alterações de Constants

* Alterações de Constants

* Inserção ultimo layout xsd disponibilizado pela sefaz

* Correção Validação StringValidador

* Correcao codificacao utf8 para unicode no retorno de rejeicoes

* Revert "Correcao codificacao utf8 para unicode no retorno de rejeicoes"

This reverts commit 17fb008.

* Correcao codificacao utf8 para unicode no retorno de rejeicoes

Co-authored-by: Jadson <[email protected]>
Co-authored-by: Diego Fincatto <[email protected]>
  • Loading branch information
3 people authored Aug 3, 2020
1 parent 50aabba commit ff1dc5b
Show file tree
Hide file tree
Showing 35 changed files with 3,396 additions and 1,134 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ public enum NFTipoEmissao {
EMISSAO_NORMAL("1", "Normal"),
CONTINGENCIA_FS_IA("2", "Conting\u00eancia FS"),
CONTINGENCIA_SCAN("3", "Conting\u00eancia SCAN"),
CONTINGENCIA_DPEC("4", "Conting\u00eancia DPEC"),
CONTINGENCIA_EPEC("4", "Conting\u00eancia EPEC"),
CONTINGENCIA_FSDA("5", "Conting\u00eancia FSDA"),
CONTINGENCIA_SVCAN("6", "Conting\u00eancia SVCAN"),
CONTINGENCIA_SVCRS("7", "Conting\u00eancia SVCRS"),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1569,6 +1569,8 @@ public static NFAutorizador400 valueOfTipoEmissao(final NFTipoEmissao tpEmissao,
return NFAutorizador400.SVRS;
case CONTINGENCIA_SVCAN:
return NFAutorizador400.SCAN;
case CONTINGENCIA_EPEC:
return NFAutorizador400.AN;
default:
throw new IllegalArgumentException("N\u00e3o ha implementac\u00e3o para o tipo de emiss\u00e3o: " + tpEmissao.getDescricao());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,14 @@ public enum NFRetornoStatus {
CODIGO_113(113, "SCAN ser\u00e1 desabilitado para a UF \u00e0s hh:mm"),
CODIGO_114(114, "SCAN desabilitado pela SEFAZ Origem"),
CODIGO_128(128, "Lote de Evento Processado"),
CODIGO_124(124, "EPEC Autorizado"),
CODIGO_135(135, "Evento registrado e vinculado a NF-e"),
CODIGO_136(136, "Evento registrado, mas n\u00e3o vinculado a NF-e"),
CODIGO_137(137, "Nenhum documento localizado para o Destinat\u00e1rio"),
CODIGO_138(138, "Documento localizado para o Destinat\u00e1rio"),
CODIGO_139(139, "Pedido de Download processado"),
CODIGO_140(140, "Download disponibilizado"),
CODIGO_142(142, "Ambiente de Conting\u00eancia EPEC bloqueado para o Emitente"),
CODIGO_150(150, "Autorizado o uso da NF-e"),
CODIGO_151(151, "Cancelamento de NF-e homologado fora de prazo"),
CODIGO_155(155, "Cancelamento de NF-e homologado fora de prazo"),
Expand Down Expand Up @@ -210,14 +212,16 @@ public enum NFRetornoStatus {
CODIGO_463(463, "Rejei\u00e7\u00e3o: C\u00f3digo identificador do CSC no QR-Code foi revogado pela empresa"),
CODIGO_464(464, "Rejei\u00e7\u00e3o: C\u00f3digo de Hash no QR-Code difere do calculado"),
CODIGO_465(465, "Rejei\u00e7\u00e3o: N\u00famero de controle da FCI inexistente"),
CODIGO_467(467, "Rejei\u00e7\u00e3o: Dados da NF-e divergentes do EPEC"),
CODIGO_468(468, "Rejei\u00e7\u00e3o: NF-e com Tipo Emiss\u00e3o = 4, sem EPEC correspondente"),
CODIGO_478(478, "Rejei\u00e7\u00e3o: Local da entrega n\u00e3o informado para faturamto direto de ve\u00edculos novos"),
CODIGO_479(479, "Rejei\u00e7\u00e3o: Emissor em situa\u00e7\u00e3o irregular peranto o fisco"),
CODIGO_480(480, "Rejei\u00e7\u00e3o: CNPJ da Chave de acesso da NF-e informada diverge do CNPJ do emitente"),
CODIGO_481(481, "Rejei\u00e7\u00e3o: UF da Chave de acesso diverge do c\u00f3digo da UF informada"),
CODIGO_482(482, "Rejei\u00e7\u00e3o: AA da Chave de acesso inv\u00e1lida"),
CODIGO_483(483, "Rejei\u00e7\u00e3o: MM da Chave de acesso inv\u00e1lido"),
CODIGO_484(484, "Rejei\u00e7\u00e3o: DPEC com tipo de emiss\u00e3o diferente de \"4\"(posi\u00e7\u00e3o 35 da Chave de Acess"),
CODIGO_485(485, "Rejei\u00e7\u00e3o: N\u00famero DPEC j\u00e1 existe no cadastro de DPEC"),
CODIGO_485(485, "Rejei\u00e7\u00e3o: Duplicidade de numera\u00e7\u00e3o do EPEC (Modelo, CNPJ, S\u00e9rie e N\u00famero)"),
CODIGO_486(486, "Rejei\u00e7\u00e3o: DPEC n\u00e3o localizada para o n\u00famero de registro de DPEC informado"),
CODIGO_487(487, "Rejei\u00e7\u00e3o: Nenhuma DPEC localizada para a chave de acesso informada"),
CODIGO_488(488, "Rejei\u00e7\u00e3o: Requisitante de Consulta n\u00e3o tem o mesmo CNPJ base do emissor da DPEC"),
Expand Down Expand Up @@ -321,7 +325,6 @@ public enum NFRetornoStatus {
CODIGO_597(597, "Rejei\u00e7\u00e3o: CFOP de Importa\u00e7\u00e3o e n\u00e3o informado dados de IPI"),
CODIGO_598(598, "Rejei\u00e7\u00e3o: NF-e emitida em ambiente de homologa\u00e7\u00e3o com raz\u00e3o social <> de NF-e (Emitida homologa\u00e7\u00e3o - S/vlr fiscal)"),
CODIGO_599(599, "Rejei\u00e7\u00e3o: CFOP de Importa\u00e7\u00e3o e n\u00e3o informado dados de II"),

CODIGO_601(601, "Rejei\u00e7\u00e3o: Total do II difere do somat\u00f3rio dos itens"),
CODIGO_602(602, "Rejei\u00e7\u00e3o: Total do PIS difere do somat\u00f3rio dos itens sujeitos ao ICMS"),
CODIGO_603(603, "Rejei\u00e7\u00e3o: Total do COFINS difere do somat\u00f3rio dos itens sujeitos ao ICMS"),
Expand Down Expand Up @@ -366,8 +369,8 @@ public enum NFRetornoStatus {
CODIGO_657(657, "Rejei\u00e7\u00e3o: C\u00f3digo do \u00d3rg\u00e3o diverge do \u00f3rg\u00e3o autorizador"),
CODIGO_658(658, "Rejei\u00e7\u00e3o: UF do destinat\u00e1rio da Chave de Acesso diverge da UF autorizadora"),
CODIGO_660(660, "Rejei\u00e7\u00e3o: CFOP de Combust\u00edvel e n\u00e3o informado grupo de combust\u00edvel da NF-e"),
CODIGO_661(661, "Rejei\u00e7\u00e3o: NF-e j\u00e1 existente para o n\u00famero da DPEC informada"),
CODIGO_662(662, "Rejei\u00e7\u00e3o: Numera\u00e7\u00e3o da DPEC est\u00e1 inutilizada na Base de Dados da SEFAZ"),
CODIGO_661(661, "Rejei\u00e7\u00e3o: NF-e j\u00e1 existente para o n\u00famero do EPEC informado"),
CODIGO_662(662, "Rejei\u00e7\u00e3o: Numera\u00e7\u00e3o do EPEC est\u00e1 inutilizada na Base de Dados da SEFAZ"),
CODIGO_663(663, "Rejei\u00e7\u00e3o: Al\u00edq. ICMS maior que 4% na sa\u00edda interestadual com produtos importados"),
CODIGO_678(678, "Rejei\u00e7\u00e3o: NF referenciada com UF diferente da UF da NF-e complementar"),
CODIGO_679(679, "Rejei\u00e7\u00e3o: Modelo da NF-e referenciada diferente de 55"),
Expand All @@ -382,7 +385,7 @@ public enum NFRetornoStatus {
CODIGO_688(688, "Rejei\u00e7\u00e3o: NF referenciada de produtor com IE inexistente (nREF: xxx)"),
CODIGO_689(689, "Rejei\u00e7\u00e3o: NF referenciada de produtor com IE n\u00e3o vinculada ao CNPJ/CPF informado (nREF: xxx)"),
CODIGO_690(690, "Rejei\u00e7\u00e3o: Pedido de cancelamento para NF-e com CT-e ou MDF-e"),
CODIGO_691(691, "Rejei\u00e7\u00e3o: Chave de Acesso da NFe diverge da Chave de Acesso do EPEC"),
CODIGO_691(691, "Rejei\u00e7\u00e3o: Chave de Acesso da NF-e diverge da Chave de Acesso do EPEC"),
CODIGO_692(692, "Rejei\u00e7\u00e3o: Existe EPEC registrado para esta S\u00e9rie e N\u00famero"),
CODIGO_693(693, "Rejei\u00e7\u00e3o: Al\u00edquota de ICMS superior a definida para a opera\u00e7\u00e3o interestadual"),
CODIGO_694(694, "Rejei\u00e7\u00e3o: N\u00e3o informado o grupo de ICMS para a UF de destino"),
Expand Down Expand Up @@ -606,4 +609,4 @@ public int getCodigo() {
public String getMotivo() {
return this.motivo;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,12 @@

@Root(strict = false)
public class NFTipoEvento extends DFBase {

private static final long serialVersionUID = 172979194017130488L;

@Attribute(name = "versao")
private String versao;

@Element(name = "descEvento")
private String descricaoEvento;

Expand All @@ -31,7 +32,7 @@ public void setVersao(final BigDecimal versao) {
}

public void setDescricaoEvento(final String descricaoEvento) {
StringValidador.tamanho5a60(descricaoEvento, "Descricao do Evento");
StringValidador.tamanho4a60(descricaoEvento, "Descricao do Evento");
this.descricaoEvento = descricaoEvento;
}

Expand All @@ -58,4 +59,4 @@ public String getCondicaoUso() {
public String getTextoCorrecao() {
return this.textoCorrecao;
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
package com.fincatto.documentofiscal.nfe400.classes.evento.epec;

import com.fincatto.documentofiscal.validadores.StringValidador;
import org.simpleframework.xml.Element;


public class NFDestinatarioEpec {

@Element(name = "UF", required = true)
protected String ufDestinatario;

@Element(name = "CNPJ", required = false)
protected String cnpj;

@Element(name = "CPF", required = false)
protected String cpf;

@Element(name = "idEstrangeiro", required = false)
protected String idEstrangeiro;

@Element(name = "IE", required = false)
protected String inscricaoEstadualDestinatario;

@Element(name = "vNF", required = true)
protected String valorTotalNFe;

@Element(name = "vICMS", required = true)
protected String valorTotalIcms;

@Element(name = "vST", required = true)
protected String valorTotalIcmsSubstituicaoTributaria;

public String getUfDestinatario() {
return ufDestinatario;
}

public void setUfDestinatario(String ufDestinatario) {
this.ufDestinatario = ufDestinatario;
}

public String getCnpj() {
return cnpj;
}

public void setCnpj(String cnpj) {
if (this.cpf != null) {
throw new IllegalStateException("CPF ja foi setado");
}
StringValidador.cnpj(cnpj);
this.cnpj = cnpj;
}

public String getCpf() {
return cpf;
}

public void setCpf(String cpf) {
if (this.cnpj != null) {
throw new IllegalStateException("CNPJ ja foi setado");
}
StringValidador.cpf(cpf);
this.cpf = cpf;
}

public String getIdEstrangeiro() {
return idEstrangeiro;
}

public void setIdEstrangeiro(String idEstrangeiro) {
this.idEstrangeiro = idEstrangeiro;
}

public String getInscricaoEstadualDestinatario() {
return inscricaoEstadualDestinatario;
}

public void setInscricaoEstadualDestinatario(String inscricaoEstadualDestinatario) {
this.inscricaoEstadualDestinatario = inscricaoEstadualDestinatario;
}

public String getValorTotalNFe() {
return valorTotalNFe;
}

public void setValorTotalNFe(String valorTotalNFe) {
this.valorTotalNFe = valorTotalNFe;
}

public String getValorTotalIcms() {
return valorTotalIcms;
}

public void setValorTotalIcms(String valorTotalIcms) {
this.valorTotalIcms = valorTotalIcms;
}

public String getValorTotalIcmsSubstituicaoTributaria() {
return valorTotalIcmsSubstituicaoTributaria;
}

public void setValorTotalIcmsSubstituicaoTributaria(String valorTotalIcmsSubstituicaoTributaria) {
this.valorTotalIcmsSubstituicaoTributaria = valorTotalIcmsSubstituicaoTributaria;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package com.fincatto.documentofiscal.nfe400.classes.evento.epec;

import com.fincatto.documentofiscal.DFBase;
import java.math.BigDecimal;
import java.util.List;

import org.simpleframework.xml.Attribute;
import org.simpleframework.xml.Element;
import org.simpleframework.xml.ElementList;
import org.simpleframework.xml.Namespace;
import org.simpleframework.xml.Root;

import com.fincatto.documentofiscal.validadores.BigDecimalValidador;
import com.fincatto.documentofiscal.validadores.ListValidador;
import com.fincatto.documentofiscal.validadores.StringValidador;

@Root(name = "envEvento")
@Namespace(reference = "http://www.portalfiscal.inf.br/nfe")
public class NFEnviaEventoEpec extends DFBase {

@Attribute(name = "versao", required = true)
private String versao;

@Element(name = "idLote", required = true)
private String idLote;

@ElementList(entry = "evento", inline = true, required = true)
private List<NFEventoEpec> evento;

public void setVersao(final BigDecimal versao) {
this.versao = BigDecimalValidador.tamanho5Com2CasasDecimais(versao, "Versao");
}

public String getVersao() {
return this.versao;
}

public void setVersao(String versao) {
this.versao = versao;
}

public String getIdLote() {
return this.idLote;
}

public void setIdLote(final String idLote) {
StringValidador.tamanho15N(idLote, "ID do Lote");
this.idLote = idLote;
}

public List<NFEventoEpec> getEvento() {
return this.evento;
}

public void setEvento(final List<NFEventoEpec> evento) {
ListValidador.tamanho20(evento, "Evento de Conting\u00eancia EPEC");
this.evento = evento;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
package com.fincatto.documentofiscal.nfe400.classes.evento.epec;

import com.fincatto.documentofiscal.DFAmbiente;
import com.fincatto.documentofiscal.DFBase;
import com.fincatto.documentofiscal.DFUnidadeFederativa;
import com.fincatto.documentofiscal.nfe400.converters.NFStringNullToEmptyConverter;
import org.simpleframework.xml.Attribute;
import org.simpleframework.xml.Element;
import org.simpleframework.xml.ElementList;
import org.simpleframework.xml.Root;
import org.simpleframework.xml.convert.Convert;

import java.util.List;

@Root(name = "retEnvEvento")
public class NFEnviaEventoEpecRetorno extends DFBase {

@Attribute(name = "versao", required = true)
private String versao;

//O Converter StringNullConverter esta sendo utilizado para resolver um problema da autorizadora SVAN, que esta retornandoo atributo idLote vazio.
@Element(name = "idLote", required = true)
@Convert(NFStringNullToEmptyConverter.class)
private String idLote;

@Element(name = "tpAmb", required = true)
private DFAmbiente ambiente;

@Element(name = "verAplic", required = true)
private String versaoAplicativo;

@Element(name = "cOrgao", required = true)
private DFUnidadeFederativa orgao;

@Element(name = "cStat", required = true)
private Integer codigoStatusReposta;

@Element(name = "xMotivo", required = true)
private String motivo;

@ElementList(entry = "retEvento", inline = true, required = false)
private List<NFEventoEpecRetorno> eventoRetorno;

public String getVersao() {
return this.versao;
}

public String getIdLote() {
return this.idLote;
}

public DFAmbiente getAmbiente() {
return this.ambiente;
}

public String getVersaoAplicativo() {
return this.versaoAplicativo;
}

public DFUnidadeFederativa getOrgao() {
return this.orgao;
}

public Integer getCodigoStatusReposta() {
return this.codigoStatusReposta;
}

public String getMotivo() {
return this.motivo;
}

public List<NFEventoEpecRetorno> getEventoRetorno() {
return this.eventoRetorno;
}

public void setVersao(final String versao) {
this.versao = versao;
}

public void setIdLote(final String idLote) {
this.idLote = idLote;
}

public void setAmbiente(final DFAmbiente ambiente) {
this.ambiente = ambiente;
}

public void setVersaoAplicativo(final String versaoAplicativo) {
this.versaoAplicativo = versaoAplicativo;
}

public void setOrgao(final DFUnidadeFederativa orgao) {
this.orgao = orgao;
}

public void setCodigoStatusReposta(final Integer codigoStatusReposta) {
this.codigoStatusReposta = codigoStatusReposta;
}

public void setMotivo(final String motivo) {
this.motivo = motivo;
}

public void setEventoRetorno(final List<NFEventoEpecRetorno> eventoRetorno) {
this.eventoRetorno = eventoRetorno;
}
}
Loading

0 comments on commit ff1dc5b

Please sign in to comment.