Skip to content

Instantly share code, notes, and snippets.

@ereboucas
Last active December 20, 2015 12:38
Show Gist options
  • Save ereboucas/6132187 to your computer and use it in GitHub Desktop.
Save ereboucas/6132187 to your computer and use it in GitHub Desktop.
Teste de Programação - Validação de Cálculo

Validação de cálculo

Imagine que uma empresa emite suas notas fiscais e precisa de sua ajuda pra validar se o cálculo dos impostos foi feito corretamente.

A empresa gera um arquivo texto de ENTRADA no seguinte formato:

NUMERO,OPERACAO,CLASSIFICACAO,VALOR,VALOR_IMPOSTO
001,VENDA,A,1000.00,180.00
002,TRANSFERENCIA,A,2000.00,360.00
003,DOACAO,B,500.00,0.00
004,VENDA,B,314.15,31.42
005,VENDA,A,1200.98,216.18

Do seu lado, você sabe que o cálculo é realizado com base num arquivo de REGRAS no seguinte formato:

REGRA,OPERACAO,CLASSIFICACAO,ALIQUOTA
1,VENDA,A,18.00
2,VENDA,B,10.00
3,VENDA,C,10.00
4,TRANSFERENCIA,*,15.00
5,DOACAO,*,0.00
6,*,D,1.50

Esse arquivo informa um conjunto de regras que devem ser validadas sequencialmente, parando na primeira que for encontrada. Uma regra é encontrada quando a OPERACAO e CLASSIFICACAO coincidem com os valores informados na nota. O * (coringa) é usado pra indicar que para aquele determinado campo, qualquer valor coincide. Uma vez a regra encontrada o valor da ALIQUOTA correspondente deve ser usado para calcular o imposto aplicando a fórmula:

VALOR_IMPOSTO = TRUNC(VALOR * ALIQUOTA / 100.00, 2)

Você deve gerar um arquivo de SAIDA que indique a regra aplicada a cada nota e se o cálculo estava correto, como a seguir:

NUMERO,REGRA,CORRETO
001,1,S
002,4,N
003,5,S
004,2,N
005,1,N

Pede-se que escreva um programa na linguagem ou ferramenta de sua escolha que gere o arquivo de SAIDA a partir dos arquivos de ENTRADA e REGRAS. Eventualmente poderá ser testado com outro conjunto de arquivos. Qualquer dúvida ou dificuldade, entre em contato via e-mail. Ao final, envie o código-fonte e artefatos usados (testes, configurações) juntamente com requisitos e instruções para execução. Organize sua entrega de forma clara e limpa. A conversa seguirá discutindo o que foi feito e como foi feito e possíveis alterações e interpretações (não será preciso codificar novamente, somente demonstrar entendimento da solução e seus desmembramentos).

Att,

Eduardo Rebouças [email protected]

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment