Clipper On Line • Ver Tópico - Cálculo de impostos

Cálculo de impostos

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

 

Cálculo de impostos

Mensagempor JoséQuintas » 02 Out 2018 20:04

Faz tempo que não atualizo essa minha rotina.
Importação nunca usei, mas coloquei também.
Mistura DBF e MySQL, não sei se vai ser problema.... rs

METHOD ItemCalculaImpostos() CLASS Pedido

   LOCAL mipIcmBas, mipIcmAli, mipIcmRed, mipIcmVal
   LOCAL mipFcpAli, mipFcpVal
   LOCAL mipIpiBas, mipIpiAli, mipIpiVal
   LOCAL mipIssBas, mipIssAli, mipIssVal
   LOCAL mipPisBas, mipPisAli, mipPisVal
   LOCAL mipCofBas, mipCofAli, mipCofVal
   LOCAL mipSubBas, mipSubIva, mipSubAli, mipSubRed, mipSubVal
   LOCAL mipValNot, mipIIBas, mipIIVal
   LOCAL mipIcsBas, mipIcsVal, mipIcsAli, mipIpiIcm
   LOCAL mipValPro, mipValFre, mipValSeg, mipValOut, nCont, mipLeis, mTmpLei
   LOCAL mipValDes, mipIIAli, mipDifAlii, mipDifAliu, mipDifAlif, mipDifVali, mipDifValf, mipDifBas, mipDifCal
   LOCAL cnJPIBPT := ADOClass():New( AppcnMySqlLocal() )

   IF Empty( jppedi->pdPedido )
      RETURN NIL
   ENDIF
   Encontra( jppedi->pdCliFor, "jpcadas", "numlan" )
   Encontra( jpcadas->cdUfEnt, "jpuf", "numlan" )
   Encontra( jpitped->ipItem, "jpitem", "item" )
   IF jpitped->ipTribut != "999999"
      RecLock()
      REPLACE jpitped->ipValPro WITH Round( jpitped->ipPreNot * jpitped->ipQtde, 2 ), ;
              jpitped->ipInfAlt WITH LogInfo()
      IF Encontra( jppedi->pdTransa + jpuf->ufTriUf + jpcadas->cdTriCad + jpitem->ieTriPro, "jpimpos", "regra" )
         mipLeis := ""
         FOR nCont = 1 To Len( Trim( jpimpos->imLeis ) ) Step 7
            mTmpLei := Substr( jpimpos->imLeis,nCont, 6 )
            IF Val( mTmpLei ) != 0
               mipLeis := mipLeis + mTmpLei + ","
            ENDIF
         NEXT
         REPLACE ;
            jpitped->ipCfOp    WITH jpimpos->imCfOp, ;
            jpitped->ipTribut  WITH jpimpos->imNumLan, ;
            jpitped->ipIIAli   WITH jpimpos->imIIAli, ;
            jpitped->ipIssAli  WITH jpimpos->imIssAli, ;
            jpitped->ipIpiCst  WITH jpimpos->imIpiCst, ;
            jpitped->ipIpiAli  WITH jpimpos->imIpiAli, ;
            jpitped->ipIpiIcm  WITH jpimpos->imIpiIcm, ;
            jpitped->ipIpiEnq  WITH jpimpos->imIpiEnq, ;
            jpitped->ipIcmCst  WITH jpimpos->imIcmCst, ;
            jpitped->ipIcmAli  WITH jpimpos->imIcmAli, ;
            jpitped->ipIcmRed  WITH jpimpos->imIcmRed, ;
            jpitped->ipFcpAli  WITH jpimpos->imFcpAli, ;
            jpitped->ipSubAli  WITH jpimpos->imSubAli, ;
            jpitped->ipSubIva  WITH jpimpos->imSubIva, ;
            jpitped->ipSubRed  WITH jpimpos->imSubRed, ;
            jpitped->ipDifCal  WITH jpimpos->imDifCal, ;
            jpitped->ipDifAlii WITH jpimpos->imDifAlii, ;
            jpitped->ipDifAliu WITH jpimpos->imDifAliu, ;
            jpitped->ipDifAlif WITH jpimpos->imDifAlif, ;
            jpitped->ipPisCst  WITH jpimpos->imPisCst, ;
            jpitped->ipPisAli  WITH jpimpos->imPisAli, ;
            jpitped->ipPisEnq  WITH jpimpos->imPisEnq, ;
            jpitped->ipCofCst  WITH jpimpos->imCofCst, ;
            jpitped->ipCofAli  WITH jpimpos->imCofAli, ;
            jpitped->ipCofEnq  WITH jpimpos->imCofEnq, ;
            jpitped->ipIcsAli  WITH jpimpos->imIcsAli, ;
            jpitped->ipLeis    WITH mipLeis, ;
            jpitped->ipInfAlt  WITH LogInfo()
      ELSEIF jpitped->ipTribut != "999999"
         REPLACE ;
            jpitped->ipCfOp    WITH "X", ;
            jpitped->ipTribut  WITH "", ;
            jpitped->ipIIAli   WITH 0, ;
            jpitped->ipIssAli  WITH 0, ;
            jpitped->ipIpiCst  WITH "X", ;
            jpitped->ipIpiAli  WITH 0, ;
            jpitped->ipIpiIcm  WITH "S", ;
            jpitped->ipIcmCst  WITH "X", ;
            jpitped->ipIcmAli  WITH 0, ;
            jpitped->ipIcmRed  WITH 0, ;
            jpitped->ipFcpAli  WITH 0, ;
            jpitped->ipSubAli  WITH 0, ;
            jpitped->ipSubIva  WITH 0, ;
            jpitped->ipSubRed  WITH 0, ;
            jpitped->ipDifCal  WITH "N", ;
            jpitped->ipDifAlii WITH 0, ;
            jpitped->ipDifAliu WITH 0, ;
            jpitped->ipDifAlif WITH 0, ;
            jpitped->ipPisCst  WITH "X", ;
            jpitped->ipPisAli  WITH 0, ;
            jpitped->ipCofCst  WITH "x", ;
            jpitped->ipCofAli  WITH 0, ;
            jpitped->ipIcsAli  WITH 0, ;
            jpitped->ipImpAli  WITH 0, ;
            jpitped->ipLeis    WITH "", ;
            jpitped->ipInfAlt  WITH LogInfo()
      ENDIF
      RecUnlock()
   ENDIF

   IF AppcnMySqlLocal() == NIL
      IF Encontra( jpitem->ieNcm, "jpibpt", "numlan" )
         RecLock()
         IF Substr( jpitped->ipIcmCst, 1, 1 ) $ "0,3,4,5"
            REPLACE jpitped->ipImpAli WITH jpibpt->ibNacAli
         ELSE
            REPLACE jpitped->ipImpAli WITH jpibpt->ibImpAli
         ENDIF
         RecUnlock()
      ENDIF
   ELSE
      WITH OBJECT cnJPIBPT
         :cSql := "SELECT * FROM JPIBPT WHERE IBCODIGO=" + StringSql( jpitem->ieNcm )
         :Execute()
         RecLock()
         IF :Eof()
            REPLACE jpitped->ipImpAli WITH 0
         ELSE
            IF Substr( jpitped->ipIcmCst, 1, 1 ) $ "0,3,4,5"
               REPLACE jpitped->ipImpAli WITH :NumberSql( "IBNACALI" )
            ELSE
               REPLACE jpitped->ipImpAli WITH :NumberSql( "IBIMPALI" )
            ENDIF
         ENDIF
         RecUnlock()
         :CloseRecordset()
      END WITH
   ENDIF
   mipValPro  := jpitped->ipValPro
   mipValFre  := jpitped->ipValFre
   mipValSeg  := jpitped->ipValSeg
   mipValOut  := jpitped->ipValOut
   mipValDes  := jpitped->ipValDes
   mipIIAli   := jpitped->ipIIAli
   mipIssAli  := jpitped->ipIssAli
   mipIpiAli  := jpitped->ipIpiAli
   mipIpiIcm  := jpitped->ipIpiIcm
   mipIcmBas  := jpitped->ipIcmBas
   mipIcmRed  := jpitped->ipIcmRed
   mipSubIva  := jpitped->ipSubIva
   mipIcmAli  := jpitped->ipIcmAli
   mipFcpAli  := jpitped->ipFcpAli
   mipSubBas  := jpitped->ipSubBas
   mipSubRed  := jpitped->ipSubRed
   mipSubAli  := jpitped->ipSubAli
   mipIcsAli  := jpitped->ipIcsAli
   mipPisAli  := jpitped->ipPisAli
   mipCofAli  := jpitped->ipCofAli
   mipDifCal  := jpitped->ipDifCal
   mipDifAlii := jpitped->ipDifAlii
   mipDifALiu := jpitped->ipDifAliu
   mipDifAlif := jpitped->ipDifAlif

   IF mipIIAli > 0
      mipIIBas := mipValPro
      mipIIVal := Int(mipIIBas * mipIIAli ) / 100
   ELSE
      mipIIBas := 0
      mipIIVal := 0
   ENDIF

   IF mipIssAli > 0
      mipIssBas := mipValPro  + mipIIVal
      mipIssVal := Int( mipIssBas * mipIssAli ) / 100
   ELSE
      mipIssBas := 0
      mipIssAli := 0
      mipIssVal := 0
   ENDIF

   IF mipIpiAli > 0
      mipIpiBas := mipValPro + mipIIVal
      mipIpiVal := Int( mipIpiBas * mipIpiAli) / 100
   ELSE
      mipIpiBas := 0
      mipIpiAli := 0
      mipIpiVal := 0
   ENDIF

   IF mipIcmAli > 0 .AND. Substr( jpitped->ipIcmCst, 2, 3 ) $ "00 ,10 ,20 ,70 ,90 ,201,202,203,900"
      mipIcmBas := mipValPro + mipValFre + mipValSeg + mipValOut + mipIIVal
      IF mipIpiIcm != "N"
         mipIcmBas += mipIpiVal
      ENDIF
      IF mipIcmRed > 0 .AND. Substr( jpitped->ipIcmCst, 2, 2 ) $ "20 ,70 ,90 ,201,202,203.900"
         mipIcmBas := mipIcmBas - ( Int( mipIcmBas * mipIcmRed ) / 100 )
      ELSE
         mipIcmRed := 0
      ENDIF
      mipIcmVal := Int( mipIcmBas * mipIcmAli ) / 100
   ELSE
      mipIcmBas := 0
      mipIcmAli := 0
      mipIcmVal := 0
   ENDIF
   IF mipFcpAli > 0
      mipFcpVal := Int( mipIcmBas * mipFcpAli ) / 100
   ELSE
      mipFcpVal := 0
   ENDIF
   IF mipSubAli > 0 .AND. Substr( jpitped->ipIcmCst, 2, 2 ) $ "10 ,30 ,70 ,90 ,900"
      mipSubBas := mipValPro + mipValFre + mipValSeg + mipValOut + mipIIVal
      IF mipIpiIcm != "N"
         mipSubBas += mipIpiVal
      ENDIF
      mipSubBas := mipSubBas + ( Int( mipSubBas * mipSubIva ) / 100)
      IF mipSubRed > 0 .AND. Substr( jpitped->ipIcmCst, 2, 3 ) $ "20 ,70 ,90 ,900"
         mipSubBas := mipSubBas - ( Int( mipSubBas * mipSubRed ) / 100)
      ELSE
         mipSubRed := 0
      ENDIF
      mipSubVal := Int( mipSubBas * mipSubAli ) / 100
      mipSubVal := mipSubVal - mipIcmVal
      IF mipSubVal < 0
         mipSubVal := 0
     ENDIF
   ELSE
      mipSubBas := 0
      mipSubIva := 0
      mipSubAli := 0
      mipSubRed := 0
      mipSubVal := 0
   ENDIF
   IF mipDifCal == "S"
      mipDifBas := mipValPro + mipValFre + mipValSeg + mipValOut + mipIIVal
      IF mipIpiIcm != "N"
         mipDifBas += mipIpiVal
      ENDIF
      mipDifVali := Max( Int( ( mipDifBas * mipDifAliu ) - ( mipDifBas * mipDifAlii ) ) / 100, 0 )
      mipDifValf := Int( mipDifBas * mipDifAlif ) / 100
   ELSE
      mipDifBas  := 0
      mipDifVali := 0
      mipDifValf := 0
   ENDIF

   // Aqui sem ST
   mipValNot := mipValPro + mipIIVal + mipIpiVal + mipValFre + mipValSeg + mipValOut
   IF mipPisAli > 0
      mipPisBas := mipValNot
      mipPisVal := Int( mipPisBas * mipPisAli ) / 100
   ELSE
      mipPisBas := 0
      mipPisVal := 0
   ENDIF

   IF mipCofAli > 0
      mipCofBas := mipValNot
      mipCofVal := Int( mipCofBas * mipCofAli ) / 100
   ELSE
      mipCofBas := 0
      mipCofVal := 0
   ENDIF
   IF mipIcsAli > 0
      mipIcsBas := mipValNot
      mipIcsVal := Int(mipIcsBas * mipIcsAli ) / 100
   ELSE
      mipIcsBas := 0
      mipIcsVal := 0
   ENDIF
   // Soma pra nota ST e desconto
   mipValNot := mipValNot - mipValDes + mipSubVal

   IF Substr( jpitped->ipCfOp, 1, 1 ) = "3" .AND. Substr( jpitped->ipIcmCst, 1, 1 ) == "1" // Importacao direta

      // Formula Pis/Cofins retirada de http://www4.receita.fazenda.gov.br/simulador/Simulacao-tag.jsp
      // Demais retiradas de http://www.comexblog.com.br/importacao/calculando-uma-nf-de-entrada-na-importacao

      mipPisBas := mipValPro * ( ( 1 + ( mipIcmAli / 100 * ( mipIIAli / 100 + ( mipIpiAli / 100 * ( 1 + mipIIAli / 100 ) ) ) ) ) / ( ( 1 - mipPisAli / 100 - mipCofAli / 100 ) * ( 1 - mipIcmAli / 100 ) ) )
      mipPisVal := mipPisBas * mipPisAli / 100
      mipCofBas := mipValPro * ( ( 1 + ( mipIcmAli / 100 * ( mipIIAli / 100 + ( mipIpiAli / 100 * ( 1 + mipIIAli / 100 ) ) ) ) ) / ( ( 1 - mipPisAli / 100 - mipCofAli / 100 ) * ( 1 - mipIcmAli / 100 ) ) )
      mipCofVal := mipCofBas * mipCofAli / 100
      mipIcmBas := mipValPro + mipValFre + mipValSeg + mipValOut + mipIIVal // + mipPisVal + mipCofVal // Pis/Cof calculado sobre ICMS
      IF mipIpiIcm != "N"
         mipIcmBas += mipIpiVal
      ENDIF
      mipIcmBas := Int( mipIcmBas / ( 100 - mipIcmAli ) * 10000 ) / 100
      mipIcmVal := Int( mipIcmBas * mipIcmAli ) / 100
      mipValNot := mipPisBas // equivalente a soma de tudo
   ENDIF
   IF len( Trim( jpitped->ipIcmCst ) ) > 3 // Simples Nacional
      mipIcmAli := 0
      mipIcmVal := 0
   ENDIF
   //IF jpitped->ipCfOp == "1.604 "
   //   mipValNot := 0
   //ENDIF
   RecLock()
   REPLACE ;
      jpitped->ipIIBas   WITH mipIIBas, ;
      jpitped->ipIIVal   WITH mipIIVal, ;
      jpitped->ipIssBas  WITH mipIssBas, ;
      jpitped->ipIssAli  WITH mipIssAli, ;
      jpitped->ipIssVal  WITH mipIssVal, ;
      jpitped->ipIpiBas  WITH mipIpiBas, ;
      jpitped->ipIpiVal  WITH mipIpiVal, ;
      jpitped->ipIcmBas  WITH mipIcmBas, ;
      jpitped->ipIcmAli  WITH mipIcmAli, ;
      jpitped->ipIcmRed  WITH mipIcmRed, ;
      jpitped->ipIcmVal  WITH mipIcmVal, ;
      jpitped->ipFcpAli  WITH mipFcpAli, ;
      jpitped->ipFcpVal  WITH mipFcpVal, ;
      jpitped->ipSubBas  WITH mipSubBas, ;
      jpitped->ipSubIva  WITH mipSubIVA, ;
      jpitped->ipSubAli  WITH mipSubAli, ;
      jpitped->ipSubRed  WITH mipSubRed, ;
      jpitped->ipSubVal  WITH mipSubVal, ;
      jpitped->ipPisBas  WITH mipPisBas, ;
      jpitped->ipPisAli  WITH mipPisAli, ;
      jpitped->ipPisVal  WITH mipPisVal, ;
      jpitped->ipCofBas  WITH mipCofBas, ;
      jpitped->ipCofAli  WITH mipCofAli, ;
      jpitped->ipCofVal  WITH mipCofVal, ;
      jpitped->ipValNot  WITH mipValNot, ;
      jpitped->ipIcsBas  WITH mipIcsBas, ;
      jpitped->ipIcsVal  WITH mipIcsVal, ;
      jpitped->ipDifCal  WITH mipDifCal, ;
      jpitped->ipDifBas  WITH mipDifBas, ;
      jpitped->ipDifAlii WITH mipDifAlii, ;
      jpitped->ipDifAliu WITH mipDifAliu, ;
      jpitped->ipDifAlif WITH mipDifALif, ;
      jpitped->ipDIfVali WITH mipDifVAli, ;
      jpitped->ipDifValf WITH mipDifValf, ;
      jpitped->ipInfAlt  WITH LogInfo()
   Encontra( jppedi->pdTransa, "jptransa", "numlan" )
   IF "CONSUMIDOR" $ jptransa->trReacao
      REPLACE jpitped->ipImpVal WITH mipValNot * jpitped->ipImpAli / 100
   ELSE
      REPLACE jpitped->ipImpVal WITH 0
   ENDIF
   RecUnlock()

   RETURN .T.


