def test_calcular_contraction_expansion_e_resurrected_mrr(self): erro = "calcular_contraction_expansion_e_resurrected_mrr não calculou corretamente" df = self.cria_data_frame_test() calculo = CalculoDadosPagamento() df = calculo.calcular_mrr(df) df = calculo.desagrupar_registros_em_pagamentos_mensais(df) df = formata.ordenar_df_data(df) df = formata.criar_chave_concatenada(df) df = calculo.calcular_new_mrr(df) df = formata.ordenar_df_data(df) df = calculo.calcular_cancelled_mrr(df) df = formata.ordenar_df_data(df) df = calculo.calcular_contraction_expansion_e_resurrected_mrr(df) valida_contraction = df.loc[(df['chave'] == '1-2017-02-01 00:00:00-1'), 'ContractionMRR'].iloc[0] valida_expansion = df.loc[(df['chave'] == '3-2017-06-05 00:00:00-1'), 'ExpansionMRR'].iloc[0] valida_resurrected = df.loc[(df['chave'] == '2-2019-02-01 00:00:00-1'), 'ResurrectedMRR'].iloc[0] assert valida_contraction == 299, erro assert valida_expansion == 150, erro assert valida_resurrected == 250, erro
def preparar_dados_pagamentos(self): self.df_pagamentos = formata.formatar_valor_para_float( self.df_pagamentos) self.df_pagamentos = formata.formatar_data_do_df_string_para_date( self.df_pagamentos) self.df_pagamentos = formata.ordenar_df_data(self.df_pagamentos) self.df_pagamentos = formata.separa_plano_meses_contrato( self.df_pagamentos) self.df_pagamentos = formata.criar_chave_concatenada( self.df_pagamentos)
def cria_data_frame_test(self): obj_pagamentos = { 'ClienteID': [3, 2, 1, 1, 3, 2 ], 'DataPagamento': ['05/03/2017', '12/08/2018', '01/01/2017', '01/02/2017', '05/06/2017', '01/02/2019'], 'Valor': ['R$ 300,00', 'R$ 750,00', 'R$ 399,00', 'R$ 300,00', 'R$ 750,00', 'R$ 750,00' ], 'Plano': ['Bronze/3', 'Ouro/3', 'Platina/1', 'Bronze/3', 'Ouro/3', 'Ouro/3' ] } df = pd.DataFrame(data=obj_pagamentos) df = formata.formatar_valor_para_float(df) df = formata.formatar_data_do_df_string_para_date(df) df = formata.separa_plano_meses_contrato(df) df = formata.criar_chave_concatenada(df) return df
def desagrupar_registros_em_pagamentos_mensais(self, df): new_df = pd.DataFrame() for i in range(df["Meses"].max()): new_df = pd.concat([new_df, df[df["Meses"] > 1]], ignore_index=True) df["Meses"] = df["Meses"].apply(self.subtrair_mes_se_maior_que_um) df[df["Meses"] > 1] new_df = formata.criar_chave_concatenada(new_df) df = pd.concat([new_df, df], ignore_index=True) df = self.add_meses_registros_desagrupados_datas_mrr(df) return df
def test_criar_chave_concatenada(self): df = self.cria_data_frame_test() df.loc[:, "Meses"] = pd.Series([3, 3, 1], index=df.index) df = FormatadorDadosPagamentos.criar_chave_concatenada(df) erro = "criar_chave_concatenada não criou a chave corretamente" assert df[df['ClienteID'] == 1]['chave'].iloc[0] == '1-01/01/2017-1', erro assert df[df['ClienteID'] == 2]['chave'].iloc[0] == '2-12/08/2018-3', erro assert df[df['ClienteID'] == 3]['chave'].iloc[0] == '3-05/03/2017-3', erro
def calcular_cancelled_mrr(self, df): df["CancelledMRR"] = 0 new_df = pd.DataFrame() chave_df_cancelled_mrr = df.groupby('ClienteID').last()["chave"] cancelled_mrr = df["chave"].isin(chave_df_cancelled_mrr.values) data_ultimoMes = self.retornar_data_ultimo_mes_e_dez_dias() > df["DataPagamento"] new_df = pd.concat([new_df, df[(cancelled_mrr) & (data_ultimoMes)]], ignore_index=True) new_df["CancelledMRR"] = new_df["MRR"] new_df["DataPagamento"] = new_df.apply(lambda x: x["DataPagamento"] + pd.DateOffset(months = 1), axis=1) new_df.loc[:, ["MRR", "newMRR", "Valor", "Plano", "Meses", "PlanoNormalizado"]] = 0 new_df = formata.criar_chave_concatenada(new_df) df = pd.concat([new_df, df], ignore_index=True) return df
def calcular_dados_pagamentos(self): calculo = CalculoDadosPagamento() self.df_pagamentos = calculo.calcular_mrr(self.df_pagamentos) self.df_pagamentos = calculo.desagrupar_registros_em_pagamentos_mensais( self.df_pagamentos) self.df_pagamentos = formata.ordenar_df_data(self.df_pagamentos) self.df_pagamentos = formata.criar_chave_concatenada( self.df_pagamentos) self.df_pagamentos = calculo.calcular_new_mrr(self.df_pagamentos) self.df_pagamentos = formata.ordenar_df_data(self.df_pagamentos) self.df_pagamentos = calculo.calcular_cancelled_mrr(self.df_pagamentos) self.df_pagamentos = formata.ordenar_df_data(self.df_pagamentos) self.df_pagamentos = calculo.calcular_contraction_expansion_e_resurrected_mrr( self.df_pagamentos)