Exemplo n.º 1
0
        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
Exemplo n.º 2
0
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)
Exemplo n.º 3
0
 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)
Exemplo n.º 4
0
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
Exemplo n.º 5
0
 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
     )
Exemplo n.º 6
0
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)
Exemplo n.º 7
0
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
Exemplo n.º 8
0
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
Exemplo n.º 9
0
        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
Exemplo n.º 10
0
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()