Num resumo:

Procuro a regra de tributação pra pegar as alíquotas, CFOP, redução, etc.
Procuro na tabela IPBT, que pode ser DBF ou MySQL, pra procurar os percentuais de tributação.
Pego os valores de itens de pedido, faço os cálculos, e gravo nos ítens de pedido.

Só que:
- Antes desses cálculos faço rateios de frete, descontos, etc.
- Depois desses cálculos tem os totais para pedido/NF

Chamando o conjunto de rotinas, a cada alteração do usuário já tem todos os cálculos prontos, na hora, durante a digitação do pedido.
Na emissão de nota, nenhum cálculo, exceto a parte financeira, conforme a forma de pagamento.

Não é perfeita, nem completa, mas tem atendido minhas necessidades.

Acho que os campos são auto-explicativos: IcmBas, IpiBas, PisBas, IcmVal, IcmAli, SubRed, SubIva, DifVal
As tres primeiras letras são do imposto: ICMs, IPI, PIS, COFins, SUBstituição Tributária, DIFal, etc.
As três últimas letras o que é: BASe, ALIquota, VALor, REDução, IVA

Correção: as duas primeiras letras podem ser referente ao arquivo IP=arquivo itens de pedido, IM=arquivo impostos
Depois disso as três do imposto, e as três do que é.
E se for memória, temporária equivalente ao arquivo, um "m" antes do nome.
mipIcmBas -> M=memória, IP=Itens de Pedido, ICM=Icms, BAS=base -> base de cálculo do ICMS ref. item de pedido, lido ou pra ser gravado lá.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18009
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Cálculo de impostos

