rapina

package module
v0.0.0-...-e9343d5 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 19, 2024 License: MIT Imports: 10 Imported by: 0

README

Crie Relatórios Financeiros de Empresas Listadas na B3

GitHub release License

Rapina

Rapina é um programa que cria relatórios financeiros de empresas listadas na B3, processando arquivos de demonstrações financeiras trimestrais (ITR) e anuais (DFP) do site da CVM e armazenando-os em um banco de dados local (sqlite). As informações são extraídas do balanço patrimonial, fluxo de caixa, DRE (demonstração de resultado) e DVA (demonstração de valor adicionado).

O programa coleta arquivos desde 2010. Como estes arquivos contém os dados do ano corrente e do ano anterior, foi possível também a extração de dados de 2009.

Com base nestes dados, são gerados relatórios das demonstrações financeiras por empresa.

Instalação

Baixe o executável da página de release e renomeie o executável para rapinav2.exe (no caso do Windows) ou rapinav2 (para o Linux ou macOS).

Uso

Criação/Atualização dos Dados

Antes de se criar um relatório pela primeira vez, é necessário baixar os dados do site da CVM. Para isso, execute o seguinte comando no terminal:

rapinav2 atualizar <--all | --ano <ano>>

Exemplos:

  • rapinav2 atualizar --all: baixar e atualizar dados de todos os anos.
  • rapinav2 atualizar --ano 2023: baixar e atualizar um ano específico.
Criação do Relatório

Para criar uma planilha com os dados financeiros trimestrais de um empresa, execute o seguinte comando:

rapinav2 relatorio [-d <DIRETORIO>] [--crescente|-c]

As empresas serão listadas em ordem alfabética. Basta navegar com as setas, ou use a tecla / para procurar uma empresa.

Exemplos:

  • rapinav2 relatorio: cria o relatório no diretório corrente.
  • rapinav2 relatorio -d ./relats: cria o relatório no diretório relats.
  • rapinav2 relatorio -d ./relats -c: cria o relatório no diretório relats, com os trimestres listados na ordem crescente.

Os relatório será gravado com o nome da empresa. Exemplos:

3R_PETROLEUM_ÓLEO_E_GÁS_S.A.xlsx
AES_BRASIL_ENERGIA_S.A.xlsx
CIA_SANEAMENTO_DO_PARANA_-_SANEPAR.xlsx
FLEURY_S.A.xlsx
LOCALIZA_RENT_A_CAR_S.A.xlsx
LOJAS_RENNER_S.A.xlsx
RAIA_DROGASIL_S.A.xlsx
Servidor Web

Para criar os relatório em uma interface web, execute o comando servidor:

$ ./rapinav2 servidor

[>] Iniciando servidor em :8080

E acesse a página através do endereço http://localhost:8080, onde é possível criar relatórios das empresas selecionadas e atualizar os dados (do ano corrente e do ano anterior).

webserver.png

Configuração

rapina.yaml

Personalize os parâmetros criando o arquivo rapina.yaml no mesmo diretório do executável (rapinav2 ou rapinav2.exe) usando os seguintes parâmetros:

Parâmetro Descrição
dataSrc Arquivo onde serão gravados os dados coletados
Default: ./.dados
tempDir Diretório onde os arquivos temporários serão armazernados
Default: ./.dados
reportDir Diretório onde os relatórios serão salvos
Default: ./

Exemplo:

dataSrc: "/home/user1/dados/rapinav2.db"
tempDir: "/home/user1/dados"
reportDir: "/home/user1/relatorios"

Build

Para compilar o código fonte, siga estas instruções:

  1. Instale o Go: https://go.dev/doc/install
  2. Instale o Git: https://git-scm.com/book/pt-br/v2/Come%C3%A7ando-Instalando-o-Git
  3. Abra o terminal (ou CMD no Windows) e execute os seguintes comandos:
