assoft-portugal / SAF-T-AO

Official XSD from the Government of Angola for use in SAF-T AO
https://www.agt.minfin.gov.ao
MIT License
56 stars 63 forks source link

TaxTable - Tabela de impostos #60

Closed Marcosinffoco closed 4 years ago

Marcosinffoco commented 4 years ago

TaxTable - Tabela de impostos

Normalmente declaramos aqui os impostos que existem no SAFT AO do movimento do cliente.

Um cliente que esta com isenção ao IVA - Regime transitório, declaramos da seguinte forma, em MasterFiles:

<TaxTable>
    <TaxTableEntry>
       <TaxType>IVA</TaxType>
       <TaxCode>ISE</TaxCode>
       <Description>IMPOSTO SOBRE O VALOR ACRESCENTADO</Description>
       <TaxExpirationDate>2019-07-02</TaxExpirationDate>
       <TaxPercentage>0.00000</TaxPercentage>
   </TaxTableEntry>
</TaxTable>

E temos a seguinte situação, quando encontramos um cliente que esta no regime geral

<TaxTable>
    <TaxTableEntry>
       <TaxType>IVA</TaxType>
       <TaxCode>NOR</TaxCode>
       <Description>IMPOSTO SOBRE O VALOR ACRESCENTADO</Description>
       <TaxExpirationDate>2019-07-02</TaxExpirationDate>
       <TaxPercentage>14.00000</TaxPercentage>
   </TaxTableEntry>
</TaxTable>

E agora a seguinte situação, quando este mesmo cliente que esta em Cabinda

Sabendo que Cabinda esta numa região de regime especial, tendo dois tipos de percentuais do IVA.

Tipos de IVA:

  1. 14% - para prestação de serviço
  2. 02% - para mercadorias vendidas na região de Cabinda
  3. ISE - Tipos de prestações de serviços isentos, com o código de isenção M34 - Isento nos termos da alínea e) do artigo 15.º do CIVA

Deveríamos ter declarado da seguinte maneira, pelo menos na lógica:

<TaxTable>
    <TaxTableEntry>
       <TaxType>IVA</TaxType>
       <TaxCode>NOR</TaxCode>
       <Description>IMPOSTO SOBRE O VALOR ACRESCENTADO</Description>
       <TaxExpirationDate>2019-07-02</TaxExpirationDate>
       <TaxPercentage>14.00000</TaxPercentage>
   </TaxTableEntry>
</TaxTable>
<TaxTable>
    <TaxTableEntry>
       <TaxType>IVA</TaxType>
       <TaxCode>NOR</TaxCode>
       <Description>IMPOSTO SOBRE O VALOR ACRESCENTADO</Description>
       <TaxExpirationDate>2019-07-02</TaxExpirationDate>
       <TaxPercentage>2.00000</TaxPercentage>
   </TaxTableEntry>
</TaxTable>
<TaxTable>
    <TaxTableEntry>
       <TaxType>IVA</TaxType>
       <TaxCode>ISE</TaxCode>
       <Description>IMPOSTO SOBRE O VALOR ACRESCENTADO</Description>
       <TaxExpirationDate>2019-07-02</TaxExpirationDate>
       <TaxPercentage>0.00000</TaxPercentage>
   </TaxTableEntry>
</TaxTable>

Questão e dúvidas:

Se tenho , supostamente, dois à três variações, pois é a realidade, o validador reclama que tem mais de um tipo de imposto declarado. Sabendo que tenho percentuais diferentes.

Para ultrapassar, tenho que omitir o segundo e o terceiro, deixando declarado somente o de 14% ou qualquer uma delas.

A minha analise na codificação esta correcta?

Se sim, há um defeito no validador?

Ou tenho que proceder eternamente assim?

Acho que são questões que muitos aqui já passaram e se questionaram.

cryptolopes commented 4 years ago

Parece ser um problema da plataforma da AGT. Uma pergunta, por que é que não declara o elemento TaxCountryRegion?

Marcosinffoco commented 4 years ago

Não declarei, pois no edital do documento PDF DP 318 SAFT IVA, informa que TaxCountryRegion é para uso futuro e não tem definição de que tipo de informação tenho de colocar lá. Linha (2.5.1.2) da tabela 2.5 - Tabela de Impostos (TaxTable).

