Milestone 4

Gestor de Portfolios

Alunos:
Damyhonn dos Santos Paulino
Genard Dantas de Aguiar Neto

Relatório

Considerações

Este sistema constitui-se de um gestor de portfolio para investimentos financeiros. O usuário do sistema, será, através do software, administrar seus investimentos controlando gastos e ganhos através do sistema.

Implementação

O sistema foi implementado de modo a se portar tal qual um framework. Onde o business logic está integralmente desacoplado da interface com o usuário.
Esta versão do software vem com uma interface criada para manipulação do framework em sistema DOS. Mas uma futura criação de um ambiente gráfico é perfeitamente possível.
As classes principais do sistema são: InstrumentoFinanceiro, que é uma interface que servirá de base para a criação de qualquer instrumento financeiro do sistema; Portfolio, que é a classe concreta que instancia um portfolio principal ou sub-portfolio; Ativo, é a interface que definirá qualquer ativo (ou passivo) para o sistema; Transação, que instanciará toda transação efetuada no sistema.

Design Patterns

Foram utilizados os padrões básicos para construção de projeto que são:
- Expert
- Low Coupling
Além do padrão:
- Composite

O padrão Expert foi utilizado principalmente na atribuição de responsabilidades para a classe Ativos e para a classe Portfolios. Pois estas duas classes se comportam como um "saco" de Ativo e um "saco" de Portfolio, respectivamente. Logo, como estas classes são as "expert", já que que possuem conhecimento sobre todos os instrumentos que estão armazenados, elas são utilizadas para o retorno do valor total de todos os ativos e portfolios que estão no conjunto.
O padrão Baixo Acoplamento foi utilizado para minimizar a dependência entre as classes e tentar aumentar a possibilidade de reuso.
A criação de uma interface para todo instrumento financeiro facilitou isto, pois é possível fazer com que as classes dependam menos umas das outras, já que, tanto um ativo como o próprio portfólio são instrumentos financeiros. Foi criado também dois tipos de ativos. Um Ativo comum e outro Ativo Com Valor Temporal. Sendo estes implementados em duas classes abstratas para fatoramento de código comum entre todos os ativos que forem estender suas funcionalidades. Daí pra frente, todo novo ativo que se desejar criar, vai precisar apenas estender uma destas duas classes abstratas para se inteirar completamente no portfolio.
O padrão Composite foi utilizado para criar composições recursivas de instrumentos financeiros no portfolio. Por exemplo, um portfolio possui vários ativos, transações e também pode possuir vários portfolios com vários instrumentos financeiros incluídos.

Linguagem

A linguagem criada para utilização na interface com o usuário disponibiliza todos os recursos disponíveis no sistema através de comandos no prompt do sistema operacional.

Interface

Para execução do sistema, é necessário possuir a máquina virtual java 1.4.1 e sua execução é feita através do comando:
    java Interface

Sua utilização é simples e todos os comandos disponíveis são listados digitando-se o comando
help.
Para sair do sistema digite
    sair.

Para zerar todos os instrumentos e transações criados no portfolio usa-se o comando
    zerarObjetos

Pode-se também salvar um portfolio criado para uso posterior. Para isso usa-se o comando
salvar.
Exemplo:
    salvar portfolio.xml

Também é possível abrir um portfolio salvo anteriormente através do comando abrir.
Exemplo:
    abrir portfolio.xml

O primeiro passo agora é a criação de um portfolio para o sistema. Veremos isso a seguir:

Portfolio

A criação de um portfolio é feita com a inserção destes parâmetros:
id - Código de identificação do Portfolio
numeroDeConta - Número da Conta do Portfolio
nome - Nome do Portfolio
dono - Dono do Portfolio
descricao - Descrição do Portfolio criado
instituicaoFinanceira - Instituição Financeira à qual o Portfolio pertence
Após ter executado a interface vamos criar um portfolio com os seguintes parâmetros:
id = p1
numeroDeConta = 1234-5
nome = portDamy
dono = Damyhonn
descricao = MeuPortfolio
instituicaoFinanceira = Bradesco
Sua execução é intuitiva. Basta digitar o comando:

    criarportfolio id=p1 numerodeconta=1234-5 nome=portDamy dono=Damyhonn descricao=MeuPortfolio instituicao=Bradesco