git clone github.com/dude333/rapinav2
cd rapinav2
go build -o rapinav2 cmd/*

O arquivo rapinav2, ou rapinav2.exe no Windows, será criado.

Dados

  • Relação tickers x CNPJ:
    https://sistemaswebb3-listados.b3.com.br/isinPage
    https://sistemaswebb3-listados.b3.com.br/isinProxy/IsinCall/GetTextDownload/
    => obj.geralPt.id => btoa(JSON.stringify(obj.geralPt.id))
    https://sistemaswebb3-listados.b3.com.br/isinProxy/IsinCall/GetFileDownload/{id}
    

Nota Final

Os relatórios tem finalidade apenas informativa e podem conter informações incorretas.

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func MinMax

func MinMax(itr []InformeTrimestral) (int, int)

func NormalizeString

func NormalizeString(s string) string

func RangeAnos

func RangeAnos(itr []InformeTrimestral, reverse bool) []int

func RangeAnosVTs

func RangeAnosVTs(v1, v2 []ValoresTrimestrais) []int

func Similar

func Similar(s1, s2 string) bool

func TrimestresComDados

func TrimestresComDados(itr []InformeTrimestral) []bool

func Zerado

func Zerado(valores []ValoresTrimestrais) bool

func ÚltimoTrimestre

func ÚltimoTrimestre(ano int, valores []ValoresTrimestrais) int

ÚÚltimoTrimestre retorna o último trimestre com valor não nulo

Types

type Data

type Data time.Time

Data ---------------------------------------------------

func NovaData

func NovaData(s string) (Data, error)

func (Data) String

func (d Data) String() string

type Dinheiro

type Dinheiro struct {
	Moeda  string
	Valor  float64
	Escala int
}

Dinheiro -----------------------------------------------

func (Dinheiro) String

func (d Dinheiro) String() string

type Empresa

type Empresa struct {
	CNPJ string `json:"cnpj"`
	Nome string `json:"nome"`
}

Empresa ------------------------------------------------

func (Empresa) String

func (e Empresa) String() string

type InformeTrimestral

type InformeTrimestral struct {
	Codigo  string
	Descr   string
	Valores []ValoresTrimestrais
}

func UnificarContasSimilares

func UnificarContasSimilares(itr []InformeTrimestral) []InformeTrimestral

UnificarContasSimilares unifica as linhas similares do InformeTrimestral comparando o código, sem o último grupo (ex.: 1.02.05.01 => 1.02.05), com as próximas linhas. Cada linha (InformeTrimestral) possui o seguinte formato: Linha n => [Ano:ano Valor trimestre 1 | Valor T2 | Valor T3 | Valor T4] Exemplo: "Tributo a recuperar" => [2019 1|0|5|3; 2021 5|2|0|0] "Tributos a recuperar" => [2019 0|2|0|0; 2020 1|4|2|2; 2021 0|0|1|2] Resultado: "Tributo a recuperar" => [2019 1|2|5|3; 2020 1|4|2|2; 2021 5|2|1|2]

type ValoresTrimestrais

type ValoresTrimestrais struct {
	Ano int
	T1  float64
	T2  float64
	T3  float64
	T4  float64
}

func AddVTs

func AddVTs(v1, v2 []ValoresTrimestrais) []ValoresTrimestrais

func DivVTs

func DivVTs(v1, v2 []ValoresTrimestrais) []ValoresTrimestrais

func ManterÚltimoTrimestre

func ManterÚltimoTrimestre(vts []ValoresTrimestrais) []ValoresTrimestrais

ManterÚltimoTrimestre mantém apenas o último trimestre não nulo de cada ano

func MultVTs

func MultVTs(v1, v2 []ValoresTrimestrais) []ValoresTrimestrais

func OpVTs

func OpVTs(op rune, v1, v2 []ValoresTrimestrais) []ValoresTrimestrais

func SubVTs

func SubVTs(v1, v2 []ValoresTrimestrais) []ValoresTrimestrais

func TTM

TTM armazena a soma dos últimos 4 trimestres em cada um dos trimestres; usado em métricas que comparam como valores do balanço patrimonial. Exemplo: ROE = Lucro Líq. dos últimos 12 meses / Patrim.Líq.

func (ValoresTrimestrais) Add

func (ValoresTrimestrais) Div

func (ValoresTrimestrais) DivNum

func (v ValoresTrimestrais) DivNum(divisor float64) ValoresTrimestrais

func (ValoresTrimestrais) Mult

func (ValoresTrimestrais) MultNum

func (v ValoresTrimestrais) MultNum(factor float64) ValoresTrimestrais

func (*ValoresTrimestrais) SetT

func (v *ValoresTrimestrais) SetT(n int, val float64)

SetT salva o valor do trimestre pelo índice (0 <= n < 4)

func (ValoresTrimestrais) Sub

func (*ValoresTrimestrais) T

func (v *ValoresTrimestrais) T(n int) float64

T retorna o valor do trimestre pelo índice (0 <= n < 4)

Directories

Path Synopsis
pkg
cotacao/servico
serviço de cotações que contém a lógica de como os dados são capturados, armazenados (pelos repositórios) e disponibilizados para o domínio.
serviço de cotações que contém a lógica de como os dados são capturados, armazenados (pelos repositórios) e disponibilizados para o domínio.
progress
Package progress prints the program progress on screen.
Package progress prints the program progress on screen.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL