Exemple #1
0
 def test_opcao_deve_ter_percentual_de_15_perc(self):
     assert calcula_ir_a_pagar(25000, TipoTicker.OPCAO) == 3750.0
Exemple #2
0
 def test_tipos_isentos_devem_ter_imposto_zero(self):
     assert calcula_ir_a_pagar(25000, TipoTicker.FIPIE) == 0.0
Exemple #3
0
 def test_etf_deve_ter_percentual_de_15_perc(self):
     assert calcula_ir_a_pagar(25000, TipoTicker.ETF) == 3750.0
Exemple #4
0
 def test_futuro_deve_ter_percentual_de_15_perc(self):
     assert calcula_ir_a_pagar(25000, TipoTicker.FUTURO) == 3750.0
Exemple #5
0
 def test_fipe_deve_ter_percentual_de_20_perc(self):
     assert calcula_ir_a_pagar(25000, TipoTicker.FIP) == 5000.0
Exemple #6
0
 def test_deve_ser_zero_se_nao_tiver_lucro(self, tipo_ticker):
     assert calcula_ir_a_pagar(0, tipo_ticker) == 0.0
Exemple #7
0
 def test_apenas_acoes_possuem_isencao_de_vendas_ate_20_mil(self, tipo_ticker):
     assert calcula_ir_a_pagar(10000, tipo_ticker, 15000) > 0.0
Exemple #8
0
 def test_acoes_isencao_ate_20_mil_de_vendas_no_mes(self):
     assert calcula_ir_a_pagar(15000, TipoTicker.ACAO, 15000) == 0.0
     assert calcula_ir_a_pagar(15000, TipoTicker.ACAO, 30000) == 2250.0
Exemple #9
0
 def test_acoes_deve_ter_percentual_de_15_perc(self):
     assert calcula_ir_a_pagar(25000, TipoTicker.ACAO, 100000) == 3750.0
Exemple #10
0
def relatorio_txt(ir):
    relatorio = []
    relatorio.append('RELATORIO')
    relatorio.append('')
    relatorio.append('Custódia')
    custodia = calcula_custodia(ir.df, datetime.datetime.now().date())
    columns = [
        'ticker', 'qtd', 'valor', 'preco_atual', 'preco_medio_compra',
        'valorizacao', 'ultimo_yield', 'tipo', 'data_primeira_compra'
    ]
    headers = [
        'ticker', 'qtd', 'valor (R$)', 'Preco Atual (R$)',
        'Preco Medio Compra (R$)', 'valorizacao (%)', 'Ultimo Yield [%]',
        'tipo', 'Dt.Compra'
    ]
    custodia = custodia[columns]
    custodia = custodia[custodia.valor > 0]
    total_na_carteira = custodia['valor'].sum()
    custodia['valorizacao'] = custodia.apply(
        lambda row: '{:.2f}'.format(float(row.valorizacao)), axis=1)
    custodia['valor'] = custodia.apply(lambda row: '{:.2f}'.format(row.valor),
                                       axis=1)
    custodia['preco_atual'] = custodia.apply(
        lambda row: '{:.2f}'.format(row.preco_atual), axis=1)
    custodia['preco_medio_compra'] = custodia.apply(
        lambda row: '{:.2f}'.format(row.preco_medio_compra), axis=1)
    custodia['ultimo_yield'] = custodia.apply(
        lambda row: ''
        if row.ultimo_yield is None else '{:.2f}'.format(row.ultimo_yield),
        axis=1)
    relatorio.append(
        tabulate(custodia, showindex=False, headers=headers, tablefmt='psql'))
    relatorio.append('Total na carteira : ' + __format(total_na_carteira))

    for data in ir.datas:
        if ir.possui_vendas_no_mes(data):
            relatorio.append('')
            relatorio.append(
                __tab(1) + 'MES : ' + str(data.month) + '/' + str(data.year))
            relatorio.append(__tab(1) + 'Vendas:')

            vendas_no_mes_por_tipo = ir.vendas_no_mes_por_tipo(data)
            for tipo in TipoTicker:
                if len(vendas_no_mes_por_tipo[tipo]):
                    relatorio.append(__tab(2) + tipo.name + ':')
                    df_mes_por_tipo = pd.DataFrame(columns=[
                        'ticker', 'Qtd Vendida [#]',
                        'Preco Médio de Compra [R$]',
                        'Preco Médio de Venda [R$]', 'Resultado Apurado [R$]'
                    ])

                    for venda in vendas_no_mes_por_tipo[tipo]:
                        df_mes_por_tipo.loc[len(df_mes_por_tipo)] = [
                            venda['ticker'],
                            str(int(venda['qtd_vendida'])),
                            __format(venda['preco_medio_compra']),
                            __format(venda['preco_medio_venda']),
                            __format(venda['resultado_apurado'])
                        ]

                    relatorio.append(
                        __tab(3) + tabulate(df_mes_por_tipo,
                                            headers=df_mes_por_tipo.columns,
                                            showindex=False,
                                            tablefmt='psql').replace(
                                                '\n', '\n' + __tab(3)))
                    relatorio.append(
                        __tab(3) + 'Lucro/Prejuizo no mês: ' +
                        __format(ir.calcula_prejuizo_por_tipo(data, tipo)))
                    relatorio.append(
                        __tab(3) + 'Lucro/Prejuizo acumulado: ' +
                        __format(ir.calcula_prejuizo_acumulado(data, tipo)))
                    relatorio.append(
                        __tab(3) + 'IR no mês para ' + tipo.name + ': ' +
                        __format(
                            calcula_ir_a_pagar(
                                ir.calcula_prejuizo_acumulado(data, tipo),
                                tipo,
                                ir.total_vendido_no_mes_por_tipo(data)[
                                    TipoTicker.ACAO])))

            relatorio.append(
                __tab(2) + 'Dedo-Duro TOTAL no mês: ' +
                __format(ir.calcula_dedo_duro_no_mes(data)))
            relatorio.append(
                __tab(2) + 'IR a pagar TOTAL no mês: ' +
                __format(ir.calcula_ir_a_pagar_no_mes(data)))

    return '\n'.join(relatorio)
