From cfeabf41443130c18a133271b48f0c0cd02224c9 Mon Sep 17 00:00:00 2001 From: Junior Tada Date: Wed, 22 Jul 2015 09:34:10 -0300 Subject: [PATCH] =?UTF-8?q?Atualiza=C3=A7=C3=A3o=20de=20impostos=20pis=20e?= =?UTF-8?q?=20cofins?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pynfe/entidades/produto.py | 50 +++++++++++++--- pynfe/processamento/assinatura.py | 15 ++--- pynfe/processamento/comunicacao.py | 35 +++++++++-- pynfe/processamento/serializacao.py | 116 ++++++++++++++++++++++++++++++------ pynfe/utils/flags.py | 67 +++++++++++++++++++-- 5 files changed, 237 insertions(+), 46 deletions(-) diff --git a/pynfe/entidades/produto.py b/pynfe/entidades/produto.py index 78b4652..210dc5e 100644 --- a/pynfe/entidades/produto.py +++ b/pynfe/entidades/produto.py @@ -44,9 +44,12 @@ class Produto(Entidade): # - Valor Unitario Trib. valor_unitario_tributavel = Decimal() - # Impostos - # - ICMS (lista 1 para * / ManyToManyField) - icms = None + # - indica se valor do item entra no valor total da nota fiscal + # 0=Valor do item (vProd) não compõe o valor total da NF-e + # 1=Valor do item (vProd) compõe o valor total da NF-e (vProd) + ind_total = int() + + # # Impostos # - IPI # - Classe de Enquadramento (cigarros e bebidas) @@ -58,6 +61,43 @@ class Produto(Entidade): # - CNPJ do Produtor ipi_cnpj_produtor = str() + # ICMS (Informar apenas um grupo por produto) + """ + ICMS 00 - Tributada integralmente + ICMS 10 - Tributada e com cobrança do ICMS por substituição tributária + ICMS 20 - Tributada e com cobrança do ICMS por substituição tributária + ICMS 30 - Tributação Isenta ou não tributada e com cobrança do ICMS por substituição tributária + ICMS 30 - Isenta ou nao tributada e com cobranca do ICMS por substituicao tributaria + ICMS 40 - Isenta + ICMS 41 - Nao tributada + ICMS 50 - Suspensao + ICMS 51 - Diferimento + ICMS 60 - Cobrado anteriormente por substituicao tributaria + ICMS 70 - Com reducao da base de calculo e cobranca do ICMS por substituicao tributaria + ICMS 90 - Outras + """ + icms_modalidade = str() + icms_origem = int() + icms_csosn = str() + + # # PIS + pis_modalidade = str() + pis_valor_base_calculo = str() + pis_aliquota_percentual = str() + pis_valor = str() + + # # COFINS + cofins_modalidade = str() + cofins_valor_base_calculo = str() + cofins_aliquota_percentual = str() + cofins_valor = str() + + # # - ICMS (lista 1 para * / ManyToManyField) + # icms = None + # def adicionar_icms(self, **kwargs): + # u"""Adiciona uma instancia de ICMS a lista de ICMS do produto""" + # self.icms.append(ProdutoICMS(**kwargs)) + def __init__(self, *args, **kwargs): self.icms = [] @@ -66,10 +106,6 @@ class Produto(Entidade): def __str__(self): return ' '.join([self.codigo, self.descricao]) - def adicionar_icms(self, **kwargs): - u"""Adiciona uma instancia de ICMS a lista de ICMS do produto""" - self.icms.append(ProdutoICMS(**kwargs)) - class ProdutoICMS(Entidade): # - Tipo de Tributacao (seleciona de lista) - ICMS_TIPOS_TRIBUTACAO tipo_tributacao = str() diff --git a/pynfe/processamento/assinatura.py b/pynfe/processamento/assinatura.py index 187ab58..fc5871a 100644 --- a/pynfe/processamento/assinatura.py +++ b/pynfe/processamento/assinatura.py @@ -28,23 +28,20 @@ class AssinaturaA1(Assinatura): def assinar(self, xml, retona_string=True): arquivo_cert = CertificadoA1(self.certificado) - chave, cert = arquivo_cert.separar_arquivo(self.senha, caminho=True) + chave, cert = arquivo_cert.separar_arquivo(self.senha, caminho=False) - #root = etree.parse(xml).getroot() # caminho - root = etree.fromstring(xml) # string - #root = etree.XML(xml) # string - signer = signxml.xmldsig(root, digest_algorithm="sha1") + signer = signxml.xmldsig(xml, digest_algorithm="sha1") signer.sign(method=signxml.methods.enveloped, key=chave, cert=cert, algorithm="rsa-sha1", c14n_algorithm='http://www.w3.org/TR/2001/REC-xml-c14n-20010315', reference_uri='#NFe42140903657739000169550020000000011000000011') # reference_uri nao funciona #verified_data = signer.verify(require_x509=True, ca_pem_file="cert.pem") - ##chave_id = root.find('.//infNFe[@Id]').attrib['Id'] - #root.findall('.//{http://www.w3.org/2000/09/xmldsig#}Reference')[0] \ + ##chave_id = xml.find('.//infNFe[@Id]').attrib['Id'] + #xml.findall('.//{http://www.w3.org/2000/09/xmldsig#}Reference')[0] \ # .attrib['URI'] = '#chaveteste' if retona_string: - return etree.tostring(root, encoding="unicode", pretty_print=True) + return etree.tostring(xml, encoding="unicode", pretty_print=True) else: - return root + return xml diff --git a/pynfe/processamento/comunicacao.py b/pynfe/processamento/comunicacao.py index f4942a2..cf79f90 100644 --- a/pynfe/processamento/comunicacao.py +++ b/pynfe/processamento/comunicacao.py @@ -34,7 +34,7 @@ class ComunicacaoSefaz(Comunicacao): # url do serviço url = self._get_url(modelo=modelo, consulta='AUTORIZACAO') # Monta XML do corpo da requisição - raiz = etree.Element('enviNFe', versao=VERSAO_PADRAO) + raiz = etree.Element('enviNFe', versao=VERSAO_PADRAO, xmlns=NAMESPACE_NFE) #etree.SubElement(raiz, 'versao').text = self._versao etree.SubElement(raiz, 'idLote').text = str(1) # numero autoincremental gerado pelo sistema etree.SubElement(raiz, 'indSinc').text = str(1) # 0 para assincrono, 1 para sincrono @@ -45,6 +45,26 @@ class ComunicacaoSefaz(Comunicacao): #print (xml) return self._post(url, xml) + def consulta_recibo(self, modelo, numero): + """ + Este método oferece a consulta do resultado do processamento de um lote de NF-e. + O aplicativo do Contribuinte deve ser construído de forma a aguardar um tempo mínimo de + 15 segundos entre o envio do Lote de NF-e para processamento e a consulta do resultado + deste processamento, evitando a obtenção desnecessária do status de erro 105 - "Lote em + Processamento". + """ + # url do serviço + url = self._get_url(modelo=modelo, consulta='RECIBO') + # Monta XML do corpo da requisição + raiz = etree.Element('consReciNFe', versao=VERSAO_PADRAO, xmlns=NAMESPACE_NFE) + etree.SubElement(raiz, 'versao').text = self._versao + etree.SubElement(raiz, 'tpAmb').text = str(self._ambiente) + etree.SubElement(raiz, 'nRec').text = numero + # Monta XML para envio da requisição + xml = self._construir_xml_status_pr(cabecalho=self._cabecalho_soap(metodo='NfeRetAutorizacao'), metodo='NfeRetAutorizacao', dados=raiz) + #print (xml) + return self._post(url, xml) + def cancelar(self, modelo, xml): """ Envia um evento de cancelamento de nota fiscal """ # timezone Brasília -03:00 @@ -78,7 +98,7 @@ class ComunicacaoSefaz(Comunicacao): url = self._get_url(modelo=modelo, consulta='STATUS') # Monta XML do corpo da requisição - raiz = etree.Element('consStatServ', versao='3.10', xmlns=NAMESPACE_NFE) + raiz = etree.Element('consStatServ', versao=VERSAO_PADRAO, xmlns=NAMESPACE_NFE) etree.SubElement(raiz, 'tpAmb').text = str(self._ambiente) etree.SubElement(raiz, 'cUF').text = CODIGOS_ESTADOS[self.uf.upper()] etree.SubElement(raiz, 'xServ').text = 'STATUS' @@ -201,17 +221,20 @@ class ComunicacaoSefaz(Comunicacao): def _post(self, url, xml): certificadoA1 = CertificadoA1(self.certificado) chave, cert = certificadoA1.separar_arquivo(self.certificado_senha, caminho=True) - cert = (cert, chave) + chave_cert = (cert, chave) # Abre a conexão HTTPS try: # Passa o lxml.etree para string - xml = etree.tostring(xml, encoding='unicode', pretty_print=False) + xml = etree.tostring(xml, encoding='unicode', pretty_print=False).replace('ds:','') # Faz o request com o servidor - result = requests.post(url, xml, headers=self._post_header(), cert=cert, verify=False) + print (xml) + result = requests.post(url, xml, headers=self._post_header(), cert=chave_cert, verify=False) if result == 200: result.encoding='utf-8' return result else: return result except requests.exceptions.ConnectionError as e: - raise e \ No newline at end of file + raise e + finally: + certificadoA1.excluir() \ No newline at end of file diff --git a/pynfe/processamento/serializacao.py b/pynfe/processamento/serializacao.py index 13849ce..3c4dcfe 100644 --- a/pynfe/processamento/serializacao.py +++ b/pynfe/processamento/serializacao.py @@ -204,34 +204,114 @@ class SerializacaoXML(Serializacao): etree.SubElement(prod, 'uTrib').text = produto_servico.unidade_tributavel etree.SubElement(prod, 'qTrib').text = str(produto_servico.quantidade_tributavel) etree.SubElement(prod, 'vUnTrib').text = str(produto_servico.valor_unitario_tributavel) + """ Indica se valor do Item (vProd) entra no valor total da NF-e (vProd) + 0=Valor do item (vProd) não compõe o valor total da NF-e + 1=Valor do item (vProd) compõe o valor total da NF-e (vProd) (v2.0) + """ + etree.SubElement(prod, 'indTot').text = str(produto_servico.ind_total) # Imposto imposto = etree.SubElement(raiz, 'imposto') + ### ICMS icms = etree.SubElement(imposto, 'ICMS') - icms_item = etree.SubElement(icms, 'ICMS'+produto_servico.icms_situacao_tributaria) - etree.SubElement(icms_item, 'orig').text = str(produto_servico.icms_origem) - etree.SubElement(icms_item, 'CST').text = produto_servico.icms_situacao_tributaria - etree.SubElement(icms_item, 'modBC').text = str(produto_servico.icms_modalidade_determinacao_bc) - etree.SubElement(icms_item, 'vBC').text = str(produto_servico.icms_valor_base_calculo) - etree.SubElement(icms_item, 'pICMS').text = str(produto_servico.icms_aliquota) - etree.SubElement(icms_item, 'vICMS').text = str(produto_servico.icms_valor) + icms_csosn = ('102', '103', '300', '400') + if produto_servico.icms_modalidade in icms_csosn: + icms_item = etree.SubElement(icms, 'ICMS'+produto_servico.icms_modalidade) + etree.SubElement(icms_item, 'orig').text = str(produto_servico.icms_origem) + etree.SubElement(icms_item, 'CSOSN').text = produto_servico.icms_csosn + elif produto_servico.icms_modalidade == '101': + icms_item = etree.SubElement(icms, 'ICMS'+produto_servico.icms_modalidade) + etree.SubElement(icms_item, 'orig').text = str(produto_servico.icms_origem) + etree.SubElement(icms_item, 'CSOSN').text = produto_servico.icms_csosn + etree.SubElement(icms_item, 'pCredSN').text = '' # Alíquota aplicável de cálculo do crédito (Simples Nacional). + etree.SubElement(icms_item, 'vCredICMSSN').text = '' # Valor crédito do ICMS que pode ser aproveitado nos termos do art. 23 da LC 123 (Simples Nacional) + elif produto_servico.icms_modalidade == 'ST': + icms_item = etree.SubElement(icms, 'ICMS'+produto_servico.icms_modalidade) + etree.SubElement(icms_item, 'orig').text = str(produto_servico.icms_origem) + etree.SubElement(icms_item, 'CST').text = '41' # Nao tributado + etree.SubElement(icms_item, 'vBCSTRet').text = '' # Informar o valor da BC do ICMS ST retido na UF remetente + etree.SubElement(icms_item, 'vICMSSTRet').text = '' # Informar o valor do ICMS ST retido na UF remetente + etree.SubElement(icms_item, 'vBCSTDest').text = '' # Informar o valor da BC do ICMS ST da UF destino + etree.SubElement(icms_item, 'vICMSSTDest').text = '' # Informar o valor do ICMS ST da UF destino + else: + # FIXME + ### OUTROS TIPOS DE ICMS + etree.SubElement(icms_item, 'modBC').text = str(produto_servico.icms_modalidade_determinacao_bc) + etree.SubElement(icms_item, 'vBC').text = str(produto_servico.icms_valor_base_calculo) + etree.SubElement(icms_item, 'pICMS').text = str(produto_servico.icms_aliquota) + etree.SubElement(icms_item, 'vICMS').text = str(produto_servico.icms_valor) # apenas nfe + pisnt = ('04','05','06','07','08','09') if modelo == 55: + ## PIS pis = etree.SubElement(imposto, 'PIS') - pis_item = etree.SubElement(pis, 'PISAliq') - etree.SubElement(pis_item, 'CST').text = str(produto_servico.pis_situacao_tributaria) - etree.SubElement(pis_item, 'vBC').text = str(produto_servico.pis_valor_base_calculo) - etree.SubElement(pis_item, 'pPIS').text = str(produto_servico.pis_aliquota_percentual) - etree.SubElement(pis_item, 'vPIS').text = str(produto_servico.pis_valor) - + if produto_servico.pis_modalidade in pisnt: + pis_item = etree.SubElement(pis, 'PISNT') + etree.SubElement(pis_item, 'CST').text = produto_servico.pis_modalidade + elif produto_servico.pis_modalidade == '01' or produto_servico.pis_modalidade == '02': + pis_item = etree.SubElement(pis, 'PISAliq') + etree.SubElement(pis_item, 'CST').text = produto_servico.pis_modalidade + etree.SubElement(pis_item, 'vBC').text = produto_servico.pis_valor_base_calculo + etree.SubElement(pis_item, 'pPIS').text = produto_servico.pis_aliquota_percentual + etree.SubElement(pis_item, 'vPIS').text = produto_servico.pis_valor + elif produto_servico.pis_modalidade == '03': + pis_item = etree.SubElement(pis, 'PISQtde') + etree.SubElement(pis_item, 'CST').text = produto_servico.pis_modalidade + etree.SubElement(pis_item, 'qBCProd').text = produto_servico.quantidade_comercial + etree.SubElement(pis_item, 'vAliqProd').text = produto_servico.pis_aliquota_percentual + etree.SubElement(pis_item, 'vPIS').text = produto_servico.pis_valor_base_calculo + else: + pis_item = etree.SubElement(pis, 'PISOutr') + etree.SubElement(pis_item, 'CST').text = produto_servico.pis_modalidade + etree.SubElement(pis_item, 'vBC').text = produto_servico.pis_valor_base_calculo + etree.SubElement(pis_item, 'pPIS').text = produto_servico.pis_aliquota_percentual + etree.SubElement(pis_item, 'qBCProd').text = produto_servico.quantidade_comercial + etree.SubElement(pis_item, 'vAliqProd').text = produto_servico.pis_aliquota_percentual + etree.SubElement(pis_item, 'vPIS').text = produto_servico.pis_valor_base_calculo + + ## PISST + # pis_item = etree.SubElement(pis, 'PISST') + # etree.SubElement(pis_item, 'vBC').text = produto_servico.pis_valor_base_calculo + # etree.SubElement(pis_item, 'pPIS').text = produto_servico.pis_aliquota_percentual + # etree.SubElement(pis_item, 'qBCProd').text = produto_servico.quantidade_comercial + # etree.SubElement(pis_item, 'vAliqProd').text = produto_servico.pis_aliquota_percentual + # etree.SubElement(pis_item, 'vPIS').text = produto_servico.pis_valor_base_calculo + + cofinsnt = ('04','05','06','07','08','09') + ## COFINS cofins = etree.SubElement(imposto, 'COFINS') - cofins_item = etree.SubElement(cofins, 'COFINSAliq') - etree.SubElement(cofins_item, 'CST').text = str(produto_servico.cofins_situacao_tributaria) - etree.SubElement(cofins_item, 'vBC').text = str(produto_servico.cofins_valor_base_calculo) - etree.SubElement(cofins_item, 'pCOFINS').text = str(produto_servico.cofins_aliquota_percentual) - etree.SubElement(cofins_item, 'vCOFINS').text = str(produto_servico.cofins_valor) + if produto_servico.cofins_modalidade in cofinsnt: + cofins_item = etree.SubElement(cofins, 'COFINSNT') + etree.SubElement(cofins_item, 'CST').text = produto_servico.cofins_modalidade + elif produto_servico.cofins_modalidade == '01' or produto_servico.cofins_modalidade == '02': + cofins_item = etree.SubElement(cofins, 'COFINSAliq') + etree.SubElement(cofins_item, 'CST').text = produto_servico.cofins_modalidade + etree.SubElement(cofins_item, 'vBC').text = produto_servico.cofins_valor_base_calculo + etree.SubElement(cofins_item, 'pCOFINS').text = produto_servico.cofins_aliquota_percentual + etree.SubElement(cofins_item, 'vCOFINS').text = produto_servico.cofins_valor + elif produto_servico.cofins_modalidade == '03': + cofins_item = etree.SubElement(cofins, 'COFINSQtde') + etree.SubElement(cofins_item, 'CST').text = produto_servico.cofins_modalidade + etree.SubElement(cofins_item, 'qBCProd').text = produto_servico.quantidade_comercial + etree.SubElement(cofins_item, 'vAliqProd').text = produto_servico.cofins_aliquota_percentual + etree.SubElement(cofins_item, 'vCOFINS').text = produto_servico.cofins_valor + else: + cofins_item = etree.SubElement(cofins, 'COFINSOutr') + etree.SubElement(cofins_item, 'CST').text = produto_servico.cofins_modalidade + etree.SubElement(cofins_item, 'vBC').text = produto_servico.cofins_valor_base_calculo + etree.SubElement(cofins_item, 'pCOFINS').text = produto_servico.cofins_aliquota_percentual + etree.SubElement(cofins_item, 'vAliqProd').text = produto_servico.cofins_aliquota_percentual + etree.SubElement(cofins_item, 'vCOFINS').text = produto_servico.cofins_valor + + ## COFINSST + # cofins_item = etree.SubElement(cofins, 'COFINSOutr') + # etree.SubElement(cofins_item, 'vBC').text = produto_servico.cofins_valor_base_calculo + # etree.SubElement(cofins_item, 'pCOFINS').text = produto_servico.cofins_aliquota_percentual + # etree.SubElement(cofins_item, 'qBCProd').text = produto_servico.quantidade_comercial + # etree.SubElement(cofins_item, 'vAliqProd').text = produto_servico.cofins_aliquota_percentual + # etree.SubElement(cofins_item, 'vCOFINS').text = produto_servico.cofins_valor if retorna_string: return etree.tostring(raiz, encoding="unicode", pretty_print=True) diff --git a/pynfe/utils/flags.py b/pynfe/utils/flags.py index 6e75243..0a2a65c 100644 --- a/pynfe/utils/flags.py +++ b/pynfe/utils/flags.py @@ -26,6 +26,13 @@ ICMS_TIPOS_TRIBUTACAO = ( ('60', 'ICMS 60 - Cobrado anteriormente por substituicao tributaria'), ('70', 'ICMS 70 - Com reducao da base de calculo e cobranca do ICMS por substituicao tributaria'), ('90', 'ICMS 90 - Outras'), + ('101', 'ICMS 101 - Tributação ICMS pelo Simples Nacional, CSOSN=101'), + ('102', 'ICMS 102 - Tributação ICMS pelo Simples Nacional, CSOSN=102, 103, 300 ou 400'), + ('201', 'ICMS 201 - Tributação ICMS pelo Simples Nacional, CSOSN=201'), + ('202', 'ICMS 202 - Tributação ICMS pelo Simples Nacional, CSOSN=202 ou 203'), + ('500', 'ICMS 500 - Tributação ICMS pelo Simples Nacional, CSOSN=500'), + ('900', 'ICMS 900 - Tributação ICMS pelo Simples Nacional, CSOSN=900'), + ('ST', 'ICMS ST - Grupo de informação do ICMS ST devido para a UF de destino, nas operações interestaduais de produtos que tiveram retenção antecipada de ICMS por ST na UF do remetente. Repasse via Substituto Tributário.') ) ICMS_ORIGENS = ( @@ -128,28 +135,74 @@ IPI_TIPOS_CALCULO = ( ) PIS_TIPOS_TRIBUTACAO = ( - ('01', 'PIS 01 - Operacao Tributavel - Base de Calculo = Valor da Operacao Aliquota...'), # FIXME - ('02', 'PIS 02 - Operacao Tributavel - Base de Calculo = Valor da Operacao (Aliquota...'), # FIXME - ('03', 'PIS 03 - Operacao Tributavel - Base de Calculo = Quantidade Vendida x Aliquota...'), # FIXME + ('01', 'PIS 01 - Operação Tributável - Base de cálculo = valor da operação alíquota normal (cumulativo/não cumulativo)'), + ('02', 'PIS 02 - Operação Tributável - Base de cálculo = valor da operação (alíquota diferenciada)'), + ('03', 'PIS 03 - Operacao Tributavel - Base de cálculo = quantidade vendida x alíquota por unidade de produto)'), ('04', 'PIS 04 - Operacao Tributavel - Tributacao Monofasica - (Aliquota Zero)'), ('06', 'PIS 06 - Operacao Tributavel - Aliquota Zero'), ('07', 'PIS 07 - Operacao Isenta da Contribuicao'), ('08', 'PIS 08 - Operacao sem Indidencia da Contribuicao'), ('09', 'PIS 09 - Operacao com Suspensao da Contribuicao'), + ('49', 'PIS 49 - Outras Operações de Saída'), + ('50', 'PIS 50 - Operação com Direito a Crédito - Vinculada Exclusivamente a Receita Tributada no Mercado Interno'), + ('51', 'PIS 51 - Operação com Direito a Crédito - Vinculada Exclusivamente a Receita Não Tributada no Mercado Interno'), + ('52', 'PIS 52 - Operação com Direito a Crédito – Vinculada Exclusivamente a Receita de Exportação'), + ('53', 'PIS 53 - Operação com Direito a Crédito - Vinculada a Receitas Tributadas e Não-Tributadas no Mercado Interno'), + ('54', 'PIS 54 - Operação com Direito a Crédito - Vinculada a Receitas Tributadas no Mercado Interno e de Exportação'), + ('55', 'PIS 55 - Operação com Direito a Crédito - Vinculada a Receitas Não Tributadas no Mercado Interno e de Exportação'), + ('56', 'PIS 56 - Operação com Direito a Crédito - Vinculada a Receitas Tributadas e Não Tributadas no Mercado Interno, e de Exportação'), + ('60', 'PIS 60 - Crédito Presumido - Operação de Aquisição Vinculada Exclusivamente a Receita Tributada no Mercado Interno'), + ('61', 'PIS 61 - Crédito Presumido - Operação de Aquisição Vinculada Exclusivamente a Receita Não Tributada no Mercado Interno'), + ('62', 'PIS 62 - Crédito Presumido - Operação de Aquisição Vinculada Exclusivamente a Receita de Exportação'), + ('63', 'PIS 63 - Crédito Presumido - Operação de Aquisição Vinculada a Receitas Tributadas e Não-Tributadas no Mercado Interno'), + ('64', 'PIS 64 - Crédito Presumido - Operação de Aquisição Vinculada a Receitas Tributadas no Mercado Interno e de Exportação'), + ('65', 'PIS 65 - Crédito Presumido - Operação de Aquisição Vinculada a Receitas Não Tributadas no Mercado Interno e de Exportação'), + ('66', 'PIS 66 - Crédito Presumido - Operação de Aquisição Vinculada a Receitas Tributadas e Não-Tributadas no Mercado Interno, e de Exportação'), + ('67', 'PIS 67 - Crédito Presumido - Outras Operações'), + ('70', 'PIS 70 - Operação de Aquisição sem Direito a Crédito'), + ('71', 'PIS 71 - Operação de Aquisição com Isenção'), + ('72', 'PIS 72 - Operação de Aquisição com Suspensão'), + ('73', 'PIS 73 - Operação de Aquisição a Alíquota Zero'), + ('74', 'PIS 74 - Operação de Aquisição; sem Incidência da Contribuição'), + ('75', 'PIS 75 - Operação de Aquisição por Substituição Tributária'), + ('98', 'PIS 98 - Outras Operações de Entrada'), ('99', 'PIS 99 - Outras operacoes'), ) PIS_TIPOS_CALCULO = IPI_TIPOS_CALCULO COFINS_TIPOS_TRIBUTACAO = ( - ('01', 'COFINS 01 - Operacao Tributavel - Base de Calculo = Valor da Operacao Aliquota...'), # FIXME - ('02', 'COFINS 02 - Operacao Tributavel - Base de Calculo = Valor da Operacao (Aliquota...'), # FIXME - ('03', 'COFINS 03 - Operacao Tributavel - Base de Calculo = Quantidade Vendida x Aliquota...'), # FIXME + ('01', 'COFINS 01 - Operação Tributável - Base de cálculo = valor da operação alíquota normal (cumulativo/não cumulativo)'), + ('02', 'COFINS 02 - Operação Tributável - Base de cálculo = valor da operação (alíquota diferenciada)'), + ('03', 'COFINS 03 - Operacao Tributavel - Base de cálculo = quantidade vendida x alíquota por unidade de produto)'), ('04', 'COFINS 04 - Operacao Tributavel - Tributacao Monofasica - (Aliquota Zero)'), ('06', 'COFINS 06 - Operacao Tributavel - Aliquota Zero'), ('07', 'COFINS 07 - Operacao Isenta da Contribuicao'), ('08', 'COFINS 08 - Operacao sem Indidencia da Contribuicao'), ('09', 'COFINS 09 - Operacao com Suspensao da Contribuicao'), + ('49', 'COFINS 49 - Outras Operações de Saída'), + ('50', 'COFINS 50 - Operação com Direito a Crédito - Vinculada Exclusivamente a Receita Tributada no Mercado Interno'), + ('51', 'COFINS 51 - Operação com Direito a Crédito - Vinculada Exclusivamente a Receita Não Tributada no Mercado Interno'), + ('52', 'COFINS 52 - Operação com Direito a Crédito – Vinculada Exclusivamente a Receita de Exportação'), + ('53', 'COFINS 53 - Operação com Direito a Crédito - Vinculada a Receitas Tributadas e Não-Tributadas no Mercado Interno'), + ('54', 'COFINS 54 - Operação com Direito a Crédito - Vinculada a Receitas Tributadas no Mercado Interno e de Exportação'), + ('55', 'COFINS 55 - Operação com Direito a Crédito - Vinculada a Receitas Não Tributadas no Mercado Interno e de Exportação'), + ('56', 'COFINS 56 - Operação com Direito a Crédito - Vinculada a Receitas Tributadas e Não Tributadas no Mercado Interno, e de Exportação'), + ('60', 'COFINS 60 - Crédito Presumido - Operação de Aquisição Vinculada Exclusivamente a Receita Tributada no Mercado Interno'), + ('61', 'COFINS 61 - Crédito Presumido - Operação de Aquisição Vinculada Exclusivamente a Receita Não Tributada no Mercado Interno'), + ('62', 'COFINS 62 - Crédito Presumido - Operação de Aquisição Vinculada Exclusivamente a Receita de Exportação'), + ('63', 'COFINS 63 - Crédito Presumido - Operação de Aquisição Vinculada a Receitas Tributadas e Não-Tributadas no Mercado Interno'), + ('64', 'COFINS 64 - Crédito Presumido - Operação de Aquisição Vinculada a Receitas Tributadas no Mercado Interno e de Exportação'), + ('65', 'COFINS 65 - Crédito Presumido - Operação de Aquisição Vinculada a Receitas Não Tributadas no Mercado Interno e de Exportação'), + ('66', 'COFINS 66 - Crédito Presumido - Operação de Aquisição Vinculada a Receitas Tributadas e Não-Tributadas no Mercado Interno, e de Exportação'), + ('67', 'COFINS 67 - Crédito Presumido - Outras Operações'), + ('70', 'COFINS 70 - Operação de Aquisição sem Direito a Crédito'), + ('71', 'COFINS 71 - Operação de Aquisição com Isenção'), + ('72', 'COFINS 72 - Operação de Aquisição com Suspensão'), + ('73', 'COFINS 73 - Operação de Aquisição a Alíquota Zero'), + ('74', 'COFINS 74 - Operação de Aquisição; sem Incidência da Contribuição'), + ('75', 'COFINS 75 - Operação de Aquisição por Substituição Tributária'), + ('98', 'COFINS 98 - Outras Operações de Entrada'), ('99', 'COFINS 99 - Outras operacoes'), ) @@ -158,6 +211,8 @@ COFINS_TIPOS_CALCULO = IPI_TIPOS_CALCULO MODALIDADES_FRETE = ( (0, '0 - Por conta do emitente'), (1, '1 - Por conta do destinatario'), + (2, '2 - Por conta de terceiros'), + (9, '9 - Sem frete'), ) ORIGENS_PROCESSO = (