Pode-se alterar os atributos de um portfolio.
Exemplo:

    alterarPortfolio id=p1 nome=pfdsp

Pode-se remover um portfolio que está vazio.
Exemplo:

    removerPortfolio id=p1

Para criar um sub-portfolio, o comando é semelhante à criação de um portfolio principal com o diferencial de possuir o atributo pai depois do id.
Exemplo:

    criarPortfolio id=p2 pai=p1 numerodeconta=5432-1 nome=portDaIrma dono=Rose descricao=RosePortfolio instituicao=Itau

Pode-se também obter o valor do portfólio para uma data específica. Neste caso o valor do portfólio é obtido através dos valores de todas as transações efetuadas até esta data, levando-se em consideração, claro, transações que retiram e que depositam cash ou ativos/passivos. (Use Case 16)
Exemplo:

    valorPortfolio id=p1 data=29/03/2004

 

Ativo/Passivo

Um ativo e um passivo diferem apenas por seu valor. Positivo (ativo) e Negativo (passivo).

Cash
Tendo criado o portfolio, podemos agora inserir os ativos.
Vamos criar primeiramente um cash, pois todo portfolio comumente possui um cash para armazenar o dinheiro.
A criação de um cash é feita com a inserção destes parâmetros:
id - a identificação do cash
nome - o nome do cash
descricao - uma descrição do cash
portfolio - o portfolio onde o cash sera inserido
comando:

    criarcash id=id1 portfolio=p1 nome=cash descricao=Dinheiro_em_Caixa

Açoes
Ações também são ativos mas tem o diferencial de poder ter seu valor diferente dependendo da data informada.
A criação de ações é feita com a inserção dos seguintes parâmetros:
id - a id da ação
nome - o nome da ação criada
descricao - uma descrição para a ação
pregao - o pregão da ação
comando:

    criarAcoes id=if2 portfolio=p1 nome=acoesPetrobras descricao=Acoes_da_Petrobras nomeDePregao=PETROBRAS

Título
Títulos também são ativos com valor temporal e portanto funcionam da mesma maneira que as ações.
A criação de títulos é feita com a inserção dos seguintes parâmetros:
id - o id do Título
nome - o nome do Titulo
descricao - a descrição do Titulo
comando:

    criarTitulo id=if3 portfolio=p1 nome=tituloBR descricao=Titulo_da_Divida_Publica_Brasileira

Pode-se fornecer valores para ativos com valores temporais.
exemplo:

    forneceValor ativo=if2 portfolio=p1 data=3/12/2003 valor=10

Pode-se alterar os atributos de um ativo.
Exemplo:

    alterarAtivo id=if1 nome=caixa

Pode-se também remover um ativo de um portfolio, desde que ele não esteja sendo referenciado no portfolio. Ou seja, se já foi feita uma transação com o ativo e ele tem valor no portfolio não pode ser removido.
Exemplo:

    removerInstrumento id=if1

É possível obter o valor de um ativo com valor temporal para qualquer data. Para isso usa-se o comando valorAtivo.
Exemplo:

    valorAtivo id=if2 data=01/04/2004

Transação

Existem diversas transações que são efetuadas no sistema.
Elas são executadas através de comandos que iniciam com trans.
A criação de uma transação é feita dependendo do tipo da transação.
Para transações do tipo Saques ou Depósitos temos os seguintes atributos:
tipo - o tipo da transação
id - o id da transação
portfolio - o portfolio que vai conter esta transação
ativo - o ativo referenciado na transação
valor - o valor do negócio
taxa - a taxa cobrada

Para trasnsações do tipo Compras com cash, temos os seguintes atributos:
tipo - o tipo da transação
id - o id da transação
portfolio - o portfolio que vai conter esta transação
dia - o dia da transação
mes - o mes da transação
ano - o ano da transação
ativo - o ativo referenciado nesta transação
quantidade - a quantidade negociada