Exemple #11
0
def relatorio_html(ir, numero_de_meses=None):
    relatorio = '<html>'
    relatorio += __h1('RELATORIO')
    relatorio += __p('')
    relatorio += __h2('Custódia')
    custodia = calcula_custodia(ir.df, datetime.datetime.now().date())
    custodia = custodia[custodia.valor > 0]
    total_na_carteira = custodia['valor'].sum()
    custodia['valorizacao'] = custodia.apply(
        lambda row: '{:.2f}'.format(float(row.valorizacao)), axis=1)
    custodia['valor'] = custodia.apply(lambda row: '{:.2f}'.format(row.valor),
                                       axis=1)
    custodia['preco_atual'] = custodia.apply(
        lambda row: '{:.2f}'.format(row.preco_atual), axis=1)
    custodia['preco_medio_compra'] = custodia.apply(
        lambda row: '{:.2f}'.format(row.preco_medio_compra), axis=1)
    custodia['ultimo_yield'] = custodia.apply(
        lambda row: ''
        if row.ultimo_yield is None else '{:.2f}'.format(row.ultimo_yield),
        axis=1)
    headers = [
        'ticker', 'qtd', 'valor (R$)', 'Preco Atual (R$)',
        'Preco Medio Compra (R$)', 'valorizacao (%)', 'Ultimo Yield [%]',
        'tipo', 'Dt.Compra'
    ]
    columns = [
        'ticker', 'qtd', 'valor', 'preco_atual', 'preco_medio_compra',
        'valorizacao', 'ultimo_yield', 'tipo', 'data_primeira_compra'
    ]
    custodia = custodia[columns]
    custodia.columns = headers
    relatorio += build_table(custodia, __cor_tabela())
    relatorio += __p('Total na carteira : ' + __format(total_na_carteira))
    relatorio += __hr()

    relatorio_meses = []
    for data in ir.datas:
        if ir.possui_vendas_no_mes(data):
            relatorio_mes = ''
            relatorio_mes += __p('')
            relatorio_mes += __h3('MES : ' + str(f'{data.month:02}') + '/' +
                                  str(data.year))
            relatorio_mes += __p('Vendas:', tab=1)

            vendas_no_mes_por_tipo = ir.vendas_no_mes_por_tipo(data)
            for tipo in TipoTicker:
                if len(vendas_no_mes_por_tipo[tipo]):
                    relatorio_mes += __p(tipo.name + ':', tab=2)
                    df_mes_por_tipo = pd.DataFrame(columns=[
                        'ticker', 'Qtd Vendida [#]',
                        'Preco Médio de Compra [R$]',
                        'Preco Médio de Venda [R$]', 'Resultado Apurado [R$]'
                    ])

                    for venda in vendas_no_mes_por_tipo[tipo]:
                        df_mes_por_tipo.loc[len(df_mes_por_tipo)] = [
                            venda['ticker'],
                            str(int(venda['qtd_vendida'])),
                            __format(venda['preco_medio_compra']),
                            __format(venda['preco_medio_venda']),
                            __format(venda['resultado_apurado'])
                        ]

                    relatorio_mes += __p(build_table(df_mes_por_tipo,
                                                     __cor_tabela(tipo)),
                                         tab=3)
                    relatorio_mes += __p(
                        'Lucro/Prejuizo no mês: ' +
                        __format(ir.calcula_prejuizo_por_tipo(data, tipo)),
                        tab=3)
                    relatorio_mes += __p(
                        'Lucro/Prejuizo acumulado: ' +
                        __format(ir.calcula_prejuizo_acumulado(data, tipo)),
                        tab=3)
                    relatorio_mes += __p(
                        'IR no mês para ' + tipo.name + ': ' + __format(
                            calcula_ir_a_pagar(
                                ir.calcula_prejuizo_acumulado(data, tipo),
                                tipo,
                                ir.total_vendido_no_mes_por_tipo(data)[
                                    TipoTicker.ACAO])),
                        tab=3)

            relatorio_mes += __p('Dedo-Duro TOTAL no mês: ' +
                                 __format(ir.calcula_dedo_duro_no_mes(data)),
                                 tab=2)
            relatorio_mes += __p('IR a pagar TOTAL no mês: ' +
                                 __format(ir.calcula_ir_a_pagar_no_mes(data)),
                                 tab=2)
            relatorio_mes += __hr()
            relatorio_meses.append(relatorio_mes)

    if numero_de_meses and numero_de_meses > 0:
        for relatorio_mes in relatorio_meses[-numero_de_meses:]:
            relatorio += relatorio_mes
    else:
        for relatorio_mes in relatorio_meses:
            relatorio += relatorio_mes

    relatorio += __close_html()
    return ''.join(relatorio)