# Anexo 1: Devolução

Diretamente no Systax Engine é possivel desfazer uma operação, convertida em operação de "devolução", para isso basta indicar no genérico do cabeçalho a marcação "**finNFe=4**".

Fazendo isso ao requisitar uma chamada será pesquisada uma regra no cockpit ou on demand e a regra será convertida em operação de devolução.

Além disso, é possivel enviar no campo "cData" o XML da nota original, ou ainda este XML convertido em "base64", e desta forma na requisição não será feita a pesquisa de regra somente será convertido os dados do XML, ou convertido em base64, em dados de devolução.

- **Devolução com busca de regra no Cockpit:**

  
<u>**Operações de cenários de entrada (TPNF=0)**</u>

**Retorno CFOP:**

Para os cenários de entrada, temos as seguintes trocas de CFOP nas operações de devolução:

<table border="1" cellspacing="0" id="bkmrk-se-%28cfop-da-regra-en"><tbody><tr><td>se (CFOP da regra encontrada = 5101 ou 5102) e (perfilDest diferente de 1)</td><td>Trocar para</td><td>CFOP 5202</td></tr><tr><td>se (CFOP da regra encontrada = 5101) e (perfilDest contem 1)</td><td>Trocar para</td><td>CFOP 5202</td></tr><tr><td>se (CFOP da regra encontrada = 6101 ou 6102) e (perfilDest diferente de 1)</td><td>Trocar para</td><td>CFOP 6202</td></tr><tr><td>se (CFOP da regra encontrada = 5401 ou 5403 ou 5405) e (perfilDest diferente de 1)</td><td>Trocar para</td><td>CFOP 5411</td></tr><tr><td>se (CFOP da regra encontrada = 6401 ou 6403) e (perfilDest diferente de 1)</td><td>Trocar para</td><td>CFOP 6411</td></tr><tr><td>se (CFOP da regra encontrada = 7101 ou 7102)</td><td>Trocar para</td><td>CFOP 7202</td></tr><tr><td>se (CFOP da regra encontrada = 6409 ou 6152) e (perfilDest diferente de 1)</td><td>Trocar para</td><td>CFOP 6209</td></tr><tr><td>se (CFOP da regra encontrada = 5409 ou 5152) e (perfilDest diferente de 1)</td><td>Trocar para</td><td>CFOP 5209</td></tr><tr><td>se (CFOP\_Entrada na regra = 1556)</td><td>Trocar para</td><td>CFOP 5556</td></tr><tr><td>se (CFOP\_Entrada na regra = 2556)</td><td>Trocar para</td><td>CFOP 6556</td></tr><tr><td>se (CFOP\_Entrada na regra = 1407)</td><td>Trocar para</td><td>CFOP 5413</td></tr><tr><td>se (CFOP\_Entrada na regra = 2407)</td><td>Trocar para</td><td>CFOP 6413</td></tr><tr><td>se (CFOP\_Entrada na regra = 1551)</td><td>Trocar para</td><td>CFOP 5553</td></tr><tr><td>se (CFOP\_Entrada na regra = 2551)</td><td>Trocar para</td><td>CFOP 6553</td></tr><tr><td>se (CFOP\_Entrada na regra = 1406)</td><td>Trocar para</td><td>CFOP 5412</td></tr><tr><td>se (CFOP\_Entrada na regra = 2406)</td><td>Trocar para</td><td>CFOP 6412</td></tr><tr><td>se (CFOP\_Entrada na regra = 1653)</td><td>Trocar para</td><td>CFOP 5662</td></tr><tr><td>se (CFOP\_Entrada na regra = 2653)</td><td>Trocar para</td><td>CFOP 6662</td></tr></tbody></table>

  
**Retorno Bloco IPI:**

Se a operação original houver IPI, na devolução não será retornado o bloco IPI e sim o bloco "impostoDevol", com os campos abaixo para indicar os dados de devolução do tribuo IPI:

<table border="1" cellspacing="0" id="bkmrk-tag-valor-pdevol-100"><thead><tr><th scope="col">**Tag**</th><th scope="col">**Valor**</th></tr></thead><tbody><tr><td>pDevol</td><td>100.00</td></tr><tr><td>vIPIDevol</td><td>valor do vIPI do bloco oficial</td></tr></tbody></table>

A informação do "**vIPIDevol**" também será concatenada na tag "**infAdProd**".

Ainda sobre o IPI existe uma configuração chamada "**federalDevolucao**" que se estiver ativa , o bloco impostoDevol será suprimido e nesse caso o bloco oficial do IPI será retornado com a seguinte troca de CST:

<table border="1" cellspacing="0" id="bkmrk-se-cfop-definido-com"><tbody><tr><td>se CFOP definido começar com '1' ou '2'</td><td>Trocar para</td><td>CST 49</td></tr><tr><td>se CFOP definido começar com '5' ou '6'</td><td>Trocar para</td><td>CST 99</td></tr></tbody></table>