Para transações do tipo Recebimento de dividendos em ativo, em juros, em capital ou para vendas, temos os seguintes atributos:
tipo - o tipo da transação
id - o id da transação
portfolio - o portfolio que vai conter esta transação
dia - o dia da transação
mes - o mes da transação
ano - o ano da transação
ativo - o ativo referenciado nesta transação
quantidade - a quantidade negociada
referencia - o id do ativo que gerou o capital
taxa - a taxa cobrada pela instituição

Para transações do tipo Recebimento de dividendos em cash, temos os seguintes atributos:
tipo - o tipo da transação
id - o id da transação
portfolio - o portfolio que vai conter esta transação
dia - o dia da transação
mes - o mes da transação
ano - o ano da transação
valor - o valor a ser depositado
referencia - o ativo que gerou o capital
taxa - a taxa cobrada


Exemplos:

Transação de Depósito em cash

    criarcash id=id1 portfolio=p1 nome=cash descricao=Dinheiro_em_Caixa
    transDeposito id=t1 instrumento=id1 portfolio=p1 quantidade=10000 taxa=0.013

Transação de Saque em cash

    criarcash id=id1 portfolio=p1 nome=cash descricao=Dinheiro_em_Caixa
    transDeposito id=t1 instrumento=id1 portfolio=p1 quantidade=10000 taxa=0.013
    transSaque id=t2 instrumento=id1 portfolio=p1 quantidade=1000 taxa=0.013

Compra de Ativos

    criarAcoes id=if2 portfolio=p1 nome=acoesPetrobras descricao=Acoes_da_Petrobras nomeDePregao=PETROBRAS
    transDeposito id=t12 instrumento=if2 portfolio=p1 quantidade=20000 taxa=0.013

Recebimento de dividendos em cash

    criarAcoes id=if2 portfolio=p1 nome=acoesPetrobras descricao=Acoes_da_Petrobras nomeDePregao=PETROBRAS
    forneceValor ativo=if2 portfolio=p1 data=3/12/2003 valor=10
    transDividendos id=t4 portfolio=p1 data=5/12/2003 recebido=id1 quantidade=1000 referencia=if2 taxa=0.013

Recebimento de dividendos em Ativo

    criarAcoes id=if2 portfolio=p1 nome=acoesPetrobras descricao=Acoes_da_Petrobras nomeDePregao=PETROBRAS
    forneceValor ativo=if2 portfolio=p1 data=3/12/2003 valor=10
    transDividendos id=t5 portfolio=p1 data=6/12/2003 recebido=if2 quantidade=50 referencia=if2 taxa=0.013

Recebimento de Juros

criarTitulo id=if3 portfolio=p1 nome=tituloBR descricao=Titulo_da_Divida_Publica_Brasileira
forneceValor ativo=if3 portfolio=p1 data=3/12/2003 valor=1000
transComprarComCash id=t2 portfolio=p1 data=3/12/2003 ativo=if3 quantidade=1
transJuros id=t3 portfolio=p1 data=5/12/2003 recebido=id1 quantidade=50 referencia=if3 taxa=0.013

Retorno de Capital

criarTitulo id=if3 portfolio=p1 nome=tituloBR descricao=Titulo_da_Divida_Publica_Brasileira
forneceValor ativo=if3 portfolio=p1 data=3/12/2003 valor=1000
transComprarComCash id=t2 portfolio=p1 data=3/12/2003 ativo=if3 quantidade=1
transRecebeCapital id=t3 portfolio=p1 data=5/12/2003 ativo=if1 quantidade=500 recebido=if3 taxa=0.013

Venda de Ativos

criarTitulo id=if3 portfolio=p1 nome=tituloBR descricao=Titulo_da_Divida_Publica_Brasileira
forneceValor ativo=if3 portfolio=p1 data=3/12/2003 valor=1000
transVender id=t4 portfolio=p1 data=5/12/2003 ativo=if2 quantidade=500 recebido=if1 taxa=0.013

 

Diagrama de Classes