Mensagempor fladimir » 02 Out 2018 23:26

Tb faço por ai.
Não tenho problemas.

Tanto q entrou a NFe 4.0 e praticamente não mudei nada a nivel de calculos.
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar de usuário

fladimir
Colaborador

Colaborador
 
Mensagens: 2434
Data de registro: 15 Nov 2006 19:21
Curtiu: 28 vezes
Mens.Curtidas: 157 vezes

Cálculo de impostos

Mensagempor Itamar M. Lins Jr. » 03 Out 2018 16:11

Ola!
Mas isso ai, sai como em um relatório ?
No caso eu tenho a impressão dos livros.
É um calculo de pedidos ? que depois vira um NFe de entrada ou saida ?

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

Cálculo de impostos

Mensagempor JoséQuintas » 31 Out 2018 09:27

Itamar M. Lins Jr. escreveu:É um calculo de pedidos ? que depois vira um NFe de entrada ou saida ?


Meu pedido é a base de tudo.
Ao gerar a nota, ela fica vinculada ao pedido, mas na nota tem as informações dos totais.
Nota vinculada ao pedido, financeiro vinculado ao pedido, estoque vinculado ao pedido, além das exceções lógico.

Para ter os detalhes da nota, só pesquisar o pedido.

Para um confronto geral, do tipo validar todo aplicativo, é pegar os pedidos e comparar com notas, ou comparar com financeiro, ou comparar com XMLs. Tenho isso no aplicativo, apesar de quase nem usar. É uma segurança a mais.

