Merge lp:~luciano-igtech/openerp.pt-br-localiz/l10n_br_inscr_est into lp:openerp.pt-br-localiz/6.1

Proposed by Renato Lima - http://www.akretion.com
Status: Rejected
Rejected by: Renato Lima - http://www.akretion.com
Proposed branch: lp:~luciano-igtech/openerp.pt-br-localiz/l10n_br_inscr_est
Merge into: lp:openerp.pt-br-localiz/6.1
Diff against target: 1258 lines (+975/-82)
1 file modified
l10n_br_base/partner.py (+975/-82)
To merge this branch: bzr merge lp:~luciano-igtech/openerp.pt-br-localiz/l10n_br_inscr_est
Reviewer Review Type Date Requested Status
Renato Lima - http://www.akretion.com Disapprove
Review via email: mp+94798@code.launchpad.net

Description of the change

Adicionado o restante das validações faltantes no OpenERP, contribuição do luciano Schimer

To post a comment you must log in.
Revision history for this message
Renato Lima - http://www.akretion.com (renatonlima) wrote :

É importante adicionar um arquivo para testar todas as funções para ter certeza que todas as rotinas de validações estão corretas, para não gerar problemas durante o cadastro de um parceiro no OpenERP.

Revision history for this message
Renato Lima - http://www.akretion.com (renatonlima) wrote :

Olá Luciano,

Como o Leonardo baixou a sua branch e fez um refactoring dos métodos eu vou rejeitar este pedido e vamos analisar o merge do refactoring

Revision history for this message
Renato Lima - http://www.akretion.com (renatonlima) wrote :

Foi refatorado esse medido de merge e gerado outro pedido de merge

review: Disapprove

Unmerged revisions

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'l10n_br_base/partner.py'
2--- l10n_br_base/partner.py 2012-01-25 15:28:29 +0000
3+++ l10n_br_base/partner.py 2012-02-27 16:34:52 +0000
4@@ -169,8 +169,39 @@
5 @param inscr_est: The company state number value,
6 @return: True or False.
7 """
8- #TODO
9- return True
10+
11+ # Limpando o campo inscrição estadual
12+ if not inscr_est.isdigit():
13+ inscr_est = re.sub('[^0-9]', '', inscr_est)
14+
15+ # verificando o tamanho da inscrição estadual
16+ if len(inscr_est) != 13:
17+ return False
18+
19+ # verificando os dois primeiros dígitos
20+ if inscr_est[:2] != '01':
21+ return False
22+
23+ # Pega apenas os 11 primeiros dígitos da inscrição estadual e
24+ # gera os dígitos verificadores
25+ inscr_est = map(int, inscr_est)
26+ nova_ie = inscr_est[:11]
27+
28+ prod = [4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2]
29+ while len(nova_ie) < 13:
30+ r = sum([x*y for (x, y) in zip(nova_ie, prod)]) % 11
31+ if r > 1:
32+ f = 11 - r
33+ else:
34+ f = 0
35+ nova_ie.append(f)
36+ prod.insert(0, 5)
37+
38+ # Se o número gerado coincidir com o número original, é válido
39+ if nova_ie == inscr_est:
40+ return True
41+
42+ return False
43
44 def _validate_ie_al(self, inscr_est):
45 """Checks if company register number is valid to Brazilian
46@@ -179,9 +210,40 @@
47 @param inscr_est: The company state number value,
48 @return: True or False.
49 """
50- #TODO
51- return True
52-
53+
54+ # Limpando o campo inscrição estadual
55+ if not inscr_est.isdigit():
56+ inscr_est = re.sub('[^0-9]', '', inscr_est)
57+
58+ # verificando o tamanho da inscrição estadual
59+ if len(inscr_est) != 9:
60+ return False
61+
62+ # verificando os dois primeiros dígitos
63+ if inscr_est[:2] != '24':
64+ return False
65+
66+ # verificando o tipo de empresa
67+ #if not inscr_est[2] in ['0', '3', '5', '7', '8']:
68+ # return False
69+
70+ # Pega apenas os 8 primeiros dígitos da inscrição estadual e
71+ # gera os dígitos verificadores
72+ inscr_est = map(int, inscr_est)
73+ nova_ie = inscr_est[:8]
74+
75+ prod = [9, 8, 7, 6, 5, 4, 3, 2]
76+ r = (sum([x*y for (x, y) in zip(nova_ie, prod)]) * 10) % 11
77+ if r > 9:
78+ r = 0
79+ nova_ie.append(r)
80+
81+ # Se o número gerado coincidir com o número original, é válido
82+ if nova_ie == inscr_est:
83+ return True
84+
85+ return False
86+
87 def _validate_ie_am(self, inscr_est):
88 """Checks if company register number is valid to Brazilian
89 state Amazonas
90@@ -189,8 +251,33 @@
91 @param inscr_est: The company state number value,
92 @return: True or False.
93 """
94- #TODO
95- return True
96+
97+ # Limpando o campo inscrição estadual
98+ if not inscr_est.isdigit():
99+ inscr_est = re.sub('[^0-9]', '', inscr_est)
100+
101+ # verificando o tamanho da inscrição estadual
102+ if len(inscr_est) != 9:
103+ return False
104+
105+ # Pega apenas os 8 primeiros dígitos da inscrição estadual e
106+ # gera o dígito verificador
107+ inscr_est = map(int, inscr_est)
108+ nova_ie = inscr_est[:8]
109+
110+ prod = [9, 8, 7, 6, 5, 4, 3, 2]
111+ r = sum([x*y for (x, y) in zip(nova_ie, prod)]) % 11
112+ if r > 1:
113+ f = 11 - r
114+ else:
115+ f = 0
116+ nova_ie.append(f)
117+
118+ # Se o número gerado coincidir com o número original, é válido
119+ if nova_ie == inscr_est:
120+ return True
121+
122+ return False
123
124 def _validate_ie_ap(self, inscr_est):
125 """Checks if company register number is valid to Brazilian
126@@ -199,8 +286,52 @@
127 @param inscr_est: The company state number value,
128 @return: True or False.
129 """
130- #TODO
131- return True
132+
133+ # Limpando o campo inscrição estadual
134+ if not inscr_est.isdigit():
135+ inscr_est = re.sub('[^0-9]', '', inscr_est)
136+
137+ # verificando o tamanho da inscrição estadual
138+ if len(inscr_est) != 9:
139+ return False
140+
141+ # verificando os dois primeiros dígitos
142+ if inscr_est[:2] != '03':
143+ return False
144+
145+ # Pega apenas os 8 primeiros dígitos da inscrição estadual e
146+ # define os valores de 'p' e 'd'
147+ inscr_est_int = int(inscr_est[:8])
148+ if (inscr_est_int <= 3017000):
149+ inscr_est_p = 5
150+ inscr_est_d = 0
151+ if (inscr_est_int >= 3017001) and (inscr_est_int <= 3019022):
152+ inscr_est_p = 9
153+ inscr_est_d = 1
154+ if (inscr_est_int >= 3019023):
155+ inscr_est_p = 0
156+ inscr_est_d = 0
157+
158+ # Pega apenas os 8 primeiros dígitos da inscrição estadual e
159+ # gera o dígito verificador
160+ inscr_est = map(int, inscr_est)
161+ nova_ie = inscr_est[:8]
162+
163+ prod = [9, 8, 7, 6, 5, 4, 3, 2]
164+ r = (inscr_est_p + sum([x*y for (x, y) in zip(nova_ie, prod)])) % 11
165+ if r > 1:
166+ f = 11 - r
167+ elif r == 1:
168+ f = 0
169+ else:
170+ f = inscr_est_d
171+ nova_ie.append(f)
172+
173+ # Se o número gerado coincidir com o número original, é válido
174+ if nova_ie == inscr_est:
175+ return True
176+
177+ return False
178
179 def _validate_ie_ba(self, inscr_est):
180 """Checks if company register number is valid to Brazilian
181@@ -209,8 +340,80 @@
182 @param inscr_est: The company state number value,
183 @return: True or False.
184 """
185- #TODO
186- return True
187+
188+ # Limpando o campo inscrição estadual
189+ if not inscr_est.isdigit():
190+ inscr_est = re.sub('[^0-9]', '', inscr_est)
191+
192+ # verificando o tamanho da inscrição estadual
193+ if (len(inscr_est) != 8) and (len(inscr_est) != 9):
194+ return False
195+
196+ inscr_est = map(int, inscr_est)
197+
198+ # verificando o tamanho da inscrição estadual
199+ if len(inscr_est) == 8:
200+
201+ # Pega apenas os 6 primeiros dígitos da inscrição estadual e
202+ # gera os dígitos verificadores
203+ nova_ie = inscr_est[:6]
204+
205+ prod = [7, 6, 5, 4, 3, 2]
206+
207+ if inscr_est[0] in [0, 1, 2, 3, 4, 5, 8]:
208+ modulo = 10
209+ else:
210+ modulo = 11
211+
212+ while len(nova_ie) < 8:
213+
214+ r = sum([x*y for (x, y) in zip(nova_ie, prod)]) % modulo
215+ if r > 0:
216+ f = modulo - r
217+ else:
218+ f = 0
219+
220+ if len(nova_ie) < 7:
221+ nova_ie.append(f)
222+ else:
223+ nova_ie.insert(6, f)
224+
225+ prod.insert(0, 8)
226+
227+ # verificando o tamanho da inscrição estadual
228+ if len(inscr_est) == 9:
229+
230+ # Pega apenas os 7 primeiros dígitos da inscrição estadual e
231+ # gera os dígitos verificadores
232+ nova_ie = inscr_est[:7]
233+
234+ prod = [8, 7, 6, 5, 4, 3, 2]
235+
236+ if inscr_est[1] in [0, 1, 2, 3, 4, 5, 8]:
237+ modulo = 10
238+ else:
239+ modulo = 11
240+
241+ while len(nova_ie) < 9:
242+
243+ r = sum([x*y for (x, y) in zip(nova_ie, prod)]) % modulo
244+ if r > 0:
245+ f = modulo - r
246+ else:
247+ f = 0
248+
249+ if len(nova_ie) < 8:
250+ nova_ie.append(f)
251+ else:
252+ nova_ie.insert(7, f)
253+
254+ prod.insert(0, 9)
255+
256+ # Se o número gerado coincidir com o número original, é válido
257+ if nova_ie == inscr_est:
258+ return True
259+
260+ return False
261
262 def _validate_ie_ce(self, inscr_est):
263 """Checks if company register number is valid to Brazilian
264@@ -219,8 +422,33 @@
265 @param inscr_est: The company state number value,
266 @return: True or False.
267 """
268- #TODO
269- return True
270+
271+ # Limpando o campo inscrição estadual
272+ if not inscr_est.isdigit():
273+ inscr_est = re.sub('[^0-9]', '', inscr_est)
274+
275+ # verificando o tamanho da inscrição estadual
276+ if len(inscr_est) != 9:
277+ return False
278+
279+ # Pega apenas os 8 primeiros dígitos da inscrição estadual e
280+ # gera o dígito verificador
281+ inscr_est = map(int, inscr_est)
282+ nova_ie = inscr_est[:8]
283+
284+ prod = [9, 8, 7, 6, 5, 4, 3, 2]
285+ r = sum([x*y for (x, y) in zip(nova_ie, prod)]) % 11
286+ if r > 1:
287+ f = 11 - r
288+ else:
289+ f = 0
290+ nova_ie.append(f)
291+
292+ # Se o número gerado coincidir com o número original, é válido
293+ if nova_ie == inscr_est:
294+ return True
295+
296+ return False
297
298 def _validate_ie_df(self, inscr_est):
299 """Checks if company register number is valid to Brazilian
300@@ -229,8 +457,39 @@
301 @param inscr_est: The company state number value,
302 @return: True or False._check_ie
303 """
304- #TODO
305- return True
306+
307+ # Limpando o campo inscrição estadual
308+ if not inscr_est.isdigit():
309+ inscr_est = re.sub('[^0-9]', '', inscr_est)
310+
311+ # verificando o tamanho da inscrição estadual
312+ if len(inscr_est) != 13:
313+ return False
314+
315+ # verificando os dois primeiros dígitos
316+ if inscr_est[:2] != '07':
317+ return False
318+
319+ # Pega apenas os 11 primeiros dígitos da inscrição estadual e
320+ # gera os dígitos verificadores
321+ inscr_est = map(int, inscr_est)
322+ nova_ie = inscr_est[:11]
323+
324+ prod = [4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2]
325+ while len(nova_ie) < 13:
326+ r = sum([x*y for (x, y) in zip(nova_ie, prod)]) % 11
327+ if r > 1:
328+ f = 11 - r
329+ else:
330+ f = 0
331+ nova_ie.append(f)
332+ prod.insert(0, 5)
333+
334+ # Se o número gerado coincidir com o número original, é válido
335+ if nova_ie == inscr_est:
336+ return True
337+
338+ return False
339
340 def _validate_ie_es(self, inscr_est):
341 """Checks if company register number is valid to Brazilian
342@@ -239,9 +498,34 @@
343 @param inscr_est: The company state number value,
344 @return: True or False.
345 """
346- #TODO
347- return True
348-
349+
350+ # Limpando o campo inscrição estadual
351+ if not inscr_est.isdigit():
352+ inscr_est = re.sub('[^0-9]', '', inscr_est)
353+
354+ # verificando o tamanho da inscrição estadual
355+ if len(inscr_est) != 9:
356+ return False
357+
358+ # Pega apenas os 8 primeiros dígitos da inscrição estadual e
359+ # gera o dígito verificador
360+ inscr_est = map(int, inscr_est)
361+ nova_ie = inscr_est[:8]
362+
363+ prod = [9, 8, 7, 6, 5, 4, 3, 2]
364+ r = sum([x*y for (x, y) in zip(nova_ie, prod)]) % 11
365+ if r > 1:
366+ f = 11 - r
367+ else:
368+ f = 0
369+ nova_ie.append(f)
370+
371+ # Se o número gerado coincidir com o número original, é válido
372+ if nova_ie == inscr_est:
373+ return True
374+
375+ return False
376+
377 def _validate_ie_go(self, inscr_est):
378 """Checks if company register number is val_check_ieid to Brazilian
379 state Goiais
380@@ -249,9 +533,48 @@
381 @param inscr_est: The company state number value,
382 @return: True or False.
383 """
384- #TODO
385- return True
386-
387+
388+ # Limpando o campo inscrição estadual
389+ if not inscr_est.isdigit():
390+ inscr_est = re.sub('[^0-9]', '', inscr_est)
391+
392+ # verificando o tamanho da inscrição estadual
393+ if len(inscr_est) != 9:
394+ return False
395+
396+ # verificando os dois primeiros dígitos
397+ if not inscr_est[:2] in ['10', '11', '15']:
398+ return False
399+
400+ # Pega apenas os 8 primeiros dígitos da inscrição estadual e
401+ # define os valores de 'p' e 'd'
402+ inscr_est_int = int(inscr_est[:8])
403+ if ( inscr_est_int >= 10103105 ) and ( inscr_est_int <= 10119997 ):
404+ inscr_est_d = 1
405+ else:
406+ inscr_est_d = 0
407+
408+ # Pega apenas os 8 primeiros dígitos da inscrição estadual e
409+ # gera o dígito verificador
410+ inscr_est = map(int, inscr_est)
411+ nova_ie = inscr_est[:8]
412+
413+ prod = [9, 8, 7, 6, 5, 4, 3, 2]
414+ r = sum([x*y for (x, y) in zip(nova_ie, prod)]) % 11
415+ if r > 1:
416+ f = 11 - r
417+ elif r == 1:
418+ f = inscr_est_d
419+ else:
420+ f = 0
421+ nova_ie.append(f)
422+
423+ # Se o número gerado coincidir com o número original, é válido
424+ if nova_ie == inscr_est:
425+ return True
426+
427+ return False
428+
429 def _validate_ie_ma(self, inscr_est):
430 """Checks if company register number is valid to Brazilian
431 state Maranhão
432@@ -259,9 +582,38 @@
433 @param inscr_est: The company state number value,
434 @return: True or False.
435 """
436- #TODO_check_ie
437- return True
438-
439+
440+ # Limpando o campo inscrição estadual
441+ if not inscr_est.isdigit():
442+ inscr_est = re.sub('[^0-9]', '', inscr_est)
443+
444+ # verificando o tamanho da inscrição estadual
445+ if len(inscr_est) != 9:
446+ return False
447+
448+ # verificando os dois primeiros dígitos
449+ if inscr_est[:2] != '12':
450+ return False
451+
452+ # Pega apenas os 8 primeiros dígitos da inscrição estadual e
453+ # gera o dígito verificador
454+ inscr_est = map(int, inscr_est)
455+ nova_ie = inscr_est[:8]
456+
457+ prod = [9, 8, 7, 6, 5, 4, 3, 2]
458+ r = sum([x*y for (x, y) in zip(nova_ie, prod)]) % 11
459+ if r > 1:
460+ f = 11 - r
461+ else:
462+ f = 0
463+ nova_ie.append(f)
464+
465+ # Se o número gerado coincidir com o número original, é válido
466+ if nova_ie == inscr_est:
467+ return True
468+
469+ return False
470+
471 def _validate_ie_mg(self, inscr_est):
472 """Checks if company register number is valid to Brazilian
473 state Minas Gerais
474@@ -269,9 +621,45 @@
475 @param inscr_est: The company state number value,
476 @return: True or False.
477 """
478- #TODO
479- return True
480-
481+
482+ # Limpando o campo inscrição estadual
483+ if not inscr_est.isdigit():
484+ inscr_est = re.sub('[^0-9]', '', inscr_est)
485+
486+ # verificando o tamanho da inscrição estadual
487+ if len(inscr_est) != 13:
488+ return False
489+
490+ # Pega apenas os 11 primeiros dígitos da inscrição estadual e
491+ # gera os dígitos verificadores
492+ inscr_est = map(int, inscr_est)
493+ nova_ie = inscr_est[:11]
494+
495+ nova_ie_aux = list(nova_ie)
496+ nova_ie_aux.insert(3, 0)
497+ prod = [1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2]
498+ r = str([x*y for (x, y) in zip(nova_ie_aux, prod)])
499+ r = re.sub('[^0-9]', '', r)
500+ r = map(int, r)
501+ r = sum(r)
502+ r2 = (r/10+1)*10
503+ r = r2 - r
504+ nova_ie.append(r)
505+
506+ prod = [3, 2, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2]
507+ r = sum([x*y for (x, y) in zip(nova_ie, prod)]) % 11
508+ if r > 1:
509+ f = 11 - r
510+ else:
511+ f = 0
512+ nova_ie.append(f)
513+
514+ # Se o número gerado coincidir com o número original, é válido
515+ if nova_ie == inscr_est:
516+ return True
517+
518+ return False
519+
520 def _validate_ie_ms(self, inscr_est):
521 """Checks if company register number is valid to Brazilian
522 state Mato Grosso do Sul
523@@ -279,8 +667,37 @@
524 @param inscr_est: The company state number value,
525 @return: True or False.
526 """
527- #TODO
528- return True
529+
530+ # Limpando o campo inscrição estadual
531+ if not inscr_est.isdigit():
532+ inscr_est = re.sub('[^0-9]', '', inscr_est)
533+
534+ # verificando o tamanho da inscrição estadual
535+ if len(inscr_est) != 9:
536+ return False
537+
538+ # verificando os dois primeiros dígitos
539+ if inscr_est[:2] != '28':
540+ return False
541+
542+ # Pega apenas os 8 primeiros dígitos da inscrição estadual e
543+ # gera o dígito verificador
544+ inscr_est = map(int, inscr_est)
545+ nova_ie = inscr_est[:8]
546+
547+ prod = [9, 8, 7, 6, 5, 4, 3, 2]
548+ r = sum([x*y for (x, y) in zip(nova_ie, prod)]) % 11
549+ if r > 1:
550+ f = 11 - r
551+ else:
552+ f = 0
553+ nova_ie.append(f)
554+
555+ # Se o número gerado coincidir com o número original, é válido
556+ if nova_ie == inscr_est:
557+ return True
558+
559+ return False
560
561 def _validate_ie_mt(self, inscr_est):
562 """Checks if company register number is valid to Brazilian
563@@ -289,9 +706,34 @@
564 @param inscr_est: The company state number value,
565 @return: True or False.
566 """
567- #TODO
568- return True
569-
570+
571+ # Limpando o campo inscrição estadual
572+ if not inscr_est.isdigit():
573+ inscr_est = re.sub('[^0-9]', '', inscr_est)
574+
575+ # verificando o tamanho da inscrição estadual
576+ if len(inscr_est) != 11:
577+ return False
578+
579+ # Pega apenas os 8 primeiros dígitos da inscrição estadual e
580+ # gera o dígito verificador
581+ inscr_est = map(int, inscr_est)
582+ nova_ie = inscr_est[:10]
583+
584+ prod = [3, 2, 9, 8, 7, 6, 5, 4, 3, 2]
585+ r = sum([x*y for (x, y) in zip(nova_ie, prod)]) % 11
586+ if r > 1:
587+ f = 11 - r
588+ else:
589+ f = 0
590+ nova_ie.append(f)
591+
592+ # Se o número gerado coincidir com o número original, é válido
593+ if nova_ie == inscr_est:
594+ return True
595+
596+ return False
597+
598 def _validate_ie_pa(self, inscr_est):
599 """Checks if company register number is valid to Brazilian
600 state Pará
601@@ -299,9 +741,38 @@
602 @param inscr_est: The company state number value,
603 @return: True or False.
604 """
605- #TODO
606- return True
607-
608+
609+ # Limpando o campo inscrição estadual
610+ if not inscr_est.isdigit():
611+ inscr_est = re.sub('[^0-9]', '', inscr_est)
612+
613+ # verificando o tamanho da inscrição estadual
614+ if len(inscr_est) != 9:
615+ return False
616+
617+ # verificando os dois primeiros dígitos
618+ if inscr_est[:2] != '15':
619+ return False
620+
621+ # Pega apenas os 8 primeiros dígitos da inscrição estadual e
622+ # gera o dígito verificador
623+ inscr_est = map(int, inscr_est)
624+ nova_ie = inscr_est[:8]
625+
626+ prod = [9, 8, 7, 6, 5, 4, 3, 2]
627+ r = sum([x*y for (x, y) in zip(nova_ie, prod)]) % 11
628+ if r > 1:
629+ f = 11 - r
630+ else:
631+ f = 0
632+ nova_ie.append(f)
633+
634+ # Se o número gerado coincidir com o número original, é válido
635+ if nova_ie == inscr_est:
636+ return True
637+
638+ return False
639+
640 def _validate_ie_pb(self, inscr_est):
641 """Checks if company register number is valid to Brazilian
642 state Paraíba
643@@ -309,9 +780,34 @@
644 @param inscr_est: The company state number value,
645 @return: True or False.
646 """
647- #TODO
648- return True
649-
650+
651+ # Limpando o campo inscrição estadual
652+ if not inscr_est.isdigit():
653+ inscr_est = re.sub('[^0-9]', '', inscr_est)
654+
655+ # verificando o tamanho da inscrição estadual
656+ if len(inscr_est) != 9:
657+ return False
658+
659+ # Pega apenas os 8 primeiros dígitos da inscrição estadual e
660+ # gera o dígito verificador
661+ inscr_est = map(int, inscr_est)
662+ nova_ie = inscr_est[:8]
663+
664+ prod = [9, 8, 7, 6, 5, 4, 3, 2]
665+ r = sum([x*y for (x, y) in zip(nova_ie, prod)]) % 11
666+ if r > 1:
667+ f = 11 - r
668+ else:
669+ f = 0
670+ nova_ie.append(f)
671+
672+ # Se o número gerado coincidir com o número original, é válido
673+ if nova_ie == inscr_est:
674+ return True
675+
676+ return False
677+
678 def _validate_ie_pe(self, inscr_est):
679 """Check if number in insc_est is valid to Brazilian
680 state of Pernambuco
681@@ -319,9 +815,56 @@
682 @param inscr_est: The company state number value,
683 @return: True or False.
684 """
685- #TODO
686- return True
687-
688+
689+ # Limpando o campo inscrição estadual
690+ if not inscr_est.isdigit():
691+ inscr_est = re.sub('[^0-9]', '', inscr_est)
692+
693+ # verificando o tamanho da inscrição estadual
694+ if (len(inscr_est) != 9) and (len(inscr_est) != 14):
695+ return False
696+
697+ inscr_est = map(int, inscr_est)
698+
699+ # verificando o tamanho da inscrição estadual
700+ if len(inscr_est) == 9:
701+
702+ # Pega apenas os 7 primeiros dígitos da inscrição estadual e
703+ # gera os dígitos verificadores
704+ inscr_est = map(int, inscr_est)
705+ nova_ie = inscr_est[:7]
706+
707+ prod = [8, 7, 6, 5, 4, 3, 2]
708+ while len(nova_ie) < 9:
709+ r = sum([x*y for (x, y) in zip(nova_ie, prod)]) % 11
710+ if r > 1:
711+ f = 11 - r
712+ else:
713+ f = 0
714+ nova_ie.append(f)
715+ prod.insert(0, 9)
716+
717+ # verificando o tamanho da inscrição estadual
718+ if len(inscr_est) == 14:
719+
720+ # Pega apenas os 13 primeiros dígitos da inscrição estadual e
721+ # gera o dígito verificador
722+ inscr_est = map(int, inscr_est)
723+ nova_ie = inscr_est[:13]
724+
725+ prod = [5, 4, 3, 2, 1, 9, 8, 7, 6, 5, 4, 3, 2]
726+ r = sum([x*y for (x, y) in zip(nova_ie, prod)]) % 11
727+ f = 11 - r
728+ if f > 10:
729+ f = f - 10
730+ nova_ie.append(f)
731+
732+ # Se o número gerado coincidir com o número original, é válido
733+ if nova_ie == inscr_est:
734+ return True
735+
736+ return False
737+
738 def _validate_ie_pi(self, inscr_est):
739 """Check if number in insc_est is valid to Brazilian
740 state of Piauí
741@@ -329,9 +872,34 @@
742 @param inscr_est: The company state number value,
743 @return: True or False.
744 """
745- #TODO
746- return True
747-
748+
749+ # Limpando o campo inscrição estadual
750+ if not inscr_est.isdigit():
751+ inscr_est = re.sub('[^0-9]', '', inscr_est)
752+
753+ # verificando o tamanho da inscrição estadual
754+ if len(inscr_est) != 9:
755+ return False
756+
757+ # Pega apenas os 8 primeiros dígitos da inscrição estadual e
758+ # gera o dígito verificador
759+ inscr_est = map(int, inscr_est)
760+ nova_ie = inscr_est[:8]
761+
762+ prod = [9, 8, 7, 6, 5, 4, 3, 2]
763+ r = sum([x*y for (x, y) in zip(nova_ie, prod)]) % 11
764+ if r > 1:
765+ f = 11 - r
766+ else:
767+ f = 0
768+ nova_ie.append(f)
769+
770+ # Se o número gerado coincidir com o número original, é válido
771+ if nova_ie == inscr_est:
772+ return True
773+
774+ return False
775+
776 def _validate_ie_pr(self, inscr_est):
777 """Checks if company register number is valid to Brazilian
778 state Rio de Paraná
779@@ -339,9 +907,36 @@
780 @param inscr_est: The company state number value,
781 @return: True or False.
782 """
783- #TODO
784- return True
785-
786+
787+ # Limpando o campo inscrição estadual
788+ if not inscr_est.isdigit():
789+ inscr_est = re.sub('[^0-9]', '', inscr_est)
790+
791+ # verificando o tamanho da inscrição estadual
792+ if len(inscr_est) != 10:
793+ return False
794+
795+ # Pega apenas os 8 primeiros dígitos da inscrição estadual e
796+ # gera os dígitos verificadores
797+ inscr_est = map(int, inscr_est)
798+ nova_ie = inscr_est[:8]
799+
800+ prod = [3, 2, 7, 6, 5, 4, 3, 2]
801+ while len(nova_ie) < 10:
802+ r = sum([x*y for (x, y) in zip(nova_ie, prod)]) % 11
803+ if r > 1:
804+ f = 11 - r
805+ else:
806+ f = 0
807+ nova_ie.append(f)
808+ prod.insert(0, 4)
809+
810+ # Se o número gerado coincidir com o número original, é válido
811+ if nova_ie == inscr_est:
812+ return True
813+
814+ return False
815+
816 def _validate_ie_rj(self, inscr_est):
817 """Checks if company register number is valid to Brazilian
818 state Rio de janeiro
819@@ -350,27 +945,26 @@
820 @return: True or False.
821 """
822
823- # Limpando o cnpj
824+ # Limpando a inscrição estadual
825 if not inscr_est.isdigit():
826 inscr_est = re.sub('[^0-9]', '', inscr_est)
827
828- # verificando o tamano do cnpj
829+ # verificando o tamanho da inscrição estadual
830 if len(inscr_est) != 8:
831 return False
832
833- # Pega apenas os 12 primeiros dígitos do CNPJ e gera os 2 dígitos que faltam
834- inscr_est= map(int, inscr_est)
835+ # Pega apenas os 12 primeiros dígitos da inscrição estadual e
836+ # gera os dígitos verificadores
837+ inscr_est = map(int, inscr_est)
838 nova_ie = inscr_est[:7]
839
840 prod = [2, 7, 6, 5, 4, 3, 2]
841- while len(nova_ie) < 8:
842- r = sum([x*y for (x, y) in zip(nova_ie, prod)]) % 11
843- if r > 1:
844- f = 11 - r
845- else:
846- f = 0
847- nova_ie.append(f)
848- prod.insert(0, 6)
849+ r = sum([x*y for (x, y) in zip(nova_ie, prod)]) % 11
850+ if r > 1:
851+ f = 11 - r
852+ else:
853+ f = 0
854+ nova_ie.append(f)
855
856 # Se o número gerado coincidir com o número original, é válido
857 if nova_ie == inscr_est:
858@@ -385,9 +979,54 @@
859 @param inscr_est: The company state number value,
860 @return: True or False.
861 """
862- #TODO
863- return True
864-
865+
866+ # Limpando o campo inscrição estadual
867+ if not inscr_est.isdigit():
868+ inscr_est = re.sub('[^0-9]', '', inscr_est)
869+
870+ # verificando o tamanho da inscrição estadual
871+ if (len(inscr_est) != 9) and (len(inscr_est) != 10):
872+ return False
873+
874+ # verificando os dois primeiros dígitos
875+ if inscr_est[:2] != '20':
876+ return False
877+
878+ inscr_est = map(int, inscr_est)
879+
880+ # verificando o tamanho da inscrição estadual
881+ if len(inscr_est) == 9:
882+
883+ # Pega apenas os 8 primeiros dígitos da inscrição estadual e
884+ # gera o dígito verificador
885+ nova_ie = inscr_est[:8]
886+
887+ prod = [9, 8, 7, 6, 5, 4, 3, 2]
888+ r = (sum([x*y for (x, y) in zip(nova_ie, prod)]) * 10) % 11
889+ if r > 9:
890+ r = 0
891+ nova_ie.append(r)
892+
893+ # verificando o tamanho da inscrição estadual
894+ if len(inscr_est) == 10:
895+
896+ # Pega apenas os 9 primeiros dígitos da inscrição estadual e
897+ # gera o dígito verificador
898+ nova_ie = inscr_est[:9]
899+
900+ prod = [10, 9, 8, 7, 6, 5, 4, 3, 2]
901+ r = (sum([x*y for (x, y) in zip(nova_ie, prod)]) * 10) % 11
902+ if r > 9:
903+ r = 0
904+ nova_ie.append(r)
905+
906+
907+ # Se o número gerado coincidir com o número original, é válido
908+ if nova_ie == inscr_est:
909+ return True
910+
911+ return False
912+
913 def _validate_ie_ro(self, inscr_est):
914 """Checks if company register number is valid to Brazilian
915 state Rondônia
916@@ -395,9 +1034,55 @@
917 @param inscr_est: The company state number value,
918 @return: True or False.
919 """
920- #TODO
921- return True
922-
923+
924+ # Limpando o campo inscrição estadual
925+ if not inscr_est.isdigit():
926+ inscr_est = re.sub('[^0-9]', '', inscr_est)
927+
928+ # verificando o tamanho da inscrição estadual
929+ if (len(inscr_est) != 9) and (len(inscr_est) != 14):
930+ return False
931+
932+ inscr_est = map(int, inscr_est)
933+
934+ # verificando o tamanho da inscrição estadual
935+ if len(inscr_est) == 9:
936+
937+ # Despreza-se os 3 primeiros dígitos, pega apenas os 8 primeiros
938+ # dígitos da inscrição estadual e gera o dígito verificador
939+ nova_ie = inscr_est[3:8]
940+
941+ prod = [6, 5, 4, 3, 2]
942+ r = sum([x*y for (x, y) in zip(nova_ie, prod)]) % 11
943+ f = 11 - r
944+ if f > 9:
945+ f = f - 10
946+ nova_ie.append(f)
947+
948+ nova_ie.insert(0, inscr_est[0])
949+ nova_ie.insert(1, inscr_est[1])
950+ nova_ie.insert(2, inscr_est[2])
951+
952+ # verificando o tamanho da inscrição estadual
953+ if len(inscr_est) == 14:
954+
955+ # Pega apenas os 13 primeiros dígitos da inscrição estadual e
956+ # gera o dígito verificador
957+ nova_ie = inscr_est[:13]
958+
959+ prod = [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2]
960+ r = sum([x*y for (x, y) in zip(nova_ie, prod)]) % 11
961+ f = 11 - r
962+ if f > 9:
963+ f = f - 10
964+ nova_ie.append(f)
965+
966+ # Se o número gerado coincidir com o número original, é válido
967+ if nova_ie == inscr_est:
968+ return True
969+
970+ return False
971+
972 def _validate_ie_rr(self, inscr_est):
973 """Checks if company register number is valid to Brazilian
974 state Roraima
975@@ -405,9 +1090,34 @@
976 @param inscr_est: The company state number value,
977 @return: True or False.
978 """
979- #TODO
980- return True
981-
982+
983+ # Limpando a inscrição estadual
984+ if not inscr_est.isdigit():
985+ inscr_est = re.sub('[^0-9]', '', inscr_est)
986+
987+ # verificando o tamanho da inscrição estadual
988+ if len(inscr_est) != 9:
989+ return False
990+
991+ # verificando os dois primeiros dígitos
992+ if inscr_est[:2] != '24':
993+ return False
994+
995+ # Pega apenas os 8 primeiros dígitos da inscrição estadual e
996+ # gera o dígito verificador
997+ inscr_est = map(int, inscr_est)
998+ nova_ie = inscr_est[:8]
999+
1000+ prod = [1, 2, 3, 4, 5, 6, 7, 8]
1001+ r = sum([x*y for (x, y) in zip(nova_ie, prod)]) % 9
1002+ nova_ie.append(r)
1003+
1004+ # Se o número gerado coincidir com o número original, é válido
1005+ if nova_ie == inscr_est:
1006+ return True
1007+
1008+ return False
1009+
1010 def _validate_ie_rs(self, inscr_est):
1011 """Checks if company register number is valid to Brazilian
1012 state Rio Grande do Sul
1013@@ -415,8 +1125,33 @@
1014 @param inscr_est: The company state number value,
1015 @return: True or False.
1016 """
1017- #TODO
1018- return True
1019+
1020+ # Limpando o campo inscrição estadual
1021+ if not inscr_est.isdigit():
1022+ inscr_est = re.sub('[^0-9]', '', inscr_est)
1023+
1024+ # verificando o tamanho da inscrição estadual
1025+ if len(inscr_est) != 10:
1026+ return False
1027+
1028+ # Pega apenas os 9 primeiros dígitos da inscrição estadual e
1029+ # gera o dígito verificador
1030+ inscr_est = map(int, inscr_est)
1031+ nova_ie = inscr_est[:9]
1032+
1033+ prod = [2, 9, 8, 7, 6, 5, 4, 3, 2]
1034+ r = sum([x*y for (x, y) in zip(nova_ie, prod)]) % 11
1035+ if r > 1:
1036+ f = 11 - r
1037+ else:
1038+ f = 0
1039+ nova_ie.append(f)
1040+
1041+ # Se o número gerado coincidir com o número original, é válido
1042+ if nova_ie == inscr_est:
1043+ return True
1044+
1045+ return False
1046
1047 def _validate_ie_sc(self, inscr_est):
1048 """Checks if company register number is valid to Brazilian
1049@@ -425,9 +1160,34 @@
1050 @param inscr_est: The company state number value,
1051 @return: True or False.
1052 """
1053- #TODO
1054- return True
1055-
1056+
1057+ # Limpando o campo inscrição estadual
1058+ if not inscr_est.isdigit():
1059+ inscr_est = re.sub('[^0-9]', '', inscr_est)
1060+
1061+ # verificando o tamanho da inscrição estadual
1062+ if len(inscr_est) != 9:
1063+ return False
1064+
1065+ # Pega apenas os 8 primeiros dígitos da inscrição estadual e
1066+ # gera o dígito verificador
1067+ inscr_est = map(int, inscr_est)
1068+ nova_ie = inscr_est[:8]
1069+
1070+ prod = [9, 8, 7, 6, 5, 4, 3, 2]
1071+ r = sum([x*y for (x, y) in zip(nova_ie, prod)]) % 11
1072+ if r > 1:
1073+ f = 11 - r
1074+ else:
1075+ f = 0
1076+ nova_ie.append(f)
1077+
1078+ # Se o número gerado coincidir com o número original, é válido
1079+ if nova_ie == inscr_est:
1080+ return True
1081+
1082+ return False
1083+
1084 def _validate_ie_se(self, inscr_est):
1085 """Checks if company register number is valid to Brazilian
1086 state Sergipe
1087@@ -435,9 +1195,34 @@
1088 @param inscr_est: The company state number value,
1089 @return: True or False.
1090 """
1091- #TODO
1092- return True
1093-
1094+
1095+ # Limpando o campo inscrição estadual
1096+ if not inscr_est.isdigit():
1097+ inscr_est = re.sub('[^0-9]', '', inscr_est)
1098+
1099+ # verificando o tamanho da inscrição estadual
1100+ if len(inscr_est) != 9:
1101+ return False
1102+
1103+ # Pega apenas os 8 primeiros dígitos da inscrição estadual e
1104+ # gera o dígito verificador
1105+ inscr_est = map(int, inscr_est)
1106+ nova_ie = inscr_est[:8]
1107+
1108+ prod = [9, 8, 7, 6, 5, 4, 3, 2]
1109+ r = sum([x*y for (x, y) in zip(nova_ie, prod)]) % 11
1110+ if r > 1:
1111+ f = 11 - r
1112+ else:
1113+ f = 0
1114+ nova_ie.append(f)
1115+
1116+ # Se o número gerado coincidir com o número original, é válido
1117+ if nova_ie == inscr_est:
1118+ return True
1119+
1120+ return False
1121+
1122 def _validate_ie_sp(self, inscr_est):
1123 """Checks if company register number is valid to Brazilian
1124 state São Paulo
1125@@ -445,9 +1230,86 @@
1126 @param inscr_est: The company state number value,
1127 @return: True or False.
1128 """
1129- #TODO
1130- return True
1131-
1132+
1133+ # Industriais e comerciais
1134+ if inscr_est[0] != 'P':
1135+
1136+ # Limpando o campo inscrição estadual
1137+ if not inscr_est.isdigit():
1138+ inscr_est = re.sub('[^0-9]', '', inscr_est)
1139+
1140+ # verificando o tamanho da inscrição estadual
1141+ if len(inscr_est) != 12:
1142+ return False
1143+
1144+ # Pega apenas os 8 primeiros dígitos da inscrição estadual e
1145+ # gera o primeiro dígito verificador
1146+ inscr_est = map(int, inscr_est)
1147+ nova_ie = inscr_est[:8]
1148+
1149+ prod = [1, 3, 4, 5, 6, 7, 8, 10]
1150+ r = sum([x*y for (x, y) in zip(nova_ie, prod)]) % 11
1151+ if r < 10:
1152+ f = r
1153+ if r == 10:
1154+ f = 0
1155+ if r == 11:
1156+ f = 1
1157+ nova_ie.append(f)
1158+
1159+ # gera o segundo dígito verificador
1160+ nova_ie.append(inscr_est[9])
1161+ nova_ie.append(inscr_est[10])
1162+ prod = [3, 2, 10, 9, 8, 7, 6, 5, 4, 3, 2]
1163+ r = sum([x*y for (x, y) in zip(nova_ie, prod)]) % 11
1164+ if r < 10:
1165+ f = r
1166+ if r == 10:
1167+ f = 0
1168+ if r == 11:
1169+ f = 1
1170+ nova_ie.append(f)
1171+
1172+ # Produtor rural
1173+ else:
1174+
1175+ # Limpando o campo inscrição estadual
1176+ if not inscr_est.isdigit():
1177+ inscr_est = re.sub('[^0-9]', '', inscr_est)
1178+
1179+ # verificando o tamanho da inscrição estadual
1180+ if len(inscr_est) != 12:
1181+ return False
1182+
1183+ # verificando o primeiro dígito depois do 'P'
1184+ if inscr_est[0] != '0':
1185+ return False
1186+
1187+ # Pega apenas os 8 primeiros dígitos da inscrição estadual e
1188+ # gera o dígito verificador
1189+ inscr_est = map(int, inscr_est)
1190+ nova_ie = inscr_est[:8]
1191+
1192+ prod = [1, 3, 4, 5, 6, 7, 8, 10]
1193+ r = sum([x*y for (x, y) in zip(nova_ie, prod)]) % 11
1194+ if r < 10:
1195+ f = r
1196+ if r == 10:
1197+ f = 0
1198+ if r == 11:
1199+ f = 1
1200+ nova_ie.append(f)
1201+
1202+ nova_ie.append(inscr_est[9])
1203+ nova_ie.append(inscr_est[10])
1204+ nova_ie.append(inscr_est[11])
1205+
1206+ # Se o número gerado coincidir com o número original, é válido
1207+ if nova_ie == inscr_est:
1208+ return True
1209+
1210+ return False
1211+
1212 def _validate_ie_to(self, inscr_est):
1213 """Checks if company register number is valid to Brazilian
1214 state Tocantins
1215@@ -455,9 +1317,40 @@
1216 @param inscr_est: The company state number value,
1217 @return: True or False.
1218 """
1219- #TODO
1220- return True
1221-
1222+
1223+ # Limpando o campo inscrição estadual
1224+ if not inscr_est.isdigit():
1225+ inscr_est = re.sub('[^0-9]', '', inscr_est)
1226+
1227+ # verificando o tamanho da inscrição estadual
1228+ if len(inscr_est) != 11:
1229+ return False
1230+
1231+ # verificando os dígitos 3 e 4
1232+ if not inscr_est[2:4] in ['01', '02', '03', '99']:
1233+ return False
1234+
1235+ # Pega apenas os dígitos que entram no cálculo
1236+ inscr_est = map(int, inscr_est)
1237+ nova_ie = inscr_est[:2] + inscr_est[4:10]
1238+
1239+ prod = [9, 8, 7, 6, 5, 4, 3, 2]
1240+ r = sum([x*y for (x, y) in zip(nova_ie, prod)]) % 11
1241+ if r > 1:
1242+ f = 11 - r
1243+ else:
1244+ f = 0
1245+ nova_ie.append(f)
1246+
1247+ nova_ie.insert(2, inscr_est[2])
1248+ nova_ie.insert(3, inscr_est[3])
1249+
1250+ # Se o número gerado coincidir com o número original, é válido
1251+ if nova_ie == inscr_est:
1252+ return True
1253+
1254+ return False
1255+
1256 _constraints = [
1257 (_check_cnpj_cpf, u'CNPJ/CPF invalido!', ['cnpj_cpf']),
1258 (_check_ie, u'Inscrição Estadual inválida!', ['inscr_est'])