Importante ressaltar que no bloco do totalizador, o valor do IPI será replicado na tag de "**vIPIDevol**" ao invés da tag "**vIPI**".

**Retorno Bloco PIS/COFINS:**

Para o retorno de PIS e COFINS, será mantido os blocos com os devidos cálculos.

Caso a configuração "**federalDevolucao**" esteja ativa no cockpit, haverá a seguinte troca de CST:

<table border="1" cellspacing="0" id="bkmrk-se-cfop-definido-com-1"><tbody><tr><td>se CFOP definido começar com '5' ou '6'</td><td>Trocar para</td><td>CST 49</td></tr></tbody></table>

**OBS**: O retorno das demais informações desse bloco são mantidas.

<u>**Operações de cenários de saída (TPNF=1)**</u>

**Retorno CFOP:**

Para os cenários de saída, temos as seguintes trocas de CFOP nas operações de devolução:

<table border="1" cellspacing="0" id="bkmrk-se-%28cfop-da-regra-en-1"><tbody><tr><td>se (CFOP da regra encontrada = 5101) e (perfilDest diferente de 1 )</td><td>Trocar para</td><td>CFOP 1201</td></tr><tr><td>se (CFOP da regra encontrada = 6101 ou 6107) e (perfilDest diferente de 1 )</td><td>Trocar para</td><td>CFOP 2201</td></tr><tr><td>se (CFOP da regra encontrada = 5102) e (perfilDest diferente de 1 )</td><td>Trocar para</td><td>CFOP 1202</td></tr><tr><td>se (CFOP da regra encontrada = 5117 ou 5910 ou 5120 ou 5118 ou 5119) e (CST diferente de 10, 30 , 70 e 60) e (perfilDest diferente de 1 )</td><td>Trocar para</td><td>CFOP 1202</td></tr><tr><td>se (CFOP da regra encontrada = 6102 ou 6108) e (perfilDest diferente de 1 )</td><td>Trocar para</td><td>CFOP 2202</td></tr><tr><td>se (CFOP da regra encontrada = 6108) e (marcação no generico do item CFOP=2949)</td><td>Trocar para</td><td>CFOP 2949</td></tr><tr><td>se (CFOP da regra encontrada = 6117 ou 6910 ou 6120 ou 6118 ou 6119) e (CST diferente de 10, 30, 70) e (perfilDest diferente de1)</td><td>Trocar para</td><td>CFOP 2202</td></tr><tr><td>se (CFOP da regra encontrada = 5401)</td><td>Trocar para</td><td>CFOP 1410</td></tr><tr><td>se (CFOP da regra encontrada = 6401)</td><td>Trocar para</td><td>CFOP 2410</td></tr><tr><td>se (CFOP da regra encontrada = 5403 ou 5405)</td><td>Trocar para</td><td>CFOP 1411</td></tr><tr><td>se (CFOP da regra encontrada = 5117 ou 5910 ou 5120 ou 5118 ou 5119) e (CST = 10, 30, 70 e 60) e (perfilDest diferente de 1)</td><td>Trocar para</td><td>CFOP 1411</td></tr><tr><td>se (CFOP da regra encontrada = 6401 ou 6403)</td><td>Trocar para</td><td>CFOP 2411</td></tr><tr><td>se (CFOP da regra encontrada = 6117 ou 6910 ou 6120 ou 6118 ou 6119) e (CST = 10, 30 e 70) e (perfilDest diferente de 1)</td><td>Trocar para</td><td>CFOP 2411</td></tr><tr><td>se (CFOP da regra encontrada = 7101 ou 7102)</td><td>Trocar para</td><td>CFOP 3210</td></tr><tr><td>se (CFOP da regra encontrada = 5409 ou 5152)</td><td>Trocar para</td><td>CFOP 1209</td></tr><tr><td>se (CFOP da regra encontrada = 6409 ou 6152)</td><td>Trocar para</td><td>CFOP 2209</td></tr><tr><td>se (CFOP da regra encontrada = 5922)</td><td>Trocar para</td><td>CFOP 1949</td></tr><tr><td>se (CFOP da regra encontrada =6922 ou 6949)</td><td>Trocar para</td><td>CFOP 2949</td></tr><tr><td>se (CFOP da regra encontrada =5949)</td><td>Trocar para</td><td>CFOP 1949</td></tr><tr><td>se (CFOP da regra encontrada =5106)</td><td>Trocar para</td><td>CFOP 1202</td></tr><tr><td>se (CFOP da regra encontrada =6106)</td><td>Trocar para</td><td>CFOP 2202</td></tr><tr><td>se (CFOP da regra encontrada =6109)</td><td>Trocar para</td><td>CFOP 2203</td></tr><tr><td>se (CFOP da regra encontrada =6110)</td><td>Trocar para</td><td>CFOP 2204</td></tr></tbody></table>

  
**Retorno Bloco ICMS/ST:**