Daí para livro fiscal, contabilidade, SPED, etc., mais simples.

E como o pedido tem todos os cálculos, não sobra quase nada pra calcular na emissão de nota.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18009
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Cálculo de impostos

Mensagempor JAIR RANGEL » 10 Nov 2018 09:54

Olá, pessoal!

Também estou montando desse jeito. Ou seja, calculando os impostos no Pedido.
Vou estudar a rotina do Quintas. Já ví que vai me ajudar muito...

Obrigado por este post!!!

:-Y
MINIGUI + HARBOUR + BRMAKE + CDX
CLIPPER 5.2E + VISUALLIB 2 + BLINKER
Avatar de usuário

JAIR RANGEL
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 177
Data de registro: 19 Jul 2005 16:01
Cidade/Estado: RIO DE JANEIRO
Curtiu: 1 vez
Mens.Curtidas: 2 vezes

Cálculo de impostos

Mensagempor Poka » 10 Nov 2018 15:36

Olá

Indo um pouco mais além, se o sistema tiver orçamentos o cálculo já sair no orçamento, no orçamento o sistema já verificar o tipo de cliente, estado, o ncm do produto, se tem subs trib. , se é revenda, prá uso próprio e por aí vai. Se não a nota final vai ser diferente do orçamento, aí o cliente chia.