Bem, se já temos informação para isto, claro que declaro. tax

cryptolopes commented 4 years ago

@Marcosinffoco É verdade, tem razão!

Mas então é uma excelente oportunidade para adicionar Cabinda AO-CAB no schema, contribuindo para a resolução do problema ao nível da estrutura.

O que vos parece?

Proposta

  <!-- Pais ou regiao de Imposto -->
  <xs:element name="TaxCountryRegion">
    <xs:simpleType>
      <xs:restriction base="xs:string">
        <xs:pattern value="AD|AE|AF|AG|AI|AL|AM|AO|AO-CAB|AQ|AR|AS|AT|AU|AW|AX|AZ|BA|BB|BD|BE|BF|BG|BH|BI|BJ|BL|BM|BN|BO|BQ|BR|BS|BT|BV|BW|BY|BZ|CA|CC|CD|CF|CG|CH|CI|CK|CL|CM|CN|CO|CR|CU|CV|CW|CX|CY|CZ|DE|DJ|DK|DM|DO|DZ|EC|EE|EG|EH|ER|ES|ET|FI|FJ|FK|FM|FO|FR|GA|GB|GD|GE|GF|GG|GH|GI|GL|GM|GN|GP|GQ|GR|GS|GT|GU|GW|GY|HK|HM|HN|HR|HT|HU|ID|IE|IL|IM|IN|IO|IQ|IR|IS|IT|JE|JM|JO|JP|KE|KG|KH|KI|KM|KN|KP|KR|KW|KY|KZ|LA|LB|LC|LI|LK|LR|LS|LT|LU|LV|LY|MA|MC|MD|ME|MF|MG|MH|MK|ML|MM|MN|MO|MP|MQ|MR|MS|MT|MU|MV|MW|MX|MY|MZ|NA|NC|NE|NF|NG|NI|NL|NO|NP|NR|NU|NZ|OM|PA|PE|PF|PG|PH|PK|PL|PM|PN|PR|PS|PT|PW|PY|QA|RE|RO|RS|RU|RW|SA|SB|SC|SD|SE|SG|SH|SI|SJ|SK|SL|SM|SN|SO|SR|SS|ST|SV|SX|SY|SZ|TC|TD|TF|TG|TH|TJ|TK|TL|TM|TN|TO|TR|TT|TV|TW|TZ|UA|UG|UM|US|UY|UZ|VA|VC|VE|VG|VI|VN|VU|WF|WS|XK|YE|YT|ZA|ZM|ZW|PT-AC|PT-MA" />
        <xs:minLength value="2" />
        <xs:maxLength value="6" />
      </xs:restriction>
    </xs:simpleType>
  </xs:element>

ISO 3166-2:AO

Code Province name
AO-BGO Bengo
AO-BGU Benguela
AO-BIE Bié
AO-CAB Cabinda
AO-CCU Cuando-Cubango
AO-CNO Kwanza Norte
AO-CUS Kwanza Sul
AO-CNN Cunene
AO-HUA Huambo
AO-HUI Huíla
AO-LUA Luanda
AO-LNO Lunda Norte
AO-LSU Lunda Sul
AO-MAL Malange
AO-MOX Moxico
AO-NAM Namibe
AO-UIG Uíge
AO-ZAI Zaire

Fonte: ISO 3166-2:AO Wikipedia

Marcosinffoco commented 4 years ago

Lopes. Eu até impostei esta tabela de países para dentro do meu banco de dados. até faz parte agora das informações dos clientes e fornecedores. até coloquei também no cabeçalho da factura.

Vou usar então esta informação.

Até o momento no meu código deixei esta linha só de comentário, para quando a AGT definisse esta linha, já esta pronto na posição hierárquica da estrutura XML.

EloneSampaio commented 4 years ago

Estava com o mesmo problema, e não sabia como proceder @Marcosinffoco vou seguir o que tu fez( omitir o segundo e o terceiro) por enquanto, até termos uma solução.

Marcosinffoco commented 4 years ago

