Aí é que está.
No final, o seu cadastro precisa de você pra ser feito, ou do contador.
Contém informação que o usuário não conhece, e nem o contador, por isso a culpa será sua... rs
No meu cadastro tem apenas um código:
Código de Tributação do produto.
Fica mais fácil pro usuário decidir, mais difícil dele cometer erros, e só será problema se houver alguma tributação nova.
Aí sim... a culpa vai ser do usuário.... rs
Acaba deixando a parte complicada para casos eventuais.
Não é infalível, nem a prova de erros, mas descomplica um pouco o uso normal e o aplicativo.
Já mostrei por aqui como faço tudo isso.
Também deixei claro que atende as situações atuais, e não sei sobre o que pode aparecer depois.
No cadastro de produtos: código de tributação de produto
No cadastro de clientes/fornecedores: código de tributação do cadastro
No pedido: código de transação
Para o usuário, para o dia a dia, só isso. Dá pra dizer que ele tem que saber disso, que se estiver errado é porque ele preencheu errado.
Já para as regras de tributação, que ficam dependentes de legislação, aí sim, acabo fazendo a intermediação entre contador e usuário, pras traduções, quando precisa.
Mas isso está na linguagem do contador, daria pra ele se virar, se quiser.
O que acontece na prática é o seguinte:
- o contador alega que não conhece o sistema, de certa forma ele está correto
- o usuário alega que não conhece essas coisas, de certa forma o usuário está correto
- nós alegamos que é responsabildiade do contador informar e do usuário preencher, de certa forma estamos corretos
Então temos que trabalhar nessa intermediação, tentar deixar o aplicativo na linguagem deles, pra deixar bem claro que o erro é deles.
Não pensei nisso quando criei minhas regras, mas acabou dando certo nisso tudo.
Pensei só em facilitar a parte de programação.
Como diria o chaves.... "foi sem querer querendo" ... rs
Só recapitulando:
- tem o código no produto, de tributação
- tem o código no cadastro, de tributação
- tem o código de transação
- tem o código no cadastro de UF (que atualmente pode compensar separar por UF)
Isso forma este conjunto, que é minha chave pra regra
Note que esse conjunto é conhecido pelo usuário e pelo contador.

- regra.png (6.37 KiB) Exibido 3901 vezes
O usuário vai ligar pro contador e perguntar:
Como que eu preencho uma nota de venda, dentro de São Paulo, para um cliente do tipo geral, e produto do tipo revendido?
E os dois vão se falando com o que aparece na tela.
O resultado disso fica relacionado a eu ter criado essas tabelas de código bem descritas pra evitar erro, e com o máximo de variações possíveis.
As regras vão sendo cadastradas conforme cada situação for aparecendo.