caelum / caelum-stella

O Caelum Stella visa suprir as necessidades do dia a dia do desenvolvedor brasileiro

Home Page:http://stella.caelum.com.br

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Validação IE Bahia !

picyka opened this issue · comments

Estou tendo problemas de validação para o Estado BA,

IE 063571830, so valida se remover o zero do inicio, ja pesquisei no sintegra, esta corredo.

Bom realmente na Bahia é 8 digitos.
http://www.sefaz.al.gov.br/sintegra/cad_BA.asp
Porem, em algumas notas aqui quando processamos foi preciso adicionar o 0.

Estranho que se olhar no site do Sintegra esta com o Zero na frente...

ehheehheheh intaum isso nao tem um padrão ?

Assim como a tendencia é termos uma forma de calcular ST por estado(talvez cheguemos por cidade).
Isso é gerenciado pelo estado, a definição é local.

Na empresa que trabalho temos um ERP, usamos aquela dll DllInscE32.Dll, por ela passa tranquilo... com o zero e sem o zero..

A IE é válida, conforme http://www.sefaz.ba.gov.br/Sintegra/sintegra.asp?estado=BA.
Aparentemente agora temos que considerar 7 dígitos + 2, até no exemplo do cálculo tá assim => http://www.sintegra.gov.br/Cad_Estados/cad_BA.html

Vou marcar como bug.

Alguma previsão de liberação ?

Tambem tive problema com a IE 105765204 da BA, que nao tem 0 no comeco mas tambem da pau. Aguardando...

Se alguem quiser implementar o codigo da BA, segue abaixo, retirado de trecho de um metodo de calculo de IE...

final int TAMIEBA1 = 8; // DDDDDD-VV (formula antiga)
final int TAMIEBA2 = 9; // DDDDDDD-VV (formula nova)
String Result;
int i, parcial, soma, tam, digit, mult;
Valor = Geral.TirarOutrosASCII(Valor);
//##########################################################################
if (SiglaUF.equals("BA")) {
  Result = "";
  // calculo do 2o. digito
  if (Valor.length() == TAMIEBA1)
    tam = TAMIEBA1-2;
  else
    tam = TAMIEBA2-2;
  Valor = Valor.substring(0,tam); // retirar os 2 DigVers que serao calculados
  switch (Valor.charAt(0)) {
    case '0':
    case '1':
    case '2':
    case '3':
    case '4':
    case '5':
    case '8':
      soma = 0;
      mult = 2;
      for (i = tam-1; i >= 0; i--) {
        soma += Integer.parseInt(Valor.substring(i,i+1)) * mult;
        mult++;
        if (mult == 10)
          mult = 2;
      }
      digit = soma % 10;
      if (digit == 0)
        Result = String.valueOf(0);
      else {
        digit = 10 - digit;
        Result = String.valueOf(digit);
      }
      // calculo do 1o. digito
      Valor += Result;
      soma = 0;
      mult = 2;
      for (i = tam; i >= 0; i--) {
        soma += Integer.parseInt(Valor.substring(i,i+1)) * mult;
        mult++;
        if (mult == 10)
          mult = 2;
      }
      digit = soma % 10;
      if (digit == 0)
        Result = String.valueOf(0) + Result;
      else {
        digit = 10 - digit;
        Result = String.valueOf(digit) + Result;
      }
      break;
    case '6':
    case '7':
    case '9':
      soma = 0;
      mult = 2;
      for (i = tam-1; i >= 0; i--) {
        soma += Integer.parseInt(Valor.substring(i,i+1)) * mult;
        mult++;
        if (mult == 10)
          mult = 2;
      }
      digit = soma % 11;
      if (digit == 0 || digit == 1)
        Result = String.valueOf(0);
      else {
        digit = 11 - digit;
        Result = String.valueOf(digit);
      }
      // calculo do 1o. digito
      Valor += Result;
      soma = 0;
      mult = 2;
      for (i = tam; i >= 0; i--) {
        soma += Integer.parseInt(Valor.substring(i,i+1)) * mult;
        mult++;
        if (mult == 10)
          mult = 2;
      }
      digit = soma % 11;
      if (digit == 0 || digit == 1)
        Result = String.valueOf(0) + Result;
      else {
        digit = 11 - digit;
        Result = String.valueOf(digit) + Result;
      }
      break;
  }
}

Para corrigir até lançarmos uma nova versão, gerem um jar do stella-core e substituam o atual no projeto de vocês. Qualquer dúvida mandem aqui.