openerp-brazil-team team mailing list archive
-
openerp-brazil-team team
-
Mailing list archive
-
Message #01312
[Merge] lp:~luciano-igtech/openerp.pt-br-localiz/l10n_br_inscr_est into lp:openerp.pt-br-localiz
Renato Lima - http://www.akretion.com has proposed merging lp:~luciano-igtech/openerp.pt-br-localiz/l10n_br_inscr_est into lp:openerp.pt-br-localiz.
Requested reviews:
OpenERP Brazil Team (openerp-brazil-team)
For more details, see:
https://code.launchpad.net/~luciano-igtech/openerp.pt-br-localiz/l10n_br_inscr_est/+merge/94798
Adicionado o restante das validações faltantes no OpenERP, contribuição do luciano Schimer
--
https://code.launchpad.net/~luciano-igtech/openerp.pt-br-localiz/l10n_br_inscr_est/+merge/94798
Your team OpenERP Brazil Team is requested to review the proposed merge of lp:~luciano-igtech/openerp.pt-br-localiz/l10n_br_inscr_est into lp:openerp.pt-br-localiz.
=== modified file 'l10n_br_base/partner.py'
--- l10n_br_base/partner.py 2012-01-25 15:28:29 +0000
+++ l10n_br_base/partner.py 2012-02-27 16:34:52 +0000
@@ -169,8 +169,39 @@
@param inscr_est: The company state number value,
@return: True or False.
"""
- #TODO
- return True
+
+ # Limpando o campo inscrição estadual
+ if not inscr_est.isdigit():
+ inscr_est = re.sub('[^0-9]', '', inscr_est)
+
+ # verificando o tamanho da inscrição estadual
+ if len(inscr_est) != 13:
+ return False
+
+ # verificando os dois primeiros dígitos
+ if inscr_est[:2] != '01':
+ return False
+
+ # Pega apenas os 11 primeiros dígitos da inscrição estadual e
+ # gera os dígitos verificadores
+ inscr_est = map(int, inscr_est)
+ nova_ie = inscr_est[:11]
+
+ prod = [4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2]
+ while len(nova_ie) < 13:
+ r = sum([x*y for (x, y) in zip(nova_ie, prod)]) % 11
+ if r > 1:
+ f = 11 - r
+ else:
+ f = 0
+ nova_ie.append(f)
+ prod.insert(0, 5)
+
+ # Se o número gerado coincidir com o número original, é válido
+ if nova_ie == inscr_est:
+ return True
+
+ return False
def _validate_ie_al(self, inscr_est):
"""Checks if company register number is valid to Brazilian
@@ -179,9 +210,40 @@
@param inscr_est: The company state number value,
@return: True or False.
"""
- #TODO
- return True
-
+
+ # Limpando o campo inscrição estadual
+ if not inscr_est.isdigit():
+ inscr_est = re.sub('[^0-9]', '', inscr_est)
+
+ # verificando o tamanho da inscrição estadual
+ if len(inscr_est) != 9:
+ return False
+
+ # verificando os dois primeiros dígitos
+ if inscr_est[:2] != '24':
+ return False
+
+ # verificando o tipo de empresa
+ #if not inscr_est[2] in ['0', '3', '5', '7', '8']:
+ # return False
+
+ # Pega apenas os 8 primeiros dígitos da inscrição estadual e
+ # gera os dígitos verificadores
+ inscr_est = map(int, inscr_est)
+ nova_ie = inscr_est[:8]
+
+ prod = [9, 8, 7, 6, 5, 4, 3, 2]
+ r = (sum([x*y for (x, y) in zip(nova_ie, prod)]) * 10) % 11
+ if r > 9:
+ r = 0
+ nova_ie.append(r)
+
+ # Se o número gerado coincidir com o número original, é válido
+ if nova_ie == inscr_est:
+ return True
+
+ return False
+
def _validate_ie_am(self, inscr_est):
"""Checks if company register number is valid to Brazilian
state Amazonas
@@ -189,8 +251,33 @@
@param inscr_est: The company state number value,
@return: True or False.
"""
- #TODO
- return True
+
+ # Limpando o campo inscrição estadual
+ if not inscr_est.isdigit():
+ inscr_est = re.sub('[^0-9]', '', inscr_est)
+
+ # verificando o tamanho da inscrição estadual
+ if len(inscr_est) != 9:
+ return False
+
+ # Pega apenas os 8 primeiros dígitos da inscrição estadual e
+ # gera o dígito verificador
+ inscr_est = map(int, inscr_est)
+ nova_ie = inscr_est[:8]
+
+ prod = [9, 8, 7, 6, 5, 4, 3, 2]
+ r = sum([x*y for (x, y) in zip(nova_ie, prod)]) % 11
+ if r > 1:
+ f = 11 - r
+ else:
+ f = 0
+ nova_ie.append(f)
+
+ # Se o número gerado coincidir com o número original, é válido
+ if nova_ie == inscr_est:
+ return True
+
+ return False
def _validate_ie_ap(self, inscr_est):
"""Checks if company register number is valid to Brazilian
@@ -199,8 +286,52 @@
@param inscr_est: The company state number value,
@return: True or False.
"""
- #TODO
- return True
+
+ # Limpando o campo inscrição estadual
+ if not inscr_est.isdigit():
+ inscr_est = re.sub('[^0-9]', '', inscr_est)
+
+ # verificando o tamanho da inscrição estadual
+ if len(inscr_est) != 9:
+ return False
+
+ # verificando os dois primeiros dígitos
+ if inscr_est[:2] != '03':
+ return False
+
+ # Pega apenas os 8 primeiros dígitos da inscrição estadual e
+ # define os valores de 'p' e 'd'
+ inscr_est_int = int(inscr_est[:8])
+ if (inscr_est_int <= 3017000):
+ inscr_est_p = 5
+ inscr_est_d = 0
+ if (inscr_est_int >= 3017001) and (inscr_est_int <= 3019022):
+ inscr_est_p = 9
+ inscr_est_d = 1
+ if (inscr_est_int >= 3019023):
+ inscr_est_p = 0
+ inscr_est_d = 0
+
+ # Pega apenas os 8 primeiros dígitos da inscrição estadual e
+ # gera o dígito verificador
+ inscr_est = map(int, inscr_est)
+ nova_ie = inscr_est[:8]
+
+ prod = [9, 8, 7, 6, 5, 4, 3, 2]
+ r = (inscr_est_p + sum([x*y for (x, y) in zip(nova_ie, prod)])) % 11
+ if r > 1:
+ f = 11 - r
+ elif r == 1:
+ f = 0
+ else:
+ f = inscr_est_d
+ nova_ie.append(f)
+
+ # Se o número gerado coincidir com o número original, é válido
+ if nova_ie == inscr_est:
+ return True
+
+ return False
def _validate_ie_ba(self, inscr_est):
"""Checks if company register number is valid to Brazilian
@@ -209,8 +340,80 @@
@param inscr_est: The company state number value,
@return: True or False.
"""
- #TODO
- return True
+
+ # Limpando o campo inscrição estadual
+ if not inscr_est.isdigit():
+ inscr_est = re.sub('[^0-9]', '', inscr_est)
+
+ # verificando o tamanho da inscrição estadual
+ if (len(inscr_est) != 8) and (len(inscr_est) != 9):
+ return False
+
+ inscr_est = map(int, inscr_est)
+
+ # verificando o tamanho da inscrição estadual
+ if len(inscr_est) == 8:
+
+ # Pega apenas os 6 primeiros dígitos da inscrição estadual e
+ # gera os dígitos verificadores
+ nova_ie = inscr_est[:6]
+
+ prod = [7, 6, 5, 4, 3, 2]
+
+ if inscr_est[0] in [0, 1, 2, 3, 4, 5, 8]:
+ modulo = 10
+ else:
+ modulo = 11
+
+ while len(nova_ie) < 8:
+
+ r = sum([x*y for (x, y) in zip(nova_ie, prod)]) % modulo
+ if r > 0:
+ f = modulo - r
+ else:
+ f = 0
+
+ if len(nova_ie) < 7:
+ nova_ie.append(f)
+ else:
+ nova_ie.insert(6, f)
+
+ prod.insert(0, 8)
+
+ # verificando o tamanho da inscrição estadual
+ if len(inscr_est) == 9:
+
+ # Pega apenas os 7 primeiros dígitos da inscrição estadual e
+ # gera os dígitos verificadores
+ nova_ie = inscr_est[:7]
+
+ prod = [8, 7, 6, 5, 4, 3, 2]
+
+ if inscr_est[1] in [0, 1, 2, 3, 4, 5, 8]:
+ modulo = 10
+ else:
+ modulo = 11
+
+ while len(nova_ie) < 9:
+
+ r = sum([x*y for (x, y) in zip(nova_ie, prod)]) % modulo
+ if r > 0:
+ f = modulo - r
+ else:
+ f = 0
+
+ if len(nova_ie) < 8:
+ nova_ie.append(f)
+ else:
+ nova_ie.insert(7, f)
+
+ prod.insert(0, 9)
+
+ # Se o número gerado coincidir com o número original, é válido
+ if nova_ie == inscr_est:
+ return True
+
+ return False
def _validate_ie_ce(self, inscr_est):
"""Checks if company register number is valid to Brazilian
@@ -219,8 +422,33 @@
@param inscr_est: The company state number value,
@return: True or False.
"""
- #TODO
- return True
+
+ # Limpando o campo inscrição estadual
+ if not inscr_est.isdigit():
+ inscr_est = re.sub('[^0-9]', '', inscr_est)
+
+ # verificando o tamanho da inscrição estadual
+ if len(inscr_est) != 9:
+ return False
+
+ # Pega apenas os 8 primeiros dígitos da inscrição estadual e
+ # gera o dígito verificador
+ inscr_est = map(int, inscr_est)
+ nova_ie = inscr_est[:8]
+
+ prod = [9, 8, 7, 6, 5, 4, 3, 2]
+ r = sum([x*y for (x, y) in zip(nova_ie, prod)]) % 11
+ if r > 1:
+ f = 11 - r
+ else:
+ f = 0
+ nova_ie.append(f)
+
+ # Se o número gerado coincidir com o número original, é válido
+ if nova_ie == inscr_est:
+ return True
+
+ return False
def _validate_ie_df(self, inscr_est):
"""Checks if company register number is valid to Brazilian
@@ -229,8 +457,39 @@
@param inscr_est: The company state number value,
@return: True or False._check_ie
"""
- #TODO
- return True
+
+ # Limpando o campo inscrição estadual
+ if not inscr_est.isdigit():
+ inscr_est = re.sub('[^0-9]', '', inscr_est)
+
+ # verificando o tamanho da inscrição estadual
+ if len(inscr_est) != 13:
+ return False
+
+ # verificando os dois primeiros dígitos
+ if inscr_est[:2] != '07':
+ return False
+
+ # Pega apenas os 11 primeiros dígitos da inscrição estadual e
+ # gera os dígitos verificadores
+ inscr_est = map(int, inscr_est)
+ nova_ie = inscr_est[:11]
+
+ prod = [4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2]
+ while len(nova_ie) < 13:
+ r = sum([x*y for (x, y) in zip(nova_ie, prod)]) % 11
+ if r > 1:
+ f = 11 - r
+ else:
+ f = 0
+ nova_ie.append(f)
+ prod.insert(0, 5)
+
+ # Se o número gerado coincidir com o número original, é válido
+ if nova_ie == inscr_est:
+ return True
+
+ return False
def _validate_ie_es(self, inscr_est):
"""Checks if company register number is valid to Brazilian
@@ -239,9 +498,34 @@
@param inscr_est: The company state number value,
@return: True or False.
"""
- #TODO
- return True
-
+
+ # Limpando o campo inscrição estadual
+ if not inscr_est.isdigit():
+ inscr_est = re.sub('[^0-9]', '', inscr_est)
+
+ # verificando o tamanho da inscrição estadual
+ if len(inscr_est) != 9:
+ return False
+
+ # Pega apenas os 8 primeiros dígitos da inscrição estadual e
+ # gera o dígito verificador
+ inscr_est = map(int, inscr_est)
+ nova_ie = inscr_est[:8]
+
+ prod = [9, 8, 7, 6, 5, 4, 3, 2]
+ r = sum([x*y for (x, y) in zip(nova_ie, prod)]) % 11
+ if r > 1:
+ f = 11 - r
+ else:
+ f = 0
+ nova_ie.append(f)
+
+ # Se o número gerado coincidir com o número original, é válido
+ if nova_ie == inscr_est:
+ return True
+
+ return False
+
def _validate_ie_go(self, inscr_est):
"""Checks if company register number is val_check_ieid to Brazilian
state Goiais
@@ -249,9 +533,48 @@
@param inscr_est: The company state number value,
@return: True or False.
"""
- #TODO
- return True
-
+
+ # Limpando o campo inscrição estadual
+ if not inscr_est.isdigit():
+ inscr_est = re.sub('[^0-9]', '', inscr_est)
+
+ # verificando o tamanho da inscrição estadual
+ if len(inscr_est) != 9:
+ return False
+
+ # verificando os dois primeiros dígitos
+ if not inscr_est[:2] in ['10', '11', '15']:
+ return False
+
+ # Pega apenas os 8 primeiros dígitos da inscrição estadual e
+ # define os valores de 'p' e 'd'
+ inscr_est_int = int(inscr_est[:8])
+ if ( inscr_est_int >= 10103105 ) and ( inscr_est_int <= 10119997 ):
+ inscr_est_d = 1
+ else:
+ inscr_est_d = 0
+
+ # Pega apenas os 8 primeiros dígitos da inscrição estadual e
+ # gera o dígito verificador
+ inscr_est = map(int, inscr_est)
+ nova_ie = inscr_est[:8]
+
+ prod = [9, 8, 7, 6, 5, 4, 3, 2]
+ r = sum([x*y for (x, y) in zip(nova_ie, prod)]) % 11
+ if r > 1:
+ f = 11 - r
+ elif r == 1:
+ f = inscr_est_d
+ else:
+ f = 0
+ nova_ie.append(f)
+
+ # Se o número gerado coincidir com o número original, é válido
+ if nova_ie == inscr_est:
+ return True
+
+ return False
+
def _validate_ie_ma(self, inscr_est):
"""Checks if company register number is valid to Brazilian
state Maranhão
@@ -259,9 +582,38 @@
@param inscr_est: The company state number value,
@return: True or False.
"""
- #TODO_check_ie
- return True
-
+
+ # Limpando o campo inscrição estadual
+ if not inscr_est.isdigit():
+ inscr_est = re.sub('[^0-9]', '', inscr_est)
+
+ # verificando o tamanho da inscrição estadual
+ if len(inscr_est) != 9:
+ return False
+
+ # verificando os dois primeiros dígitos
+ if inscr_est[:2] != '12':
+ return False
+
+ # Pega apenas os 8 primeiros dígitos da inscrição estadual e
+ # gera o dígito verificador
+ inscr_est = map(int, inscr_est)
+ nova_ie = inscr_est[:8]
+
+ prod = [9, 8, 7, 6, 5, 4, 3, 2]
+ r = sum([x*y for (x, y) in zip(nova_ie, prod)]) % 11
+ if r > 1:
+ f = 11 - r
+ else:
+ f = 0
+ nova_ie.append(f)
+
+ # Se o número gerado coincidir com o número original, é válido
+ if nova_ie == inscr_est:
+ return True
+
+ return False
+
def _validate_ie_mg(self, inscr_est):
"""Checks if company register number is valid to Brazilian
state Minas Gerais
@@ -269,9 +621,45 @@
@param inscr_est: The company state number value,
@return: True or False.
"""
- #TODO
- return True
-
+
+ # Limpando o campo inscrição estadual
+ if not inscr_est.isdigit():
+ inscr_est = re.sub('[^0-9]', '', inscr_est)
+
+ # verificando o tamanho da inscrição estadual
+ if len(inscr_est) != 13:
+ return False
+
+ # Pega apenas os 11 primeiros dígitos da inscrição estadual e
+ # gera os dígitos verificadores
+ inscr_est = map(int, inscr_est)
+ nova_ie = inscr_est[:11]
+
+ nova_ie_aux = list(nova_ie)
+ nova_ie_aux.insert(3, 0)
+ prod = [1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2]
+ r = str([x*y for (x, y) in zip(nova_ie_aux, prod)])
+ r = re.sub('[^0-9]', '', r)
+ r = map(int, r)
+ r = sum(r)
+ r2 = (r/10+1)*10
+ r = r2 - r
+ nova_ie.append(r)
+
+ prod = [3, 2, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2]
+ r = sum([x*y for (x, y) in zip(nova_ie, prod)]) % 11
+ if r > 1:
+ f = 11 - r
+ else:
+ f = 0
+ nova_ie.append(f)
+
+ # Se o número gerado coincidir com o número original, é válido
+ if nova_ie == inscr_est:
+ return True
+
+ return False
+
def _validate_ie_ms(self, inscr_est):
"""Checks if company register number is valid to Brazilian
state Mato Grosso do Sul
@@ -279,8 +667,37 @@
@param inscr_est: The company state number value,
@return: True or False.
"""
- #TODO
- return True
+
+ # Limpando o campo inscrição estadual
+ if not inscr_est.isdigit():
+ inscr_est = re.sub('[^0-9]', '', inscr_est)
+
+ # verificando o tamanho da inscrição estadual
+ if len(inscr_est) != 9:
+ return False
+
+ # verificando os dois primeiros dígitos
+ if inscr_est[:2] != '28':
+ return False
+
+ # Pega apenas os 8 primeiros dígitos da inscrição estadual e
+ # gera o dígito verificador
+ inscr_est = map(int, inscr_est)
+ nova_ie = inscr_est[:8]
+
+ prod = [9, 8, 7, 6, 5, 4, 3, 2]
+ r = sum([x*y for (x, y) in zip(nova_ie, prod)]) % 11
+ if r > 1:
+ f = 11 - r
+ else:
+ f = 0
+ nova_ie.append(f)
+
+ # Se o número gerado coincidir com o número original, é válido
+ if nova_ie == inscr_est:
+ return True
+
+ return False
def _validate_ie_mt(self, inscr_est):
"""Checks if company register number is valid to Brazilian
@@ -289,9 +706,34 @@
@param inscr_est: The company state number value,
@return: True or False.
"""
- #TODO
- return True
-
+
+ # Limpando o campo inscrição estadual
+ if not inscr_est.isdigit():
+ inscr_est = re.sub('[^0-9]', '', inscr_est)
+
+ # verificando o tamanho da inscrição estadual
+ if len(inscr_est) != 11:
+ return False
+
+ # Pega apenas os 8 primeiros dígitos da inscrição estadual e
+ # gera o dígito verificador
+ inscr_est = map(int, inscr_est)
+ nova_ie = inscr_est[:10]
+
+ prod = [3, 2, 9, 8, 7, 6, 5, 4, 3, 2]
+ r = sum([x*y for (x, y) in zip(nova_ie, prod)]) % 11
+ if r > 1:
+ f = 11 - r
+ else:
+ f = 0
+ nova_ie.append(f)
+
+ # Se o número gerado coincidir com o número original, é válido
+ if nova_ie == inscr_est:
+ return True
+
+ return False
+
def _validate_ie_pa(self, inscr_est):
"""Checks if company register number is valid to Brazilian
state Pará
@@ -299,9 +741,38 @@
@param inscr_est: The company state number value,
@return: True or False.
"""
- #TODO
- return True
-
+
+ # Limpando o campo inscrição estadual
+ if not inscr_est.isdigit():
+ inscr_est = re.sub('[^0-9]', '', inscr_est)
+
+ # verificando o tamanho da inscrição estadual
+ if len(inscr_est) != 9:
+ return False
+
+ # verificando os dois primeiros dígitos
+ if inscr_est[:2] != '15':
+ return False
+
+ # Pega apenas os 8 primeiros dígitos da inscrição estadual e
+ # gera o dígito verificador
+ inscr_est = map(int, inscr_est)
+ nova_ie = inscr_est[:8]
+
+ prod = [9, 8, 7, 6, 5, 4, 3, 2]
+ r = sum([x*y for (x, y) in zip(nova_ie, prod)]) % 11
+ if r > 1:
+ f = 11 - r
+ else:
+ f = 0
+ nova_ie.append(f)
+
+ # Se o número gerado coincidir com o número original, é válido
+ if nova_ie == inscr_est:
+ return True
+
+ return False
+
def _validate_ie_pb(self, inscr_est):
"""Checks if company register number is valid to Brazilian
state Paraíba
@@ -309,9 +780,34 @@
@param inscr_est: The company state number value,
@return: True or False.
"""
- #TODO
- return True
-
+
+ # Limpando o campo inscrição estadual
+ if not inscr_est.isdigit():
+ inscr_est = re.sub('[^0-9]', '', inscr_est)
+
+ # verificando o tamanho da inscrição estadual
+ if len(inscr_est) != 9:
+ return False
+
+ # Pega apenas os 8 primeiros dígitos da inscrição estadual e
+ # gera o dígito verificador
+ inscr_est = map(int, inscr_est)
+ nova_ie = inscr_est[:8]
+
+ prod = [9, 8, 7, 6, 5, 4, 3, 2]
+ r = sum([x*y for (x, y) in zip(nova_ie, prod)]) % 11
+ if r > 1:
+ f = 11 - r
+ else:
+ f = 0
+ nova_ie.append(f)
+
+ # Se o número gerado coincidir com o número original, é válido
+ if nova_ie == inscr_est:
+ return True
+
+ return False
+
def _validate_ie_pe(self, inscr_est):
"""Check if number in insc_est is valid to Brazilian
state of Pernambuco
@@ -319,9 +815,56 @@
@param inscr_est: The company state number value,
@return: True or False.
"""
- #TODO
- return True
-
+
+ # Limpando o campo inscrição estadual
+ if not inscr_est.isdigit():
+ inscr_est = re.sub('[^0-9]', '', inscr_est)
+
+ # verificando o tamanho da inscrição estadual
+ if (len(inscr_est) != 9) and (len(inscr_est) != 14):
+ return False
+
+ inscr_est = map(int, inscr_est)
+
+ # verificando o tamanho da inscrição estadual
+ if len(inscr_est) == 9:
+
+ # Pega apenas os 7 primeiros dígitos da inscrição estadual e
+ # gera os dígitos verificadores
+ inscr_est = map(int, inscr_est)
+ nova_ie = inscr_est[:7]
+
+ prod = [8, 7, 6, 5, 4, 3, 2]
+ while len(nova_ie) < 9:
+ r = sum([x*y for (x, y) in zip(nova_ie, prod)]) % 11
+ if r > 1:
+ f = 11 - r
+ else:
+ f = 0
+ nova_ie.append(f)
+ prod.insert(0, 9)
+
+ # verificando o tamanho da inscrição estadual
+ if len(inscr_est) == 14:
+
+ # Pega apenas os 13 primeiros dígitos da inscrição estadual e
+ # gera o dígito verificador
+ inscr_est = map(int, inscr_est)
+ nova_ie = inscr_est[:13]
+
+ prod = [5, 4, 3, 2, 1, 9, 8, 7, 6, 5, 4, 3, 2]
+ r = sum([x*y for (x, y) in zip(nova_ie, prod)]) % 11
+ f = 11 - r
+ if f > 10:
+ f = f - 10
+ nova_ie.append(f)
+
+ # Se o número gerado coincidir com o número original, é válido
+ if nova_ie == inscr_est:
+ return True
+
+ return False
+
def _validate_ie_pi(self, inscr_est):
"""Check if number in insc_est is valid to Brazilian
state of Piauí
@@ -329,9 +872,34 @@
@param inscr_est: The company state number value,
@return: True or False.
"""
- #TODO
- return True
-
+
+ # Limpando o campo inscrição estadual
+ if not inscr_est.isdigit():
+ inscr_est = re.sub('[^0-9]', '', inscr_est)
+
+ # verificando o tamanho da inscrição estadual
+ if len(inscr_est) != 9:
+ return False
+
+ # Pega apenas os 8 primeiros dígitos da inscrição estadual e
+ # gera o dígito verificador
+ inscr_est = map(int, inscr_est)
+ nova_ie = inscr_est[:8]
+
+ prod = [9, 8, 7, 6, 5, 4, 3, 2]
+ r = sum([x*y for (x, y) in zip(nova_ie, prod)]) % 11
+ if r > 1:
+ f = 11 - r
+ else:
+ f = 0
+ nova_ie.append(f)
+
+ # Se o número gerado coincidir com o número original, é válido
+ if nova_ie == inscr_est:
+ return True
+
+ return False
+
def _validate_ie_pr(self, inscr_est):
"""Checks if company register number is valid to Brazilian
state Rio de Paraná
@@ -339,9 +907,36 @@
@param inscr_est: The company state number value,
@return: True or False.
"""
- #TODO
- return True
-
+
+ # Limpando o campo inscrição estadual
+ if not inscr_est.isdigit():
+ inscr_est = re.sub('[^0-9]', '', inscr_est)
+
+ # verificando o tamanho da inscrição estadual
+ if len(inscr_est) != 10:
+ return False
+
+ # Pega apenas os 8 primeiros dígitos da inscrição estadual e
+ # gera os dígitos verificadores
+ inscr_est = map(int, inscr_est)
+ nova_ie = inscr_est[:8]
+
+ prod = [3, 2, 7, 6, 5, 4, 3, 2]
+ while len(nova_ie) < 10:
+ r = sum([x*y for (x, y) in zip(nova_ie, prod)]) % 11
+ if r > 1:
+ f = 11 - r
+ else:
+ f = 0
+ nova_ie.append(f)
+ prod.insert(0, 4)
+
+ # Se o número gerado coincidir com o número original, é válido
+ if nova_ie == inscr_est:
+ return True
+
+ return False
+
def _validate_ie_rj(self, inscr_est):
"""Checks if company register number is valid to Brazilian
state Rio de janeiro
@@ -350,27 +945,26 @@
@return: True or False.
"""
- # Limpando o cnpj
+ # Limpando a inscrição estadual
if not inscr_est.isdigit():
inscr_est = re.sub('[^0-9]', '', inscr_est)
- # verificando o tamano do cnpj
+ # verificando o tamanho da inscrição estadual
if len(inscr_est) != 8:
return False
- # Pega apenas os 12 primeiros dígitos do CNPJ e gera os 2 dígitos que faltam
- inscr_est= map(int, inscr_est)
+ # Pega apenas os 12 primeiros dígitos da inscrição estadual e
+ # gera os dígitos verificadores
+ inscr_est = map(int, inscr_est)
nova_ie = inscr_est[:7]
prod = [2, 7, 6, 5, 4, 3, 2]
- while len(nova_ie) < 8:
- r = sum([x*y for (x, y) in zip(nova_ie, prod)]) % 11
- if r > 1:
- f = 11 - r
- else:
- f = 0
- nova_ie.append(f)
- prod.insert(0, 6)
+ r = sum([x*y for (x, y) in zip(nova_ie, prod)]) % 11
+ if r > 1:
+ f = 11 - r
+ else:
+ f = 0
+ nova_ie.append(f)
# Se o número gerado coincidir com o número original, é válido
if nova_ie == inscr_est:
@@ -385,9 +979,54 @@
@param inscr_est: The company state number value,
@return: True or False.
"""
- #TODO
- return True
-
+
+ # Limpando o campo inscrição estadual
+ if not inscr_est.isdigit():
+ inscr_est = re.sub('[^0-9]', '', inscr_est)
+
+ # verificando o tamanho da inscrição estadual
+ if (len(inscr_est) != 9) and (len(inscr_est) != 10):
+ return False
+
+ # verificando os dois primeiros dígitos
+ if inscr_est[:2] != '20':
+ return False
+
+ inscr_est = map(int, inscr_est)
+
+ # verificando o tamanho da inscrição estadual
+ if len(inscr_est) == 9:
+
+ # Pega apenas os 8 primeiros dígitos da inscrição estadual e
+ # gera o dígito verificador
+ nova_ie = inscr_est[:8]
+
+ prod = [9, 8, 7, 6, 5, 4, 3, 2]
+ r = (sum([x*y for (x, y) in zip(nova_ie, prod)]) * 10) % 11
+ if r > 9:
+ r = 0
+ nova_ie.append(r)
+
+ # verificando o tamanho da inscrição estadual
+ if len(inscr_est) == 10:
+
+ # Pega apenas os 9 primeiros dígitos da inscrição estadual e
+ # gera o dígito verificador
+ nova_ie = inscr_est[:9]
+
+ prod = [10, 9, 8, 7, 6, 5, 4, 3, 2]
+ r = (sum([x*y for (x, y) in zip(nova_ie, prod)]) * 10) % 11
+ if r > 9:
+ r = 0
+ nova_ie.append(r)
+
+
+ # Se o número gerado coincidir com o número original, é válido
+ if nova_ie == inscr_est:
+ return True
+
+ return False
+
def _validate_ie_ro(self, inscr_est):
"""Checks if company register number is valid to Brazilian
state Rondônia
@@ -395,9 +1034,55 @@
@param inscr_est: The company state number value,
@return: True or False.
"""
- #TODO
- return True
-
+
+ # Limpando o campo inscrição estadual
+ if not inscr_est.isdigit():
+ inscr_est = re.sub('[^0-9]', '', inscr_est)
+
+ # verificando o tamanho da inscrição estadual
+ if (len(inscr_est) != 9) and (len(inscr_est) != 14):
+ return False
+
+ inscr_est = map(int, inscr_est)
+
+ # verificando o tamanho da inscrição estadual
+ if len(inscr_est) == 9:
+
+ # Despreza-se os 3 primeiros dígitos, pega apenas os 8 primeiros
+ # dígitos da inscrição estadual e gera o dígito verificador
+ nova_ie = inscr_est[3:8]
+
+ prod = [6, 5, 4, 3, 2]
+ r = sum([x*y for (x, y) in zip(nova_ie, prod)]) % 11
+ f = 11 - r
+ if f > 9:
+ f = f - 10
+ nova_ie.append(f)
+
+ nova_ie.insert(0, inscr_est[0])
+ nova_ie.insert(1, inscr_est[1])
+ nova_ie.insert(2, inscr_est[2])
+
+ # verificando o tamanho da inscrição estadual
+ if len(inscr_est) == 14:
+
+ # Pega apenas os 13 primeiros dígitos da inscrição estadual e
+ # gera o dígito verificador
+ nova_ie = inscr_est[:13]
+
+ prod = [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2]
+ r = sum([x*y for (x, y) in zip(nova_ie, prod)]) % 11
+ f = 11 - r
+ if f > 9:
+ f = f - 10
+ nova_ie.append(f)
+
+ # Se o número gerado coincidir com o número original, é válido
+ if nova_ie == inscr_est:
+ return True
+
+ return False
+
def _validate_ie_rr(self, inscr_est):
"""Checks if company register number is valid to Brazilian
state Roraima
@@ -405,9 +1090,34 @@
@param inscr_est: The company state number value,
@return: True or False.
"""
- #TODO
- return True
-
+
+ # Limpando a inscrição estadual
+ if not inscr_est.isdigit():
+ inscr_est = re.sub('[^0-9]', '', inscr_est)
+
+ # verificando o tamanho da inscrição estadual
+ if len(inscr_est) != 9:
+ return False
+
+ # verificando os dois primeiros dígitos
+ if inscr_est[:2] != '24':
+ return False
+
+ # Pega apenas os 8 primeiros dígitos da inscrição estadual e
+ # gera o dígito verificador
+ inscr_est = map(int, inscr_est)
+ nova_ie = inscr_est[:8]
+
+ prod = [1, 2, 3, 4, 5, 6, 7, 8]
+ r = sum([x*y for (x, y) in zip(nova_ie, prod)]) % 9
+ nova_ie.append(r)
+
+ # Se o número gerado coincidir com o número original, é válido
+ if nova_ie == inscr_est:
+ return True
+
+ return False
+
def _validate_ie_rs(self, inscr_est):
"""Checks if company register number is valid to Brazilian
state Rio Grande do Sul
@@ -415,8 +1125,33 @@
@param inscr_est: The company state number value,
@return: True or False.
"""
- #TODO
- return True
+
+ # Limpando o campo inscrição estadual
+ if not inscr_est.isdigit():
+ inscr_est = re.sub('[^0-9]', '', inscr_est)
+
+ # verificando o tamanho da inscrição estadual
+ if len(inscr_est) != 10:
+ return False
+
+ # Pega apenas os 9 primeiros dígitos da inscrição estadual e
+ # gera o dígito verificador
+ inscr_est = map(int, inscr_est)
+ nova_ie = inscr_est[:9]
+
+ prod = [2, 9, 8, 7, 6, 5, 4, 3, 2]
+ r = sum([x*y for (x, y) in zip(nova_ie, prod)]) % 11
+ if r > 1:
+ f = 11 - r
+ else:
+ f = 0
+ nova_ie.append(f)
+
+ # Se o número gerado coincidir com o número original, é válido
+ if nova_ie == inscr_est:
+ return True
+
+ return False
def _validate_ie_sc(self, inscr_est):
"""Checks if company register number is valid to Brazilian
@@ -425,9 +1160,34 @@
@param inscr_est: The company state number value,
@return: True or False.
"""
- #TODO
- return True
-
+
+ # Limpando o campo inscrição estadual
+ if not inscr_est.isdigit():
+ inscr_est = re.sub('[^0-9]', '', inscr_est)
+
+ # verificando o tamanho da inscrição estadual
+ if len(inscr_est) != 9:
+ return False
+
+ # Pega apenas os 8 primeiros dígitos da inscrição estadual e
+ # gera o dígito verificador
+ inscr_est = map(int, inscr_est)
+ nova_ie = inscr_est[:8]
+
+ prod = [9, 8, 7, 6, 5, 4, 3, 2]
+ r = sum([x*y for (x, y) in zip(nova_ie, prod)]) % 11
+ if r > 1:
+ f = 11 - r
+ else:
+ f = 0
+ nova_ie.append(f)
+
+ # Se o número gerado coincidir com o número original, é válido
+ if nova_ie == inscr_est:
+ return True
+
+ return False
+
def _validate_ie_se(self, inscr_est):
"""Checks if company register number is valid to Brazilian
state Sergipe
@@ -435,9 +1195,34 @@
@param inscr_est: The company state number value,
@return: True or False.
"""
- #TODO
- return True
-
+
+ # Limpando o campo inscrição estadual
+ if not inscr_est.isdigit():
+ inscr_est = re.sub('[^0-9]', '', inscr_est)
+
+ # verificando o tamanho da inscrição estadual
+ if len(inscr_est) != 9:
+ return False
+
+ # Pega apenas os 8 primeiros dígitos da inscrição estadual e
+ # gera o dígito verificador
+ inscr_est = map(int, inscr_est)
+ nova_ie = inscr_est[:8]
+
+ prod = [9, 8, 7, 6, 5, 4, 3, 2]
+ r = sum([x*y for (x, y) in zip(nova_ie, prod)]) % 11
+ if r > 1:
+ f = 11 - r
+ else:
+ f = 0
+ nova_ie.append(f)
+
+ # Se o número gerado coincidir com o número original, é válido
+ if nova_ie == inscr_est:
+ return True
+
+ return False
+
def _validate_ie_sp(self, inscr_est):
"""Checks if company register number is valid to Brazilian
state São Paulo
@@ -445,9 +1230,86 @@
@param inscr_est: The company state number value,
@return: True or False.
"""
- #TODO
- return True
-
+
+ # Industriais e comerciais
+ if inscr_est[0] != 'P':
+
+ # Limpando o campo inscrição estadual
+ if not inscr_est.isdigit():
+ inscr_est = re.sub('[^0-9]', '', inscr_est)
+
+ # verificando o tamanho da inscrição estadual
+ if len(inscr_est) != 12:
+ return False
+
+ # Pega apenas os 8 primeiros dígitos da inscrição estadual e
+ # gera o primeiro dígito verificador
+ inscr_est = map(int, inscr_est)
+ nova_ie = inscr_est[:8]
+
+ prod = [1, 3, 4, 5, 6, 7, 8, 10]
+ r = sum([x*y for (x, y) in zip(nova_ie, prod)]) % 11
+ if r < 10:
+ f = r
+ if r == 10:
+ f = 0
+ if r == 11:
+ f = 1
+ nova_ie.append(f)
+
+ # gera o segundo dígito verificador
+ nova_ie.append(inscr_est[9])
+ nova_ie.append(inscr_est[10])
+ prod = [3, 2, 10, 9, 8, 7, 6, 5, 4, 3, 2]
+ r = sum([x*y for (x, y) in zip(nova_ie, prod)]) % 11
+ if r < 10:
+ f = r
+ if r == 10:
+ f = 0
+ if r == 11:
+ f = 1
+ nova_ie.append(f)
+
+ # Produtor rural
+ else:
+
+ # Limpando o campo inscrição estadual
+ if not inscr_est.isdigit():
+ inscr_est = re.sub('[^0-9]', '', inscr_est)
+
+ # verificando o tamanho da inscrição estadual
+ if len(inscr_est) != 12:
+ return False
+
+ # verificando o primeiro dígito depois do 'P'
+ if inscr_est[0] != '0':
+ return False
+
+ # Pega apenas os 8 primeiros dígitos da inscrição estadual e
+ # gera o dígito verificador
+ inscr_est = map(int, inscr_est)
+ nova_ie = inscr_est[:8]
+
+ prod = [1, 3, 4, 5, 6, 7, 8, 10]
+ r = sum([x*y for (x, y) in zip(nova_ie, prod)]) % 11
+ if r < 10:
+ f = r
+ if r == 10:
+ f = 0
+ if r == 11:
+ f = 1
+ nova_ie.append(f)
+
+ nova_ie.append(inscr_est[9])
+ nova_ie.append(inscr_est[10])
+ nova_ie.append(inscr_est[11])
+
+ # Se o número gerado coincidir com o número original, é válido
+ if nova_ie == inscr_est:
+ return True
+
+ return False
+
def _validate_ie_to(self, inscr_est):
"""Checks if company register number is valid to Brazilian
state Tocantins
@@ -455,9 +1317,40 @@
@param inscr_est: The company state number value,
@return: True or False.
"""
- #TODO
- return True
-
+
+ # Limpando o campo inscrição estadual
+ if not inscr_est.isdigit():
+ inscr_est = re.sub('[^0-9]', '', inscr_est)
+
+ # verificando o tamanho da inscrição estadual
+ if len(inscr_est) != 11:
+ return False
+
+ # verificando os dígitos 3 e 4
+ if not inscr_est[2:4] in ['01', '02', '03', '99']:
+ return False
+
+ # Pega apenas os dígitos que entram no cálculo
+ inscr_est = map(int, inscr_est)
+ nova_ie = inscr_est[:2] + inscr_est[4:10]
+
+ prod = [9, 8, 7, 6, 5, 4, 3, 2]
+ r = sum([x*y for (x, y) in zip(nova_ie, prod)]) % 11
+ if r > 1:
+ f = 11 - r
+ else:
+ f = 0
+ nova_ie.append(f)
+
+ nova_ie.insert(2, inscr_est[2])
+ nova_ie.insert(3, inscr_est[3])
+
+ # Se o número gerado coincidir com o número original, é válido
+ if nova_ie == inscr_est:
+ return True
+
+ return False
+
_constraints = [
(_check_cnpj_cpf, u'CNPJ/CPF invalido!', ['cnpj_cpf']),
(_check_ie, u'Inscrição Estadual inválida!', ['inscr_est'])
Follow ups