Skip to content

Instantly share code, notes, and snippets.

@evaldosantos
Created August 3, 2013 02:39
Show Gist options
  • Save evaldosantos/6144895 to your computer and use it in GitHub Desktop.
Save evaldosantos/6144895 to your computer and use it in GitHub Desktop.
Validação de cálculo
class Entrada
def initialize(linha)
linha = linha.split(',')
@numero = linha[0]
@operacao=linha[1]
@classificacao=linha[2]
@valor=linha[3].to_f
@valor_imposto=linha[4].to_f
end
def numero
@numero
end
def operacao
@operacao
end
def classificacao
@classificacao
end
def valor
@valor
end
def valor_imposto
@valor_imposto
end
end
class Regra
def initialize(linha)
linha = linha.split(',')
@regra = linha[0]
@operacao = linha[1]
@classificacao = linha[2]
@aliquota = linha[3].to_f
end
def regra
@regra
end
def operacao
@operacao
end
def classificacao
@classificacao
end
def aliquota
@aliquota
end
end
class Saida
def initialize(arquivo_entrada, arquivo_regra, arquivo_saida)
@arquivo_entrada = arquivo_entrada
@arquivo_regra = arquivo_regra
@arquivo_saida = arquivo_saida
end
def encontra_regra(entrada)
text=File.open(@arquivo_regra).read
count=0
text.each_line do |line|
if count>0 # linha[0] e o cabecalho
regra = Regra.new(line)
if (entrada.operacao==regra.operacao && entrada.classificacao==regra.classificacao) ||
(regra.operacao=="*" && entrada.classificacao==regra.classificacao) ||
(entrada.operacao==regra.operacao && regra.classificacao=="*")
return regra
end
end
count+=1
end
end
def saida
text=File.open(@arquivo_entrada).read
begin
file = File.open(@arquivo_saida, "w")
count=0
text.each_line do |line|
if count>0 # linha[0] e o cabecalho
entrada = Entrada.new(line)
regra = encontra_regra(entrada)
file.write("#{entrada.numero}, #{regra.regra}, #{valida(entrada, regra)}\n")
end
count+=1
end
rescue IOError => e
puts "Erro"
ensure
file.close unless file == nil
end
end
def calculo_imposto(entrada, regra)
entrada.valor*regra.aliquota/100.0.to_i
end
def valida(entrada, regra)
return entrada.valor_imposto==calculo_imposto(entrada, regra) ? 'S' : 'N'
end
end
# para rodar este script faz-se necessário os arquivos entrada.txt e regras.txt
# o arquivo saida será criado na execução do script
Saida.new('entrada.txt', 'regras.txt', 'saida.txt').saida
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment