Merge lp:~luciano-igtech/openerp.pt-br-localiz/l10n_br_inscr_est into lp:openerp.pt-br-localiz/6.1
- l10n_br_inscr_est
- Merge into trunk
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 |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Renato Lima - http://www.akretion.com | Disapprove | ||
Review via email: mp+94798@code.launchpad.net |
Commit message
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 : | # |
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']) |
É 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.