com.fincatto.documentofiscal.nfe400.webservices.WSFacade Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of nfe Show documentation
Show all versions of nfe Show documentation
Biblioteca de comunicacao de nota fiscal eletronica brasileira
package com.fincatto.documentofiscal.nfe400.webservices;
import com.fincatto.documentofiscal.DFModelo;
import com.fincatto.documentofiscal.DFUnidadeFederativa;
import com.fincatto.documentofiscal.nfe.NFeConfig;
import com.fincatto.documentofiscal.nfe.classes.distribuicao.NFDistribuicaoIntRetorno;
import com.fincatto.documentofiscal.nfe.webservices.distribuicao.WSDistribuicaoNFe;
import com.fincatto.documentofiscal.nfe400.classes.cadastro.NFRetornoConsultaCadastro;
import com.fincatto.documentofiscal.nfe400.classes.evento.NFEnviaEventoRetorno;
import com.fincatto.documentofiscal.nfe400.classes.evento.cartacorrecao.NFProtocoloEventoCartaCorrecao;
import com.fincatto.documentofiscal.nfe400.classes.evento.epec.NFEnviaEventoEpecRetorno;
import com.fincatto.documentofiscal.nfe400.classes.evento.inutilizacao.NFRetornoEventoInutilizacao;
import com.fincatto.documentofiscal.nfe400.classes.evento.manifestacaodestinatario.NFProtocoloEventoManifestacaoDestinatario;
import com.fincatto.documentofiscal.nfe400.classes.evento.manifestacaodestinatario.NFTipoEventoManifestacaoDestinatario;
import com.fincatto.documentofiscal.nfe400.classes.lote.consulta.NFLoteConsultaRetorno;
import com.fincatto.documentofiscal.nfe400.classes.lote.envio.*;
import com.fincatto.documentofiscal.nfe400.classes.nota.consulta.NFNotaConsultaRetorno;
import com.fincatto.documentofiscal.nfe400.classes.statusservico.consulta.NFStatusServicoConsultaRetorno;
import com.fincatto.documentofiscal.nfe400.webservices.gerado.NFeAutorizacao4Stub;
import com.fincatto.documentofiscal.utils.DFSocketFactory;
import org.apache.commons.httpclient.protocol.Protocol;
import java.security.KeyManagementException;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.UnrecoverableKeyException;
public class WSFacade {
private final WSLoteEnvio wsLoteEnvio;
private final WSLoteConsulta wsLoteConsulta;
private final WSStatusConsulta wsStatusConsulta;
private final WSNotaConsulta wsNotaConsulta;
private final WSCartaCorrecao wsCartaCorrecao;
private final WSCancelamento wsCancelamento;
private final WSConsultaCadastro wsConsultaCadastro;
private final WSInutilizacao wsInutilizacao;
private final WSManifestacaoDestinatario wSManifestacaoDestinatario;
private final WSDistribuicaoNFe wSDistribuicaoNFe;
private final WSEpec wsEpec;
public WSFacade(final NFeConfig config) throws KeyManagementException, UnrecoverableKeyException, KeyStoreException, NoSuchAlgorithmException {
Protocol.registerProtocol("https", new Protocol("https", new DFSocketFactory(config), 443));
// inicia os servicos disponiveis da nfe
this.wsLoteEnvio = new WSLoteEnvio(config);
this.wsLoteConsulta = new WSLoteConsulta(config);
this.wsStatusConsulta = new WSStatusConsulta(config);
this.wsNotaConsulta = new WSNotaConsulta(config);
this.wsCartaCorrecao = new WSCartaCorrecao(config);
this.wsCancelamento = new WSCancelamento(config);
this.wsConsultaCadastro = new WSConsultaCadastro(config);
this.wsInutilizacao = new WSInutilizacao(config);
this.wSManifestacaoDestinatario = new WSManifestacaoDestinatario(config);
this.wSDistribuicaoNFe = new WSDistribuicaoNFe(config);
this.wsEpec = new WSEpec(config);
}
/**
* Faz o envio de lote para a Sefaz.
*
* @param lote o lote a ser enviado para a Sefaz
* @param validarXML - boolean indicando se deve haver validação XSD com o XML a ser enviado
* @return dados do lote retornado pelo webservice, alem do lote assinado
* @throws Exception caso nao consiga gerar o xml ou problema de conexao com
* o sefaz
*/
public NFLoteEnvioRetornoDados enviaLote(final NFLoteEnvio lote, boolean validarXML) throws Exception {
if (lote.getIndicadorProcessamento().equals(NFLoteIndicadorProcessamento.PROCESSAMENTO_SINCRONO) && lote.getNotas().size() > 1) {
throw new IllegalArgumentException("Apenas uma nota permitida no modo sincrono!");
} else if (lote.getNotas().size() == 0) {
throw new IllegalArgumentException("Nenhuma nota informada no envio do Lote!");
}
return this.wsLoteEnvio.enviaLote(lote, validarXML);
}
public NFLoteEnvioRetornoDados enviaLote(final NFLoteEnvio lote) throws Exception {
return enviaLote(lote, true);
}
public NFLoteEnvio getLoteAssinado(final NFLoteEnvio lote) throws Exception {
return this.wsLoteEnvio.getLoteAssinado(lote);
}
/**
* Faz o envio assinado para a Sefaz de NF-e e NFC-e ATENCAO: Esse metodo
* deve ser utilizado para assinaturas A3.
*
* @param loteAssinadoXml lote assinado no formato XML
* @param modelo modelo da nota (NF-e ou NFC-e)
* @return dados do lote retornado pelo webservice
* @throws Exception caso nao consiga gerar o xml ou problema de conexao com
* o sefaz
*/
public NFLoteEnvioRetorno enviaLoteAssinado(final String loteAssinadoXml, final DFModelo modelo) throws Exception {
return this.wsLoteEnvio.enviaLoteAssinado(loteAssinadoXml, modelo);
}
/**
* Faz o envio assinado para a Sefaz de NF-e e NFC-e ATENCAO: Esse metodo
* deve ser utilizado para assinaturas A3. Retorna resultado bruto da
* receita, para processamento posterior.
*
* @param loteAssinadoXml lote assinado no formato XML
* @param modelo modelo da nota (NF-e ou NFC-e)
* @return dados do lote retornado pelo webservice
* @throws Exception caso nao consiga gerar o xml ou problema de conexao com
* o sefaz
*/
public NFeAutorizacao4Stub.NfeResultMsg getNfeResultMsg(final String loteAssinadoXml, final DFModelo modelo) throws Exception {
return this.wsLoteEnvio.comunicaLoteRaw(loteAssinadoXml, modelo, true);
}
/**
* Faz a consulta do lote na Sefaz (NF-e e NFC-e).
*
* @param numeroRecibo numero do recibo do processamento
* @param modelo modelo da nota (NF-e ou NFC-e)
* @return dados de consulta de lote retornado pelo webservice
* @throws Exception caso nao consiga gerar o xml ou problema de conexao com
* o sefaz
*/
public NFLoteConsultaRetorno consultaLote(final String numeroRecibo, final DFModelo modelo) throws Exception {
return this.wsLoteConsulta.consultaLote(numeroRecibo, modelo);
}
/**
* Faz a consulta de status responsavel pela UF.
*
* @param uf uf UF que deseja consultar o status do sefaz responsavel
* @param modelo modelo da nota (NF-e ou NFC-e)
* @return dados da consulta de status retornado pelo webservice
* @throws Exception caso nao consiga gerar o xml ou problema de conexao com
* o sefaz
*/
public NFStatusServicoConsultaRetorno consultaStatus(final DFUnidadeFederativa uf, final DFModelo modelo) throws Exception {
return this.wsStatusConsulta.consultaStatus(uf, modelo);
}
/**
* Faz a consulta da nota.
*
* @param chaveDeAcesso chave de acesso da nota
* @return dados da consulta da nota retornado pelo webservice
* @throws Exception caso nao consiga gerar o xml ou problema de conexao com
* o sefaz
*/
public NFNotaConsultaRetorno consultaNota(final String chaveDeAcesso) throws Exception {
return this.wsNotaConsulta.consultaNota(chaveDeAcesso);
}
/**
* Faz a consulta da nota.(Retorno como string)
*
* @param chaveDeAcesso chave de acesso da nota
* @return dados da consulta da nota retornado pelo webservice
* @throws Exception caso nao consiga gerar o xml ou problema de conexao com
* o sefaz
*/
public String consultaNotaAsString(final String chaveDeAcesso) throws Exception {
return this.wsNotaConsulta.consultaNotaAsString(chaveDeAcesso);
}
/**
* Faz a correcao da nota.
*
* @param chaveDeAcesso chave de acesso da nota
* @param textoCorrecao texto de correcao
* @param numeroSequencialEvento numero sequencial de evento, esse numero
* nao pode ser repetido!
* @return dados da correcao da nota retornado pelo webservice
* @throws Exception caso nao consiga gerar o xml ou problema de conexao com
* o sefaz
*/
public NFEnviaEventoRetorno corrigeNota(final String chaveDeAcesso, final String textoCorrecao, final int numeroSequencialEvento) throws Exception {
return this.wsCartaCorrecao.corrigeNota(chaveDeAcesso, textoCorrecao, numeroSequencialEvento);
}
/**
* Faz a correcao da nota com o evento ja assinado ATENCAO: Esse metodo deve
* ser utilizado para assinaturas A3.
*
* @param chave chave de acesso da nota
* @param eventoAssinadoXml evento ja assinado em formato XML
* @return dados da correcao da nota retornado pelo webservice
* @throws Exception caso nao consiga gerar o xml ou problema de conexao com
* o sefaz
*/
public NFEnviaEventoRetorno corrigeNotaAssinada(final String chave, final String eventoAssinadoXml) throws Exception {
return this.wsCartaCorrecao.corrigeNotaAssinada(chave, eventoAssinadoXml);
}
/**
* Faz a correcao da nota com o evento ja assinado.
*
* @param eventoAssinadoXml evento ja assinado em formato XML
* @return dados da correcao da nota retornado pelo webservice
* @throws Exception caso nao consiga gerar o xml ou problema de conexao com
* o sefaz
*/
public NFEnviaEventoRetorno corrigeNotaAssinada(final String eventoAssinadoXml) throws Exception {
return this.wsCartaCorrecao.corrigeNotaAssinada(eventoAssinadoXml);
}
public NFProtocoloEventoCartaCorrecao corrigeNotaAssinadaProtocolo(final String eventoAssinadoXml) throws Exception {
return this.wsCartaCorrecao.corrigeNotaAssinadaProtocolo(eventoAssinadoXml);
}
public NFProtocoloEventoCartaCorrecao corrigeNotaAssinadaProtocolo(final String chaveDeAcesso, final String textoCorrecao, final int numeroSequencialEvento) throws Exception {
return this.wsCartaCorrecao.corrigeNotaAssinadaProtocolo(getXmlAssinado(chaveDeAcesso, textoCorrecao, numeroSequencialEvento));
}
public String getXmlAssinado(final String chaveDeAcesso, final String textoCorrecao, final int numeroSequencialEvento) throws Exception {
return this.wsCartaCorrecao.getXmlAssinado(chaveDeAcesso, textoCorrecao, numeroSequencialEvento);
}
/**
* Faz o cancelamento da nota.
*
* @param chave chave de acesso da nota
* @param numeroProtocolo numero do protocolo da nota
* @param motivo motivo do cancelamento
* @return dados do cancelamento da nota retornado pelo webservice
* @throws Exception caso nao consiga gerar o xml ou problema de conexao com
* o sefaz
*/
public NFCancelamentoRetornoDados cancelaNota(final String chave, final String numeroProtocolo, final String motivo) throws Exception {
return this.wsCancelamento.cancelaNota(chave, numeroProtocolo, motivo);
}
/**
* Faz o cancelamento da nota com evento ja assinado ATENCAO: Esse metodo
* deve ser utilizado para assinaturas A3.
*
* @param chave chave de acesso da nota
* @param eventoAssinadoXml evento ja assinado em formato XML
* @return dados do cancelamento da nota retornado pelo webservice
* @throws Exception caso nao consiga gerar o xml ou problema de conexao com
* o sefaz
*/
public NFEnviaEventoRetorno cancelaNotaAssinada(final String chave, final String eventoAssinadoXml) throws Exception {
return this.wsCancelamento.cancelaNotaAssinada(chave, eventoAssinadoXml);
}
/**
* Faz o cancelamento da nota por substituicao, evento permitido para NFCe.
*
* @param chave chave de acesso da nota
* @param numeroProtocolo numero do protocolo da nota
* @param motivo motivo do cancelamento
* @param chave chave de acesso da nota substituta
* @return dados do cancelamento da nota retornado pelo webservice
* @throws Exception caso nao consiga gerar o xml ou problema de conexao com
* o sefaz
*/
public NFEnviaEventoRetorno cancelaNotaPorSubstituicao(final String chave, final String numeroProtocolo, final String motivo, final String versaoAplicativoAutorizador, final String chaveSubstituta) throws Exception {
return this.wsCancelamento.cancelaNotaPorSubstituicao(chave, numeroProtocolo, motivo, versaoAplicativoAutorizador, chaveSubstituta);
}
/**
* Inutiliza a nota com o evento assinado ATENCAO: Esse metodo deve ser
* utilizado para assinaturas A3.
*
* @param eventoAssinadoXml evento assinado em XML
* @param modelo modelo da nota (NF-e ou NFC-e)
* @return dados da inutilizacao da nota retornado pelo webservice
* @throws Exception caso nao consiga gerar o xml ou problema de conexao com
* o sefaz
*/
public NFRetornoEventoInutilizacao inutilizaNotaAssinada(final String eventoAssinadoXml, final DFModelo modelo) throws Exception {
return this.wsInutilizacao.inutilizaNotaAssinada(eventoAssinadoXml, modelo);
}
/**
* Inutiliza a nota.
*
* @param anoInutilizacaoNumeracao ano de inutilizacao
* @param cnpjEmitente CNPJ emitente da nota
* @param serie serie da nota
* @param numeroInicial numero inicial da nota
* @param numeroFinal numero final da nota
* @param justificativa justificativa da inutilizacao
* @param modelo modelo da nota (NF-e ou NFC-e)
* @return dados da inutilizacao da nota retornado pelo webservice
* @throws Exception caso nao consiga gerar o xml ou problema de conexao com
* o sefaz
*/
public NFRetornoEventoInutilizacao inutilizaNota(final int anoInutilizacaoNumeracao, final String cnpjEmitente, final String serie, final String numeroInicial, final String numeroFinal, final String justificativa, final DFModelo modelo) throws Exception {
return this.wsInutilizacao.inutilizaNota(anoInutilizacaoNumeracao, cnpjEmitente, serie, numeroInicial, numeroFinal, justificativa, modelo);
}
/**
* Realiza a consulta de cadastro de pessoa juridica com inscricao estadual.
*
* @param cnpj CNPJ da pessoa juridica
* @param uf UF da pessoa juridica
* @return dados da consulta da pessoa juridica retornado pelo webservice
* @throws Exception caso nao consiga gerar o xml ou problema de conexao com
* o sefaz
*/
public NFRetornoConsultaCadastro consultaCadastro(final String cnpj, final DFUnidadeFederativa uf) throws Exception {
return this.wsConsultaCadastro.consultaCadastro(cnpj, uf);
}
/**
* Faz a manifestação do destinatário da nota.
*
* @param chave chave de acesso da nota
* @param tipoEvento tipo do evento da manifestacao do destinatario
* @param motivo motivo do cancelamento
* @param cnpj cnpj do autor do evento
* @return dados da manifestacao do destinatario da nota retornado pelo
* webservice
* @throws Exception caso nao consiga gerar o xml ou problema de conexao com
* o sefaz
*/
public NFEnviaEventoRetorno manifestaDestinatarioNota(final String chave, final NFTipoEventoManifestacaoDestinatario tipoEvento, final String motivo, final String cnpj) throws Exception {
return this.wSManifestacaoDestinatario.manifestaDestinatarioNota(chave, tipoEvento, motivo, cnpj);
}
public NFProtocoloEventoManifestacaoDestinatario manifestaDestinatarioNotaProtocolo(final String chave, final NFTipoEventoManifestacaoDestinatario tipoEvento, final String motivo, final String cnpj) throws Exception {
return this.wSManifestacaoDestinatario.manifestaDestinatarioNotaProtocolo(chave, tipoEvento, motivo, cnpj);
}
/**
* Faz a manifestação do destinatário da nota com evento ja assinado
* ATENCAO: Esse metodo deve ser utilizado para assinaturas A3.
*
* @param chave chave de acesso da nota
* @param eventoAssinadoXml evento ja assinado em formato XML
* @return dados da manifestacao do destinatario da nota retornado pelo
* webservice
* @throws Exception caso nao consiga gerar o xml ou problema de conexao com
* o sefaz
*/
public NFEnviaEventoRetorno manifestaDestinatarioNotaAssinada(final String chave, final String eventoAssinadoXml) throws Exception {
return this.wSManifestacaoDestinatario.manifestaDestinatarioNotaAssinada(chave, eventoAssinadoXml);
}
/**
* Faz consulta de distribuicao das notas fiscais.Pode ser feita pela chave
* de acesso ou utilizando o NSU (numero sequencial unico) da receita.
*
* @param cpfOuCnpj CPF ou CNPJ da pessoa fisica ou juridica a consultar
* @param uf Unidade federativa da pessoa juridica a consultar
* @param chaveAcesso
* @param nsu 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.
* @param ultNsu Ú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.
* @return dados da consulta retornado pelo webservice limitando um total de
* 50 registros
* @throws Exception caso nao consiga gerar o xml ou problema de conexao com
* o sefaz
*/
public NFDistribuicaoIntRetorno consultarDistribuicaoDFe(final String cpfOuCnpj, final DFUnidadeFederativa uf, final String chaveAcesso, final String nsu, final String ultNsu) throws Exception {
return this.wSDistribuicaoNFe.consultar(cpfOuCnpj, uf, chaveAcesso, nsu, ultNsu);
}
/**
* Faz o envio de lote já enviado em EPEC para a Sefaz
*
* @param lote o lote a ser enviado para a Sefaz
* @return dados do lote retornado pelo webservice, alem do lote assinado
* @throws Exception caso nao consiga gerar o xml ou problema de conexao com
* o sefaz
*/
public NFEnviaEventoEpecRetorno enviaLoteEpec(final NFLoteEnvio lote) throws Exception {
return this.wsEpec.enviaEpec(lote);
}
/**
* Faz o envio do epec como evento para o ambiente nacional
*
* @param lote
* @return dados do epec retornado pelo webservice
* @throws Exception caso nao consiga gerar o xml ou problema de conexao com
* o ambiente nacional da sefaz
*/
public NFEnviaEventoEpecRetorno enviaEpec(final NFLoteEnvio lote) throws Exception {
return this.wsEpec.enviaEpec(lote);
}
/**
* Faz o envio assinado para o ambiente nacional da Sefaz
*
* @param epecAssinadoXml
* @return dados do epec retornado pelo webservice
* @throws Exception caso nao consiga gerar o xml ou problema de conexao com
* o ambiente nacional da sefaz
*/
public NFEnviaEventoEpecRetorno enviaEpecAssinado(final String epecAssinadoXml) throws Exception {
return this.wsEpec.enviaEpecAssinado(epecAssinadoXml);
}
}