Página 1 de 1
Definindo a nova tributaçào no aplicativo
Enviado: 14 Jul 2025 13:26
por JoséQuintas
Mas e aí ?
Vocês entenderam o mesmo que eu ?
- Tabela de Classificação Fiscal com alíquotas padrão e indicadores de redução/isenção/etc.
- acrescentar classificação fiscal nas transações/operações, aonde houver definição por transação/operação, ou em branco (como se fosse vinculado a CFOP)
- acrescentar nos produtos a classificação fiscal específica dos produtos ou em branco pra 000.001 padrão, ou obrigar 000.001
- tabela de alíquotas por UF + classificação fiscal
- Tabela de alíquotas por Município + classificação fiscal
No caso de uma transferência entre filiais, remessa pra conserto, brindes, etc. usa-se a classificação fiscal cadastrada na operação e fim desta parte
Em outros casos, ela vai estar vazia, e procuramos no produto e fim da parte de classificação fiscal, o que também fornece o CST.
A partir da classificação fiscal, procuramos se tem tabela federal, estadual e municipal pra pegar alíquotas
A que não encontrar usa as alíquotas 000.001 padrão federal, uf, ou município
E as que não encontrar usa as padrão pra 000.001.
E tá pronto pra calcular o imposto.
E tem também as alíquotas pra órgão governamental federal, estadual, DF e municipal, que não sei se podem ser por UF/município
Tem essa também, pra acrescentar no cadastro
Pior que também tem as variações de simples nacional, presumido, etc. que também podem ser federal, estadual e municipal.
Aqui seria no cadastro da empresa, que seria em segundo nível, depois das que são por operaçào, e acima da por produto.
classificação
1) por transação - porque tem brinde, transferência, armazém, remessa etc. que podem ser não tributados e tem CST especial
2) caso contrário, por empresa - porque simples nacional, presumido, etc. tem CST especial e alíquota especial
3) caso contrário, por produto
4) caso contrário, a padrão 000.001
E a partir daí a alíquota, considerando órgão governamental, caso não exista CFOP/Transação próprios pra isso.
Se não encontrar nada específico, usa alíquota padrão
Definindo a nova tributaçào no aplicativo
Enviado: 14 Jul 2025 18:41
por JoséQuintas
A IA achou uma classificação tributária sensacional, talvez uma que será muito usada
É o 410.999 não tributado, e usou conserto como exemplo.
Quanto a ela gerar a tabela completa, é mentira.
Diz que não tem capacidade pra isso.
Talvez uma versão paga faça, ou talvez pulou fora da responsabilidade kkkkkk
Mas pode criar um fonte pra importar automático da página.
Definindo a nova tributaçào no aplicativo
Enviado: 15 Jul 2025 22:22
por JoséQuintas
Começando a testar minha idéia na prática pra ver o que dá.
Criando tudo, e deixando alteração só na minha senha.
Definindo a nova tributaçào no aplicativo
Enviado: 15 Jul 2025 22:44
por JoséQuintas
É uma desgraça procurar na lista de classificações fiscais.
É muito código pra pesquisar.
Sabia da cesta básica, mesmo assim demorou pra encontrar.
"Talvez" um filtro ajude, por exemplo, o que se refere a operação, produto ou serviço.
Vai ser difícil pro contador, pro programador, e pro usuário.
Definindo a nova tributaçào no aplicativo
Enviado: 16 Jul 2025 10:54
por JoséQuintas
Fui cadastrar as classificações fiscais, e reparei nessa
coluna de alíquota....
pode ser a padrão, ou a unificada nacional, ou fixa, ou sem alíquota
Também tem caso, conforme a classificação fiscal, que reduz só CBS ou só IBS.
Ou seja.... essa tabela de classificação fiscal é uma configuração do que se segue depois.
Ainda não vi a explicação sobre o que é padrão ou unificada ou fixa.
Definindo a nova tributaçào no aplicativo
Enviado: 18 Jul 2025 22:29
por JoséQuintas
Até já passou na validação de homologação com tudo zerado.
Estou só aproveitando pra fazer alguns testes de configuração, pra ver de onde dá pra pegar as informações.
Ainda vou testar as modificações.
Código: Selecionar todos
CALL ze_xmlnfeprodutoicms( nIdItPed, cThisXml, cInfAdProduto );
CALL ze_xmlnfeprodutoipi( nIdItPed, cThisXml ) ;
CALL ze_xmlnfeprodutoii( nIdItPed, cThisXml ) ;
CALL ze_xmlnfeprodutopis( nIdItPed, cThisXml );
CALL ze_xmlnfeprodutocofins( nIdItPed, cThisXml );
CALL ze_XmlNfeProdutoIS( nIdItPed, cThisXml ) ;
CALL ze_XmlNfeProdutoIBSCBS( nIdItPed, cThisXml ) ;
Código: Selecionar todos
CREATE PROCEDURE ze_XmlNfeProdutoIBSCBS( nIdItPed INT(11), INOUT cFullXml TEXT )
CBSIBS:BEGIN
DECLARE cCBSCST VARCHAR(3) CHARSET latin1 ;
DECLARE cClassTrib VARCHAR(6) CHARSET latin1 ;
DECLARE nCBSBas, nCBSAli, nCBSRed, nCBSVal,
nIUFAli, nIUFRed, nIUFVal, nIMunAli,
nIMunRed, nIMunVal, nValPro DECIMAL(14,2) DEFAULT 0;
DECLARE cThisXml TEXT CHARSET latin1;
DECLARE cTipoAmbiente VARCHAR(1) ;
DECLARE nQtde DECIMAL(14,4) ;
SET cThisXml := '' ;
SET cTipoAmbiente := ( SELECT SEFAZNFEAMBIENTE FROM JPTABSEFAZ );
IF cTipoAmbiente <> '2' THEN
LEAVE CBSIBS ;
END IF;
SELECT
CASE
WHEN LENGTH( TRCLAFIS ) <> 0 THEN TRCLAFIS
WHEN LENGTH( TRIPROCLAFIS ) <> 0 THEN TRIPROCLAFIS
ELSE '000001'
END, IPVALPRO, IPQTDE
FROM JPITPED
LEFT JOIN JPITEM ON IDPRODUTO = IPPRODUTO
LEFT JOIN JPPEDIDO ON IDPEDIDO = IPPEDIDO
LEFT JOIN JPCADASTRO ON PDCADASTRO = IDCADASTRO
LEFT JOIN JPTRANSACAO ON PDTRANSACAO = IDTRANSACAO
LEFT JOIN JPTABTRIPRO ON JPITEM.IETRIPRO = IDTRIPRO
WHERE IDITPED = nIdItPed INTO cClassTrib, nValPro, nQtde ;
SET cCBSCst := LEFT( cClassTrib, 3 );
SET cThisXml := CONCAT( cThisXml,
'<IBSCBS>',
ze_XmlTag( 'CST',cCBSCst ), ze_XmlTag( 'cClassTrib', cClassTrib ) );
IF cClassTrib = '620006' THEN
SET nCBSBas := 0 ;
SET nIUFAli := 0 ; /* 1.1200 */
ELSE
IF cClassTrib = '410001' THEN
SET nCBSBas := 0 ;
SET nIUFAli := 0 ;
ELSE
SET nCBSBas := 0 ;
SET nIUFAli := 0 ;
END IF;
END IF;
SET cThisXml := CONCAT( cThisXml,
'<gIBSCBS>',
ze_XmlTag( 'vBC', nCBSBas ),
'<gIBSUF>',
ze_XmlTag( 'pIBSUF', nIUFAli ) );
IF nIUFRed <> 0 THEN
SET cThisXml := CONCAT( cThisXml,
'<gRed>', ze_XmlTag( 'pRedAliq', nIUFRed ), '</gRed>' );
END IF;
SET cThisXml = CONCAT( cThisXml, ze_XmlTag( 'vIBSUF', nIUFVal ), '</gIBSUF>' );
SET cThisXml := CONCAT( cThisXml,
'<gIBSMun>',
ze_XmlTag( 'pIBSMun', nIMunAli ) ) ;
IF nIMunRed <> 0 THEN
SET cThisXml := CONCAT( cThisXml,
'<gRed>', ze_XmlTag( 'pRedAliq', nIMunRed ), '</gRed>' ) ;
END IF;
SET cThisXml := CONCAT( cThisXml, ze_XmlTag( 'vIBSMun', nIMunVal ), '</gIBSMun>' );
SET cThisXml := CONCAT( cThisXml,
'<gCBS>',
ze_XmlTag( 'pCBS', nCBSAli ) );
IF nCBSRed <> 0 THEN
SET cThisXml := CONCAT( cThisXml,
ze_XmlTag( 'pRedAliq', nCBSRed ), '</gRed>' );
END IF;
SET cThisXml := CONCAT( cThisXml, ze_XmlTag( 'vCBS', nCBSVal ), '</gCBS>' );
IF 1 = 2 THEN
SET cThisXml := CONCAT( cThisXml,
'<gTribCompraGov>',
ze_XmlTag( 'pAliqIBSUF', 0.00 ),
ze_XmlTag( 'vTribIBSUF',0.00 ),
ze_XmlTag( 'pAliqIBSMun', 0.00 ),
ze_XmlTag( 'vTribIBSMun', 0.00 ),
ze_XmlTag( 'pAliqCBS', 0.00 ),
ze_XmlTag( 'vTribCBS', 0.00 ),
'</gTribCompraGov>' );
END IF;
SET cThisXml := CONCAT( cThisXml, '</gIBSCBS>', '</IBSCBS>' ) ;
SET cFullXml := CONCAT( cFullXml, cThisXml ) ;
END;
Definindo a nova tributaçào no aplicativo
Enviado: 18 Jul 2025 22:47
por JoséQuintas
Nada definitivo, só testes aleatórios
Código: Selecionar todos
STATIC FUNCTION Update0717()
LOCAL cnSQL := ADOLocal(), cTabela, cSQL
SayScroll( "2025-07-15 Atualização" )
IF ! IsMaquinaJPA()
RETURN Nil
ENDIF
WITH OBJECT cnSQL
IF ! :FieldExists( "TRCLAFIS", "JPTRANSACAO" )
:ExecuteNoReturn( "ALTER TABLE JPTRANSACAO ADD COLUMN TRCLAFIS VARCHAR(6) NOT NULL DEFAULT ''" )
ENDIF
IF ! :FieldExists( "TRICADCLAFIS", "JPTABTRICAD" )
:ExecuteNoReturn( "ALTER TABLE JPTABTRICAD ADD COLUMN TRICADCLAFIS VARCHAR(6) NOT NULL DEFAULT ''" )
ENDIF
IF ! :FieldExists( "TRIEMPCLAFIS", "JPTABTRIEMP" )
:ExecuteNoReturn( "ALTER TABLE JPTABTRIEMP ADD COLUMN TRIEMPCLAFIS VARCHAR(6) NOT NULL DEFAULT ''" )
ENDIF
IF ! :FieldExists( "TRIPROCLAFIS", "JPTABTRIPRO" )
:ExecuteNoReturn( "ALTER TABLE JPTABTRIPRO ADD COLUMN TRIPROCLAFIS VARCHAR(6) NOT NULL DEFAULT ''" )
ENDIF
IF ! :FieldExists( "IECLAFIS", "JPITEM" )
:ExecuteNoReturn( "ALTER TABLE JPITEM ADD COLUMN IECLAFIS VARCHAR(6) NOT NULL DEFAULT ''" )
ENDIF
IF ! :FieldExists( "CDCLAFIS", "JPCADASTRO" )
:ExecuteNoReturn( "ALTER TABLE JPCADASTRO ADD COLUMN CDCLAFIS VARCHAR(6) NOT NULL DEFAULT ''" )
ENDIF
FOR EACH cTabela IN { "JPTABCST", "JPTABCFIS" }
IF ! :TableExists( cTabela )
IF ! Empty( cSQL := ze_BinaryFromSQL( cTabela + ".SQL" ) )
:ExecuteNoReturn( cSQL )
ENDIF
ENDIF
NEXT
ENDWITH
RETURN Nil
Código: Selecionar todos
STATIC FUNCTION Update0718()
LOCAL aList, cnSQL := ADOLocal(), aItem
IF ! IsMaquinaJPA()
RETURN Nil
ENDIF
WITH OBJECT cnSQL
aList := ze_cst()
FOR EACH aItem IN aList
:QueryCreate()
:QueryAdd( "IDCST", StrZero( aItem[1], 3 ) )
:QueryAdd( "CSTNOME", aItem[2] )
:QueryAdd( "CSTINDIMP", aItem[3] )
:QueryAdd( "CSTINDMONO", aItem[4] )
:QueryAdd( "CSTINDRED", aItem[5] )
:QueryAdd( "CSTINDDIF", aItem[6] )
:QueryAdd( "CSTINDCRE", aItem[7] )
:QueryAdd( "CSTINDNFE", aItem[8] )
:QueryAdd( "CSTINDNFCE", aItem[9] )
:QueryAdd( "CSTINDCTEOS", aItem[10] )
:QueryAdd( "CSTINDBPE", aItem[11] )
:QueryAdd( "CSTINDNF3", aItem[12] )
:QueryAdd( "CSTINDNFCOM", aItem[13] )
:QueryAdd( "CSTINDNFS", aItem[14] )
:QueryExecuteInsert( "JPTABCST", .T. )
NEXT
aList := ze_cfis()
FOR EACH aItem IN aList
:QueryCreate()
:QueryAdd( "IDCFIS", aItem[3] )
:QueryAdd( "CFISNOME", aItem[4] )
:QueryAdd( "CFISOBS", aItem[5] )
:QueryAdd( "CFISLEI", aItem[6] )
:QueryAdd( "CFISTIPALI", aItem[7] )
:QueryAdd( "CFISREDIBS", aItem[8] )
:QueryAdd( "CFISREDCBS", aItem[9] )
:QueryAdd( "CFISREDBC", aItem[10] )
:QueryAdd( "CFISTRIREG", aItem[11] )
:QueryAdd( "CFISCREPRE", aItem[12] )
:QueryAdd( "CFISMONO", aItem[13] )
:QueryAdd( "CFISMONRET", aItem[14] )
:QueryAdd( "CFISMONDIF", aItem[14] )
:QueryAdd( "CFISINIVIG", aItem[14] )
:QueryExecuteInsert( "JPTABCFIS", .T. )
NEXT
ENDWITH
RETURN Nil
A tabela não cabe aqui, excede o limite, mas é praticamente o fonte que já postei em outro tópico.
Definindo a nova tributaçào no aplicativo
Enviado: 19 Jul 2025 08:59
por JoséQuintas
atualizei o post da procedure após funcionar autorização.
Comecei a testar definir CST/Classificação Fiscal.
Não vai ser nessa rotina, mas serve pra testar a lógica.
Usando só o que mostrei até aqui.
A alíquota é outra história, uma coisa de cada vez.
CST/Classificação fiscal do combustível monofásico.
Definindo a nova tributaçào no aplicativo
Enviado: 20 Jul 2025 17:26
por JoséQuintas
Testando de tudo que é lado.
Agora nas regras de tributação mesmo.
Você pode dar como brinde uma cesta básica....
Isso é classificado como brinde ou como cesta básica ?
Apenas um exemplo do que pode acontecer.
Nesse caso a operação e o produto vão ter classificação fiscal específica.
Não sei se sempre vai dar pra usar operação como prioridade de decisão.
E se for combustível com tributação monofásica.
Por isso brincando com os códigos.
E brinde devolve o imposto ?
Talvez classifiquei errado.
ao
Enviado: 24 Jul 2025 21:44
por JoséQuintas
Hoje que fui perceber....
Chamei a classificação tributária de classificação fiscal.
Alterando tudo, apesar de não ficar tão ruim com esse nome.
Ainda bem que é só teste cadastrado, não faz mal limpar tudo.
Definindo a nova tributaçào no aplicativo
Enviado: 28 Jul 2025 20:26
por JoséQuintas
Este teste ficou interessante....
Acrescentei um campo "VISIVEL" pra aceitar 0, 1 ou 2
Definindo a nova tributaçào no aplicativo
Enviado: 28 Jul 2025 22:02
por JoséQuintas
0=mais usados
1=possíveis
2=talvez
3=perto do impossível
tudo junto
Só selecionar clicando no filtro.
Só testando mais uma idéia, mais prático encontrar as coisas
Definindo a nova tributaçào no aplicativo
Enviado: 31 Jul 2025 10:31
por JoséQuintas
UIA
O DLGAUTO, tela automática pra classificação tributária, pegando estrutura do MySQL.
Definindo a nova tributaçào no aplicativo
Enviado: 14 Ago 2025 19:55
por JoséQuintas
Tô alterando tudo de novo kkkkk
Deixando os nomes mais fáceis de entender e digitar
Apenas exemplo
SELBAS, SELALI, SELRED, SELVAL
FEDBAS, FEDALI, FEDRED, FEDVAL
UFBAS, UFALI, UFRED, UFVAL
CIDBAS, CIDALI, CIDRED, CIDVAL
SEL = Seletivo
FED = Federal, CBS
UF = IBS UF/estado
CID = IBS cidade/municipal
O resto é base, alíquota, redução, valor
É só exemplo, a base é única pra quase tudo, etc.