/// <summary>
        /// Envia o comando para o integrador ficasl.
        /// </summary>
        /// <param name="adicionarNumeroSessao">Se adicionar o número da sessão nos parametros.</param>
        /// <returns></returns>
        public IntegradorRetorno Enviar(bool adicionarNumeroSessao = true)
        {
            Guard.Against <ArgumentNullException>(NomeComponente.IsEmpty(), "Componente não definido.");
            Guard.Against <ArgumentNullException>(NomeMetodo.IsEmpty(), "Metodo não definido.");

            var envio = NovoEnvio();

            if (adicionarNumeroSessao)
            {
                GerarNumeroSessao();
                Parametros.InsertParametro(0, "numeroSessao", NumeroSessao.ToString());
            }

            envio.Identificador.Valor = NumeroSessao.ToString();

            envio.Componente.Metodo.Parametros.AddRange(Parametros);

            EnviarComando(envio);

            AguardarResposta(NumeroSessao.ToString());

            var resposta = IntegradorRetorno.Load(UltimaResposta);

            return(resposta);
        }
        /// <summary>
        /// Pega a resposta fiscal do pagamento.
        /// </summary>
        /// <param name="idFila"></param>
        /// <param name="chaveAcesso"></param>
        /// <param name="nsu"></param>
        /// <param name="numeroAprovacao"></param>
        /// <param name="bandeira"></param>
        /// <param name="adquirinte"></param>
        /// <param name="cnpj"></param>
        /// <param name="impressaofiscal"></param>
        /// <param name="numeroDocumento"></param>
        /// <returns></returns>
        public IntegradorRetorno RespostaFiscal(int idFila, string chaveAcesso, string nsu,
                                                string numeroAprovacao, string bandeira, string adquirinte, string cnpj, string impressaofiscal, string numeroDocumento)
        {
            NomeComponente = VFPName;
            NomeMetodo     = "RespostaFiscal";

            var envio      = NovoEnvio();
            var parametros = envio.Componente.Metodo.Parametros;

            parametros.AddParametro("idFila", idFila.ToString());
            parametros.AddParametro("ChaveAcesso", chaveAcesso);
            parametros.AddParametro("Nsu", nsu);
            parametros.AddParametro("NumerodeAprovacao", numeroAprovacao);
            parametros.AddParametro("Bandeira", bandeira);
            parametros.AddParametro("Adquirente", adquirinte);
            parametros.AddParametro("Cnpj", cnpj);
            parametros.AddParametro("ImpressaoFiscal", impressaofiscal);
            parametros.AddParametro("NumeroDocumento", numeroDocumento);

            envio.Componente.Metodo.Construtor = new IntegradorConstrutor();
            envio.Componente.Metodo.Construtor.Parametros.AddParametro("chaveAcessoValidador", Configuracoes.ChaveAcessoValidador);

            EnviarComando(envio);

            AguardarResposta(NumeroSessao.ToString());

            return(IntegradorRetorno.Load(UltimaResposta));
        }
        /// <summary>
        /// Envia a situação do pagamento.
        /// </summary>
        /// <param name="codigoAutorizacao"></param>
        /// <param name="bin"></param>
        /// <param name="donoCartao"></param>
        /// <param name="dataExpiracao"></param>
        /// <param name="instituicaoFinanceira"></param>
        /// <param name="parcelas"></param>
        /// <param name="codigoPagamento"></param>
        /// <param name="valorPagamento"></param>
        /// <param name="idFila"></param>
        /// <param name="tipo"></param>
        /// <param name="ultimosQuatroDigitos"></param>
        /// <returns></returns>
        public IntegradorRetorno EnviarStatusPagamento(string codigoAutorizacao, string bin, string donoCartao,
                                                       string dataExpiracao, string instituicaoFinanceira, int parcelas, string codigoPagamento, decimal valorPagamento, int idFila, string tipo, int ultimosQuatroDigitos)
        {
            NomeComponente = VFPName;
            NomeMetodo     = "EnviarStatusPagamento";

            var envio      = NovoEnvio();
            var parametros = envio.Componente.Metodo.Parametros;

            parametros.AddParametro("CodigoAutorizacao", codigoAutorizacao);
            parametros.AddParametro("Bin", bin);
            parametros.AddParametro("DonoCartao", donoCartao);
            parametros.AddParametro("DataExpiracao", dataExpiracao);
            parametros.AddParametro("InstituicaoFinanceira", instituicaoFinanceira);
            parametros.AddParametro("Parcelas", parcelas.ToString());
            parametros.AddParametro("CodigoPagamento", codigoPagamento);
            parametros.AddParametro("ValorPagamento", $"{valorPagamento:0.00}".Replace('.', ','));
            parametros.AddParametro("IdFila", idFila.ToString());
            parametros.AddParametro("Tipo", tipo);
            parametros.AddParametro("UltimosQuatroDigitos", ultimosQuatroDigitos.ToString());

            envio.Componente.Metodo.Construtor = new IntegradorConstrutor();
            envio.Componente.Metodo.Construtor.Parametros.AddParametro("chaveAcessoValidador", Configuracoes.ChaveAcessoValidador);

            EnviarComando(envio);

            AguardarResposta(NumeroSessao.ToString());

            return(IntegradorRetorno.Load(UltimaResposta));
        }
        /// <summary>
        /// Enviar as informações de pagamento para o integrador fiscal.
        /// </summary>
        /// <param name="chaveRequisicao"></param>
        /// <param name="estabelecimento"></param>
        /// <param name="serialPOS"></param>
        /// <param name="cnpj"></param>
        /// <param name="icmsBase"></param>
        /// <param name="valorTotalVenda"></param>
        /// <param name="origemPagamento"></param>
        /// <param name="habilitarMultiplosPagamentos"></param>
        /// <param name="habilitarControleAntiFraude"></param>
        /// <param name="codigoMoeda"></param>
        /// <param name="emitirCupomNFCE"></param>
        /// <returns></returns>
        public IntegradorRetorno EnviarPagamento(string chaveRequisicao, string estabelecimento, string serialPOS, string cnpj, decimal icmsBase, decimal valorTotalVenda, string origemPagamento,
                                                 bool habilitarMultiplosPagamentos = true, bool habilitarControleAntiFraude = false, string codigoMoeda = "BRL", bool emitirCupomNFCE = false)
        {
            NomeComponente = VFPName;
            NomeMetodo     = "EnviarPagamento";

            GerarNumeroSessao();

            var envio      = NovoEnvio();
            var parametros = envio.Componente.Metodo.Parametros;

            parametros.AddParametro("ChaveRequisicao", chaveRequisicao);
            parametros.AddParametro("Estabelecimento", estabelecimento);
            parametros.AddParametro("SerialPOS", serialPOS);
            parametros.AddParametro("Cnpj", cnpj);
            parametros.AddParametro("IcmsBase", $"{icmsBase:0.00}".Replace('.', ','));
            parametros.AddParametro("ValorTotalVenda", $"{valorTotalVenda:0.00}".Replace('.', ','));
            parametros.AddParametro("HabilitarMultiplosPagamentos", habilitarMultiplosPagamentos ? "true" : "false");
            parametros.AddParametro("HabilitarControleAntiFraude", habilitarControleAntiFraude ? "true" : "false");
            parametros.AddParametro("CodigoMoeda", codigoMoeda);
            parametros.AddParametro("OrigemPagamento", origemPagamento);
            parametros.AddParametro("EmitirCupomNFCE", emitirCupomNFCE ? "true" : "false");

            envio.Componente.Metodo.Construtor = new IntegradorConstrutor();
            envio.Componente.Metodo.Construtor.Parametros.AddParametro("chaveAcessoValidador", Configuracoes.ChaveAcessoValidador);

            EnviarComando(envio);

            AguardarResposta(NumeroSessao.ToString());

            return(IntegradorRetorno.Load(UltimaResposta));
        }
        /// <summary>
        /// Verifica a situação do validador.
        /// </summary>
        /// <param name="idFila"></param>
        /// <param name="cnpj"></param>
        /// <returns></returns>
        public IntegradorRetorno VerificarStatusValidador(int idFila, string cnpj)
        {
            NomeComponente = VFPName;
            NomeMetodo     = "VerificarStatusValidador";

            var envio      = NovoEnvio();
            var parametros = envio.Componente.Metodo.Parametros;

            parametros.AddParametro("idFila", idFila.ToString());
            parametros.AddParametro("cnpj", cnpj);

            envio.Componente.Metodo.Construtor = new IntegradorConstrutor();
            envio.Componente.Metodo.Construtor.Parametros.AddParametro("chaveAcessoValidador", Configuracoes.ChaveAcessoValidador);

            EnviarComando(envio);

            AguardarResposta(NumeroSessao.ToString());

            return(IntegradorRetorno.Load(UltimaResposta));
        }