EloneSampaio, Garanto que se colocarmos mesmo certas dúvidas e respostas a estas dúvidas, vamos conseguir ter um SAFT AO bem melhorado. Tento compartilhar o pouco que sei. Bati com a cabeça sozinho por muito tempo. Lendo e Relendo o meu código e analisava as falhas e entrava num beco sem saída. Sai do grupo do Whatapp a um tempo atrás, quando houve uma invasão de pessoas que diziam ser técnicos da AGT e estavam bagunçando o grupo com besteiras. Sei que lembram disto. Ao menos aqui neste site tem gente séria trabalhando.
cryptolopes, muito obrigado em dar atenção aqui a este programador de fundo de quintal..rs Bem, vamos a frente. depois posto mais dúvidas, para manter o grupo mais activo..rs

obrigado mesmo a este grupo de trabalho.

Marcosinffoco commented 4 years ago

@cryptolopes

Aproveitei então a dica e o que fiz no sistema:

Criei uma tabela dentro do banco de dados usando a tabela ISO (ISO 3166-2:AO) que esta na página na internet. Aproveitei também e criei um campo de relacionamento com o campo de identificação da província nas minhas tabelas de cliente, fornecedores e na empresa que irá facturar (na ficha dos dados da empresa que factura), para padronizar de uma vez, junto com o campo que indica o país que segue a mesma orientação Tabela ISO.

No final, esta informação é incorporada no XML. Deu trabalho para restruturar, DEU, mas ao menos é uma informação simples que padroniza algumas caracteristicas de clientes e fornecedores.

Modelo Novo da TaxTable Com o incremento do campo TaxCountryRegion, que antes estava definido para uso futuro. O campo sempre existiu na minha estrutura, mas só deixei ele a espera de uma definição. Quando o campo não tem informação, o meu sistema simplesmente omite o campo e não considerava como obrigatório.

TaxCountryRegion>AO-LUA</TaxCountryRegion

<TaxTable>
<TaxTableEntry>
   <TaxType>IVA</TaxType>
      <TaxCountryRegion>AO-LUA</TaxCountryRegion>
      <TaxCode>ISE</TaxCode>
      <Description>IMPOSTO SOBRE O VALOR ACRESCENTADO</Description>
      <TaxExpirationDate>2019-07-02</TaxExpirationDate>
      <TaxPercentage>0.00000</TaxPercentage>
   </TaxTableEntry>
</TaxTable>

Muito obrigado @cryptolopes e fica a dica para muitos de como podem usar esta informação.

@EloneSampaio , olhe o que pode fazer com isto.

Bom Fim de semana.

Marcosinffoco commented 4 years ago

PROBLEMA NA VALIDAÇÃO DO TaxCountryRegion Pessoal,

ATENÇÃO

O validador do portal não considera o TaxCountryRegion com a informação da Província.

Ele considera é o código do pais, pelo menos no validador do Portal da AGT esta dando esta mensagem a baixo, quando informei a região que a empresa esta (AO-LUA):

Preenchimento errado, o campo AuditFile.MasterFiles.TaxTable.1TaxTableEntry.TaxCountryRegion só deve ser preenchido com (AO)

Pelos vistos, não aceitam a região do pais e sim o pais. Não tem muita lógica isto, pois o IVA é de Angola e não de outro pais.

Acho que se este campo é para ser bem usado, seria desta maneira com informação da província.

Algo para refletir.

cryptolopes commented 4 years ago

TaxCountryRegion>AO-LUA</TaxCountryRegion

<TaxTable>
<TaxTableEntry>
   <TaxType>IVA</TaxType>
      <TaxCountryRegion>AO-LUA</TaxCountryRegion>
      <TaxCode>ISE</TaxCode>
      <Description>IMPOSTO SOBRE O VALOR ACRESCENTADO</Description>
      <TaxExpirationDate>2019-07-02</TaxExpirationDate>
      <TaxPercentage>0.00000</TaxPercentage>
   </TaxTableEntry>
</TaxTable>

@Marcosinffoco

Vamos com calma. Primeiro a proposta não é o de adicionar todas as províncias no pattern. Não existe essa necessidade. Basta adicionar a província de Cabinda AO-CAB, porque é a única que há data beneficia de um regime excecional.

Há um outro elemento o para qual desejo chamar à atenção, que o TaxExpirationDate. Este elemento só se usa quando se pretende inutilizar um subelemento do TaxTableEntry.

cryptolopes commented 4 years ago

O validador do portal não considera o TaxCountryRegion com a informação da Província.