Na tag "**infAdProd**" será concatenado as seguintes informações:

**1)** NOTA DE DEVOLUÇÃO

**2)** Base de ICMS Substituicao XX.XX - Onde XX.XX corresponde ao valor do vBCST do Bloco oficial do ICMS

**3)** Valor do ICMS Substituicao XX.XX - Onde XX.XX corresponde ao valor do vICMSST do Bloco oficial do ICMS

Para as operações de transferência (natureza de operação 107 ou 108), quando o CST da operação for 10,30 ou 70, será trocado para 90.

**Retorno Bloco IPI:**

Sempre que no bloco oficial do IPI houver a tag "**vIPI**" preenchida com valor maior que zero, retornará o bloco do impostoDevol, com as seguintes tags:

<table border="1" cellspacing="0" id="bkmrk-tag-valor-pdevol-100-1"><tbody><tr><td>**Tag**</td><td>**Valor**</td></tr><tr><td>pDevol</td><td>100.00</td></tr><tr><td>vIPIDevol</td><td>valor do vIPI do bloco oficial</td></tr></tbody></table>

A informação do "**vIPIDevol**" também será concatenada na tag "**infAdProd**". Porém, se a configuração "**federalDevolucao**" estiver ativa no cockpit, o bloco impostoDevol será suprimido e no bloco oficial do IPI haverá a seguinte troca de CST:

<table border="1" cellspacing="0" id="bkmrk-se-cfop-definido-com-2"><tbody><tr><td>se CFOP definido começar com '1' ou '2'</td><td>Trocar para</td><td>CST 49</td></tr><tr><td>se CFOP definido começar com '5' ou '6'</td><td>Trocar para</td><td>CST 99</td></tr></tbody></table>

**OBS**: No bloco do totalizador, o valor do IPI será replicado na tag de "**vIPIDevol**" ao invés da tag "**vIPI**".

**Retorno Bloco PIS/COFINS:**

Para o retorno de PIS e COFINS, será mantido os blocos com os devidos cálculos.

Caso a configuração "**federalDevolucao**" esteja ativa no cockpit, haverá a seguinte troca de CST:

<table border="1" cellspacing="0" id="bkmrk-se-regra-com-cst-sai"><tbody><tr><td>se regra com CST saida = 01 ou 02 ou 03 ou 05</td><td>Trocar para</td><td>CST 50</td></tr><tr><td>se regra com CST saida = 04 ou 06</td><td>Trocar para</td><td>CST 73</td></tr><tr><td>se regra com CST saida = 09</td><td>Trocar para</td><td>CST 72</td></tr><tr><td>se regra com CST saida = 07</td><td>Trocar para</td><td>CST 71</td></tr><tr><td>se regra com CST saida = 08</td><td>Trocar para</td><td>CST 74</td></tr><tr><td>se regra com CST saida = 49</td><td>Trocar para</td><td>CST 98</td></tr></tbody></table>

Para o caso em específico onde, independente do CST, o CFOP da operação seja 1949 ou 2949, será trocado o CST para 98.

**OBS**: O retorno das demais informações desse bloco são mantidas.

- **Devolução por XML:**

O retorno é exatamente os mesmos valores constantes no XML, o único cálculo que o motor fará é em relação a quantidade devolvida, pois como sabemos, algumas vezes uma devolução pode ocorrer de forma parcial. Temos 3 formas de fazer a devolução parcial, porém em produção temos apenas a indicada a seguir, as demais estão em desenvolvimento.

Para a devolução parcial da quantidade do item, basta preencher um item na chamada, com a indicação da tag “**ID**” com o mesmo valor do “**ID**” do item do XML, e no campo “**qTrib**” da chamada indicar a quantidade a ser devolvido, com isso o motor de cálculo vai dividir os valores do XML pela quantidade do item, e depois multiplicar pela quantidade que será devolvida, por exemplo:

Uma nota fiscal com 10 produtos diferentes, ou seja, contém 10 itens no XML, e um dos produtos, ID 1 da nota, foi comprado uma quantidade de 5 (qTrib=5), mas a sua devolução será de apenas a quantidade de 30, então na chamada deve ser indicado um item com o ID “1” e o qTrib=1, assim o motor de cálculo vai calcular esse item:

**Dados do XML:**

ID = 1  
qTrib = 5  
vBC = 820,00  
vICMS = 164,00

**Dados enviado na chamada:**

ID = 1  
qTrib = 1

**Retorno do motor de cálculo desse item:**

vBC = (vBC do XML/qTrib do XML)\*qTrib da chamada  
vBC = (820/5)\*1  
vBC = 164,00  
vICMS = (vICMS do XML/qTrib do XML)\*qTrib da chamada  
vICMS = (147,60/5)\*1  
vICMS = 29,52

Caso a quantidade a ser devolvida seja a mesma do XML, não é necessário preencher nenhum campo da chamada, exceto data de cálculo que é obrigatório.