def check_and_save(): if Transacao.get_by_id(clean_data["idTransaction"]): raise CheckException("This transaction already exists") conta = Conta.get_by_id(clean_data["idAccountConsum"]) if not conta: raise CheckException("Invalid account") conta_old_values = conta.to_dict() transacao = Transacao( idConta=clean_data["idAccountConsum"], idDispositivo=clean_data["idDmtConsum"], id=clean_data["idTransaction"], data=clean_data["datetime"], valor=clean_data["value"], latitude=clean_data["gpsLat"], longitude=clean_data["gpsLong"] ) transacao.ehFraude = checks.is_fraud(transacao, conta) checks.learn(transacao, conta) if conta.to_dict() != conta_old_values: conta.put() transacao.put() return transacao
def relatorio(): transacoes = Transacao.query().fetch() args = flask.request.args query = Transacao.query() for key in args: if args[key] != '': if key == 'ehFraude': query = query.filter(Transacao.ehFraude == convert(args['ehFraude'])) elif key == 'dataInic': query = query.filter(Transacao.data >= datetime.strptime(args[key], '%Y-%m-%d')) elif key == 'dataFim': query = query = query.filter(Transacao.data < datetime.strptime(args[key], '%Y-%m-%d')) elif key == 'posicao': posicao = args['posicao'].split('k') if len(posicao) == 3: query = query.filter(Transacao.longitude >= float(posicao[0])) query = query.filter(Transacao.latitude >= float(posicao[1])) query = query.filter(Transacao.longitude <= float(posicao[2])) query = query.filter(Transacao.latitude <= float(posicao[3])) else: query = query.filter(getattr(Transacao,key) == args[key]) transacoes = query.fetch() if 'posicao' in args and args['posicao'] != '': posicao = args['posicao'].split('k') transacoes = [x for x in transacoes if x.latitude >= float(posicao[0]) and x.longitude >= float(posicao[1]) and x.latitude <= float(posicao[2]) and x.longitude <= float(posicao[3])] return render_template('list_transacoes.html', transacoes = transacoes , args = args)
def _new_transaction(self, value, is_fraud=False, idDispositivo='teste'): self._seq += 1 return Transacao(valor=value, ehFraude=is_fraud, data=self._now + datetime.timedelta(hours=self._seq), idDispositivo=idDispositivo, **self.sampleTransactionData)
def get_max_value(transacao, conta): key = ndb.Key('Conta', transacao.idConta) transacoes = Transacao.query(Transacao.idConta == transacao.idConta, Transacao.ehFraude == False).order(-Transacao.valor) transacao_max = transacoes.get() if (transacao_max is None): return 0 else: return transacao_max.valor
def _new_transaction(self, lat, longi, data, is_fraud=False, idDispositivo = 'teste'): return Transacao( ehFraude=is_fraud, data=data, latitude=lat, longitude=longi, idDispositivo = idDispositivo, **self.sampleTransactionData )
def relatorio(): transacoes = Transacao.query().fetch() args = flask.request.args query = Transacao.query() for key in args: if args[key] != '': if key == 'ehFraude': query = query.filter( Transacao.ehFraude == convert(args['ehFraude'])) elif key == 'dataInic': query = query.filter( Transacao.data >= datetime.strptime(args[key], '%Y-%m-%d')) elif key == 'dataFim': query = query = query.filter( Transacao.data < datetime.strptime(args[key], '%Y-%m-%d')) elif key == 'posicao': posicao = args['posicao'].split('k') if len(posicao) == 3: query = query.filter( Transacao.longitude >= float(posicao[0])) query = query.filter( Transacao.latitude >= float(posicao[1])) query = query.filter( Transacao.longitude <= float(posicao[2])) query = query.filter( Transacao.latitude <= float(posicao[3])) else: query = query.filter(getattr(Transacao, key) == args[key]) transacoes = query.fetch() if 'posicao' in args and args['posicao'] != '': posicao = args['posicao'].split('k') transacoes = [ x for x in transacoes if x.latitude >= float(posicao[0]) and x.longitude >= float(posicao[1]) and x.latitude <= float( posicao[2]) and x.longitude <= float(posicao[3]) ] return render_template('list_transacoes.html', transacoes=transacoes, args=args)
def is_fraud(transacao, conta): #pdb.set_trace() ultima_transacao = Transacao.query(Transacao.idConta == transacao.idConta, Transacao.ehFraude == False).order(-Transacao.data).get() if (ultima_transacao is not None): #distancia em km distancia = lat_long_to_km(transacao.latitude, transacao.longitude, ultima_transacao.latitude, ultima_transacao.longitude) #tempo em horas tempo = abs(transacao.data - ultima_transacao.data).total_seconds() / 3600.0 if (tempo == 0 or distancia/tempo > 800): return True return False
def is_fraud(transacao, conta): #pdb.set_trace() ultima_transacao = Transacao.query( Transacao.idConta == transacao.idConta, Transacao.ehFraude == False).order(-Transacao.data).get() if (ultima_transacao is not None): #distancia em km distancia = lat_long_to_km(transacao.latitude, transacao.longitude, ultima_transacao.latitude, ultima_transacao.longitude) #tempo em horas tempo = abs(transacao.data - ultima_transacao.data).total_seconds() / 3600.0 if (tempo == 0 or distancia / tempo > 800): return True return False
def check_and_save(): if Transacao.get_by_id(clean_data["idTransaction"]): raise CheckException("This transaction already exists") conta = Conta.get_by_id(clean_data["idAccountConsum"]) if not conta: raise CheckException("Invalid account") conta_old_values = conta.to_dict() transacao = Transacao(idConta=clean_data["idAccountConsum"], idDispositivo=clean_data["idDmtConsum"], id=clean_data["idTransaction"], data=clean_data["datetime"], valor=clean_data["value"], latitude=clean_data["gpsLat"], longitude=clean_data["gpsLong"]) transacao.ehFraude = checks.is_fraud(transacao, conta) checks.learn(transacao, conta) if conta.to_dict() != conta_old_values: conta.put() transacao.put() return transacao
for conta in contasData: Conta(nome=conta[0], id=conta[1]).put() dispositivosData = csv.reader(open('csvs/dispositivos.csv')) dispositivosData.next() for dispositivo in dispositivosData: Dispositivo(id=dispositivo[0], idConta=dispositivo[1], tipo=dispositivo[2]).put() transacoesData = csv.reader(open('csvs/transacoes.csv')) transacoesData.next() for transacao in transacoesData: dataTransacao = datetime.datetime(int(transacao[7]), int(transacao[6]), int(transacao[5]), int(transacao[3]), int(transacao[4])) if transacao[9] == "TRUE": ehUmaFraude = True else: ehUmaFraude = False Transacao(idConta=transacao[0], idDispositivo=transacao[1], id=transacao[2], data=dataTransacao, valor=float(transacao[8]), ehFraude=ehUmaFraude, latitude=float(transacao[10]), longitude=float(transacao[11])).put()