Ir para conteúdo
  • Cadastre-se

Painel de líderes

Conteúdo popular

Showing content with the highest reputation on 18-11-2020 em todas as áreas

  1. Olá Pessoal, Existem alguns provedores que permitem informar uma lista de Itens. São eles: SimplISS, esse provedor "segue" a versão 1 do layout da ABRASF. Elotech e FintelISS, esses 2 provedores "seguem" a versão 2 do layout da ABRASF. Agiliv1, Agiliv2, AssessorPublico, EL, Equiplano, Governa, Infisc, IPM, ISSDSF, Siat e SmarAPD, todos esses provedores possuem um layout próprio.
    5 pontos
  2. Comunicado SEFAZ/MG "Atualização das cadeias de certificado BP-e e NFC-e. 16/11/2020 Informamos que no dia 18/11/2020, às 09:00h, serão atualizadas as cadeias de certificado de produção dos documentos eletrônicos BP-e e NFC-e. As novas cadeias dos certificados da SEF foram disponibilizadas neste portal, na aba do respectivo documento, opção "Download." Fonte: http://www.sped.fazenda.mg.gov.br/spedmg/noticias/atualizacao-cadeias-de-certificado/ Download da nova cadeia: http://www.sped.fazenda.mg.gov.br/spedmg/nfce/Downloads/
    4 pontos
  3. Olá Pessoal, Existem alguns provedores que permitem informar uma lista contendo as datas de vencimento e os valores de cada parcela. São eles: Betha e Publica, esses 2 provedores "seguem" a versão 1 do layout da ABRASF. Infisc, IPM e SmarAPD, esses 3 provedores possuem um layout próprio.
    3 pontos
  4. Olá pessoal, O MDF-e tem uma particularidade em relação aos demais DF-e. Não importa em qual UF se encontra o contribuinte, todos os MDF-e de todos os contribuintes são recepcionados pela SVRS - SEFAZ-Virtual do Rio Grande do Sul e não existe um SVC - SEFAZ-Virtual de Contingência para o MDF-e. Como é que fica se a SVRS estiver parada? Conforme consta no Manual do MDF-e Visão Geral versão 3.00 - item 12 páginas 99, 100 e 101 a solução é emitir o MDF-e em contingência offline. Ações para a emissão em Contingência offline: Configurar o componente -> Configuracoes.Geral.FormaEmissao = teContingencia; Se você utiliza componente nativo para Delphi a propriedade é: ACBrMDFe.Configuracoes.Geral.FormaEmissao := teContingencia; Se você usa Lib, vai utilizar o método MDFe_ConfigGravarValor para definir a FormaEmissao nas configurações: MDFE_ConfigGravarValor("MDFe", "FormaEmissao", 1); Caso utilize ACBrMonitorPLUS, é o comando MDFe.SetFormaEmissao: MDFe.SetFormaEmissao(2) Alimentar o componente alterando o valor de tpEmis para teContingencia; Se você utiliza o componente nativo para Delphi/Lazarus: ACBrMDFe.Manifestos[0].Ide.tpEmis := teContingencia; Se você utiliza Lib ou Monitor, no arquivo INI que usa para gerar o MDFe: [ide] tpEmis=2 Executar os métodos Assinar e Validar da solução respectiva que estiver usando; Imprimir o DAMDFE usando o comando correspondente na solução respectiva que estiver usando. Quando a SEFAZ-Virtual do RS voltar os passos são: Configurar o componente -> Configuracoes.Geral.FormaEmissao = teNormal; Se você utiliza componente nativo para Delphi a propriedade é: ACBrMDFe.Configuracoes.Geral.FormaEmissao := teNormal; Se você usa Lib, vai utilizar o método MDFe_ConfigGravarValor para definir a FormaEmissao nas configurações: MDFE_ConfigGravarValor("MDFe", "FormaEmissao", 0); Caso utilize ACBrMonitorPLUS, é o comando MDFe.SetFormaEmissao: MDFe.SetFormaEmissao(1) Carregar o XML com o método LoadFromFile; Executar o método Enviar; Imprimir o DAMDFE. Tomem cuidado com o prazo, pois um MDF-e emitido em Contingência deve ser enviado para a SEFAZ para ser autorizado dentro do prazo de 168 horas contados a partir da data/hora de emissão (dhEmi) que consta no XML do mesmo. Alerta: Não altere o XML gerado em contingência quando for transmitir.
    3 pontos
  5. UIA !!!!! RAPAIZ !!! Resolveu meu problema !!! tenho vários clientes que só usam POS, valeu Daniel, muito bom !!! Obrigado !!
    2 pontos
  6. Pessoal, A quem se interessar, seque abaixo função para realizar o arredondamento ABNT (Arredondamento utilizado no ECF) Escrevi na linguagem Harbour, mas, basta apenas trocar os comandos para converter para qualquer outra linguagem (Se precisarem de ajuda na conversão, é só postar aqui, que tentarei ajudar) FUNCTION Round_ABNT(nValor,nDecimais) LOCAL nRetorno:=nValor, cDecimais:=SubStr(Str(nValor),At('.',Str(nValor))+1), nSubsequente:=nDecimais+1 if nDecimais<1 RETURN Int(nRetorno) endif if Len(cDecimais) <= nDecimais RETURN nRetorno endif if SubStr(cDecimais,nSubsequente,1)>'5' .or. SubStr(cDecimais,nSubsequente,1)<'5' //Se a casa decimal SUBSEQUENTE for DIFERENTE de 5 nRetorno:=Round(nValor,nDecimais) //ARREDONDA elseif SubStr(cDecimais,nSubsequente,1)=='5' //Se a casa decimal SUBSEQUENTE for IGUAL a 5 if Mod(Val(SubStr(cDecimais,nDecimais,1)),2) <> 0 //Se a casa decimal que será CONSERVADA, for IMPAR nRetorno:=Round(nValor,nDecimais) //ARREDONDA else //se a casa decimal que será CONSERVADA, for PAR if Val(SubStr(cDecimais,nSubsequente+1,1)) > 0 //Se APÓS a casa decimal SUBSEQUENTE, houver ALGUM algarismo MAIOR que ZERO nRetorno:=Round(nValor,nDecimais) //ARREDONDA else //Se APÓS a casa decimal SUBSEQUENTE, não houver NENHUM outro algarismo ou TODOS forem iguais a ZERO nRetorno:=Truncate(nValor,nDecimais) //TRUNCA (Esse é o único momento em que o "arredondamento ABNT" se diferencia do "arredondamento normal") endif endif endif RETURN nRetorno FUNCTION Truncate(nValor,nDecimais) LOCAL nRetorno:=nValor, cDecimais:=SubStr(Str(nValor),At('.',Str(nValor))+1) if nDecimais<1 RETURN Int(nRetorno) endif if Len(cDecimais) <= nDecimais RETURN nRetorno endif nRetorno:=Val( Str(Int(nValor))+'.'+SubStr(cDecimais,1,nDecimais) ) RETURN nRetorno Nos vários testes que fiz aqui, funcionou muito bem, se encontrarem algum bug, favor, reportar aqui... Obrigado! Espero ter contribuído, Abraços, Reginaldo
    1 ponto
  7. Obrigado por reportar. Fechando. Para novas dúvidas, criar um novo tópico. Estranho pois pego ele e rodo e emito Boleto. creio que é por não ter visto as config nele
    1 ponto
  8. Olá Juliomar! Obrigado pelo retorno. Infelizmente o demo está incompleto, graças a uma palestra gravada no youtube de um evento este ano do ACBr, consegui perceber que havia faltado informar o tipo de cobrança do banco (cobBancoDoBrasil). Após adicionar a alinha abaixo consegui gerar o boleto! ACBrBoleto1.Banco.TipoCobranca := cobBancoDoBrasil;
    1 ponto
  9. Boa tarde Junior, Muito obrigado pela colaboração, vou incluir na minha lista de tarefas.
    1 ponto
  10. Muito obrigado pela contribuição. Fiz a implementação baseada nela. Subi as alterações para o SVN na Revisão 2055. Pelo que vi está tudo certo. Queira por favor atualizar, testar e reportar qualquer problema. Mais uma vez obrigado.
    1 ponto
  11. Muito obrigado pela contribuição. Fiz a implementação baseada nela. Subi as alterações para o SVN na Revisão 20952. Pelo que vi está tudo certo. Queira por favor atualizar, testar e reportar qualquer problema. Fiz a implementação baseada nela. Subi as alterações para o SVN na Revisão 20953. Pelo que vi está tudo certo. Queira por favor atualizar, testar e reportar qualquer problema. Mais uma vez obrigado.
    1 ponto
  12. Sim . falei com o André Moraes e ele me explicou algumas coisas que depois vi estar no manual em homologação ele depois de alguns segundos aprova a venda pois é homologação em produção ele fica até 90 segundos esperando uma resposta do pagamento para prosseguir ou retorna erro e dai basta cancelar a transação
    1 ponto
  13. sim no caso essa nota tem um desconto, deu valor quebrado...vou tratar e deve resolver o problema...
    1 ponto
  14. Perfeito, deu certo, marquei a opção ACBr_DFeComum e deu certo. Otimo dia a vocês!!! tamo junto.
    1 ponto
  15. Obrigado por reportar. Fechando. Para novas dúvidas, criar um novo tópico.
    1 ponto
  16. Bom dia Ítalo. Já enviei o e-mail para a equipe de tributos da 4R. Estou no aguardo do retorno deles e posto aqui assim que receber a resposta.
    1 ponto
  17. Me parece que está tentando instalar apenas o ACBrBoleto. Nesse caso marque também o pacote ACBr_DFeComum para instalação. Ou faça instalação completa.
    1 ponto
  18. Estranho.. ele está tentando compilar o Package do ACBrBoleto, antes de compilar a ACBrDFeComum... Por favor tente marcar a opção, de remover, as versões anteriores do ACBr
    1 ponto
  19. Seguem unit alteradas com comandos para gravar valores Hexadecimais e ASCII nas impressoras Zebra.. Criei 2 Procedures procedure ComandoGravaRFIDHexaDecimal(aValue:String); procedure ComandoGravaRFIDASCII( aValue:String ); Comandos tirados diretamente do manual ZPLII e testados em uma impressora Zebra ZD500R ACBrETQPpla.pasACBrETQEpl2.pasACBrETQClass.pasACBrETQ.pasACBrETQZplII.pas
    1 ponto
  20. Olá, neste tópico vamos detalhar como deve ser feita a configuração da dll do SAT para cada Fabricante utilizando o componente ACBrSAT. Sabemos que o componente ACBrSAT é compatível com todos os equipamentos SAT do mercado. A configuração do componente ACBr para comunicação com o aparelho em sí, é bem simples... Mas cada fabricante pode ter suas particularidades, então a configuração pode NÃO ser única para todos os modelos. A configuração inicial do ACBr para comunicação com o aparelho SAT se resume em três parâmetros: Configuração do DLL do fabricante. (Path da dll do SAT para comunicação com o equipamento ) Modelo da DLL utilizada pelo Fabricante. (Pode ser StdCall ou Cdecl) Código da Página de Código utilizada pelo fabricante para conversão de caracteres. Com essas configurações já é possível inicializar a comunicação e realizar os primeiros testes de comunicação como: ConsultarSAT. Configurações para cada marca e suas particularidades: Elgin Linker I driver/lib: https://www.automacao.elgin.com.br/produtos/sat Modelo: StdCall PagDeCodigo: 65001 Obs: Acompanha as dlls de dependência junto a dllsat.dll Elgin Linker II e SMART driver/lib: https://github.com/ElginDeveloperCommunity/SAT/tree/master/Elgin/SMART SAT Modelo: StdCall PagDeCodigo: 65001 Obs: Acompanha as dlls de dependência junto a dllsat.dll Bematech driver/lib: https://github.com/ElginDeveloperCommunity/SAT/tree/master/Bematech/satGo Modelo: StdCall PagDeCodigo: 65001 Obs: Acompanha o arquivo bemasat.xml com a configuração da porta do SAT. BemaSAT32.dll e bemasat.xml DEVEM ESTAR NO MESMO DIRETÓRIO DO .EXE Tanca driver/lib: https://www.tanca.com.br/drivers.php?cat=24&sub=58 Modelo: StdCall PagDeCodigo: 65001 Obs: Sweda driver/lib: https://sweda.com.br/suporte/download/ Modelo: StdCall PagDeCodigo: 65001 Obs: Acompanha as dlls de dependência junto a SATDLL.dll Dimep driver/lib: https://www.dimep.com.br/downloads/ Modelo: StdCall PagDeCodigo: 65001 Obs: Acompanha dlls e arquivos .ini de dependência junto a SAT.dll Gertec driver/lib: https://www.gertec.com.br/suporte/download-center/ Modelo: Cdecl PagDeCodigo: 65001 Obs: Acompanha o arquivos .conf de dependência junto a GERSAT.dll A APLICAÇÃO DEVE SER EXECUTADO COM PERMISSÃO DE ADMINISTRADOR. Kryptus driver/lib: https://www.easysat.com.br/downloads/ Modelo: Cdecl PagDeCodigo: 65001 Obs: Nitere driver/lib: https://www.custom4u.it/ Modelo: StdCall PagDeCodigo: 65001 Obs: dllsat.dll DEVE ESTAR NO MESMO DIRETÓRIO DO .EXE Daruma driver/lib: http://www.desenvolvedoresdaruma.com.br/home/index.php Modelo: StdCall PagDeCodigo: 65001 Obs: ControlID driver/lib: https://www.controlid.com.br/automacao-comercial/satid/ Modelo: Cdecl PagDeCodigo: 65001 Obs: Jetway driver/lib: http://www.jetway.com.br/produtos-jetway/sat-js-1000-jetway/ Modelo: StdCall PagDeCodigo: 65001 Obs: Acompanha o arquivos .inf de dependência junto a SAT.dll CSDevice driver/lib: https://plataformacare.com.br/downloads/ Modelo: StdCall PagDeCodigo: 65001 Obs: Acompanha as dlls de dependência junto a satcare.dll Epson driver/lib: https://epson.com.br/peps-drivers-apis-sat Modelo: Cdecl PagDeCodigo: 65001 Obs: Acompanha o arquivos .conf de dependência junto a GERSAT.dll A APLICAÇÃO DEVE SER EXECUTADO COM PERMISSÃO DE ADMINISTRADOR.
    1 ponto
  21. Bom dia, veja a configuração indicada nesse tópico:
    1 ponto
  22. Somente para informação. Resposta da Bematech.
    1 ponto
  23. Para o pessoal que precisar fazer este arredondamento usando c#, segue o método, já com testes usando Xunit: using System; using Xunit; namespace XUnitTestProject1 { public class ArredondamentoTest { [Theory] [InlineData(0.342, 0.34)] [InlineData(0.346, 0.35)] [InlineData(0.3452, 0.35)] [InlineData(0.3450, 0.34)] [InlineData(0.332, 0.33)] [InlineData(0.336, 0.34)] [InlineData(0.3352, 0.34)] [InlineData(0.3350, 0.34)] [InlineData(0.3050, 0.30)] [InlineData(0.3150, 0.32)] public void TestRoundAbnt5891(decimal valorOriginal, decimal arredondadoEsperado) { decimal arredondadoMetodoABNT = RoundAbnt5891(valorOriginal, 2); Assert.Equal(arredondadoEsperado, arredondadoMetodoABNT); } /// <summary> /// Método de arredondamento "round-half-even" /// Ou "arredondamento do banqueiro" /// </summary> /// <param name="value"></param> /// <param name="digits"></param> /// <returns></returns> private decimal RoundAbnt5891(decimal value, int digits) { return Math.Round(value, digits, MidpointRounding.ToEven); } } }
    1 ponto
  24. Uma coisa é a informação do CSOSN, outra é o grupo do XML em que ele deve ser criado. Basta olhar o manual, os CSOSN 102, 103, 300 e 400 devem ser informados no grupo ICMSSN102.
    1 ponto
  25. Obrigado pela lógica pessoal. Segue o código em C++ #include<math.h> #include<iostream> double roundtoabnt(double value, int digits) { double potencia, valorElevado, restante; double parteInteira, parteFracionada, auxiliar; int ultimoDigitoMantido; potencia = pow(10, abs(digits)); valorElevado = value * (potencia); parteInteira = trunc(valorElevado); parteFracionada = trunc(modf(valorElevado, &auxiliar) * potencia); if (parteFracionada > 50) { parteInteira++; } else if (parteFracionada == 50) { ultimoDigitoMantido = round((modf(parteInteira / 10, &auxiliar)) * 10); if (ultimoDigitoMantido % 2) { parteInteira++; } else { restante = (modf(valorElevado * 10, &auxiliar)); } } return (parteInteira / potencia); }
    1 ponto
  26. Nossa, Obrigado Datilas! como aqui usamos firebird 2.5, converti sua função em procedure, segue a contribuição tb: CREATE OR ALTER PROCEDURE SP_UDF_ROUNDABNT ( AVALOR DOUBLE PRECISION, ADECIMAIS SMALLINT) RETURNS ( VALOR DOUBLE PRECISION ) AS DECLARE VARIABLE CDECIMAIS VARCHAR(100); DECLARE VARIABLE VLRSTR VARCHAR(100); DECLARE VARIABLE NSUBSEQUENTE SMALLINT; DECLARE VARIABLE POSPONTO SMALLINT; BEGIN VLRSTR = CAST(AVALOR AS VARCHAR(100)); POSPONTO = POSITION('.',VLRSTR); CDECIMAIS = SUBSTRING(VLRSTR FROM POSPONTO+1 FOR CHAR_LENGTH(VLRSTR)); NSUBSEQUENTE = ADECIMAIS+1; IF (:ADECIMAIS < 1) THEN BEGIN VALOR = TRUNC(AVALOR); SUSPEND; exit; END ELSE IF (CHAR_LENGTH(CDECIMAIS) <= :ADECIMAIS) THEN BEGIN VALOR = AVALOR; SUSPEND; exit; END ELSE BEGIN IF ((CAST(SUBSTRING(CDECIMAIS FROM NSUBSEQUENTE FOR 1) AS INTEGER) > 5) OR (CAST(SUBSTRING(CDECIMAIS FROM NSUBSEQUENTE FOR 1)AS DOUBLE PRECISION) < 5)) THEN BEGIN VALOR = ROUND(AVALOR,ADECIMAIS); SUSPEND; exit; END ELSE IF (CAST(SUBSTRING(CDECIMAIS FROM NSUBSEQUENTE FOR 1)AS DOUBLE PRECISION) = 5) THEN begin IF (MOD(CAST(SUBSTRING(CDECIMAIS FROM ADECIMAIS FOR 1)AS DOUBLE PRECISION) ,2) <> 0) THEN BEGIN VALOR = ROUND(AVALOR,ADECIMAIS); SUSPEND; exit; END ELSE IF (CAST(SUBSTRING(CDECIMAIS FROM NSUBSEQUENTE+1 FOR 1)AS DOUBLE PRECISION) > 0) THEN BEGIN VALOR = ROUND(AVALOR,ADECIMAIS); SUSPEND; exit; END ELSE begin VALOR = TRUNC(AVALOR,ADECIMAIS); SUSPEND; exit; END end END END Abraço!
    1 ponto
  27. e aqui vai minha contribuição para o firebird 3.0 create or alter function ROUNDABNT ( AVALOR double precision, ADECIMAIS smallint) returns double precision AS declare variable cDecimais varchar(100); declare variable vlrstr varchar(100); declare variable nSubsequente smallint; declare variable posponto smallint; BEGIN vlrstr = Cast(AVALOR as varchar(100)); posponto = POSITION('.',vlrstr); cDecimais = SUBSTRING(vlrstr from posponto+1 for CHAR_LENGTH(vlrstr)); nSubsequente = ADECIMAIS+1; if (:ADECIMAIS < 1) Then RETURN TRUNC(AVALOR); else If (CHAR_LENGTH(cDecimais) <= :ADECIMAIS) Then RETURN AVALOR; else Begin If ((Cast(SUBSTRING(cDecimais from nSubsequente for 1) as integer) > 5) Or (Cast(SUBSTRING(cDecimais From nSubsequente For 1)as double precision) < 5)) Then RETURN ROUND(AVALOR,ADECIMAIS); Else if (Cast(SUBSTRING(cDecimais From nSubsequente For 1)as double precision) = 5) Then If (MOD(Cast(SUBSTRING(cDecimais From ADECIMAIS For 1)as double precision) ,2) <> 0) Then RETURN ROUND(AVALOR,ADECIMAIS); Else If (Cast(SUBSTRING(cDecimais From nSubsequente+1 For 1)as double precision) > 0) Then RETURN ROUND(AVALOR,ADECIMAIS); Else RETURN TRUNC(AVALOR,ADECIMAIS); End END
    1 ponto
  28. Pessoal, Precisei do código também para MySQL e fiz a conversão, então, segue abaixo: CREATE FUNCTION ROUND_ABNT(nValor real, nDecimais int) RETURNS real BEGIN DECLARE nRetorno real; DECLARE cDecimais char(100); DECLARE nSubsequente int; SET nRetorno = nValor; SET cDecimais = SUBSTRING(CONVERTE(nValor),INSTR(CONVERTE(nValor),'.')+1); SET nSubsequente = nDecimais+1; IF (nDecimais<1) THEN RETURN TRUNCATE(nRetorno,0); END IF; IF (LENGTH(cDecimais) <= nDecimais) THEN RETURN nRetorno; END IF; IF (SUBSTRING(cDecimais,nSubsequente,1)>'5' OR SUBSTRING(cDecimais,nSubsequente,1)<'5') THEN SET nRetorno = ROUND(nValor,nDecimais); ELSEIF (SUBSTRING(cDecimais,nSubsequente,1)='5') THEN IF (MOD(SUBSTRING(cDecimais,nDecimais,1),2) <> 0) THEN SET nRetorno = ROUND(nValor,nDecimais); ELSE IF (SUBSTRING(cDecimais,nSubsequente+1,1) > 0) THEN SET nRetorno = ROUND(nValor,nDecimais); ELSE SET nRetorno = TRUNCATE(nValor,nDecimais); END IF; END IF; END IF; RETURN nRetorno; END;
    1 ponto
  29. Opa, muito obrigado pelo código base, man!! Me serviu muito, passei ele para JavaScript. Segue abaixo o que eu fiz, se alguém usar e encontrar algum bug, por favor, reporte para arrumar-mos! function round_abnt(nValor, nDecimais) { var nRetorno = nValor; spl = nValor.toString().split("."); var cDecimais = spl[1]; var nSubsequente = nDecimais; if (nDecimais < 1) { return parseInt(nRetorno); } if (cDecimais.length <= nDecimais) { return parseFloat(nRetorno); } //Se a casa decimal SUBSEQUENTE for DIFERENTE de 5 if (cDecimais.substr(nSubsequente,1) > '5' || cDecimais.substr(nSubsequente,1) < '5') { nRetorno = nRetorno.toFixed(2); //Math.round((nRetorno + 0.00001) * 100) / 100; //ARREDONDA } //Se a casa decimal SUBSEQUENTE for IGUAL a 5 else if (cDecimais.substr(nSubsequente, 1) == '5') { //Se a casa decimal que será CONSERVADA, for IMPAR if ((cDecimais.substr(nDecimais-1, 1) % 2) != 0) { nRetorno = nRetorno.toFixed(2); //Math.round((nRetorno + 0.00001) * 100) / 100; //ARREDONDA } //Se a casa decimal que será CONSERVADA, for PAR else //Se APÓS a casa decimal SUBSEQUENTE, houver ALGUM algarismo MAIOR que ZERO if ( cDecimais.substr(nSubsequente+1, 1) > 0 ) { nRetorno = nRetorno.toFixed(2); //Math.round((nRetorno + 0.00001) * 100) / 100; //ARREDONDA } //Se APÓS a casa decimal SUBSEQUENTE, não houver NENHUM outro algarismo ou TODOS forem iguais a ZERO else { //TRUNCA (Esse é o único momento em que o "arredondamento ABNT" se diferencia do "arredondamento normal") nRetorno = Truncate(nValor, nDecimais); } } return parseFloat(nRetorno); } function Truncate(nValor, nDecimais) { var nRetorno = nValor; spl = nValor.toString().split("."); var cDecimais = spl[1]; if (nDecimais < 1) { return parseInt(nRetorno); } if (cDecimais.length <= nDecimais) { return nRetorno; } //Pega a parte inteira do número e concatena com a substring sem alterar, pois é PAR e vai manter! nRetorno = parseInt(nValor.toString()) + '.' + cDecimais.substr(0, nDecimais); nRetorno = parseFloat(nRetorno); return nRetorno; } :D
    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.

The popup will be closed in 10 segundos...
The popup will be closed in 10 segundos...