Claro que não. Ainda não.

cryptolopes commented 4 years ago

Proposta

ac46e581b030b8a82e45dfd65e11619d55940492

Marcosinffoco commented 4 years ago

@cryptolopes @EloneSampaio

Descobri o problema de duplicidade no TAXTABLE

A tabela TAXTABLE, já consegui entender sobre a duplicidade, bastava acrescentar informações extras em Description, pois eu só informava “IMPOSTO SOBRE O VALOR ACRESCENTADO”, agora passei a incrementar com o percentual de 14%, 2% quando houver taxa a 2% e quando tiver isenção. Então fica no caso de 14%: “IMPOSTO SOBRE O VALOR ACRESCENTADO 14"

Quando tiver taxa a 2%, caso de Cabinda. “IMPOSTO SOBRE O VALOR ACRESCENTADO 2"

Caso isento: “IMPOSTO SOBRE O VALOR ACRESCENTADO ISE"

Passou no validador.

EloneSampaio commented 4 years ago

Muito útil, obrigado por compartilhar.

Em ter, 19 de mai de 2020 11:13, Marcosinffoco notifications@github.com escreveu:

@cryptolopes https://github.com/cryptolopes @EloneSampaio https://github.com/EloneSampaio

Descobri o problema de duplicidade no TAXTABLE

A tabela TAXTABLE, já consegui entender sobre a duplicidade, bastava acrescentar informações extras em Description, pois eu só informava “IMPOSTO SOBRE O VALOR ACRESCENTADO”, agora passei a incrementar com o percentual de 14%, 2% quando houver taxa a 2% e quando tiver isenção. Então fica no caso de 14%: “IMPOSTO SOBRE O VALOR ACRESCENTADO 14"

Quando tiver taxa a 2%, caso de Cabinda. “IMPOSTO SOBRE O VALOR ACRESCENTADO 2"

Caso isento: “IMPOSTO SOBRE O VALOR ACRESCENTADO ISE"

Passou no validador.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/assoft-portugal/SAF-T-AO/issues/60#issuecomment-630846585, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABY5VGQVDERIONONIIYGNCTRSKHY3ANCNFSM4LYSX2OQ .

EloneSampaio commented 4 years ago

Saudações, pessoal eu implementei a geração do XML do SAF-T-AO no meu sistema e agora preciso saber como faço pra ele ser homologado pela agt. Existe algum canal de comunicação pra agt pra isso? Quais procedimentos eu preciso seguir pra poder colocar a funcionalidade em produção.

Em ter, 19 de mai de 2020 15:09, Elone Sampaio elonesampaio@gmail.com escreveu:

Muito útil, obrigado por compartilhar.

Em ter, 19 de mai de 2020 11:13, Marcosinffoco notifications@github.com escreveu:

@cryptolopes https://github.com/cryptolopes @EloneSampaio https://github.com/EloneSampaio

Descobri o problema de duplicidade no TAXTABLE

A tabela TAXTABLE, já consegui entender sobre a duplicidade, bastava acrescentar informações extras em Description, pois eu só informava “IMPOSTO SOBRE O VALOR ACRESCENTADO”, agora passei a incrementar com o percentual de 14%, 2% quando houver taxa a 2% e quando tiver isenção. Então fica no caso de 14%: “IMPOSTO SOBRE O VALOR ACRESCENTADO 14"

Quando tiver taxa a 2%, caso de Cabinda. “IMPOSTO SOBRE O VALOR ACRESCENTADO 2"

Caso isento: “IMPOSTO SOBRE O VALOR ACRESCENTADO ISE"

Passou no validador.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/assoft-portugal/SAF-T-AO/issues/60#issuecomment-630846585, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABY5VGQVDERIONONIIYGNCTRSKHY3ANCNFSM4LYSX2OQ .

AfonsoMenata commented 3 years ago

Boa noite. Segundo o novo esquema XSD, se temos dois impostos (IVA) com taxas diferentes, deve ser assim: Tipo: IVA-Taxa normal; Percentagem: 14%

Tipo: IVA-Taxa reduzida; Percentagem: 5%.

Na verdade, não sabia da taxa de 2%.

cryptolopes commented 3 years ago

@AfonsoMenata <​TaxCode​>RED</​TaxCode​>