Fazer uma nota fiscal com todos os impostos realmente não é uma das tarefas mais fáceis. O correto é o sistema ter mesmo uma ficha de impostos com todos
os impostos para que o usuário preencha junto com o seu contador e o sistema pegar automático essa ficha. Definir os impostos no cadastro de produtos como eu vejo por aí, coitado do usuário, imagina uns cem mil itens.

Poka
Avatar de usuário

Poka
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 509
Data de registro: 25 Out 2004 21:26
Cidade/Estado: Leme/SP
Curtiu: 0 vez
Mens.Curtidas: 23 vezes

Cálculo de impostos

Mensagempor JAIR RANGEL » 30 Nov 2018 11:53

Olá, Pessoal!

O Poka falou sobre montar uma ficha para cadastro dos impostos...
Os impostos para cada produto seriam localizados pelo NCM?

Poderia esplanar melhor esse método de montar os cálculos?

Estou montando com base no que o Quintas exibiu acima.
Estou apanhando, mas progredindo devagar...

Agora, essa de montar uma tabela de impostos e não ter que informar em cada produto, me parece ótimo. Mas como montar isso?

Eu apanho, também, nos cálculos. Quando e onde calcular o que?
Nossa! Que coisa é essa que inventaram?

Mas, não tem outro jeito. Tenho que implementar....

Se puderem falar mais sobre isso, eu ficaria muito grato!

Abraços
MINIGUI + HARBOUR + BRMAKE + CDX
CLIPPER 5.2E + VISUALLIB 2 + BLINKER
Avatar de usuário

JAIR RANGEL
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 177
Data de registro: 19 Jul 2005 16:01
Cidade/Estado: RIO DE JANEIRO
Curtiu: 1 vez
Mens.Curtidas: 2 vezes

Cálculo de impostos

Mensagempor rochinha » 30 Nov 2018 19:45

Amiguinhos,

Jair Rangel
Você encontra várias tabelas aqui na seção downloads(Tabelas em Geral e Tabelas e Referências de Legislação)

Para o cálculo de ICMS você necessitará da tabela de siglas(TABELAS: Aliquotas ICMS de origem e destino completa onde você encontra o percentual para o estado destino.

Pará o cálculo do IPI eu recorro a tabela de NCM que contém o percentual. Muitos recorrem a tabela IBPT mas eu a vejo como uma tabela com valores aproximados. A tabela correta para se obter o IPI é a TIPI.

Minha rotina de cálculos está exatamente na geração da nota. Vou gerar a nota e então disparo os cálculos, mesmo porque tudo vai depender do CFOP usado neste momento. A CST/CSOSN também definem a fórmula de cáculo. E por fim, o tipo do cliente também interfere na fórmula.

Portanto deixar os impostos já cadastrados no produto não dará certo.

Mais ou menos assim:

CFOP define se o item sendo vendido tem ICMS e/ou IPI
CST/CSOSN define se o ICMS e/ou IPI serão cáculados no percentual cheio, com redução, deferimento ou isenção.

O IPI possui tabela própria de CSTs que definem sua forma de cálculo.
O PIS possui tabela própria de CSTs que definem sua forma de cálculo.
O COFINS possui tabela própria de CSTs que definem sua forma de cálculo.

Fonte: Tabela CST

Bom trabalho.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para fivolution@hotmail.com. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar de usuário

rochinha
Membro Master

Membro Master
 
Mensagens: 4538
Data de registro: 18 Ago 2003 20:43
Cidade/Estado: São Paulo - Brasil
Curtiu: 800 vezes
Mens.Curtidas: 242 vezes




Retornar para Contribuições, Dicas e Tutoriais

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 21 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro