This repository has been archived by the owner on May 18, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 13
/
Copy pathprocessa_tabela_ncm.py
164 lines (130 loc) · 4.59 KB
/
processa_tabela_ncm.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
#!/usr/bin/env python
import re
from converte_tabela_pis_cofins import cria_análises_pis_cofins, ncm_pertence_a_st_pis_cofins
from converte_tabela_ibpt import cria_análises_ibpt, ibpt_para_ncm
grupo = {
1: '',
2: '',
3: '',
4: '',
5: '',
6: '',
7: '',
}
código = {
1: '',
2: '',
3: '',
4: '',
5: '',
6: '',
7: '',
}
def processa_grupo(ncm, descrição):
t = len(ncm)
if t < 8:
grupo[t] = descrição
código[t] = ncm
t += 1
while t <= 7:
grupo[t] = ''
código[t] = ''
t += 1
nome = ''
else:
t = 1
nome = ''
while t <= 7:
if grupo[t] != '' and código[t] == ncm[:t]:
nome += grupo[t] + ' - '
t += 1
nome += descrição
return nome
def processa_linha(linha):
campos = linha.split('|')
ncm = campos[0].strip()
descrição = campos[1].strip()
al_ipi = campos[2].strip()
ex = ''
cst_ipi_entrada = ''
cst_ipi_saída = ''
al_pis = ''
al_cofins = ''
unidade = ''
al_ibpt_nacional = '0'
al_ibpt_internacional = '0'
if al_ipi == 'NT' or al_ipi == '':
al_ipi = '-1'
cst_ipi_entrada = '03'
cst_ipi_saída = '53'
elif al_ipi == '0':
#al_ipi = 0
cst_ipi_entrada = '01'
cst_ipi_saída = '51'
elif al_ipi != '':
#al_ipi = int(al_ipi)
cst_ipi_entrada = '00'
cst_ipi_saída = '50'
ncm = ncm.replace('.', '')
#
# Detecta o código EX
#
if re.search('^Ex [0-9]{2}', descrição):
ex = re.sub('^Ex ([0-9]{2}).*', r'\1', descrição)
descrição = re.sub('^Ex [0-9]{2}', '', descrição)
descrição = descrição.strip()
while descrição[0] == '-':
descrição = descrição[1:]
while descrição[-1] == ':':
descrição = descrição[:-1]
while descrição[-1] == '.':
descrição = descrição[:-1]
descrição = descrição.strip()
processa_grupo(ncm, descrição)
if len(ncm) == 8:
descrição = processa_grupo(ncm, descrição)
análise_pis_cofins = ncm_pertence_a_st_pis_cofins(ncm, ex)
ibpt = ibpt_para_ncm(ncm, ex)
código_pis_cofins = ''
cst_pis_cofins_saída = '01'
cst_pis_cofins_entrada = '50'
if análise_pis_cofins is not None:
código_pis_cofins = análise_pis_cofins.código_justificativa
cst_pis_cofins_saída = análise_pis_cofins.st_pis_cofins
cst_pis_cofins_entrada = análise_pis_cofins.st_pis_cofins_entrada
al_pis = análise_pis_cofins.al_pis
al_cofins = análise_pis_cofins.al_cofins
unidade = análise_pis_cofins.unidade
if ibpt is not None:
al_ibpt_nacional = ibpt.al_nacional
al_ibpt_internacional = ibpt.al_internacional
print('"%s"|"%s"|"%s"|%s|"%s"|"%s"|"%s"|"%s"|"%s"|%s|%s|"%s"|%s|%s' % (ncm, ex, descrição, al_ipi, cst_ipi_entrada, cst_ipi_saída, cst_pis_cofins_entrada, cst_pis_cofins_saída, código_pis_cofins, al_pis, al_cofins, unidade, al_ibpt_nacional, al_ibpt_internacional))
return ncm
if __name__ == '__main__':
cria_análises_pis_cofins()
cria_análises_ibpt()
arq = open('tabelas/tabela_ncm_ipi.txt', 'r', encoding='utf-8')
print('"NCM"|"EX"|"DESCRIÇÃO"|"AL_IPI"|"CST_IPI_ENTRADA"|"CST_IPI_SAÍDA"|"CST_PIS_COFINS_ENTRADA"|"CST_PIS_COFINS_SAÍDA"|"CÓDIGO_JUSTIFICATIVA_ENQUADRAMENTO_PIS_COFINS"|"AL_PIS"|"AL_COFINS"|"UNIDADE"|"AL_IBPT_NACIONAL"|"AL_IBPT_INTERNACIONAL"')
for linha in arq.readlines():
#
# Corrige alguns caracteres nas descrições
#
linha = linha.replace('\n', '').replace('\t', '').replace(' ', '').replace('\r', '')
linha = linha.replace('– ', '')
linha = re.sub('([0-9¾½])"', r'\1″', linha)
linha = re.sub('([0-9])\'', r'\1′', linha)
linha = re.sub('N\'', r'N′', linha)
linha = re.sub('\'', r'’', linha)
linha = re.sub('"([a-zA-Zé])', r'“\1', linha)
linha = re.sub('([a-zA-Zé])"', r'\1”', linha)
linha = re.sub('([0-9])([a-zA-Z])', r'\1 \2', linha)
linha = re.sub('([0-9])ºC', r'\1°C', linha)
linha = re.sub('([0-9])º', r'\1°', linha)
while ' ' in linha:
linha = linha.replace(' ', ' ')
if linha[0].isdigit():
#print(linha)
ncm = processa_linha(linha)
elif 'EX' in linha.upper():
#print(linha)
processa_linha(ncm + linha.replace('Ex0', 'Ex 0'))